LVM – Logical Volume Manager

Aprenda os principais comandos do LVM – Logical Volume Manager – e veja por quê ele é tão importante para o mundo Linux!


| Se você apoia nosso site, desative o AdBlock quando visitá-lo, inclusive em Mobile!
Os anúncios são poucos e não invasivos. Se quiser contribuir com nosso trabalho, clique em qualquer banner de sua preferência, exceto dos Parceiros. 
Mais detalhes clicando aqui.


1. Introdução

O LVM – Logical Volume Manager (No bom português Gerenciador de Volume Lógico) existe no kernel Linux desde a versão 2.4 e é um sistema alternativo ao padrão de partições para gerenciar discos rígidos, SSD’s e outras mídias de armazenamento de sistema. Ele permite que discos sejam trocados sem interrupção dos serviços (hotswap), alterar o tamanho dos volumes, criar backup de imagens dos volumes, criar um volume único a partir de vários discos (similar ao RAID 0), criar snapshots (como em ZFS ou BTRFS) e ainda criar volumes espelhados em mais de um disco (similar ao RAID 1).

Sabe quando você instala um sistema Linux, e fica na dúvida:
– Ish, e quanto espaço em disco deixo para a /? E para a /home? A /var também deveria ter quanto? SWAP?

E pensa que a decisão é importante, porque depois de formatado, realocar alguma partição dessas é um sofrimento.
Com LVM, você poderá mudar o tamanho dessas partições como preferir sem problemas! *Desde que não reduza para um tamanho menor que a quantidade de arquivos nela, senão você perderá dados pessoais.

Apesar do seu uso ser concentrado em Servidores, também pode ser usado por usuários domésticos que possuem muitos discos rígidos e gostariam de um controle maior de seu armazenamento!

2. Estrutura

A estrutura de um ambiente de disco do Logical Volume Manager pode ser vista da seguinte maneira:

lvm.png

O Logical Volume Management permite a combinação de vários discos rígidos individuais e/ou partições de discos em um único grupo de volume (VG). Esse grupo de volume pode então ser subdividido em volumes lógicos (LV) ou usado como um único grande volume. Sistemas de arquivos regulares, como EXT3 ou EXT4, são então criados em um volume lógico do LVM!

  • Ou seja, você continuará com os benefícios do BTRFS, ZFS, EXT4 e qualquer outro sistema de arquivos que desejar utilizar, com o respaldo de que o LVM estará por baixo, na base, permitindo flexibilidade quando precisar manuseá-los e/ou alterá-los.

Na imagem acima, dois discos rígidos físicos completos e uma partição de um terceiro disco rígido foram combinados em um único grupo de volume. Então, dois volumes lógicos foram criados a partir do espaço no grupo de volume e um sistema de arquivos, como o EXT4, foi criado em cada um dos dois volumes lógicos.

3. Exemplo Prático!

As etapas básicas para adicionar um novo volume lógico são as seguintes.

  • Aqui vamos utilizar um PENDRIVE! Poderia ser um novo HDD ou SSD limpo em alguma porta SATA do computador.
    Formataremos ele e deixaremos ele sem uma tabela de partição; e identificaremos em qual /dev ele está.
  • Criaremos um volume físico (PV) do disco rígido completo (ou uma partição no disco rígido)
  • Vamos criar um novo Grupo de Volume (VG) e atribuir este PV ao VG.
  • Criaremos um novo volume lógico (LV) a partir do espaço disponível no VG acima criado.
  • Criaremos enfim um sistema de arquivos nesse novo volume lógico.
  • Monte o sistema de arquivos para ser utilizado!

Comecemos do começo.

3.1 Instalação

Vamos instalar o LVM no sistema. Baseados em Ubuntu, Debian e derivados, faça o comando:

$ sudo apt install lvm2

3.2 Mídia Escolhida

