LVM e Expansão de Storage: Adicionando Discos a Quente sem Downtime

      17 de dezembro de 2025 Dr. Marcus 'Bitrot' Silva 8 min de leitura
      LVM e Expansão de Storage: Adicionando Discos a Quente sem Downtime

      Aprenda a expandir volumes RAID e LVM em servidores ativos sem desmontar partições. Um guia prático sobre PVs, VGs, LVs e redimensionamento de filesystem seguro.

      Compartilhar:

      O alerta do monitoramento chega às 02:14 da manhã. O servidor de banco de dados principal está com 98% de uso em /var/lib/mysql. O sistema está vivo, transacionando milhões de reais por hora, e um reboot para instalar um novo disco rígido significaria uma janela de manutenção inaceitável.

      Como investigador forense de sistemas, já vi esse cenário terminar em desastre inúmeras vezes: administradores em pânico deletando logs antigos para ganhar tempo, ou pior, desmontando partições à força e corrompendo tabelas de inodes.

      A solução elegante, no entanto, é cirúrgica. O Linux Volume Manager (LVM) não é apenas uma ferramenta de particionamento; é uma camada de abstração que permite tratar o armazenamento como um fluido, não como blocos de concreto. Neste relatório, vamos dissecar a anatomia de uma expansão de storage a quente, isolando as variáveis de risco e executando o procedimento com precisão forense.

      LVM (Logical Volume Manager) é uma camada de abstração de armazenamento no Linux que desacopla o sistema de arquivos da estrutura física dos discos. Ele permite agrupar múltiplos discos rígidos (Physical Volumes) em um único pool de armazenamento (Volume Group) e, a partir desse pool, alocar partições virtuais (Logical Volumes) que podem ser redimensionadas, espelhadas ou migradas em tempo real, sem necessidade de desmontagem ou reinicialização.


      A Anatomia da Abstração LVM e a Ilusão da Partição

      Para entender como expandir um sistema sem desligá-lo, precisamos primeiro entender por que o particionamento tradicional falha. No modelo legado, uma partição é um endereço físico estático no disco (do setor X ao setor Y). Se o disco acaba, a partição acaba.

      O LVM quebra essa rigidez introduzindo um conceito fundamental: Extents (Extensões). O LVM divide o disco físico em pequenos blocos de dados (Physical Extents - PEs) e os entrega ao sistema operacional como blocos lógicos. O sistema de arquivos vê um disco contínuo, mas fisicamente, os dados podem estar espalhados por três SSDs e dois HDDs diferentes.

      O Modelo Mental do LVM: Discos físicos (PVs) alimentam uma piscina comum (VG), de onde você corta fatias virtuais (LVs) para o sistema. Figura: O Modelo Mental do LVM: Discos físicos (PVs) alimentam uma piscina comum (VG), de onde você corta fatias virtuais (LVs) para o sistema.

      Essa arquitetura em três camadas é o que permite a operação a quente:

      1. Physical Volume (PV): O "tijolo". O disco físico ou partição bruta.

      2. Volume Group (VG): A "parede". O pool de armazenamento que agrupa todos os tijolos.

      3. Logical Volume (LV): A "janela". A área delimitada onde o sistema de arquivos reside.

      O segredo da expansão sem downtime é que você nunca redimensiona o disco físico diretamente para o sistema de arquivos. Você adiciona tijolos (PV) à parede (VG) e, em seguida, alarga a janela (LV).


      Preparação do Hardware e Identificação no Barramento SCSI

      Antes de qualquer comando LVM, o kernel precisa reconhecer que um novo dispositivo físico existe. Em ambientes virtualizados (VMware, KVM) ou servidores físicos com backplanes hot-swap, inserir o disco é apenas o passo físico.

      Se você inseriu o disco e ele não apareceu no lsblk ou fdisk -l, não reinicie. O barramento SCSI precisa ser instruído a escanear novas interconexões.

      O Procedimento de Rescan SCSI

      Em vez de um reboot, forçamos um rescan no host SCSI específico. Se você não sabe qual é o host, pode escanear todos (com cuidado em ambientes de produção massiva para não gerar latência de CPU):

      # Método "Shotgun" para escanear todos os hosts SCSI (use com cautela)
      for host in /sys/class/scsi_host/host*; do 
          echo "- - -" > $host/scan; 
      done
      

      Após o scan, verifique os logs do kernel para confirmar a detecção do dispositivo e o nome atribuído (ex: /dev/sdb):

      dmesg | tail -n 20 | grep "Attached SCSI"
      lsblk
      

      Nota Forense: Jamais assuma que o novo disco é o /dev/sdX seguinte. Em sistemas com falhas de disco anteriores ou controladoras instáveis, os nomes podem mudar. Sempre valide pelo WWN (World Wide Name) ou Serial Number se possível.


      O Workflow de Expansão LVM: Do Disco Bruto ao Pool

      Uma vez que o sistema operacional vê o disco (digamos, /dev/sdb), precisamos prepará-lo. Aqui reside uma decisão crítica: particionar ou não particionar?

      Embora o LVM possa usar o disco cru (/dev/sdb), a prática recomendada é criar uma partição (/dev/sdb1) do tipo 8e (Linux LVM). Isso evita que outros administradores ou ferramentas de instalação identifiquem o disco erroneamente como "vazio" no futuro.

      1. Inicializando o Physical Volume (PV)

      O comando pvcreate escreve o cabeçalho LVM no início do dispositivo. É aqui que o disco deixa de ser um "bloco burro" e passa a ser um membro gerenciável.

      pvcreate /dev/sdb1
      # Saída esperada: Physical volume "/dev/sdb1" successfully created.
      

      2. Estendendo o Volume Group (VG)

      Agora, adicionamos esse novo recurso ao nosso pool existente. Suponha que seu grupo de volumes se chame vg_dados.

      vgextend vg_dados /dev/sdb1
      # Saída esperada: Volume group "vg_dados" successfully extended
      

      Neste momento, seu "tanque de armazenamento" ficou maior, mas o sistema de arquivos (a água dentro do tanque) ainda ocupa o mesmo espaço. Você apenas criou o potencial para crescimento.

      Use vgs para validar o espaço livre recém-adquirido:

      vgs
      # Verifique a coluna VFree. Ela deve refletir o tamanho do novo disco.
      

      Alocando o Espaço: Linear vs. Stripe e os Riscos Ocultos

      Agora vamos expandir o Volume Lógico (LV). É aqui que muitos incidentes de perda de dados começam. Ao executar o lvextend, você está tomando uma decisão arquitetural sobre como os dados serão gravados.

      Por padrão, o LVM usa uma alocação Linear. Ele preenche o primeiro disco (PV) até o fim e depois começa a gravar no segundo.

      O Perigo da Concatenação (JBOD Lógico)

      Ao adicionar um novo disco a um VG e estender um LV sobre ele, você está criando uma dependência em cadeia.

      Expansão Linear vs. Striped: Simplesmente adicionar um disco (Linear) cria um volume maior, mas se um disco falhar, todo o volume lógico pode ser corrompido. Figura: Expansão Linear vs. Striped: Simplesmente adicionar um disco (Linear) cria um volume maior, mas se um disco falhar, todo o volume lógico pode ser corrompido.

      Se o seu LV original estava em um RAID 1 seguro, e você adiciona um disco single (sem RAID) ao VG e estende o volume, você acabou de comprometer a integridade de todo o volume lógico. Se esse novo disco único falhar, todo o sistema de arquivos pode ser corrompido, pois o LVM perderá os extents finais do volume.

      Regra de Ouro: Nunca adicione um disco sem redundância (RAID 1/5/6/10 via hardware ou software) a um Volume Group que hospeda dados críticos. Você estará criando um "RAID 0 acidental" em termos de confiabilidade.

      Executando a Expansão Lógica

      Assumindo que o disco subjacente é seguro, o comando para usar todo o espaço livre disponível é:

      lvextend -l +100%FREE /dev/vg_dados/lv_mysql
      

      A Camada do Sistema de Arquivos: O Passo Final

      Até agora, trabalhamos apenas com blocos. O sistema de arquivos (EXT4, XFS) que reside sobre esses blocos ainda "acha" que o disco é pequeno. Precisamos redimensionar o filesystem a quente.

      A ferramenta depende do formato utilizado.

      Tabela Comparativa: Redimensionamento de Filesystems

      Característica EXT4 XFS
      Comando de Resize resize2fs /dev/vg/lv xfs_growfs /mountpoint
      Expansão a Quente? Sim (Mounted) Sim (Mounted)
      Redução (Shrink)? Sim (mas requer unmount em muitos casos) NÃO. Impossível reduzir.
      Risco de Fragmentação Moderado após resize Baixo (alocação dinâmica)
      Uso de CPU no Resize Alto (recalcula tabelas de inodes) Baixo (atualiza superbloco)

      Executando o Resize

      Para EXT4:

      resize2fs /dev/vg_dados/lv_mysql
      

      Para XFS (note que o argumento é o ponto de montagem, não o dispositivo):

      xfs_growfs /var/lib/mysql
      

      Se você monitorar o df -h em outra janela, verá o espaço saltar instantaneamente. O crise foi evitada, o banco de dados continua rodando.


      Análise de Risco e Conclusão Investigativa

      A expansão de storage via LVM é uma operação de rotina, mas a complacência é a inimiga da disponibilidade. Como investigador, quando analiso falhas pós-expansão, a causa raiz raramente é o comando lvextend em si, mas o contexto onde ele foi aplicado.

      Checklist de Sobrevivência para Expansão:

      1. Backup: Você tem um snapshot recente? Erros de digitação no lvextend são raros, mas catastróficos.

      2. Homogeneidade: Evite misturar discos de velocidades muito diferentes (ex: NVMe + HDD SATA) no mesmo Volume Group. O LVM não faz tiering automático inteligente por padrão; você pode acabar com a performance do banco de dados degradada porque metade dos blocos foi para o disco lento.

      3. Fragmentação: Múltiplas expansões pequenas ao longo de anos podem fragmentar o volume lógico em centenas de pedaços físicos espalhados pelo disco, aumentando a latência de I/O.

      Dominar o LVM não é apenas decorar comandos; é entender o fluxo dos dados do silício até o arquivo de log. Ao respeitar a hierarquia PV > VG > LV e validar cada etapa com métricas, você transforma uma emergência de madrugada em apenas mais uma entrada no log de alterações.


      Referências & Leitura Complementar

      • Red Hat Enterprise Linux 8/9 Logical Volume Manager Administration - Documentação oficial sobre gerenciamento avançado de volumes.

      • RFC 3720 (iSCSI) - Para entendimento profundo de como dispositivos de bloco remotos se comportam em rescans.

      • LVM2 Resource Page (Sourceware.org) - Documentação técnica da implementação do LVM2 no userspace.

      • Manpages: man 8 pvcreate, man 8 lvextend, man 8 xfs_growfs.

      #LVM Linux #Expansão de Disco sem Downtime #lvextend tutorial #resize2fs xfs_growfs #Gerenciamento de Storage Linux
      Dr. Marcus 'Bitrot' Silva

      Dr. Marcus 'Bitrot' Silva

      Engenheiro Sênior de Armazenamento

      20 anos recuperando RAIDs quebrados. Especialista em ZFS e sistemas de arquivos distribuídos. Já viu mais falhas de disco do que gostaria.