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
lvm2instalado (apt install lvm2oudnf 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
lvse expanda se necessário. - XFS não pode ser reduzido. A tentativa falha com um erro claro.
- Esquecer
pvresizeapó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 / lvselsblkpara 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 → resize2fssem 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.