Ubuntu LVM

LVM (Logical Volume Manager, "gerenciador de volumes lógicos") é uma camada entre os discos e os sistemas de arquivos. Com ele, você junta vários discos num "bolo" de espaço e corta pedaços do tamanho que quiser. A maior vantagem: dá para aumentar uma partição com o servidor ligado, sem formatar nada.

Você vai aprender
  • O que são PV, VG e LV, com uma analogia simples.
  • Como montar um laboratório de LVM com arquivos, sem discos extras.
  • Criar, aumentar e remover volumes com pvcreate, vgcreate, lvcreate e lvextend.
  • Aproveitar o espaço que o instalador do Ubuntu Server deixa sobrando.
  • Tirar um snapshot antes de uma mudança arriscada e voltar atrás.

Você já deve conhecer Particionar e Formatar e mount e fstab. Os exemplos acontecem na máquina fictícia servidor, com dois discos novos: /dev/sdb e /dev/sdc, de 50 GB cada.


Conceito: caixas d'água e torneiras

Sem LVM, cada partição é um pedaço fixo de um disco. Se ela encher, você precisa mover dados ou reformatar. O LVM troca essa rigidez por três camadas:

CamadaSiglaAnalogiaExemplo
Volume físicoPV (physical volume)Cada caixa d'água/dev/sdb, /dev/sdc
Grupo de volumesVG (volume group)As caixas ligadas por canos, formando um reservatório sódados (100 GB)
Volume lógicoLV (logical volume)Cada torneira, com a vazão que você escolherarquivos (20 GB), backup (30 GB)

O sistema de arquivos (ext4, xfs) fica dentro do LV, como ficaria dentro de uma partição. A diferença é que o LV pode crescer enquanto houver espaço livre no VG, e o VG pode crescer quando você adiciona outro disco.

  disco /dev/sdb (50G)     disco /dev/sdc (50G)        ← PVs
          \                     /
           +---- VG "dados" (100G) ----+                 ← VG
           |            |              |
     LV arquivos   LV backup     (livre 50G)             ← LVs
        ext4          ext4
   /srv/arquivos   /srv/backup                           ← montagem
Você talvez já use LVM

O instalador do Ubuntu Server usa LVM por padrão. Rode sudo lvs: se aparecer ubuntu-lv no grupo ubuntu-vg, seu sistema está num volume lógico.


Laboratório seguro com losetup

Para treinar sem discos extras, crie dois arquivos e transforme-os em "discos" com losetup (de loop setup). Um dispositivo loop faz um arquivo se comportar como um disco.

sudo losetup
O programa que liga arquivos a dispositivos loop.
-f
find: usa o primeiro /dev/loopN livre.
--show
Mostra qual nome foi usado.
disco1.img
O arquivo que vai virar disco.
$ truncate -s 2G disco1.img disco2.img
$ sudo losetup -f --show disco1.img
[sudo: authenticate] Senha:
/dev/loop20                                     « o número varia: os snaps já usam vários loops
$ sudo losetup -f --show disco2.img
/dev/loop21

Nos exemplos abaixo, troque /dev/sdb e /dev/sdc por /dev/loop20 e /dev/loop21. Ao terminar, desmonte tudo, remova o VG (seção "Remover") e solte os loops com sudo losetup -d /dev/loop20 /dev/loop21. Instale o LVM se ainda não tiver: sudo apt install lvm2.


Passo 1: criar os volumes físicos (PV)

Marcar um disco como PV grava um pequeno cabeçalho do LVM no início dele.

sudo pvcreate
"physical volume create": prepara discos para o LVM.
/dev/sdb /dev/sdc
Os discos (ou partições). Pode passar vários de uma vez.
$ sudo pvcreate /dev/sdb /dev/sdc
  Physical volume "/dev/sdb" successfully created.
  Physical volume "/dev/sdc" successfully created.
$ sudo pvs
  PV         VG        Fmt  Attr PSize   PFree
  /dev/sda3  ubuntu-vg lvm2 a--  <62,00g      0     « o disco do sistema (já em uso)
  /dev/sdb             lvm2 ---   50,00g  50,00g    « novo, ainda sem grupo (coluna VG vazia)
  /dev/sdc             lvm2 ---   50,00g  50,00g
Atenção

pvcreate inutiliza o que estiver no disco. Confira com lsblk que /dev/sdb é mesmo o disco novo.

