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

1

Eu tenho um disco no qual eu 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 ampliar partições, então eu gostaria de saber se é possível estender o disco inteiro atual (sem corromper seus dados atuais) adicionando um novo disco?

    
por Alex 16.04.2017 / 00:19

1 resposta

3

O LVM facilita o redimensionamento de partições existentes e a movimentação delas¹. Mas eles têm que 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 você queira compartilhar o disco com outro sistema operacional. Vou chamar essa partição /dev/sdb1 .
  2. Crie /dev/sdb1 um físico do LVM, ou seja, declare que esta parte do disco deve ser usada para o LVM.

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

    vgcreate alex_os /dev/sdb1
    
  4. Agora você tem algum espaço para uso do LVM. Crie um volume lógico LVM 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 a redução de um sistema de arquivos é mais difícil do que expandi-lo, é melhor usar somente o que você acha que precisa médio prazo mais uma margem de segurança. Escolha um nome para o volume lógico, por ex. root para seu sistema de arquivos raiz, ou db se 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 sua 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. Isso pode ser um diretório existente ou um novo diretório.

    • Se você deseja mover, por exemplo /var/lib/mysql para o novo disco, faça desse ponto de montagem. Primeiro monte o novo sistema de arquivos em um local temporário, mova os dados ( verifique se os arquivos não estão 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/fstab para adicionar a seguinte linha após a linha que contém / 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 a /etc/fstab após a linha contendo / 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 os dados que quiser colocar lá e usar links simbólicos do local em que o serviço espera os arquivos. Interrompa todos os serviços que acessam os arquivos enquanto você os move! Por exemplo, para mover o conteúdo de /var/lib/mysql para o novo disco:

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

Transferir o sistema para o novo disco

  1. Reinicialize para resgatar mídia (por exemplo, SystemRescueCD ) 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, em seguida, 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. Você normalmente 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
    

¹ O redimensionamento do sistema de arquivos na partição é um assunto separado; o sistema de arquivos mais moderno suporta expansão on-line, mas não encolhe online.
² Tecnicamente pode ser possível ter sorte com cp -a se o sistema estiver ocioso, mas isso é uma receita para o desastre; isso pode causar erros 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 um recurso de snapshot próprio, mas não ext4.

    
por 17.04.2017 / 00:37