Como expandir partições LVM no Linux (sem reiniciar o sistema)

LVM: o que é isso?

Se tem algo que preocupa qualquer administrador Linux é ver a partição raiz (/) ficando sem espaço. Mas se o seu sistema usa LVM (Logical Volume Manager), você tem em mãos uma ferramenta poderosa e flexível que pode facilitar e muito a expansão de volumes existentes.

O Logical Volume Management, ou simplesmente LVM, é como um sistema de gerenciamento inteligente de discos. Em vez de trabalhar com partições fixas e limitadas, o LVM permite agrupar discos físicos (ou partes deles) em volumes lógicos que podem ser redimensionados conforme a necessidade. Isso significa que você pode aumentar, mover ou reorganizar o armazenamento de forma dinâmica — e o melhor: muitas vezes sem precisar reiniciar o sistema.

O LVM é especialmente indicado em ambientes onde o uso de disco muda com o tempo: servidores, máquinas virtuais, laboratórios ou qualquer sistema que exija mais controle e flexibilidade. Se você precisa de facilidade para expandir partições (como a /), LVM pode ser seu melhor amigo.

📌 Cenário

Você tem um servidor Linux (Rocky, CentOS, RHEL etc) com partição / dentro de um volume LVM. O disco virtual (vmdk) foi expandido no VMware (de 50 GB para 100 GB, por exemplo), e agora você quer que o sistema operacional use todo esse novo espaço — sem reinstalar nada e sem downtime.

OBS : Cuidado ao fazer este procedimento um erro e você pode acabar com a partição da sua maquina e perder tudo, no meu ambiente eu utilizo o Vmware Workstation e sempre faço um snap antes de fazer qualquer coisa, entao cuidado. (Pelo amor de deus !!!!)

Aqui em meu ambiente, eu montei o / com 50 gb a ideia é expandir essa partição para 100 gb

como eu vejo como está montada a partição ???

simples execute o comando :

lsblk

ele irá retornar uma saida parecida com essa :

NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0          11:0    1 1024M  0 rom
nvme0n1     259:0    0   50G  0 disk
├─nvme0n1p1 259:1    0    1G  0 part /boot
└─nvme0n1p2 259:2    0   49G  0 part
  ├─rl-root 253:0    0   47G  0 lvm  /
  └─rl-swap 253:1    0    2G  0 lvm  [SWAP]

Oque são essas letras todas ai ???

sr0 11:0 1 1024M 0 rom :

sr0: Dispositivo de CD/DVD virtual ou físico.

rom → é uma mídia somente leitura (ROM = Read-Only Memory).

1024M → 1 GB (ISO de instalação do RockyLinux ).

nvme0n1 259:0 0 50G 0 disk

nvme0n1 É o meu SSD NVMe principal, com 50 GB.

disk é um disco inteiro, sem particionamento aqui ainda (apenas a base).

Agora vêm as partições dele:

nvme0n1p1 259:1 0 1G 0 part /boot

nvme0n1p1 Primeira partição, com 1 GB.

/boot → onde ficam o kernel, initramfs e arquivos de boot.

nvme0n1p2 259:2    0   49G  0 part

nvme0n1p2: Segunda partição, com 49 GB. Essa partição está usada pelo LVM.

Dentro dela o LVM criou dois volumes lógicos:

rl-root 253:0    0   47G  0 lvm  /

rl-root: Volume lógico chamado "root" dentro do volume group rl

47 GB, montado em /. (ESSA É QUE VAMOS ALTERAR JÁ JÁ )

rl-swap 253:1    0    2G  0 lvm  [SWAP]
  • rl-swap: Volume lógico de 2 GB que funciona como swap.

Em resumo:

  • O disco NVMe (nvme0n1) tem duas partições:

    • /boot fora do LVM.

    • A outra (nvme0n1p2) usada pelo LVM para criar:

      • Um volume lógico de root (/)

      • Um volume lógico de swap.

Mas e esses números esquisitos? 253:0, 259:1... o que são?

Se você já executou o comando lsblk, provavelmente reparou em uma coluna chamada MAJ:MIN, com valores como 253:0 ou 259:1. Eles podem parecer estranhos, mas têm uma função bem específica no Linux: são os números major e minor, que o kernel usa para identificar e se comunicar com os dispositivos de armazenamento.

  • O número major indica qual driver está controlando aquele dispositivo.

  • O número minor serve para diferenciar cada instância daquele tipo de dispositivo.

Por exemplo, no caso dos volumes LVM:

root253:0
rl-swap → 253:1

Aqui, o major 253 é usado para todos os volumes LVM (gerenciados pelo device-mapper), e os minors 0, 1, etc., identificam cada volume lógico individual.

Você não precisa decorar esses números, mas é legal saber que o Linux está organizando tudo nos bastidores com bastante disciplina tipo um síndico que sabe exatamente onde cada morador mora, mesmo que a gente só use o nome na portaria 😄

Beleza e agora ?

Agora vamos para a pratica !

✅ Pré-requisitos

  • Sistema com LVM

  • Root ou sudo

  • O disco já foi expandido no VMware ou Proxmox (Aqui utilizo VmWare Workstation 17 )

  • Faça snapshot da sua maquina após o aumento do disco.

  • Ferramenta growpart instalada

    Instalando Growpart :

      yum install -y cloud-utils-growpart
    

    Confirme se o aumento de disco deu certo (do disco não da partição ok ??).

[root@srv-sudoersblog ~] fdisk -l

Disco /dev/nvme0n1: 100 GiB, 107374182400 bytes, 209715200 setores
Unidades: setor de 1 * 512 = 512 bytes
Tamanho de setor (lógico/físico): 512 bytes / 512 bytes
Tamanho E/S (mínimo/ótimo): 512 bytes / 512 bytes
Tipo de rótulo do disco: dos
Identificador do disco: 0x51446094

