LVM e Gerenciamento de Particoes na Pratica: Operacoes Flexiveis de Armazenamento

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

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

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

Proximas Leituras