O particionamento tradicional do Linux obriga voce a decidir os tamanhos dos discos no momento da instalacao. Precisa de mais espaco em /var seis meses depois? Tera que fazer backup, reparticionar e restaurar. O LVM (Logical Volume Manager) elimina essa rigidez adicionando uma camada de abstracao entre os discos fisicos e os sistemas de arquivos, permitindo redimensionar volumes, adicionar armazenamento e criar snapshots em um sistema em execucao sem tempo de inatividade.
Este guia cobre o fluxo de trabalho completo do LVM: criar volumes fisicos, agrupa-los em grupos de volumes, alocar volumes logicos e realizar as operacoes de redimensionamento e snapshots que tornam o LVM indispensavel para a administracao de servidores.
Pre-requisitos
Antes de comecar, certifique-se de ter:
- Um sistema Linux com systemd (Ubuntu 20.04+, Debian 11+, RHEL/CentOS 8+, ou similar)
- Acesso ao terminal com privilegios sudo
- Um ou mais discos ou particoes disponiveis (dispositivos de bloco nao utilizados)
- Conhecimento basico de conceitos de disco no Linux (particoes, sistemas de arquivos, pontos de montagem)
Aviso: Os comandos deste guia modificarao tabelas de particoes e criarao sistemas de arquivos. Sempre verifique cuidadosamente os nomes dos dispositivos antes de executar comandos. Usar o dispositivo errado pode destruir dados.
Arquitetura do LVM
O LVM opera em tres camadas:
┌─────────────────────────────────────────┐
│ Sistemas de arquivos (ext4, XFS) │
├─────────────────────────────────────────┤
│ Volumes Logicos (LV) │
│ /dev/nome_vg/nome_lv │
├─────────────────────────────────────────┤
│ Grupos de Volumes (VG) │
│ Pool de armazenamento de um ou │
│ mais volumes fisicos │
├─────────────────────────────────────────┤
│ Volumes Fisicos (PV) │
│ /dev/sdb, /dev/sdc, etc. │
├─────────────────────────────────────────┤
│ Discos Fisicos / Particoes │
└─────────────────────────────────────────┘
- Volume Fisico (PV): Um disco ou particao inicializado para uso com LVM
- Grupo de Volumes (VG): Um pool de armazenamento criado a partir de um ou mais PVs
- Volume Logico (LV): Uma particao virtual criada a partir de um VG, onde voce cria sistemas de arquivos
A vantagem principal e que os VGs podem abranger multiplos discos fisicos, e os LVs podem ser redimensionados em tempo real.
Instalacao do LVM
O LVM vem pre-instalado na maioria das distribuicoes de servidor. Verifique ou instale:
# Debian/Ubuntu
sudo apt update && sudo apt install lvm2
# RHEL/Fedora/CentOS
sudo dnf install lvm2
# Verificar instalacao
lvm version
Identificar Discos Disponiveis
Antes de criar volumes fisicos, identifique seus dispositivos de bloco disponiveis:
# Listar todos os dispositivos de bloco
lsblk
# Mostrar informacoes detalhadas dos discos
sudo fdisk -l
# Verificar quais discos ja estao em uso pelo LVM
sudo pvs
Exemplo de saida do lsblk mostrando dois discos nao utilizados:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 50G 0 disk
├─sda1 8:1 0 512M 0 part /boot
└─sda2 8:2 0 49.5G 0 part /
sdb 8:16 0 100G 0 disk
sdc 8:32 0 100G 0 disk
Neste exemplo, sdb e sdc estao disponiveis para LVM.
Criar Volumes Fisicos
Inicialize os discos para uso com LVM:
sudo pvcreate /dev/sdb /dev/sdc
Saida:
Physical volume "/dev/sdb" successfully created.
Physical volume "/dev/sdc" successfully created.
Verifique os volumes fisicos:
# Vista resumida
sudo pvs
# Vista detalhada
sudo pvdisplay /dev/sdb
A saida do pvs mostra:
PV VG Fmt Attr PSize PFree
/dev/sdb lvm2 --- 100.00g 100.00g
/dev/sdc lvm2 --- 100.00g 100.00g
Nota: Voce tambem pode usar particoes em vez de discos inteiros. Por exemplo,
sudo pvcreate /dev/sdb1funciona se voce preferir particionar o disco primeiro comfdiskouparted. Usar discos inteiros e mais simples e recomendado quando o disco inteiro e dedicado ao LVM.
Criar um Grupo de Volumes
Combine os volumes fisicos em um grupo de volumes:
sudo vgcreate vg_data /dev/sdb /dev/sdc
Saida:
Volume group "vg_data" successfully created
Verifique o grupo de volumes:
# Vista resumida
sudo vgs
# Vista detalhada
sudo vgdisplay vg_data
A saida do vgs mostra o armazenamento combinado:
VG #PV #LV #SN Attr VSize VFree
vg_data 2 0 0 wz--n- 199.99g 199.99g
Agora voce tem um pool de 200 GB de armazenamento (de dois discos de 100 GB) que pode ser alocado de forma flexivel.
Criar Volumes Logicos
Aloque espaco do grupo de volumes para criar volumes logicos:
# Criar um volume logico de 50 GB para aplicacoes
sudo lvcreate -L 50G -n lv_apps vg_data
# Criar um volume logico de 30 GB para bancos de dados
sudo lvcreate -L 30G -n lv_databases vg_data
# Criar um volume usando porcentagem do espaco livre restante
sudo lvcreate -l 50%FREE -n lv_logs vg_data
Opcoes comuns de dimensionamento:
| Opcao | Significado | Exemplo |
|---|---|---|
-L 50G | Tamanho exato | 50 gigabytes |
-L 500M | Tamanho exato | 500 megabytes |
-l 100%FREE | Todo o espaco restante | Usa tudo que resta |
-l 50%VG | Porcentagem do VG | Metade do grupo de volumes |
-l 50%FREE | Porcentagem do livre | Metade do espaco restante |
Verifique seus volumes logicos:
# Vista resumida
sudo lvs
# Vista detalhada
sudo lvdisplay /dev/vg_data/lv_apps
Formatacao e Montagem
Crie sistemas de arquivos nos volumes logicos:
# Formatar com ext4
sudo mkfs.ext4 /dev/vg_data/lv_apps
sudo mkfs.ext4 /dev/vg_data/lv_databases
# Ou formatar com XFS (preferido para volumes grandes)
sudo mkfs.xfs /dev/vg_data/lv_logs
Crie pontos de montagem e monte:
sudo mkdir -p /srv/apps /srv/databases /var/log/central
sudo mount /dev/vg_data/lv_apps /srv/apps
sudo mount /dev/vg_data/lv_databases /srv/databases
sudo mount /dev/vg_data/lv_logs /var/log/central
Montagem Persistente com fstab
Adicione entradas ao /etc/fstab para que os volumes sejam montados automaticamente na inicializacao:
# Obter os UUIDs (mais confiavel que caminhos de dispositivo)
sudo blkid /dev/vg_data/lv_apps
sudo blkid /dev/vg_data/lv_databases
sudo blkid /dev/vg_data/lv_logs
Adicione ao /etc/fstab:
/dev/vg_data/lv_apps /srv/apps ext4 defaults 0 2
/dev/vg_data/lv_databases /srv/databases ext4 defaults 0 2
/dev/vg_data/lv_logs /var/log/central xfs defaults 0 2
Dica: Para volumes LVM, usar o caminho
/dev/nome_vg/nome_lvno fstab e comum e confiavel porque o LVM cria links simbolicos consistentes do device mapper. UUIDs tambem funcionam se voce preferir.
Teste as entradas do fstab sem reiniciar:
sudo umount /srv/apps
sudo mount -a
df -h /srv/apps
Estender (Aumentar) um Volume Logico
Esta e a operacao mais valiosa do LVM. Quando um volume fica sem espaco, estenda-o sem tempo de inatividade.
Estender com Espaco Livre no Grupo de Volumes
# Adicionar 20 GB ao volume de aplicacoes
sudo lvextend -L +20G /dev/vg_data/lv_apps
# Depois redimensionar o sistema de arquivos
# Para ext4:
sudo resize2fs /dev/vg_data/lv_apps
# Para XFS:
sudo xfs_growfs /srv/apps
Ou faca tudo em um unico comando:
# A opcao -r redimensiona o sistema de arquivos automaticamente
sudo lvextend -r -L +20G /dev/vg_data/lv_apps
Adicionar um Novo Disco ao Grupo de Volumes
Quando o grupo de volumes fica sem espaco, adicione outro disco fisico:
# Inicializar o novo disco
sudo pvcreate /dev/sdd
# Adicionalo ao grupo de volumes existente
sudo vgextend vg_data /dev/sdd
# Verificar a nova capacidade
sudo vgs
Agora voce pode estender volumes logicos usando o espaco recem adicionado.
Reduzir (Encolher) um Volume Logico
Aviso: Reduzir volumes traz risco de perda de dados. Sempre faca backup antes de reduzir. Sistemas de arquivos XFS nao podem ser reduzidos — apenas ext4 suporta essa operacao.
Para volumes ext4:
# Desmontar o volume primeiro
sudo umount /srv/apps
# Verificar o sistema de arquivos
sudo e2fsck -f /dev/vg_data/lv_apps
# Reduzir o sistema de arquivos primeiro, depois o LV (-r faz ambos)
sudo lvreduce -r -L 30G /dev/vg_data/lv_apps
# Remontar
sudo mount /dev/vg_data/lv_apps /srv/apps
A opcao -r garante que o sistema de arquivos seja redimensionado antes do volume logico, prevenindo corrupcao de dados.
Snapshots do LVM
Snapshots criam uma copia em um ponto no tempo de um volume logico usando copy-on-write. Sao ideais para backups em sistemas em execucao.
Criar um Snapshot
# Criar um snapshot de 5 GB do lv_databases
sudo lvcreate -L 5G -s -n snap_databases /dev/vg_data/lv_databases
O tamanho do snapshot (5 GB) representa a quantidade maxima de dados alterados que podem ser rastreados. Se o volume original mudar mais de 5 GB enquanto o snapshot existe, o snapshot se torna invalido.
Usar um Snapshot para Backup
# Montar o snapshot (somente leitura)
sudo mkdir -p /mnt/snap
sudo mount -o ro /dev/vg_data/snap_databases /mnt/snap
# Fazer backup a partir do snapshot
sudo tar czf /backup/databases-$(date +%Y%m%d).tar.gz -C /mnt/snap .
# Desmontar e remover o snapshot
sudo umount /mnt/snap
sudo lvremove /dev/vg_data/snap_databases
Restaurar a partir de um Snapshot
# Mesclar um snapshot de volta ao original (rollback)
sudo lvconvert --merge /dev/vg_data/snap_databases
Nota: A operacao de merge requer que o volume original esteja desmontado (ou que o sistema seja reiniciado se o volume for o sistema de arquivos raiz). O snapshot e automaticamente deletado apos o merge.
Monitoramento e Manutencao
Verificar Uso de Espaco
# Uso dos volumes fisicos
sudo pvs -o +pv_used,pv_free
# Resumo do grupo de volumes
sudo vgs -o +vg_free
# Detalhes dos volumes logicos
sudo lvs -o +lv_size,seg_count
Mover Dados Entre Volumes Fisicos
Se voce precisa descomissionar um disco:
# Mover todos os extents de /dev/sdb para outros PVs do grupo
sudo pvmove /dev/sdb
# Remover o PV do grupo de volumes
sudo vgreduce vg_data /dev/sdb
# Limpar o rotulo do PV
sudo pvremove /dev/sdb
Exibir Configuracao Completa
# Visao geral completa do sistema
sudo lvm fullreport
Solucao de Problemas
Grupo de Volumes Nao Encontrado Apos Reinicializacao
# Escanear todos os volumes fisicos
sudo pvscan
# Ativar todos os grupos de volumes
sudo vgchange -ay
# Se encontrados, atualizar o initramfs
sudo update-initramfs -u
Snapshot Ficando Sem Espaco
# Verificar uso do snapshot
sudo lvs -o +snap_percent
# Se se aproximando de 100%, estender o snapshot
sudo lvextend -L +5G /dev/vg_data/snap_databases
Se um snapshot atingir 100% de capacidade, ele se torna invalido e deve ser removido.
Nao e Possivel Reduzir um Volume
- XFS: Nao pode ser reduzido. Voce deve fazer backup, recriar o LV no tamanho menor, recriar o sistema de arquivos e restaurar.
- ext4: Deve ser desmontado primeiro. Execute
e2fsck -fantes de qualquer operacao de redimensionamento. - Volume ainda ativo: Use
sudo umountou verifique processos usando a montagem comlsof +D /ponto/de/montagem.
Referencia de Comandos LVM
| Comando | Descricao |
|---|---|
pvcreate | Inicializar um disco para LVM |
pvs / pvdisplay | Mostrar volumes fisicos |
vgcreate | Criar um grupo de volumes |
vgs / vgdisplay | Mostrar grupos de volumes |
vgextend | Adicionar um PV a um VG |
vgreduce | Remover um PV de um VG |
lvcreate | Criar um volume logico |
lvs / lvdisplay | Mostrar volumes logicos |
lvextend -r | Estender um LV e redimensionar filesystem |
lvreduce -r | Reduzir um LV e redimensionar filesystem |
lvcreate -s | Criar um snapshot |
lvremove | Deletar um volume logico |
pvmove | Mover dados de um volume fisico |
Resumo
O LVM e uma ferramenta essencial para o gerenciamento flexivel de discos em servidores Linux:
- Arquitetura de tres camadas: Volumes Fisicos → Grupos de Volumes → Volumes Logicos
- Estenda volumes em tempo real com
lvextend -r— sem tempo de inatividade - Adicione novos discos a grupos de volumes existentes com
vgextendpara aumentar seu pool de armazenamento - Use snapshots para backups consistentes em sistemas em execucao sem parar servicos
- Sempre reduza os sistemas de arquivos antes de reduzir os volumes logicos para evitar perda de dados
- O LVM nao e substituto do RAID — use-o sobre RAID para obter tanto flexibilidade quanto redundancia
- Monitore o uso dos snapshots para evitar invalidacao a 100% de capacidade
Para topicos relacionados, consulte nossos guias sobre ZFS Storage e Snapshots e Rsync Backup e Sincronizacao.