TL;DR — Resumo Rápido

Guia completo de LVM no Linux: estenda volumes lógicos, adicione discos, expanda filesystems ext4/XFS, thin provisioning, snapshots e VMs na nuvem.

LVM (Logical Volume Manager) é a camada de abstração de armazenamento padrão no Linux que permite redimensionar, criar snapshots e migrar espaço em disco sem downtime. Este guia cobre todo o fluxo do LVM: arquitetura, adição de discos, extensão de volumes lógicos, crescimento e redução de filesystems, thin provisioning, snapshots, extensão em VMs na nuvem e os erros mais comuns em produção.

Pré-requisitos

  • Sistema Linux com o pacote lvm2 instalado (sudo apt install lvm2 ou sudo dnf install lvm2).
  • Acesso root ou sudo.
  • Pelo menos um grupo de volumes LVM existente, ou um disco para inicializar do zero.
  • Familiaridade básica com particionamento de discos no Linux (fdisk, lsblk, df).

Arquitetura LVM

O LVM introduz três camadas de abstração entre discos físicos e filesystems montados:

CamadaPrefixo de comandoDescrição
Volume Físico (PV)pv*Disco ou partição inicializada para uso com LVM
Grupo de Volumes (VG)vg*Pool de armazenamento formado por um ou mais PVs
Volume Lógico (LV)lv*Dispositivo de bloco virtual extraído do espaço livre do VG

Os Physical Extents (PE) são a menor unidade de alocação dentro de um VG (padrão 4 MiB). Cada LV é um intervalo de PEs. Essa abstração permite que os LVs abranjam múltiplos discos e sejam redimensionados a qualquer momento.

A pilha de armazenamento se parece com isto:

/dev/sda1  /dev/sdb1  /dev/sdc    ← discos físicos / partições
    └─── pvcreate ───────────┘

     Grupo de Volumes (vg_data)    ← pool de PEs

  lv_root  lv_home  lv_db          ← volumes lógicos (dispositivos de bloco)

  ext4     ext4     xfs            ← filesystems sobre os LVs

Visualizando o Layout Atual

lsblk — árvore de dispositivos de bloco

lsblk
# NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
# sda               8:0    0   50G  0 disk
# ├─sda1            8:1    0    1G  0 part /boot
# └─sda2            8:2    0   49G  0 part
#   ├─vg_sys-lv_root 253:0  0   20G  0 lvm  /
#   └─vg_sys-lv_home 253:1  0   29G  0 lvm  /home

pvdisplay, vgdisplay, lvdisplay

pvdisplay          # volumes físicos: disco, tamanho, PEs usados/livres
vgdisplay          # grupos de volumes: PEs totais / usados / livres
lvdisplay          # volumes lógicos: caminho, tamanho, tipo de filesystem

Comandos rápidos:

pvs     # resumo compacto de PVs
vgs     # resumo compacto de VGs (observe VFree para espaço disponível)
lvs     # resumo compacto de LVs
df -h   # uso de filesystems (o que o SO enxerga)

Adicionando um Novo Disco ao LVM

Esta é a operação mais comum em produção: uma VM recebe um novo disco e você quer adicionar essa capacidade a um VG existente.

Etapa 1 — Particionar o novo disco

fdisk /dev/sdb
# Dentro do fdisk:
# n   → nova partição
# p   → primária
# 1   → número de partição
# [Enter] duas vezes → usar o disco inteiro
# t   → mudar tipo
# 8e  → Linux LVM
# w   → gravar e sair

Para discos GPT (>2 TB ou sistemas UEFI) use gdisk ou parted. Defina o tipo de partição como Linux LVM.

Etapa 2 — Inicializar o volume físico

pvcreate /dev/sdb1
# Physical volume "/dev/sdb1" successfully created.

Etapa 3 — Estender o grupo de volumes

vgextend vg_sys /dev/sdb1
# Volume group "vg_sys" successfully extended
vgs    # confirme que VFree aumentou

Etapa 4 — Estender o volume lógico

# Adicionar exatamente 20 GB
lvextend -L +20G /dev/vg_sys/lv_root

# Ou consumir TODO o espaço livre do VG
lvextend -l +100%FREE /dev/vg_sys/lv_root

Etapa 5 — Redimensionar o filesystem

ext4 (online, sem desmontar):

resize2fs /dev/vg_sys/lv_root

XFS (online, usar ponto de montagem):

xfs_growfs /

Estendendo um LV com Espaço Livre no VG

Se você já tem PEs livres no VG (visíveis em vgs sob VFree), pule as etapas de adicionar disco e vá direto para lvextend:

vgs
# VG      #PV #LV #SN Attr   VSize   VFree
# vg_data   2   3   0 wz--n- 200.00g 45.00g   ← 45 GB livres

lvextend -L +30G /dev/vg_data/lv_db
resize2fs /dev/vg_data/lv_db    # ext4
# ou
xfs_growfs /var/lib/mysql        # XFS

Você pode combinar lvextend e resize2fs em um único comando com a flag -r:

lvextend -L +30G -r /dev/vg_data/lv_db

Redimensionamento Online vs Offline

FilesystemCrescer online?Reduzir online?Notas
ext4SimNão — deve desmontarMais flexível; suporta crescer e reduzir
XFSSimNuncaXFS não pode ser reduzido — por design
BtrfsSimSimCrescimento e redução online suportados
ext3SimNãoLegado; prefira ext4
swapNãoNãoswapoff, redimensionar LV, mkswap, swapon

