LVM: é possível estender uma partição em uso?

LVM: é possível estender uma partição em uso?

Tenho um disco no qual armazeno os dados de um banco de dados. O disco está cheio agora e quero adicionar outro disco à máquina. Ouvi dizer que pelo LVM você pode adicionar e estender partições, então gostaria de saber se é possível estender o disco cheio atual (sem corromper seus dados atuais) adicionando um novo disco?

Responder1

O LVM facilita o redimensionamento de partições existentes e a movimentação delas¹. Mas elas precisam ser partições LVM em primeiro lugar. Como sua partição atual não está no LVM, você terá que fazer as coisas manualmente. Todos os comandos da minha resposta precisam ser executados como root.

Prepare o novo disco

  1. Crie uma partição GPT ou MBR para uso do Linux. Use o disco inteiro, a menos que queira compartilhá-lo com outro sistema operacional. Vou chamar essa partição /dev/sdb1.
  2. Faça /dev/sdb1um LVMvolume físico, ou seja, declare que esta parte do disco será usada para LVM.

    pvcreate /dev/sdb1
    
  3. Crie um LVMgrupo de volumescontendo este volume físico. Todos os volumes LVM fazem parte de um grupo de volumes. Escolha um nome para esse grupo de volumes, por exemplo alex_os.

    vgcreate alex_os /dev/sdb1
    
  4. Agora você tem algum espaço para uso do LVM. Crie um volume lógico LVM que seja grande o suficiente para os dados que você deseja armazenar nele. Você pode usar todo o espaço se quiser (a menos que queira reservar espaço para outro sistema de arquivos ou espaço de troca), mas como reduzir um sistema de arquivos é mais difícil do que expandi-lo, é melhor usar apenas o que acha que vai precisar no médio prazo mais uma margem de segurança. Escolha um nome para o volume lógico, por exemplo, rootpara seu sistema de arquivos raiz ou dbse você for armazenar seu banco de dados nele.

    lvcreate -L 40g -n root alex_os
    

O que fazer a seguir depende se você deseja mover a partição do sistema operacional para o novo disco ou usar o novo disco como armazenamento extra.

Use o novo disco para armazenamento extra

  1. Crie um sistema de arquivos no novo disco.

    mkfs.ext4 /dev/mapper/alex_os-root
    
  2. Registre o novo sistema de arquivos para uso. Escolha um ponto de montagem para isso. Pode ser um diretório existente ou um novo diretório.

    • Se você quiser mover, por exemplo, /var/lib/mysqlpara o novo disco, faça dele o ponto de montagem. Primeiro monte o novo sistema de arquivos em um local temporário, mova os dados (certifique-se de que os arquivos não estejam em uso enquanto você faz isso!)

      service mysql stop
      mount /dev/mapper/alex_os-db /mnt
      mv /var/lib/mysql/* /mnt
      mount --move /mnt /var/lib/mysql
      service mysql start
      

      Por fim, edite o arquivo /etc/fstabpara adicionar a seguinte linha após a linha contida /na segunda coluna:

      /dev/mapper/alex_os-db /var/lib/mysql ext4 errors=remount,ro 0 2
      
    • Se você não quiser vincular o novo disco a um serviço específico, monte-o em um local diferente, por exemplo, adicione a seguinte linha /etc/fstabapós a linha contida /na segunda coluna:

      /dev/mapper/alex_os-db /media/data ext4 errors=remount,ro 0 2
      

      Em seguida, crie o ponto de montagem e monte o sistema de arquivos:

      mkdir /media/data
      mount /media/data
      

      Agora você pode mover todos os dados que deseja colocar lá e usarlinks simbólicosdo local onde o serviço espera os arquivos. Interrompa qualquer serviço que acesse os arquivos enquanto você os move! Por exemplo, para mover o conteúdo /var/lib/mysqlpara o novo disco:

      service mysql stop
      mv /var/lib/mysql /media/data/
      ln -s /media/data/mysql /var/lib/mysql
      service mysql start
      

Transfira o sistema para o novo disco

  1. Reinicie para resgatar a mídia (por exemploSystemRescueCD) para copiar os dados para o novo disco. Você não pode fazer a cópia do sistema em execução porque é impossível obter um instantâneo consistente². Para copiar os dados, você tem duas possibilidades:

    • Crie um sistema de arquivos e copie os arquivos, por exemplo, para um sistema de arquivos ext4:

      mkfs.ext4 /dev/mapper/alex_os-root
      mount /dev/mapper/alex_os-root /media/alex_os-root
      cp -a /media/sda1 /media/alex_os-root
      
    • Copie a imagem do sistema de arquivos e expanda-a para preencher, por exemplo, para um sistema de arquivos ext4:

      cat /dev/sda1 >/dev/mapper/alex_os-root
      resize2fs /dev/mapper/alex_os-root
      
  2. Torne o novo disco inicializável. Exatamente como fazer isso depende da sua distribuição. Normalmente você terá que instalar o bootloader e reconstruir o initramfs. Por exemplo, no Ubuntu, você normalmente precisa de algo como

    chroot /media/alex_os-root
    update-initramfs
    update-grub
    grub-install /dev/sdb
    

¹ Redimensionar o sistema de arquivos na partição é uma questão separada; a maioria dos sistemas de arquivos modernos suportam expansão on-line, mas não redução on-line.
² Tecnicamentepoderiaserá possível ter sorte cp -ase o sistema estiver ocioso, mas isso é uma receita para o desastre; isso pode causar bugs atrasados ​​difíceis de rastrear. Uma das vantagens do LVM é que você pode usá-lo para obter um instantâneo consistente. Alguns sistemas de arquivos (zfs, btrfs) possuem seu próprio recurso de snapshot, mas não o ext4.

informação relacionada