LVM e Gerenciamento de Partições na Prática: Operações Flexíveis de Armazenamento
O Que É LVM e Por Que Usá-lo?
LVM (Logical Volume Manager) abstrai discos físicos em volumes virtuais, permitindo expansão dinâmica de capacidade, snapshots e agrupamento de múltiplos discos -- operações que partições padrão não conseguem fazer. Uma vez que você particiona um disco convencionalmente, redimensionar é arriscado e requer downtime. LVM remove essa restrição.
O caso de uso principal: "Adicionar um disco e expandir um volume em produção sem downtime" e "Tirar um snapshot antes de uma operação arriscada e reverter se algo quebrar."
Quando LVM é a ferramenta certa
- O
/varou/homede um servidor de produção está ficando sem espaço - Adições futuras de disco são esperadas
- Você precisa de backups baseados em snapshot para bancos de dados ou volumes de containers
Entendendo a Arquitetura de 3 Camadas do LVM
LVM é organizado em três camadas de abstração:
| Camada | Componente | Papel |
|---|---|---|
| Física | PV (Physical Volume) | Disco ou partição real |
| Média | VG (Volume Group) | Pool de armazenamento combinando um ou mais PVs |
| Lógica | LV (Logical Volume) | Partição virtual criada a partir de um VG |
/dev/sdb /dev/sdc <-- PV (Physical Volumes)
\ /
vg_data <-- VG (Volume Group)
| |
lv_app lv_logs <-- LV (Logical Volumes)Múltiplos PVs podem ser combinados em um único VG, permitindo que um volume lógico se estenda por discos físicos. Tamanhos de LV podem ser alterados livremente dentro do espaço disponível do VG.
Verificando o Status Atual do LVM
Sempre verifique o estado atual antes de fazer alterações. Os comandos pvs, vgs e lvs dão um resumo conciso.
sudo pvs
PV VG Fmt Attr PSize PFree /dev/sdb vg_data lvm2 a-- 100.00g 50.00g
sudo vgs
VG #PV #LV #SN Attr VSize VFree vg_data 1 1 0 wz--n- 100.00g 50.00g
sudo lvs
LV VG Attr LSize Pool Origin Data% lv_app vg_data -wi-ao---- 50.00g
Para informações detalhadas:
sudo pvdisplay /dev/sdb sudo vgdisplay vg_data sudo lvdisplay /dev/vg_data/lv_app
Construindo uma Nova Configuração LVM
Passo 1: Criar Physical Volume (PV)
sudo pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created.
pvcreate destrói todos os dados existentes no disco alvo. Sempre verifique o dispositivo alvo com lsblk primeiro -- isso não pode ser desfeito.
lsblk # NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT # sdb 8:16 0 100G 0 disk <-- confirme que esta sem uso
Passo 2: Criar Volume Group (VG)
sudo vgcreate vg_data /dev/sdb
Volume group "vg_data" successfully created
Para combinar múltiplos discos em um pool:
sudo vgcreate vg_data /dev/sdb /dev/sdc
Passo 3: Criar Logical Volume (LV)
# Criar com tamanho especifico sudo lvcreate -L 50G -n lv_app vg_data # Usar todo o espaco disponivel do VG sudo lvcreate -l 100%FREE -n lv_app vg_data
Passo 4: Criar Filesystem e Montar
sudo mkfs.ext4 /dev/vg_data/lv_app sudo mkdir -p /mnt/app sudo mount /dev/vg_data/lv_app /mnt/app
Para montagens persistentes que sobrevivem a reinicializações, adicione uma entrada no /etc/fstab:
# Obter o UUID sudo blkid /dev/vg_data/lv_app
/dev/vg_data/lv_app: UUID="a1b2c3d4-e5f6-7890-abcd-ef1234567890" TYPE="ext4"
Adicionar ao /etc/fstab:
UUID=a1b2c3d4-e5f6-7890-abcd-ef1234567890 /mnt/app ext4 defaults 0 2
Expandindo um Logical Volume
A vantagem principal do LVM: expandir capacidade enquanto o volume está montado (redimensionamento online).
Quando o VG Tem Espaço Livre -- Caso Mais Simples
# Adicionar 10GB e redimensionar o filesystem ao mesmo tempo (-r executa resize2fs automaticamente) sudo lvextend -L +10G -r /dev/vg_data/lv_app
Size of logical volume vg_data/lv_app changed from 50.00 GiB to 60.00 GiB. Logical volume vg_data/lv_app successfully resized. resize2fs 1.46.5 (30-Dec-2021) Filesystem at /dev/vg_data/lv_app is mounted on /mnt/app; on-line resizing required The filesystem on /dev/vg_data/lv_app is now 15728640 blocks long.
Sem -r, redimensione o filesystem manualmente após lvextend:
sudo lvextend -L +10G /dev/vg_data/lv_app sudo resize2fs /dev/vg_data/lv_app # ext4 # sudo xfs_growfs /mnt/app # XFS
XFS não pode ser reduzido -- somente expandido. ext4 suporta tanto redução quanto expansão, mas reduzir requer desmontar o volume primeiro.
Quando o VG Não Tem Espaço Livre -- Adicionando um Novo Disco
# 1. Inicializar o novo disco como PV sudo pvcreate /dev/sdc # 2. Adiciona-lo ao VG existente sudo vgextend vg_data /dev/sdc # 3. Confirmar que o VG agora tem mais espaco livre sudo vgs vg_data # 4. Expandir o LV sudo lvextend -L +100G -r /dev/vg_data/lv_app
Verifique antes de expandir:
# Espaco livre do VG sudo vgs vg_data # Tamanho atual do LV sudo lvs /dev/vg_data/lv_app # Uso do filesystem df -h /mnt/app
Criando e Usando Snapshots
Um snapshot captura o estado de um LV em um ponto específico no tempo. Use antes de operações arriscadas ou como mecanismo de backup.
# Criar um snapshot de 5GB do lv_app sudo lvcreate -L 5G -s -n lv_app_snap /dev/vg_data/lv_app
Monte o snapshot para inspeção somente leitura:
sudo mkdir -p /mnt/app_snap sudo mount -o ro /dev/vg_data/lv_app_snap /mnt/app_snap
Restaurar a partir do snapshot (sobrescreve o LV original):
sudo umount /mnt/app sudo lvconvert --merge /dev/vg_data/lv_app_snap # O snapshot e automaticamente removido apos o merge
Se um snapshot encher, ele se torna inválido. Estime o volume de escrita no LV de origem e aloque espaço suficiente. Monitore o uso com Data% na saída de lvs.
sudo lvs /dev/vg_data/lv_app_snap
Removendo Logical Volumes e VGs
# 1. Desmontar primeiro sudo umount /mnt/app # 2. Remover o LV sudo lvremove /dev/vg_data/lv_app # 3. Remover o VG (somente quando nenhum LV restar) sudo vgremove vg_data # 4. Remover o label do PV sudo pvremove /dev/sdb
A remoção é irreversível. Verifique os alvos com lvs, vgs e pvs antes de executar qualquer comando de remoção. Faça backup dos dados primeiro.
Troubleshooting de Problemas Comuns do LVM
df ainda mostra tamanho antigo após lvextend
# O filesystem nao foi redimensionado -- faca manualmente sudo resize2fs /dev/vg_data/lv_app # ext4 sudo xfs_growfs /mnt/app # XFS
vgextend falha -- dispositivo não encontrado
# Verifique se o dispositivo esta inicializado como PV sudo pvs sudo pvscan
Logical volume está inativo
sudo lvchange -ay /dev/vg_data/lv_app
Data% do snapshot está subindo para 100%
O snapshot está enchendo. Expanda-o antes que se torne inválido:
sudo lvextend -L +5G /dev/vg_data/lv_app_snap