Vamos transformar um PENDRIVE para que ele funcione com LVM e você possa ter uma boa ideia de como é na prática o manuseio de sistemas LVM.

  • Escolha um pendrive de sua preferência, que esteja livre.
    Todos os dados dele serão EXCLUÍDOS, portanto certifique-se de ter backups do que estiver nele antes de prosseguirmos!

Com o Gnome-Disk-Utility ou mesmo o Gparted, formate o pendrive. Utilize o modo “sem particionamento”, ele ficará vazio.
Aproveitando o programa aberto, identifique em qual /dev o pendrive está montado.
Aqui para mim, é o /dev/sdb, mas o seu pode ser diferente. CUIDADO E ATENÇÃO!

3.2 Criando um PV – Physical Volume

Utilize o seguinte comando para criar um PV no pendrive:

$ sudo pvcreate /dev/sdb

Após isso você verá a seguinte saída de comando:

Physical volume “/dev/sdb” successfully created.

Para visualizar o pendrive, utilize o comando pvscan:

$ sudo pvscan

A saída de comando será algo semelhante a:

PV /dev/sdb lvm2 [7,27 GiB]
Total: 1 [7,27 GiB] / in use: 0 [0 ] / in no VG: 1 [7,27 GiB]

3.3 Criando um VG – Volume Group

Agora que o Pendrive já está como PV, precisamos criar um Volume Group.
Crie com o comando:

$ sudo vgcreate nome_vg /dev/sdX

Aqui eu fiz assim conforme meu hardware:

$ sudo vgcreate teste01 /dev/sdb

Saída de comando:

 Volume group “teste01” successfully created

3.4 Criando o LV – Logical Volume

Agora que o PV e o VG foram criados, vamos criar um volume lógico LV no PV, e adicioná-lo ao VG do Item 3.3.
A sintaxe é a seguinte:

$ sudo lvcreate -L TAMANHO -n nome_lv nome_do_vg

Aqui ficou como:

$ sudo lvcreate -L 100 -n teste_lv teste01

– Observe a criatividade da pessoa chamando o negocio de teste_lv kkkkk

E a saída de comando:

Logical volume “teste_lv” created.

Para visualizar o LV criado, usamos o lvscan, que também dirá se está ATIVO ou não:

ACTIVE ‘/dev/teste01/teste_lv’ [100,00 MiB] inherit

3.5 Criando um Sistema de Arquivos

Após a criação do PV, VG e LV, precisamos formatar este LV para um sistema de arquivos comum, que usando a saída de comando do item 3.4 acima, no meu exemplo, ficará assim:

$ sudo mkfs.ext4 /dev/teste01/teste_lv

No nosso exemplo deixaremos o LV, localizado em /dev/teste01/teste_lv como EXT4!

Vamos montar o LV finalmente criado (monte onde quiser, mas aqui vai uma dica/sugestão):

$ sudo mkdir /pen
$ sudo mount /dev/teste01/teste_lv /pen

Pronto! Está funcional e montado.
Para visualizar o conteúdo dos sistemas de arquivos:

$ df -h

Você verá algo como:

/dev/mapper/teste01-teste_lv 93M 72K 86M 1% /mnt/pen

3.6 Expandindo o Tamanho

Está tudo muito bem mas cometemos um erro aqui neste tutorial! *reação de surpresa da plateia*

Lá no item 3.4 o comando foi dado como “$ sudo lvcreate -L 100 -n teste_lv teste01“, esse valor 100 é de 100MB – a notação MB é o padrão do comando, para usar Gb deveriamos ter utilizar no caso 8G para meu pendrive que é de 8, ou 16G para quem utilizou um pendrive de 16Gb. Ou seja, só há 100Mb disponiveis para uso de nosso pendrive. O resto do espaço sumiu!

Mas não tema, aqui deu errado mas no fim dará certo!
Vamos expandir esse LVM para usar todo o pendrive sem muito sofrimento!

Para expandir um pouquinho a partição, digamos que para 2 Gb, no exemplo do meu comando:

