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/sdb1 funciona se voce preferir particionar o disco primeiro com fdisk ou parted. 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:

OpcaoSignificadoExemplo
-L 50GTamanho exato50 gigabytes
-L 500MTamanho exato500 megabytes
-l 100%FREETodo o espaco restanteUsa tudo que resta
-l 50%VGPorcentagem do VGMetade do grupo de volumes
-l 50%FREEPorcentagem do livreMetade 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_lv no 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 -f antes de qualquer operacao de redimensionamento.
  • Volume ainda ativo: Use sudo umount ou verifique processos usando a montagem com lsof +D /ponto/de/montagem.

Referencia de Comandos LVM

ComandoDescricao
pvcreateInicializar um disco para LVM
pvs / pvdisplayMostrar volumes fisicos
vgcreateCriar um grupo de volumes
vgs / vgdisplayMostrar grupos de volumes
vgextendAdicionar um PV a um VG
vgreduceRemover um PV de um VG
lvcreateCriar um volume logico
lvs / lvdisplayMostrar volumes logicos
lvextend -rEstender um LV e redimensionar filesystem
lvreduce -rReduzir um LV e redimensionar filesystem
lvcreate -sCriar um snapshot
lvremoveDeletar um volume logico
pvmoveMover 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 vgextend para 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.