Reduzindo um Volume Lógico (Somente ext4 — Perigoso)

Reduzir é irreversível se feito incorretamente. Sempre faça backup. XFS não pode ser reduzido.

# 1. Desmontar o filesystem
umount /dev/vg_data/lv_home

# 2. Verificar e reparar o filesystem ANTES de redimensionar
e2fsck -f /dev/vg_data/lv_home

# 3. Reduzir o filesystem para o tamanho alvo
resize2fs /dev/vg_data/lv_home 50G

# 4. Reduzir o volume lógico para corresponder
lvreduce -L 50G /dev/vg_data/lv_home

# 5. Remontar e verificar
mount /dev/vg_data/lv_home /home
df -h /home

Regra crítica: sempre execute resize2fs para reduzir o filesystem ANTES de lvreduce. Reduzir o LV primeiro trunca dados e corrompe o filesystem.


Thin Provisioning

O thin provisioning permite superalocar armazenamento — alocar mais espaço para os LVs do que existe fisicamente no VG.

# Criar um thin pool (100 GB em um VG que pode ter apenas 50 GB livres em disco)
lvcreate --thin -L 100G vg_data/thin_pool

# Criar thin LVs a partir do pool
lvcreate --thin -V 30G --name lv_web vg_data/thin_pool
lvcreate --thin -V 30G --name lv_db  vg_data/thin_pool

# Monitorar o uso real do pool
lvs -a vg_data
# Data%  mostra o quanto o pool está cheio — alerte a 80%, aja a 90%

Aviso: se um thin pool ficar completamente cheio, todos os LVs do pool ficam somente leitura. Monitore o uso com lvs.


Snapshots LVM

Snapshots capturam o estado de um LV num ponto no tempo usando copy-on-write. São a maneira mais rápida de fazer backup consistente de um servidor em produção.

# Criar um snapshot de 5 GB de lv_root
lvcreate --snapshot -n lv_root_snap -L 5G /dev/vg_sys/lv_root

# Montar o snapshot somente leitura para backup
mount -o ro /dev/vg_sys/lv_root_snap /mnt/snap
tar -czf /backup/root-$(date +%Y%m%d).tar.gz -C /mnt/snap .
umount /mnt/snap

# Remover o snapshot quando terminar
lvremove /dev/vg_sys/lv_root_snap

Mesclando um snapshot (rollback)

# Reverter lv_root para o estado do snapshot na próxima inicialização
lvconvert --merge /dev/vg_sys/lv_root_snap
reboot

LVM em VMs na Nuvem

Quando você estende um disco no Azure, AWS ou GCP, o SO vê o disco crescer mas o PV ainda reporta o tamanho antigo. Use pvresize para atualizar a visão do LVM:

# Exemplo Azure: disco estendido de 30 GB para 50 GB no portal
lsblk        # /dev/sda deve mostrar 50G

# Redimensionar a partição se necessário
sudo growpart /dev/sda 2

# Informar ao LVM que o PV agora é maior
pvresize /dev/sda2

# Confirmar que apareceu espaço livre no VG
vgs

# Estender o LV e crescer o filesystem
lvextend -l +100%FREE -r /dev/vg_sys/lv_root

Erros Comuns

Mensagem de erroCausaSolução
Insufficient free spacePEs insuficientes no VGAdicione um novo PV com pvcreate + vgextend, ou use -l +100%FREE
Can't reduce LV below used spaceAlvo do resize2fs menor que os dados reaisExecute e2fsck -f primeiro, depois reduza o filesystem antes do lvreduce
Filesystem not showing new sizeresize2fs / xfs_growfs não executados após lvextendExecute resize2fs /dev/vg/lv ou xfs_growfs /pontomontagem
Device /dev/sdX not foundTabela de partições não relidaExecute partprobe /dev/sdX e tente novamente pvcreate
WARNING: snapshot is fullEspaço COW esgotadoExpanda o snapshot: lvextend -L +2G /dev/vg/snap ou recrie-o

LVM vs ZFS vs Btrfs vs mdadm vs Partições Simples

RecursoLVMZFSBtrfsmdadmPartições simples
Redimensionamento onlineSimSimSimLimitadoNão
SnapshotsSim (COW)Sim (COW)Sim (COW)NãoNão
RAIDSimSim (nativo)SimSimNão
CompressãoNãoSimSimNãoNão
Thin provisioningSimSimParcialNãoNão
Curva de aprendizadoMédiaAltaMédiaMédiaBaixa
Ideal paraServidores Linux geraisNAS, FreeBSDDesktop, FedoraRAID legadoDisco único simples

Resumo

  • LVM adiciona abstração PV → VG → LV: redimensione e mova armazenamento sem reiniciar.
  • Use pvdisplay, vgdisplay, lvdisplay e vgs para entender o layout atual.
  • Adicionar capacidade: pvcreatevgextendlvextendresize2fs ou xfs_growfs.
  • Crescer ext4 e XFS é sempre online e seguro; use -r no lvextend para um único passo.
  • Reduzir requer desmontar + e2fsck + resize2fs antes de lvreduce. XFS não pode ser reduzido.
  • O thin provisioning permite superalocação; monitore o uso do pool com lvs.
  • Snapshots são backups COW rápidos; dimensione-os generosamente.
  • Em VMs na nuvem, use pvresize após estender o disco no portal.

Artigos Relacionados