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.
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.
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:
Physical Volume (PV): O "tijolo". O disco físico ou partição bruta.
Volume Group (VG): A "parede". O pool de armazenamento que agrupa todos os tijolos.
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/sdXseguinte. 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.
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:
Backup: Você tem um snapshot recente? Erros de digitação no
lvextendsão raros, mas catastróficos.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.
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.
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.