Passo 2: criar o grupo (VG)

sudo vgcreate
"volume group create".
dados
O nome do grupo. Você escolhe.
/dev/sdb /dev/sdc
Os PVs que formam o grupo.
$ sudo vgcreate dados /dev/sdb /dev/sdc
  Volume group "dados" successfully created
$ sudo vgs
  VG        #PV #LV #SN Attr   VSize   VFree
  dados       2   0   0 wz--n-  99,99g 99,99g     « 2 discos, 0 volumes, quase 100 GB livres
  ubuntu-vg   1   1   0 wz--n- <62,00g     0

Lendo as colunas: #PV é a quantidade de discos, #LV a de volumes lógicos, #SN a de snapshots, VSize o tamanho total e VFree o espaço ainda não usado. O < antes de um número significa "um pouco menos que".

Passo 3: criar o volume lógico (LV)

sudo lvcreate
"logical volume create".
-n arquivos
-n (name): o nome do volume.
-L 20G
-L (maiúsculo): tamanho exato, 20 GB.
dados
O grupo de onde sai o espaço.
$ sudo lvcreate -n arquivos -L 20G dados
  Logical volume "arquivos" created.
$ sudo lvs dados
  LV       VG    Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  arquivos dados -wi-a----- 20,00g

O volume aparece como um dispositivo com dois nomes, que apontam para o mesmo lugar:

$ ls -l /dev/dados/arquivos /dev/mapper/dados-arquivos
lrwxrwxrwx 1 root root 7 Oct 15 10:30 /dev/dados/arquivos -> ../dm-1
lrwxrwxrwx 1 root root 7 Oct 15 10:30 /dev/mapper/dados-arquivos -> ../dm-1

Tamanho fixo ou porcentagem?

FormaExemploSignificado
-L tamanho-L 20GExatamente 20 GB
-l porcentagem do livre-l 50%FREEMetade do espaço livre do VG
-l tudo-l 100%FREETodo o espaço livre que sobrou
-l porcentagem do grupo-l 30%VG30% do tamanho total do VG

Passo 4: formatar e montar

Daqui em diante, o LV é tratado como qualquer partição:

$ sudo mkfs.ext4 -L arquivos /dev/dados/arquivos
mke2fs 1.47.2 (1-Jan-2025)
A criar sistema de ficheiros com 5242880 4k blocos e 1310720 inodes
…
$ sudo mkdir -p /srv/arquivos
$ sudo mount /dev/dados/arquivos /srv/arquivos
$ df -h /srv/arquivos
Sist. Arq.                  Tam. Usado Disp. Uso% Montado em
/dev/mapper/dados-arquivos   20G   24K   19G   1% /srv/arquivos

Para montar sempre no boot, adicione ao /etc/fstab (no LVM, o caminho /dev/mapper/… é estável, e o UUID também funciona):

/dev/mapper/dados-arquivos  /srv/arquivos  ext4  defaults,nofail  0  2

Aumentar um volume com o sistema ligado

Esta é a razão de existir do LVM. O volume arquivos está quase cheio e o VG tem espaço livre:

sudo lvextend
"logical volume extend": aumenta um LV.
-r
resizefs: aumenta também o sistema de arquivos. Sem ele, o LV cresce mas o df continua mostrando o tamanho antigo.
-L +10G
Com +: acrescenta 10 GB. Sem + (-L 30G), define o tamanho final.
dados/arquivos
Qual volume: grupo/volume.
$ sudo lvextend -r -L +10G dados/arquivos
  Size of logical volume dados/arquivos changed from 20,00 GiB (5120 extents) to 30,00 GiB (7680 extents).
  Extending file system ext4 to 30,00 GiB (32212254720 bytes) on dados/arquivos...
resize2fs 1.47.2 (1-Jan-2025)
Filesystem at /dev/mapper/dados-arquivos is mounted on /srv/arquivos; on-line resizing required
old_desc_blocks = 3, new_desc_blocks = 4
The filesystem on /dev/mapper/dados-arquivos is now 7864320 (4k) blocks long.

  Extended file system ext4 on dados/arquivos.
  Logical volume dados/arquivos successfully resized.
$ df -h /srv/arquivos
Sist. Arq.                  Tam. Usado Disp. Uso% Montado em
/dev/mapper/dados-arquivos   30G   24K   28G   1% /srv/arquivos     « cresceu sem desmontar

