LVM - Abstraindo Physical Volumes
Cumprindo a promessa feita ao final do artigo anterior, vamos mostrar como criar o Volume Group datavg, bem como os Logical Volumes data1, data2, data3 e data4.
Mas nosso objetivo não é apenas cumprir uma promessa!
Nesse artigo pretendemos fazer um overview do LVM, bem como apresentar alguns comandos e procedimentos elementares.
Na conhecida figura abaixo, podemos ver que três HDs (Disk2, Disk3 e Disk4, na figura acima) estão associados a datavg. Dentro da terminologia do LVM, eles são denominados Physical Volumes. E, para poderem ser utilizados pelo LVM, eles precisam ser "apresentados", de modo que sejam reconhecidos e utilizados como esperado.
A Ordem Natural das coisas!
Para utilizar um HD em uma configuração LVM, são necessárias algumas etapas "simples":
Etapa "Física" (concreta, dependente de hardware)
- Preparar (particionar) o HD para ser usado como um Physical Volume (PV);
- Criar o Physical Volume (PV);
- Criar ou Expandir um Volume Group (VG), usando o Physical Volume (PV);
Etapa "Lógica" (abstrata, independente de hardware)
- Criar Logical Volumes (LV), alocando espaço de um Volume Group (VG);
- Definir um sistema de arquivos (ext4, xfs, reisefs, btrfs, etc.) no LV;
- Montar o LV num ponto de montagem, para poder, utilizar o espaço disponível.
São 6 etapas, "simples", mas que escondem uma complexidade e revelam a grande vantagem do LVM!
Mão na massa!
Para dar cabo da tarefa proposta nesse artigo, teremos que fazer uso de boa parte dos comandos disponíveis na biblioteca LVM.
Os comandos de "manipulação" do LVM que iremos conhecer nesse artigo são:
pvcreate, vgcreate, vgextend, lvcreate
Além desses, iremos conhecer os comandos de "consulta":
pvdisplay, vgdisplay e lvdisplay
Iremos também rever alguns comandos ou utilitários do Linux, tais como:
fdisk, mkfs.xfs, mkdir e mount.
Vamos dar uma boa olhada na figura abaixo, para identificar nosso ponto de partida.

Olhando a figura, podemos identificar o seguinte:
Etapa "física" 1: Preparando os HDs para serem usados como PVs
Agora vamos repetir a operação nos dois HDs que faltam:
fdisk, mkfs.xfs, mkdir e mount.
Nosso ponto de partida é um ambiente simulado em uma máquina virtual com o openSUSE já instalado, acrescida dos três HDs que iremos usar para reproduzir a configuração necessária para datavg. Para tornar as coisas mais simples, fora criados HDs virtuais de 10GB. Naturalmente, os mesmos procedimentos que serão apresentados poderão ser usados em qualquer dimensão de HD!
Vamos dar uma boa olhada na figura abaixo, para identificar nosso ponto de partida.

