LVM e Gerenciamento de Particoes na Pratica: Operacoes Flexiveis de Armazenamento
O Que E LVM e Por Que Usa-lo?
LVM (Logical Volume Manager) abstrai discos fisicos em volumes virtuais, permitindo expansao dinamica de capacidade, snapshots e agrupamento de multiplos discos -- operacoes que particoes padrao nao conseguem fazer. Uma vez que voce particiona um disco convencionalmente, redimensionar e arriscado e requer downtime. LVM remove essa restricao.
O caso de uso principal: "Adicionar um disco e expandir um volume em producao sem downtime" e "Tirar um snapshot antes de uma operacao arriscada e reverter se algo quebrar."
Quando LVM e a ferramenta certa
- O
/varou/homede um servidor de producao esta ficando sem espaco - Adicoes futuras de disco sao esperadas
- Voce precisa de backups baseados em snapshot para bancos de dados ou volumes de containers
Entendendo a Arquitetura de 3 Camadas do LVM
LVM e organizado em tres camadas de abstracao:
| Camada | Componente | Papel |
|---|---|---|
| Fisica | PV (Physical Volume) | Disco ou particao real |
| Media | VG (Volume Group) | Pool de armazenamento combinando um ou mais PVs |
| Logica | LV (Logical Volume) | Particao 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)Multiplos PVs podem ser combinados em um unico VG, permitindo que um volume logico se estenda por discos fisicos. Tamanhos de LV podem ser alterados livremente dentro do espaco disponivel do VG.
Verificando o Status Atual do LVM
Sempre verifique o estado atual antes de fazer alteracoes. Os comandos pvs, vgs e lvs dao 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 informacoes detalhadas:
sudo pvdisplay /dev/sdb sudo vgdisplay vg_data sudo lvdisplay /dev/vg_data/lv_app
Construindo uma Nova Configuracao LVM
Passo 1: Criar Physical Volume (PV)
sudo pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created.
pvcreate destroi todos os dados existentes no disco alvo. Sempre verifique o dispositivo alvo com lsblk primeiro -- isso nao 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 multiplos 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 reinicializacoes, 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 esta montado (redimensionamento online).
Quando o VG Tem Espaco 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 apos 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 nao pode ser reduzido -- somente expandido. ext4 suporta tanto reducao quanto expansao, mas reduzir requer desmontar o volume primeiro.
Quando o VG Nao Tem Espaco 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 especifico no tempo. Use antes de operacoes 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 inspecao 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 invalido. Estime o volume de escrita no LV de origem e aloque espaco suficiente. Monitore o uso com Data% na saida 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 remocao e irreversivel. Verifique os alvos com lvs, vgs e pvs antes de executar qualquer comando de remocao. Faca backup dos dados primeiro.
Troubleshooting de Problemas Comuns do LVM
df ainda mostra tamanho antigo apos 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 nao encontrado
# Verifique se o dispositivo esta inicializado como PV sudo pvs sudo pvscan
Logical volume esta inativo
sudo lvchange -ay /dev/vg_data/lv_app
Data% do snapshot esta subindo para 100%
O snapshot esta enchendo. Expanda-o antes que se torne invalido:
sudo lvextend -L +5G /dev/vg_data/lv_app_snap