$ sudo lvextend -L 2G /dev/mapper/teste01-teste_lv

Onde /dev/mapper/teste01-teste_lv é o caminho completo do meu LV! – Mude conforme o seu. Agora, para expandir o EXT4:

$ sudo resize2fs /dev/mapper/teste01-teste_lv

Esse comando vai automaticamente ocupar todo o espaço livre pré-alocado, ou seja, o tamanho será agora de 2Gb!
Saída do comando df -h:

/dev/mapper/teste01-teste_lv 2,0G 312K 1,9G 1% /mnt/pen

  • Por que utilizar só 2 Gb nesse exemplo?

O LVM trabalha diferente de sistemas de arquivos como BTRFS e ZFS. Da maneira que alocamos o espaço, com 2 Gb para uso e 6 Gb sem utilização, deixamos espaço para criar novos subvolumes (quantos mais quiser desde que respeite o limite de tamanho da mídia) e mais, te permite fazer snapshots dos dados nesses 2 Gb!

3.6.1 Snapshots

Um snapshot do LVM vai pausar as gravações no disco, aonde ele estiver de dados ocupados, vai gerar um novo subvolume snapshot adiante, igual um subvolume qualquer (LV) e os dados novos serão despejados lá a partir daí. Assim a partição anterior ficará intacta, congelada, como um backup. Você terá acesso á totalidade dos dados, porém se quiser, poderá “voltar no tempo” e ver os dados “congelados” pelo snapshot! Isso incluirá arquivos que até mesmo já foram apagados após a criação do snapshot.

Para criar um snapshot no nosso pendrive:

$ sudo lvcreate --size 2G --snapshot --name linuxuniverse01 
/dev/mapper/teste01-teste_lv

Note que o Snapshot exige um tamanho limite, que coloquei em 2 Gb para exemplo. Também note que você não pode usar o nome SNAPSHOT para um snapshot! Use outro nome.

Você pode usar um snapshot menor que o tamanho do LV original? Tipo 1Gb, em vez de 2 Gb? Sim. Mas o problema nesse tipo de snapshot que não opera com hardlinks como o BTRFS e o ZFS, se você utilizar demais o disco após criar o snapshot, o LV do snapshot vai lotar!

Você tem algumas opções, como apagar o snapshot e continuar com os dados, perdendo o “histórico”, ou ainda expandindo o tamanho do volume do Snapshot.

Por isso dou uma dica válida: Quando criar snapshots com LVM, crie o subvolume sempre com o mesmo tamanho do subvolume anterior que sofreu o snapshot! Se você tinha 120 Gb por exemplo, crie um snapshot com capacidade para até 120Gb. Assim, ele não vai lotar inapropriadamente, mas sim encher até a capacidade máxima do dispositivo. E o uso do espaço é expandido automaticamente, não vai ocupar realmente 120 Gb, mas sim apenas a totalidade dos dados ali contidos a medida que forem utilizados.

Você poderá montar esse snapshot como uma pasta normal, procurando a localização dele com “sudo lvscan”, e então montando normalmente como fizemos anteriormente. No meu exemplo:

$ sudo mkdir /mnt/pen2
$ sudo mount /dev/teste01/linuxuniverse01 /mnt/pen2

Para apagar o snapshot:

$ sudo umount /mnt/pen2
$ sudo lvremove teste01 linuxuniverse01

Ou seja, nome do grupo e nome do snapshot para remove-lo.
Se você gostou do snapshot e quer dar rollback, ou seja, usa-lo, você poderá aplica-lo como a partição verdadeira!
Desmonte o pendrive:

$ sudo umount /mnt/pen

E dê merge entre o conteúdo do snapshot dentro do conteúdo do pendrive atual:

