LVM e Gerenciamento de Partições na Prática: Operações Flexíveis de Armazenamento

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 /var ou /home de 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.

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

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

Próximas Leituras