Veja que o meu está com 100 GB porém minha partição / está apenas com 50 GB

[root@srv-sudoersblog ~] lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0          11:0    1 1024M  0 rom
nvme0n1     259:0    0   50G  0 disk
├─nvme0n1p1 259:1    0    1G  0 part /boot
└─nvme0n1p2 259:2    0   49G  0 part
  ├─rl-root 253:0    0   47G  0 lvm  / - ( Partição root )  
  └─rl-swap 253:1    0    2G  0 lvm  [SWAP]

Aumentando a partição

Beleza, aqui o meu / está dentro do volume lógico rl-root que fica dentro da partição nvme0n1p2.

sendo assim vou rodar o seguinte comando :

[root@srv-sudoersblog ~] growpart /dev/nvme0n1 2
CHANGED: partition=2 start=2099200 old: size=102758400 end=104857599 new: size=207615967 end=209715166

growpart /dev/nvme0n1 2 Oque fez?

Pediu para aumentar a artição número 2 do disco /dev/nvme0n1.

A partição 2 começou em um certo ponto no disco (start=2099200).

Antes, essa partição tinha um tamanho menor (old size=102758400 blocos).

Agora ela foi aumentada para ocupar quase todo o espaço disponível no disco (new size=207615967 blocos).

Ou seja, a partição 2 cresceu para aproveitar mais espaço livre no disco.

como confirmo isso ? você pode usar o vgdisplay, se tudo estiver certo ele vai mostrar no campo:

Free PE / Size com uma quantidade de espaço livre no meu caso apareceu 50 gb

[root@srv-sudoersblog ~] vgdisplay
  --- Volume group ---
  VG Name               rl
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  4
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <99,00 GiB
  PE Size               4,00 MiB
  Total PE              25343
  Alloc PE / Size       12543 / <49,00 GiB
  Free  PE / Size       12800 / 50,00 GiB -- AQUI !!!!!! 
  VG UUID               jH3gg0-WUPj-Ulgm-W2jt-zd4r-Sdj6-hYdfPE

Continuando …

Agora vamos dizer para o kernel atualizar a tabela de partições :

partprobe /dev/nvme0n1

E também expandir o /dev/nvme0n1p2 :

[root@srv-sudoersblog ~] pvresize /dev/nvme0n1p2
  Physical volume "/dev/nvme0n1p2" changed
  1 physical volume(s) resized or updated / 0 physical volume(s) not resized

e agora finalmente vamos aumentar a partição (UFA!)

[root@srv-sudoersblog ~] lvextend -l +100%FREE /dev/rl/root
  Size of logical volume rl/root changed from <46,98 GiB (12026 extents) to <96,98 GiB (24826 extents).
  Logical volume rl/root successfully resized.

O que rolou:

Esse comando pegou todo o espaço livre disponível no Volume Group rl e jogou no volume lógico root, que é onde fica o sistema de arquivos /.

📏 Antes: o volume tinha ~47 GB
📈 Depois: pulou pra ~97 GB!

✅ Mensagem final confirma que o volume foi redimensionado com sucesso:

  Logical volume rl/root successfully resized.

ta mais ainda se você utilizar o df -h vai mostrar apenas 50GB

[root@srv-sudoersblog ~] df -h
Sist. Arq.           Tam. Usado Disp. Uso% Montado em
devtmpfs             854M     0  854M   0% /dev
tmpfs                874M     0  874M   0% /dev/shm
tmpfs                874M  8,7M  865M   1% /run
tmpfs                874M     0  874M   0% /sys/fs/cgroup
/dev/mapper/rl-root   47G  2,7G   45G   6% /
/dev/nvme0n1p1      1014M  199M  816M  20% /boot
tmpfs                175M     0  175M   0% /run/user/0

Aqui no meu caso como estou utilizando o sistema de arquivos xfs e preciso utilizar o comando xfs_growfs / após isso ele vai realocar o espaço do / para os 100 GB :

[root@srv-sudoersblog ~] xfs_growfs /
meta-data=/dev/mapper/rl-root    isize=512    agcount=4, agsize=3078656 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1    bigtime=0 inobtcount=0
data     =                       bsize=4096   blocks=12314624, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=6013, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 12314624 to 25421824

Você pode descobrir seu sistema de arquivos utilizando o comando df -T /

Agora sim se você utilizar o df -h irá aparecer a partição com os 100 gb e detalhe sem reiniciar a maquina:

[root@srv-sudoersblog ~] df -h
Sist. Arq.           Tam. Usado Disp. Uso% Montado em
devtmpfs             854M     0  854M   0% /dev
tmpfs                874M     0  874M   0% /dev/shm
tmpfs                874M  8,7M  865M   1% /run
tmpfs                874M     0  874M   0% /sys/fs/cgroup
/dev/mapper/rl-root   97G  3,0G   94G   4% / - AQUI !!!! 
/dev/nvme0n1p1      1014M  199M  816M  20% /boot
tmpfs                175M     0  175M   0% /run/user/0

Uma das grandes vantagens de utilizar LVM é justamente essa flexibilidade: você pode expandir o espaço em disco de forma dinâmica, sem precisar desmontar partições ou reiniciar o sistema. Em setups tradicionais com partições fixas (como ext4 direto em /dev/sdX), esse processo seria muito mais trabalhoso — e, na maioria dos casos, exigiria downtime.

🚀 Valeu, pessoal! Semana que vem tem mais!

0
Subscribe to my newsletter

Read articles from Hudson Alves Amaral directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Hudson Alves Amaral
Hudson Alves Amaral