Administração de Sistemas

LVM: volumes lógicos, snapshots e redimensionamento em produção

• 6 min de leitura

LVM: volumes lógicos, snapshots e redimensionamento em produção
O Logical Volume Manager (LVM) é uma camada de abstração entre o armazenamento físico e o sistema de arquivos, amplamente utilizado em ambientes de produção por sua flexibilidade e recursos avançados. Diferente das partições tradicionais, que exigem reparticionamento e reinicialização para alterações de tamanho, o LVM permite redimensionar volumes, criar snapshots e gerenciar espaço sem interromper serviços.

LVM: volumes lógicos, snapshots e redimensionamento em produção

1. Introdução ao LVM e Conceitos Fundamentais

O Logical Volume Manager (LVM) é uma camada de abstração entre o armazenamento físico e o sistema de arquivos, amplamente utilizado em ambientes de produção por sua flexibilidade e recursos avançados. Diferente das partições tradicionais, que exigem reparticionamento e reinicialização para alterações de tamanho, o LVM permite redimensionar volumes, criar snapshots e gerenciar espaço sem interromper serviços.

Os componentes principais do LVM são:

  • Physical Volumes (PVs): Discos físicos ou partições marcadas para uso pelo LVM.
  • Volume Groups (VGs): Conjunto de PVs que formam um pool de armazenamento.
  • Logical Volumes (LVs): Volumes lógicos criados a partir do espaço disponível no VG, equivalentes a partições tradicionais.

Vantagens em produção incluem: redimensionamento online, snapshots point-in-time, migração de dados entre discos sem parada e gerenciamento centralizado de múltiplos discos.

2. Preparação e Criação de Volumes Lógicos

Para iniciar, identifique os discos disponíveis e prepare-os como PVs:

# Identificar discos
lsblk

# Criar PVs nos discos /dev/sdb e /dev/sdc
pvcreate /dev/sdb /dev/sdc

# Verificar criação
pvdisplay

Crie um Volume Group e aloque extents:

# Criar VG chamado "vg_dados"
vgcreate vg_dados /dev/sdb /dev/sdc

# Verificar VG
vgdisplay vg_dados

Crie Logical Volumes com tamanhos específicos:

# Criar LV de 50G chamado "lv_web"
lvcreate -L 50G -n lv_web vg_dados

# Criar LV usando 100% do espaço restante
lvcreate -l 100%FREE -n lv_backup vg_dados

# Verificar LVs
lvdisplay

Formate e monte os volumes:

# Formatar como ext4
mkfs.ext4 /dev/vg_dados/lv_web

# Montar em /mnt/web
mount /dev/vg_dados/lv_web /mnt/web

# Adicionar ao /etc/fstab para montagem automática
echo "/dev/vg_dados/lv_web /mnt/web ext4 defaults 0 2" >> /etc/fstab

3. Gerenciamento de Volume Groups e Extents

Adicione ou remova discos de um VG existente:

# Adicionar novo disco /dev/sdd ao VG
pvcreate /dev/sdd
vgextend vg_dados /dev/sdd

# Remover PV /dev/sdb (mover dados primeiro)
pvmove /dev/sdb
vgreduce vg_dados /dev/sdb

Movimente extents entre PVs sem interrupção:

# Mover todos extents de /dev/sdb para outros PVs
pvmove /dev/sdb

# Mover extents específicos
pvmove /dev/sdb:1000-2000 /dev/sdd

Redimensione VGs com segurança:

# Expandir VG com novo disco
vgextend vg_dados /dev/sde

# Verificar espaço livre
vgdisplay vg_dados | grep "Free"

4. Redimensionamento de Volumes Lógicos em Produção

Expansão online de um LV sem desmontagem:

# Expandir lv_web em 20G
lvextend -L +20G /dev/vg_dados/lv_web

# Redimensionar sistema de arquivos ext4
resize2fs /dev/vg_dados/lv_web

# Para XFS (requer montagem)
xfs_growfs /mnt/web

Redução segura de um LV (requer desmontagem):

# Desmontar volume
umount /mnt/web

# Verificar sistema de arquivos
e2fsck -f /dev/vg_dados/lv_web

# Reduzir sistema de arquivos para 30G
resize2fs /dev/vg_dados/lv_web 30G

# Reduzir LV para 30G
lvreduce -L 30G /dev/vg_dados/lv_web

# Montar novamente
mount /dev/vg_dados/lv_web /mnt/web

Caso prático: ajustar volume de banco de dados MySQL durante pico de carga:

# Expandir LV do MySQL sem parar serviço
lvextend -L +50G /dev/vg_dados/lv_mysql
resize2fs /dev/vg_dados/lv_mysql
# O MySQL continua operando normalmente

