TL;DR — Resumo Rápido

Guia LVM para Linux: estenda volumes lógicos, adicione discos, amplie sistemas de arquivos e expanda partições raiz em VMs de nuvem sem reinicialização.

Gerenciar armazenamento em servidores Linux de produção significa que mais cedo ou mais tarde você enfrentará um disco cheio. O Logical Volume Manager (LVM) foi projetado exatamente para esse momento: ele permite estender, reduzir, criar snapshots e migrar armazenamento online — geralmente sem nenhum tempo de inatividade. Este guia cobre o fluxo de trabalho completo do LVM, dos fundamentos da arquitetura à expansão da partição raiz em VMs de nuvem, com comandos reais que você pode executar imediatamente.

Pré-requisitos

Antes de começar, certifique-se de ter:

  • Um sistema Linux com lvm2 instalado (apt install lvm2 ou dnf install lvm2)
  • Acesso root ou sudo
  • Familiaridade básica com dispositivos de bloco Linux (lsblk, fdisk, df)
  • Para cenários de nuvem: capacidade de redimensionar o disco no Portal do Azure ou no console da AWS antes de tocar no Linux

Arquitetura LVM: PV → VG → LV

O LVM adiciona três camadas de abstração entre os discos físicos e o sistema de arquivos:

Camada Prefixo de comando Descrição
Volume Físico (PV) pv* Um disco bruto ou partição inicializado para LVM (pvcreate)
Grupo de Volumes (VG) vg* Um pool de um ou mais PVs (vgcreate, vgextend)
Volume Lógico (LV) lv* Uma fatia do espaço do VG que age como uma partição (lvcreate, lvextend)

O sistema de arquivos (ext4, XFS, etc.) vive dentro de um LV. O SO vê o LV como um dispositivo de bloco (ex.: /dev/myvg/data) e não tem conhecimento dos discos físicos subjacentes. Essa indireção é o que permite o redimensionamento online e a migração transparente entre discos.

Verificar o Layout LVM Atual

Sempre comece entendendo o que você tem:

# Listar todos os Volumes Físicos
pvs

# Listar todos os Grupos de Volumes
vgs

# Listar todos os Volumes Lógicos
lvs

# Detalhe completo de um VG específico
vgdisplay myvg

# Detalhe completo de um LV específico
lvdisplay /dev/myvg/mylv

# Mostrar árvore de dispositivos de bloco
lsblk

# Mostrar uso dos sistemas de arquivos montados
df -h

A coluna PFree na saída de pvs mostra o espaço não alocado no VG — é de lá que o lvextend retira.

Adicionando um Novo Disco como Volume Físico

Ao conectar um novo disco (ex.: /dev/sdb em uma VM, ou um novo EBS/disco gerenciado), inicialize-o como PV:

# Confirmar que o kernel vê o novo disco
lsblk

# Inicializar o disco como Volume Físico
pvcreate /dev/sdb

# Verificar
pvs

Não é necessário particionar o disco antes — usar o disco inteiro (/dev/sdb) é válido e mais simples.

Estendendo o VG e o LV

Passo 1 — Adicionar o PV ao VG

vgextend myvg /dev/sdb

Passo 2 — Estender o LV

Consumir todo o espaço livre restante no VG:

lvextend -l +100%FREE /dev/myvg/mylv

Adicionar uma quantidade fixa (ex.: 10 GB):

lvextend -L +10G /dev/myvg/mylv

O flag -r combina lvextend com o redimensionamento do sistema de arquivos em um único passo (funciona para ext4 e XFS):

lvextend -l +100%FREE -r /dev/myvg/mylv

Redimensionando o Sistema de Arquivos

Após estender o LV, o sistema de arquivos precisa ser informado sobre o novo espaço. Este passo é seguro em um sistema de arquivos montado e em uso.

ext4 (maioria dos sistemas Ubuntu/Debian)

resize2fs /dev/myvg/mylv

Nenhum argumento de tamanho é necessário — resize2fs preenche todo o LV. Pode ser executado com o sistema de arquivos montado.

XFS (maioria dos sistemas RHEL/CentOS/Rocky)

O XFS usa o ponto de montagem, não o dispositivo:

xfs_growfs /mountpoint
# ou para raiz:
xfs_growfs /

Importante: XFS só pode crescer, nunca encolher. Tentar reduzir um sistema de arquivos XFS não é suportado.

Estendendo a Partição Raiz em VMs de Nuvem (Sem Reinicialização)

Este é o cenário mais comum no mundo real. Você tem uma VM de nuvem (Azure ou AWS) cujo disco do SO está ficando sem espaço. Esta é a sequência completa — sem reinicialização necessária.