As mensagens exatas variam com a versão do lvm2; o que importa são as duas últimas linhas, que confirmam o sistema de arquivos e o volume aumentados.

Formas diferentes de aumentar

FormaComandoQuando usar
Num passo sósudo lvextend -r -L +10G dados/arquivosSempre que possível
Usar todo o livresudo lvextend -r -l +100%FREE dados/arquivosEsse é o único volume que precisa crescer
Em dois passossudo lvextend -L +10G dados/arquivos e depois sudo resize2fs /dev/dados/arquivosVocê esqueceu o -r (no xfs, o segundo passo é sudo xfs_growfs /srv/arquivos)

Acabou o espaço do grupo? Adicione um disco

$ sudo pvcreate /dev/sdd
  Physical volume "/dev/sdd" successfully created.
$ sudo vgextend dados /dev/sdd
  Volume group "dados" successfully extended
$ sudo vgs dados
  VG    #PV #LV #SN Attr   VSize    VFree
  dados   3   1   0 wz--n- <149,99g 119,99g      « 3 discos agora
Diminuir é perigoso

Encolher (lvreduce) exige desmontar, e um erro de tamanho destrói dados. O xfs não pode ser encolhido. Se precisar, faça backup antes e use lvreduce -r, que reduz o sistema de arquivos junto.


Cenário real: o Ubuntu Server "usou só metade do disco"

O instalador do Ubuntu Server cria o volume do sistema com só parte do espaço, de propósito, para deixar folga. Muita gente estranha:

$ df -h /
Sist. Arq.                         Tam. Usado Disp. Uso% Montado em
/dev/mapper/ubuntu--vg-ubuntu--lv   98G   12G   82G  13% /          « o disco tem 200 GB!
$ sudo vgs
  VG        #PV #LV #SN Attr   VSize    VFree
  ubuntu-vg   1   1   0 wz--n- <198,00g 100,00g                     « 100 GB guardados

O espaço não sumiu: está livre no VG. Para entregar tudo ao /:

$ sudo lvextend -r -l +100%FREE ubuntu-vg/ubuntu-lv
  Size of logical volume ubuntu-vg/ubuntu-lv changed from 100,00 GiB (25600 extents) to <198,00 GiB (50687 extents).
  …
  Logical volume ubuntu-vg/ubuntu-lv successfully resized.
$ df -h /
Sist. Arq.                         Tam. Usado Disp. Uso% Montado em
/dev/mapper/ubuntu--vg-ubuntu--lv  195G   12G  175G   7% /

Repare nos traços dobrados em ubuntu--vg-ubuntu--lv: no /dev/mapper, o traço separa grupo e volume, então um traço que faz parte do nome vira --.


Snapshots: uma foto antes da mudança

Um snapshot congela o estado de um volume. Útil antes de uma atualização arriscada: se der errado, você volta. Ele só guarda o que mudou depois da foto, por isso pode ser bem menor que o original.

sudo lvcreate
O mesmo comando de criar volume.
-s
snapshot: cria uma foto, não um volume novo vazio.
-n arquivos-antes
Nome do snapshot.
-L 5G
Espaço para guardar as mudanças. Se encher, o snapshot fica inválido.
dados/arquivos
O volume a fotografar.
$ sudo lvcreate -s -n arquivos-antes -L 5G dados/arquivos
  Logical volume "arquivos-antes" created.
$ sudo lvs dados
  LV             VG    Attr       LSize  Pool Origin   Data%  Meta%  Move Log Cpy%Sync Convert
  arquivos       dados owi-aos--- 30,00g
  arquivos-antes dados swi-a-s---  5,00g      arquivos 0,01               « Data%: quanto do snapshot já foi usado

Agora você faz a mudança arriscada. Depois, uma de duas:

Deu certoDeu errado
Apague o snapshot: sudo lvremove dados/arquivos-antesVolte no tempo: sudo lvconvert --merge dados/arquivos-antes. Se o volume estiver em uso, a volta acontece na próxima vez que ele for ativado (desmonte e monte de novo, ou reinicie).
Snapshot não é backup

O snapshot fica nos mesmos discos. Se o disco quebrar, a foto vai junto. Use-o para mudanças rápidas e mantenha backups de verdade (veja Backup).


Remover volumes e grupos

A ordem é a inversa da criação: desmonte, remova o LV, depois o VG, depois os PVs.