5. Snapshots no LVM: Criação e Gerenciamento

Snapshots são cópias point-in-time que utilizam a técnica copy-on-write (CoW). Crie um snapshot:

# Criar snapshot de 5G para lv_web
lvcreate -L 5G -s -n lv_web_snap /dev/vg_dados/lv_web

# Verificar snapshot
lvdisplay /dev/vg_dados/lv_web_snap

Use snapshots para backups consistentes:

# Montar snapshot (apenas leitura)
mkdir /mnt/snap
mount -o ro /dev/vg_dados/lv_web_snap /mnt/snap

# Realizar backup
tar czf /backup/web_$(date +%Y%m%d).tar.gz /mnt/snap

# Desmontar e remover snapshot
umount /mnt/snap
lvremove /dev/vg_dados/lv_web_snap

Remova ou mescle snapshots em produção:

# Mesclar snapshot com volume original (merge)
lvconvert --merge /dev/vg_dados/lv_web_snap
# O merge ocorre na próxima ativação ou montagem

6. Recuperação de Desastres e Manutenção com Snapshots

Restauração de dados a partir de snapshot:

# Parar serviço que usa o volume
systemctl stop nginx

# Mesclar snapshot para restaurar estado anterior
lvconvert --merge /dev/vg_dados/lv_web_snap
mount /dev/vg_dados/lv_web /mnt/web

# Reiniciar serviço
systemctl start nginx

Migração de dados entre volumes usando snapshots:

# Criar snapshot do volume origem
lvcreate -L 10G -s -n lv_origem_snap /dev/vg_dados/lv_origem

# Montar snapshot e volume destino
mount /dev/vg_dados/lv_origem_snap /mnt/origem
mount /dev/vg_dados/lv_destino /mnt/destino

# Copiar dados
rsync -av /mnt/origem/ /mnt/destino/

# Desmontar e limpar
umount /mnt/origem /mnt/destino
lvremove /dev/vg_dados/lv_origem_snap

Monitore o consumo de espaço dos snapshots:

# Verificar uso do snapshot
lvs -a -o +snap_percent,origin

# Se o snapshot atingir 100%, ele se torna inválido
# Aumentar espaço do snapshot
lvextend -L +2G /dev/vg_dados/lv_web_snap

7. Performance e Boas Práticas em Produção

Alinhamento de partições e striping:

# Criar LV com striping em 2 discos
lvcreate -i 2 -I 64 -L 100G -n lv_stripe vg_dados

# Verificar alinhamento
lvdisplay -m /dev/vg_dados/lv_stripe

Configuração de cache com LVM cache:

# Criar LV para cache (SSD)
lvcreate -L 10G -n lv_cache vg_dados

# Associar cache ao volume lento
lvconvert --type cache --cachepool vg_dados/lv_cache /dev/vg_dados/lv_web

Monitoramento de I/O:

# Monitorar I/O por processo
dstat -d 5

# Monitorar I/O por disco
iostat -x 5

# Logs do LVM
journalctl -u lvm2-lvmetad

Boas práticas:

  • Planeje capacidade com folga de 20% para snapshots e crescimento.
  • Documente todos os LVs, VGs e PVs em um inventário.
  • Realize backups regulares independentes dos snapshots.
  • Teste snapshots em ambiente de homologação antes da produção.

8. Troubleshooting e Cenários Comuns

Problema: snapshot com espaço insuficiente (100% utilizado)

# Verificar snapshots problemáticos
lvs -a -o +snap_percent

# Solução: aumentar snapshot
lvextend -L +5G /dev/vg_dados/lv_web_snap

# Se já estiver invalidado, recriar
lvremove /dev/vg_dados/lv_web_snap
lvcreate -L 10G -s -n lv_web_snap /dev/vg_dados/lv_web

Recuperação de VG corrompido:

# Ativar VG manualmente
vgchange -ay vg_dados

# Verificar PVs perdidos
pvscan

# Restaurar metadados de backup
vgcfgrestore -f /etc/lvm/archive/vg_dados_*.vg vg_dados

Erros comuns de redimensionamento:

  • Reduzir LV antes do sistema de arquivos → corrupção de dados.
  • Esquecer de desmontar antes de reduzir → erro do kernel.
  • Não verificar sistema de arquivos antes de reduzir → perda de dados.

Ferramentas de diagnóstico:

# Exibir informações detalhadas
lvdisplay -m /dev/vg_dados/lv_web
vgdisplay -v vg_dados
pvdisplay -m /dev/sdb

# Logs do sistema
dmesg | grep -i lvm
tail -f /var/log/syslog | grep -i lvm

Referências

💬 Comentários
Mais em Administração de Sistemas