Olhando a figura, podemos identificar o seguinte:
- Os três HDs que iremos usar (sdb, sdc e sdd) não têm qualquer tipo de particionamento;
- O HD sda está particionado com uma única partição (sda1), do tipo "Linux LVM", e está em uso pelo sistema através de um Volume Group (system) e três Logical Volumes (home, root e swap).
Nós também podemos obter algumas informações importantes em linha de comando, usando os comandos de "consulta" do LVM.
Na figura abaixo, pvdisplay mostra os Physical Volumes (PV) configurados no sistema. Podemos ver que existe apenas /dev/sda1. Já o comando vgdisplay mostra os Volume Groups (VG) configurados. Podemos identificar o até então único VG, o system.
Um olhar mais experiente tira muito mais informações da figura acima. Entretanto, foge ao escopo nesse momento... Até mesmo para não prejudicar a didática! Então vou resistir à tentação...
Etapa "física" 1: Preparando os HDs para serem usados como PVs
Nosso primeiro passo será particionar os três HDs, usando para isso o fdisk. Iremos criar uma única partição em cada um dos HDs, no tamanho máximo disponível, e configurá-las sendo do tipo "Linux LVM".
NOTA: Embora você possa utilizar um HD inteiro, sem qualquer particionamento, como um Physical Volume (PV), a própria documentação alerta que isso não é recomendado em algumas situações. A principal delas é se outro SO qualquer puder visualizar esse disco. Ele não irá reconhecer os metadados do LVM presentes no HD e irá considerá-lo como não particionado, ou seja, livre para ser usado!
Na figura abaixo, podemos ver o fdisk em ação, particionando o HD sdb.
O que fizemos?
- Primeiramente, nós criamos (opção n) a partição única, usando todo o disco;
- Depois, verificamos (opção p) que, por default, ela é criada com o tipo "Linux";
- Assim, trocamos o tipo de partição para "Linux LVM", usando a opção t, e informando o tipo 8e;
- Didaticamente, constatamos a mudança do tipo usando mais uma vez a opção p;
- Finalmente, gravamos as alterações, usando a importantíssima opção w!
Agora vamos repetir a operação nos dois HDs que faltam:
Visualmente falando, podemos ver na figura abaixo em que ponto as coisas estão agora!
![]() |
sdb, sdc e sdd particionados como "Linux LVM" |
Etapa "física" 2: Criando os PVs
Agora que os HDs foram particionados, estão prontos para serem "transformados" em Physical Volumes (PV)!
Na figura abaixo, pvdisplay mostra a informação que temos: existe o PV (Physical Volume) /dev/sda1, e ele está sendo usado pelo VG (Volume Group) system. Enxergamos isso quando olhamos para os campos "PV Name" e "VG Name", respectivamente. Mais abaixo na figura, podemos ver pvcreate em ação, criando os PVs.
Somente quando executamos o comando pvcreate é que um HD (inteiro ou partição) passa a ser, de fato, um PV (Physical Volume)!
Agora que criamos os PVs /dev/sdb1, /dev/sdc1 e /dev/sdd1, vamos mais uma vez dar uma olhada no resultado do comando pvdisplay:
Observem que os campos "VG Name" de /dev/sdb1, /dev/sdc1 e /dev/sdd1 estão em branco! Isso ocorre porque, apesar de os HDs já terem sido "transformados" em PVs, eles ainda não estão sendo utilizados por nenhum VG (Volume Group).
Etapa "física" 3: Criando o Volume Group (VG). No caso o datavg
Neste caso em particular, precisamos criar um VG que, já de início, irá conter três PVs. Podemos fazer isso tudo de uma vez!
Criando um VG com mais de um PV
Para criar datavg agora, basta executar o comando vgcreate, da seguinte forma:
vgcreate datavg /dev/sdb1 /dev/sdc1 /dev/sdd1
Tudo o que fizemos foi passar como parâmetro o nome do VG e seus três PVs (Physical Volumes).
Estendendo (Extend) um VG
Um detalhe técnico interessante é que você pode adicionar os PVs individualmente, nada o impede disso! Se você tivesse adicionado apenas /dev/sdb1 e "esquecido" os outros dois, tudo o que precisaríamos fazer seria adicioná-los à datavg. Para isso usaríamos o comando vgextend, como mostrado na figura abaixo.
Resultado final
Estão curiosos para ver isso de forma gráfica? Então observem a figura abaixo!
Podemos ver que datavg existe(!) e que ele tem (+/-) 30GB de tamanho. E se você estiver se perguntando onde estão os PV /dev/sdb1, /dev/sdc1 e /dev/sdd1, a resposta é simples: ISTO NÃO IMPORTA! Não para um Volume Group... Afinal de contas, o objetivo é criar uma camada de abstração em cima da parte física. O que importa aqui é que datavg tem, no momento, (+/-) 30 GB de espaço. E SÓ! De onde vem esses 30 GB não importa para um VG... Até porque, existe o comando pvdisplay, não é mesmo? ;-)
Etapa "lógica" 1: Criando os Logical Volumes (LV)
Agora que temos datavg criado e espaço suficiente para criar Logical Volumes (LV) à vontade, vamos criar os data1, data2, data3 e data4, os LVs de nosso exercício. Para isto, tudo o que precisamos é do comando lvcreate, da seguinte forma:
lvcreate -L5120 -ndata1 datavg
lvcreate -L5120 -ndata2 datavg
lvcreate -L5120 -ndata3 datavg
lvcreate -L5120 -ndata4 datavg
O significado dos comandos acima, e o resultado esperado, tomando data1 como exemplo, pode ser traduzido como:
"Crie um LV (lvcreate) de 5GB ( -L5120 ), chamado data1 ( -ndata1 ), 'consumindo' esses 5 GB do VG datavg."
OBS.: Criamos arbitrariamente LVs de 5 GB para mostrar mais uma coisa interessante, embora talvez óbvia: não é necessário "consumir" um PV todo de uma vez! 4 * 5 GB = 20 GB, correto? Então, dos 30 GB de datavg, foram consumidos apenas 20 GB, ficando disponíveis outros 10 GB.
Uma rápida execução de vgdisplay agora irá mostrar o seguinte:
Podemos ver que datavg, cujo tamanho (VG Size) é (+/-) 30 GB, foi "consumido" (Alloc PE / Size) em 20 GB e que ainda existem (+/-) 10 GB disponíveis (Free PE / Size).
A essa altura, executar o comando lvdisplay irá nos trazer um bocado de informação, como nos mostra a figura abaixo.
Graficamente, a mesma informação fica mais bonita, porém bem resumida, como podemos ver na figura abaixo:
Podemos ver o glorioso datavg e seus LVs associados!
Observem que, embora tenhamos criado os LVs data1, data2, data3 e data4, eles ainda não têm um sistema de arquivos definido. Isso pode ser visto facilmente na coluna "Tipo de sistema de arquivos" na figura acima. Isso nos leva à Etapa "lógica" 2...
Etapa "lógica" 2: Definindo um sistema de arquivos para os Logical Volumes (LV)
Agora que temos os LVs data1, data2, data3 e data4 criados, é hora de definir um sistema de arquivos para todos eles. Para efeitos desse artigo, vamos usar o XFS!
Sem mais delongas, para definir um sistema de arquivos para os nossos LVs, podemos usar o comando mkfs.xfs como mostrado na figura abaixo:
Etapa "lógica" 3: Montando os Logical Volumes (LV) em seus respectivos pontos de montagem
Finalmente chegamos na nossa última etapa!
Hora de criar pontos de montagem e montar nossos LVs... Nada mais óbvio, primeiro precisamos criar nossos pontos de montagem:
Hora de criar pontos de montagem e montar nossos LVs... Nada mais óbvio, primeiro precisamos criar nossos pontos de montagem:
mkdir /data1
mkdir /data2
mkdir /data3
mkdir /data4
Agora, podemos montar nossos LVs:
mount /dev/datavg/data1 /data1
mount /dev/datavg/data2 /data2
mount /dev/datavg/data3 /data3
mount /dev/datavg/data4 /data4
Voilá!
Por fim, tudo o que precisamos fazer é:
# Adicionar as seguintes entradas em /etc/fstab
/dev/datavg/data1 /data1 xfs defaults 1 2
/dev/datavg/data2 /data2 xfs defaults 1 2
/dev/datavg/data3 /data3 xfs defaults 1 2
/dev/datavg/data4 /data4 xfs defaults 1 2
É meio óbvio, mas o dever me obriga a explicar a necessidade de incluir essas linhas em fstab: é para quando (e se) for necessário reiniciar o sistema! Isso garante que os LVs serão montados automaticamente em seus respectivos pontos de montagem. ¯\_(ツ)_/¯
Para encerrar esse artigo, mais uma "figurinha", mostrando graficamente tudo o que fizemos até agora:
Esperamos ter sido útil, e que vocês tenham gostado do artigo!
Até o próximo...
Nenhum comentário:
Postar um comentário