$ sudo lvconvert --merge /dev/teste01/linuxuniverse01
  • Snapshots tem uma origem, eles sempre voltam pra sua origem.
    Então o comando é automático e aplicará os dados do snapshot sob a base original da mídia.
  • Snapshots não são backup! Em caso de pane, se a base dos dados for corrompida, todos os snapshots ficarão inacessíveis.
  • Você pode montar um snapshot e aí fazer backup dos dados nele contidos, em sua totalidade, para outra mídia.
  • Eles são úteis quando você quer fazer backup de uma pasta que muda muito, como um banco de dados.
    As novas alterações serão repassadas a outra área do disco e você poderá copiar os dados “estáticos” da base da mídia.

3.7 Expandindo de Novo!

Com este comando, ele vai expandir o LV para ocupar 100% do espaço vazio da mídia! – Note que não haverá espaço para snapshots, portanto aqui você ficará com os recursos nativos do sistema de arquivos escolhido, se em vez de EXT4 você usou BTRFS, poderá fazer snapshots com o BTRFS.

$ sudo lvextend -l +100%FREE /dev/mapper/teste01-teste_lv

Agora estará com 8Gb disponíveis!

Mas por que não diminuir? Só expandir?

Simplicidade.
É mais fácil expandir um LVM do que diminuí-lo.

A expansão pode ser feita com a mídia ONLINE, ou seja, montada. Para diminuí-la, você terá que diminuir o sistema de arquivos (EXT4 no exemplo) e isso só acontece desmontando a mídia.

Num pendrive é Ok, mas se você usa LVM na partição / você estará com sérios problemas se precisar diminuir seu tamanho por qualquer que seja o motivo!

Há como diminuir, mas não vou abordar esse método nesta publicação.

4. Revertendo tudo!

Testes concluídos, hora de tirar as “tralhas” do sistema, afinal, o LVM2 cria vários processos no sistema que podem pesa-lo desnecessariamente se você não o utiliza.

Comecemos desmontando as unidades:

$ sudo umount /mnt/pen
$ sudo umount /mnt/pen2 # Caso não tenha removido o snapshot ainda!

Agora, removendo de seu sistema o volume lógico criado no pendrive:

$ sudo lvchange -an -v /dev/mapper/teste01-teste_lv
$ sudo lvremove -vf /dev/mapper/teste01-teste_lv

Remova o VG:

$ sudo vgremove teste01

E remova por fim o PV… Esse está no pendrive.
Aí você pode formata-lo normalmente para FAT32 ou outro formato desejado!

Remova o LVM2 do sistema:

$ sudo apt purge lvm2

E chegamos ao fim desta aventura!

5. Dicas Gerais

Aprendi algumas coisas que podem ser úteis para quem se aventurar com LVMs:

  • Quando criar snapshots com LVM, crie o subvolume sempre com o mesmo tamanho do subvolume anterior que sofreu o snapshot! Dica repetida mas fundamental para evitar dores de cabeça desnecessárias.
  • Use os sistemas de arquivos estendidos, a menos que tenha um motivo claro para usar outro sistema de arquivos.
    Nem todos os sistemas de arquivos suportam redimensionamento, mas EXT2, 3 e 4 suportam.
    O BTRFS por exemplo não suporta virtualmente ser encolhido se for necessário!
    Atento a isso. Pense bem em qual sistema de arquivos pretende utilizar.
  • Use nomes fáceis de lembrar quando criar volumes e grupos de volumes. Assim você não se confunde com o que é o que ali.
  • Use nomes de rótulos fáceis de lembrar, em sistema de arquivos como o EXT4, também ajuda a se localizar entre o que é o que ali.
  • O LVM será bem útil se você precisar gerenciar + do que 2 discos rígidos ou SSD’s, para redistribuir as partições entre todo o sistema.
  • Evite os LV’s gigantes com vários discos: Isso funciona como uma RAID e se 1 dos discos parar de funcionar, você perderá os dados em todos os discos! Em vez disso, utilize LV’s isolados a 1 por disco e una-os de outras formas como com o MergerFS!
    Assim se um disco parar, você não perde tudo.

Fontes:
OpenSource
CertificacaoLinux
VivaOLinux

Deixe um comentário