1. Redimensionar o disco no console de nuvem

  • Azure: Armazenamento → Discos → selecionar o disco do SO → Tamanho do disco → aumentar → Salvar
  • AWS: EC2 → Volumes → Modify Volume → definir novo tamanho → Modify

Aguarde o redimensionamento ser concluído antes de prosseguir.

2. Estender a partição no lado Linux

# Confirmar que o kernel vê o novo tamanho
lsblk

# Ampliar a partição (ex.: partição 2 em /dev/sda)
sudo growpart /dev/sda 2

# Verificar que a partição agora é maior
lsblk

3. Informar o LVM sobre o novo tamanho do PV

sudo pvresize /dev/sda2

4. Estender o LV

sudo lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv

5. Ampliar o sistema de arquivos

Para ext4:

sudo resize2fs /dev/ubuntu-vg/ubuntu-lv

Para XFS:

sudo xfs_growfs /

6. Confirmar

df -h /

O sistema de arquivos raiz agora mostra o tamanho expandido. Nenhuma reinicialização foi necessária.

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

Reduzir é mais arriscado do que estender e só deve ser feito quando você tem um backup recente. O XFS não pode ser reduzido — este procedimento se aplica apenas ao ext4.

# 1. Desmontar o sistema de arquivos
umount /dev/myvg/data

# 2. Verificar e reparar o sistema de arquivos antes de reduzir
e2fsck -f /dev/myvg/data

# 3. Reduzir o sistema de arquivos PRIMEIRO (para o tamanho alvo, ex.: 20G)
resize2fs /dev/myvg/data 20G

# 4. Reduzir o LV para corresponder
lvreduce -L 20G /dev/myvg/data

# 5. Remontar
mount /dev/myvg/data /mnt/data

Aviso: Sempre reduza o sistema de arquivos antes do LV. Reduzir o LV primeiro destrói dados ao truncar o sistema de arquivos.

Snapshots LVM

Os snapshots capturam o estado de um LV em um determinado momento. São inestimáveis antes de operações arriscadas.

# Criar um snapshot de 5 GB de /dev/myvg/mylv
lvcreate --snapshot -L 5G -n mylv_snap /dev/myvg/mylv

# Montar o snapshot somente leitura para inspeção
mount -o ro /dev/myvg/mylv_snap /mnt/snapshot

# Reverter (mesclar snapshot com a origem)
lvconvert --merge /dev/myvg/mylv_snap

# Remover o snapshot sem reverter
lvremove /dev/myvg/mylv_snap

Movendo Dados Entre Volumes Físicos

pvmove migra extensões entre PVs enquanto o LV permanece online. Use isso para esvaziar um disco antes de removê-lo.

# Mover todas as extensões de /dev/sdb para qualquer outro PV no VG
pvmove /dev/sdb

# Após conclusão, remover o PV do VG
vgreduce myvg /dev/sdb

# Remover metadados LVM do disco
pvremove /dev/sdb

LVM vs ZFS vs Btrfs vs Partições Simples

Recurso LVM ZFS Btrfs Partições simples
Extensão online Sim Sim Sim Não
Redução online Apenas ext4 (desmontar) Não Sim Não
Snapshots Sim (CoW) Sim (CoW) Sim (CoW) Não
RAID integrado Via dm-raid Sim Sim (limitado) Via mdadm
Compressão transparente Não Sim Sim Não
Autocorreção (checksums) Não Sim Parcial Não
Complexidade Média Alta Média Baixa
Padrão em nuvem Sim (RHEL/Ubuntu) Apenas Proxmox Apenas Fedora Legado

Armadilhas Comuns

  • Reduzir o sistema de arquivos após o LV destrói dados. Sempre reduza o sistema de arquivos primeiro.
  • Snapshot cheio = snapshot inválido. Monitore o uso com lvs e expanda se necessário.
  • XFS não pode ser reduzido. A tentativa falha com um erro claro.
  • Esquecer pvresize após redimensionar o disco de nuvem significa que o LVM ainda vê o tamanho antigo do PV.

Resumo

  • O LVM adiciona três camadas (PV, VG, LV) que permitem gerenciamento flexível de armazenamento online.
  • Use pvs / vgs / lvs e lsblk para auditar o layout atual antes de fazer alterações.
  • Estender é sempre seguro: pvcreate → vgextend → lvextend → resize2fs / xfs_growfs.
  • A expansão da raiz em VMs de nuvem requer growpart → pvresize → lvextend → resize2fs sem reinicialização.
  • Reduzir só é possível no ext4 e requer desmontagem; sempre faça backup primeiro.
  • Snapshots são capturas CoW baratas — tire um antes de cada mudança importante.
  • XFS só cresce; ZFS e Btrfs oferecem recursos mais ricos com maior complexidade.

Artigos Relacionados