$ sudo umount /srv/arquivos
$ sudo lvremove dados/arquivos
Do you really want to remove active logical volume dados/arquivos? [y/n]: y
  Logical volume "arquivos" successfully removed.
$ sudo vgremove dados
  Volume group "dados" successfully removed
$ sudo pvremove /dev/sdb /dev/sdc
  Labels on physical volume "/dev/sdb" successfully wiped.
  Labels on physical volume "/dev/sdc" successfully wiped.
Atenção

lvremove apaga o volume e tudo dentro dele. Lembre de tirar a linha correspondente do /etc/fstab.


Quando não funciona

"Insufficient free space"
$ sudo lvextend -r -L +80G dados/arquivos
  Insufficient free space: 20480 extents needed, but only 17919 available

O que aconteceu: o VG não tem espaço livre suficiente. Extents são os "tijolos" de 4 MB em que o LVM divide o espaço.

Como confirmar: sudo vgs dados, coluna VFree.

Como resolver: peça menos (-l +100%FREE usa tudo o que há) ou adicione um disco com pvcreate + vgextend.

"excluded by a filter" ou "partition signature detected"
$ sudo pvcreate /dev/sdb
  Cannot use /dev/sdb: device is partitioned

O que aconteceu: o disco tem uma tabela de partições (ou restos de outro formato). O LVM se recusa a usar o disco inteiro para não apagá-la por engano.

Como resolver: use uma partição (/dev/sdb1) ou, se o disco pode ser apagado, limpe-o com sudo wipefs -a /dev/sdb e tente de novo.

O LV cresceu, mas o df mostra o tamanho antigo

O que aconteceu: o lvextend rodou sem -r. O volume cresceu, mas o sistema de arquivos dentro dele não.

Como resolver: sudo resize2fs /dev/dados/arquivos (ext4) ou sudo xfs_growfs /srv/arquivos (xfs). Os dois funcionam com o volume montado.

"command not found" no pvcreate

O que aconteceu: o pacote lvm2 não está instalado (comum no Ubuntu Desktop).

Como resolver: sudo apt install lvm2.


Referência rápida

ComandoO que faz
sudo pvcreate /dev/sdbPrepara um disco ou partição como PV
sudo pvs / sudo pvdisplayLista PVs (resumo / detalhado)
sudo vgcreate NOME /dev/sdb …Cria um grupo
sudo vgextend NOME /dev/sddAdiciona disco ao grupo
sudo vgs / sudo vgdisplayLista grupos
sudo lvcreate -n LV -L 20G VGCria volume de 20 GB
sudo lvcreate -n LV -l 100%FREE VGCria volume com todo o espaço livre
sudo lvextend -r -L +10G VG/LVAumenta volume e sistema de arquivos
sudo lvreduce -r -L -5G VG/LVDiminui (com cuidado e backup)
sudo lvcreate -s -n SNAP -L 5G VG/LVCria snapshot
sudo lvconvert --merge VG/SNAPVolta o volume ao estado do snapshot
sudo lvs / sudo lvdisplayLista volumes
sudo lvremove VG/LV · vgremove · pvremoveRemove volume, grupo, PV

Exercícios

1. A ordem das camadas

Complete a ordem das camadas, usando as siglas:

disco → → → → sistema de arquivos

2. Aumentar sem esquecer o sistema de arquivos

Complete para acrescentar 15 GB ao volume web do grupo dados, aumentando o ext4 junto:

sudo lvextend dados/web

3. Todo o espaço livre

Complete para criar o volume backup usando todo o espaço livre do grupo dados:

sudo lvcreate -n backup -l dados

4. Depois de sudo lvextend -L +10G dados/arquivos (sem -r), o df -h mostra o tamanho antigo. Por quê?

5. Para que serve um snapshot LVM?


Resumo

  • LVM tem três camadas: PV (discos) → VG (o reservatório) → LV (os volumes que você formata e monta).
  • lvextend -r aumenta volume e sistema de arquivos juntos, com tudo montado.
  • Sem espaço no VG? pvcreate + vgextend com um disco novo.
  • No Ubuntu Server, lvextend -r -l +100%FREE ubuntu-vg/ubuntu-lv usa o espaço que o instalador deixou livre.
  • Snapshots ajudam em mudanças arriscadas, mas não substituem backup.
  • Treine com truncate + losetup antes de mexer em discos reais.