Criar e Estender Volumes Lógicos LVM no RHEL

Red Hat Enterprise LinuxBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá o processo fundamental de criação e gerenciamento de armazenamento LVM (Logical Volume Manager) em um sistema Red Hat Enterprise Linux. Você começará preparando um disco físico, particionando-o com parted e inicializando-o como um Volume Físico (PV - Physical Volume) LVM usando pvcreate. Em seguida, você agrupará este PV em um Volume Group (VG) com vgcreate e, então, criará um Volume Lógico (LV - Logical Volume) flexível a partir desse grupo usando lvcreate. A configuração inicial conclui com a formatação do novo LV com um sistema de arquivos XFS e a montagem persistente para uso do sistema.

Construindo sobre a configuração inicial, você explorará uma das principais vantagens do LVM: a capacidade de redimensionar dinamicamente o armazenamento. Você aprenderá como estender um Volume Group existente adicionando um novo Volume Físico com vgextend. Subsequentemente, você expandirá o Volume Lógico para utilizar este novo espaço usando lvextend e redimensionará o sistema de arquivos XFS online com xfs_growfs para tornar a capacidade adicional imediatamente disponível para o sistema operacional sem tempo de inatividade.

Preparar Physical Volumes com parted e pvcreate

Nesta etapa, você começará a gerenciar o armazenamento preparando um disco físico para uso com o Logical Volume Manager (LVM). Isso envolve duas etapas principais: primeiro, particionar o disco usando o utilitário parted e, segundo, inicializar essas partições como Volumes Físicos (PVs - Physical Volumes) LVM com o comando pvcreate.

Visão Geral do Logical Volume Manager (LVM)

LVM é uma ferramenta poderosa de gerenciamento de armazenamento no Linux que fornece uma camada flexível sobre dispositivos de armazenamento físico. Em vez de usar discos e partições diretamente, o LVM permite que você crie "volume groups" abstratos a partir de um ou mais dispositivos físicos e, em seguida, crie "logical volumes" a partir desse espaço agrupado. Isso torna muito mais fácil redimensionar o armazenamento, substituir discos e gerenciar o armazenamento do seu sistema sem tempo de inatividade.

O componente mais fundamental no LVM é o Physical Volume (PV). Um PV é um dispositivo de armazenamento físico, como uma partição de disco rígido ou um disco inteiro, que foi inicializado para uso pelo LVM.

1. Criar uma Partição para LVM

Antes que um disco possa ser usado pelo LVM, você deve criar uma partição nele e definir seu tipo como "LVM". Usaremos o dispositivo /dev/vdb para este exercício. Você precisará de privilégios sudo para modificar as partições do disco.

Primeiro, crie uma nova Tabela de Partição GUID (GPT - GUID Partition Table) no dispositivo /dev/vdb. GPT é um padrão moderno para o layout da tabela de partições em um dispositivo de armazenamento físico.

sudo parted /dev/vdb mklabel gpt

Em seguida, crie uma única partição com 512 MiB de tamanho. Vamos nomear esta partição lvm-part1.

sudo parted /dev/vdb mkpart lvm-part1 1MiB 513MiB

Agora, defina o tipo de partição como lvm. Esta flag informa ao sistema que esta partição se destina ao uso com o Logical Volume Manager.

sudo parted /dev/vdb set 1 lvm on

Para garantir que o kernel reconheça a nova partição imediatamente, execute o comando udevadm settle. Este comando aguarda o daemon udev processar todos os eventos do dispositivo, garantindo que a nova partição /dev/vdb1 esteja disponível.

sudo udevadm settle

Finalmente, verifique se a partição foi criada corretamente imprimindo a tabela de partições.

sudo parted /dev/vdb print

Você deve ver uma saída semelhante à seguinte, mostrando uma partição com a flag lvm habilitada.

Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 42.9GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End    Size   File system  Name       Flags
 1      1049kB  538MB  537MB               lvm-part1  lvm

2. Inicializar a Partição como um Volume Físico

Com a partição criada e corretamente tipada, a próxima etapa é inicializá-la como um Volume Físico LVM usando o comando pvcreate. Este comando grava metadados LVM na partição, tornando-a formalmente parte do sistema LVM.

Execute o seguinte comando para inicializar /dev/vdb1:

sudo pvcreate /dev/vdb1

Uma operação bem-sucedida produzirá a seguinte mensagem:

  Physical volume "/dev/vdb1" successfully created.
  Creating devices file /etc/lvm/devices/system.devices

3. Exibir Informações do Volume Físico

Agora você pode inspecionar o Volume Físico recém-criado. O comando pvs fornece um resumo compacto de todos os PVs no sistema, enquanto pvdisplay oferece uma visão mais detalhada.

Use pvs para ver um resumo rápido:

sudo pvs

A saída listará seu novo PV. Observe que ele ainda não pertence a nenhum Volume Group (VG).

  PV         VG Fmt  Attr PSize   PFree
  /dev/vdb1     lvm2 ---  512.00m 512.00m

Para mais detalhes, use pvdisplay:

sudo pvdisplay /dev/vdb1

Este comando mostra informações detalhadas, incluindo o nome do PV, tamanho e identificador exclusivo (UUID).

  "/dev/vdb1" is a new physical volume of "512.00 MiB"
  --- NEW Physical volume ---
  PV Name               /dev/vdb1
  VG Name
  PV Size               512.00 MiB
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

Você agora preparou com sucesso uma partição física para LVM. Na próxima etapa, você usará este PV para criar um Volume Group.

Criar um Volume Group a partir de Physical Volumes com vgcreate

Nesta etapa, você usará o Volume Físico (PV) que preparou na etapa anterior para criar um Volume Group (VG). Um Volume Group é um componente central do LVM, atuando como um único pool gerenciável de espaço em disco a partir do qual você pode criar Logical Volumes.

Entendendo Volume Groups e Physical Extents

Um Volume Group (VG) agrega um ou mais Volumes Físicos em um único pool de armazenamento. Pense nisso como combinar vários contêineres menores de água em um tanque grande. Essa abstração é o que dá ao LVM sua flexibilidade.

Este pool de armazenamento é dividido em pequenos pedaços de tamanho fixo chamados Physical Extents (PEs). Por padrão, um PE tem 4 MiB. Quando você cria um Logical Volume mais tarde, você está essencialmente alocando um certo número desses PEs do Volume Group.

1. Criar o Volume Group

Agora, você criará um Volume Group chamado my_vg usando o Volume Físico /dev/vdb1. O comando para isso é vgcreate.

sudo vgcreate my_vg /dev/vdb1

Se o comando for bem-sucedido, você verá uma mensagem de confirmação:

  Volume group "my_vg" successfully created

Este comando criou um novo pool de armazenamento chamado my_vg que contém todo o espaço disponível de /dev/vdb1.

2. Exibir Informações do Volume Group

Assim como você fez com os Volumes Físicos, você pode exibir informações sobre seu novo Volume Group. O comando vgs fornece um resumo e vgdisplay fornece uma visão detalhada.

Para obter um resumo compacto de todos os Volume Groups no sistema, execute:

sudo vgs

A saída mostrará seu novo VG, seu tamanho e a quantidade de espaço livre.

  VG    #PV #LV #SN Attr   VSize   VFree
  my_vg   1   0   0 wz--n- 508.00m 508.00m

Para um relatório mais detalhado sobre seu Volume Group específico, use vgdisplay:

sudo vgdisplay my_vg

Esta saída fornece detalhes abrangentes, incluindo o tamanho do PE, o número total de PEs e quantos ainda estão livres.

  --- Volume group ---
  VG Name               my_vg
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               508.00 MiB
  PE Size               4.00 MiB
  Total PE              127
  Alloc PE / Size       0 / 0
  Free  PE / Size       127 / 508.00 MiB
  VG UUID               xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

Observe que o PE Size é 4.00 MiB e você tem 127 Free PE, o que corresponde ao espaço total disponível no Volume Group. Você agora criou com sucesso um Volume Group e ele está pronto para ter Logical Volumes criados a partir dele.

Criar e Formatar um Logical Volume com lvcreate e mkfs.xfs

Nesta etapa, você criará um dispositivo de bloco utilizável, conhecido como Logical Volume (LV), a partir do Volume Group que você criou. Uma vez que o LV é criado, ele ainda é apenas espaço de armazenamento bruto. Para armazenar arquivos nele, você deve formatá-lo com um sistema de arquivos.

Entendendo Logical Volumes e Filesystems

Um Logical Volume (LV) é o equivalente LVM de uma partição de disco tradicional. Ele é criado a partir do espaço livre dentro de um Volume Group e é apresentado ao sistema operacional como um dispositivo de bloco padrão. Você pode criar sistemas de arquivos em LVs, montá-los e usá-los para armazenar dados. A principal vantagem é que os LVs podem ser facilmente redimensionados, o que é muito mais difícil com partições físicas.

Um filesystem é uma estrutura de dados que o sistema operacional usa para controlar como os dados são armazenados e recuperados. Ele organiza o espaço bruto de um dispositivo como um LV em arquivos e diretórios. Para este laboratório, usaremos XFS, que é um sistema de arquivos de alto desempenho, com journaling, que é o padrão para Red Hat Enterprise Linux.

1. Criar o Logical Volume

Agora, você criará um Logical Volume de 256 MiB chamado my_lv a partir do Volume Group my_vg. O comando para isso é lvcreate.

  • -n my_lv: Especifica o nome para o novo LV.
  • -L 256M: Define o tamanho do LV para 256 Megabytes.
  • my_vg: O nome do Volume Group para criar o LV.

Execute o seguinte comando:

sudo lvcreate -n my_lv -L 256M my_vg

Um comando bem-sucedido produzirá esta saída:

  Logical volume "my_lv" created.

2. Verificar a Criação do Logical Volume

Você pode inspecionar seu novo LV usando os comandos lvs e lvdisplay.

Para ver um resumo de todos os LVs, execute:

sudo lvs

A saída mostrará seu novo LV, my_lv, dentro do grupo my_vg.

  LV    VG    Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  my_lv my_vg -wi-a----- 256.00m

Para uma visualização detalhada, você pode especificar o caminho completo do LV. O caminho para um LV é tipicamente /dev/VG_NAME/LV_NAME.

sudo lvdisplay /dev/my_vg/my_lv

Isso fornece informações detalhadas, incluindo o LV Path, que você precisará para a próxima etapa.

  --- Logical volume ---
  LV Path                /dev/my_vg/my_lv
  LV Name                my_lv
  VG Name                my_vg
  LV UUID                xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
  LV Write Access        read/write
  LV Creation host, time host, 2023-10-27 10:30:00 +0000
  LV Status              available
  ## open                 0
  LV Size                256.00 MiB
  Current LE             64
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:2

3. Formatar o Logical Volume com um Sistema de Arquivos XFS

Agora, você formatará o Logical Volume my_lv com o sistema de arquivos XFS usando o comando mkfs.xfs. Isso prepara o volume para armazenar arquivos.

sudo mkfs.xfs /dev/my_vg/my_lv

O comando exibirá detalhes sobre o sistema de arquivos que está criando.

meta-data=/dev/my_vg/my_lv       isize=512    agcount=4, agsize=16384 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=4096   blocks=65536, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

Seu Logical Volume agora está formatado e pronto para ser montado e usado. Você fará isso na próxima etapa.

Montar Persistentemente o Logical Volume usando /etc/fstab

Nesta etapa, você tornará o Logical Volume que você criou e formatou acessível ao sistema. Isso envolve duas ações: criar um diretório para servir como um "ponto de montagem" e, em seguida, configurar o sistema para anexar automaticamente o Logical Volume a este diretório toda vez que ele inicializa.

Entendendo Montagem e /etc/fstab

Um dispositivo de bloco formatado, como seu Logical Volume my_lv, não é diretamente utilizável até que seja montado. Montar é o processo de anexar um sistema de arquivos a um diretório específico na árvore principal do sistema de arquivos. Uma vez montado, você pode navegar nesse diretório para ler e gravar arquivos no dispositivo.

Para garantir que o sistema de arquivos seja montado automaticamente após uma reinicialização, você deve adicionar uma entrada para ele no arquivo /etc/fstab (tabela do sistema de arquivos). Este arquivo contém uma lista de todos os discos e partições que o sistema deve montar na inicialização.

1. Criar um Ponto de Montagem

Um ponto de montagem é simplesmente um diretório vazio que servirá como a raiz do seu novo sistema de arquivos. Criaremos um diretório chamado /data para esse fim.

sudo mkdir /data

2. Adicionar uma Entrada ao /etc/fstab para Montagem Persistente

Agora, você precisa dizer ao sistema para montar seu LV no diretório /data automaticamente. Você adicionará uma nova linha ao arquivo /etc/fstab. Cada linha neste arquivo tem seis campos:

  1. Device: O dispositivo a ser montado. No nosso caso, /dev/my_vg/my_lv.
  2. Mount Point: O diretório para montá-lo. Aqui, é /data.
  3. Filesystem Type: O tipo do sistema de arquivos, que é xfs.
  4. Mount Options: Opções para montagem. defaults é um conjunto padrão de opções adequadas para a maioria dos casos.
  5. Dump: Usado pelo utilitário dump para decidir se deve fazer backup do sistema de arquivos. 0 significa desativar.
  6. Pass: Usado pelo fsck para determinar a ordem de verificação dos sistemas de arquivos na inicialização. 0 significa não verificar.

Usaremos o comando echo combinado com sudo tee -a para anexar a linha correta a /etc/fstab sem precisar de um editor de texto.

echo '/dev/my_vg/my_lv /data xfs defaults 0 0' | sudo tee -a /etc/fstab

Você pode verificar se a linha foi adicionada corretamente visualizando o conteúdo do arquivo:

cat /etc/fstab

3. Montar o Sistema de Arquivos

Agora que a entrada existe em /etc/fstab, você pode usar o comando mount para montá-lo imediatamente. Como o ponto de montagem /data está listado em /etc/fstab, você só precisa fornecer o nome do diretório.

sudo mount /data

O sistema lerá /etc/fstab, encontrará a entrada para /data e montará o dispositivo correspondente.

4. Verificar a Montagem

Para confirmar que o sistema de arquivos foi montado com sucesso, você pode usar o comando df (disk free) com a opção -h (legível por humanos).

df -h /data

A saída deve mostrar seu logical volume montado em /data, com seu tamanho total e espaço disponível.

Filesystem                  Size  Used Avail Use% Mounted on
/dev/mapper/my_vg-my_lv     251M   28M  224M  11% /data

Você também pode criar um arquivo de teste para garantir que você tenha acesso de gravação:

echo "My LVM is working!" | sudo tee /data/test.txt

Em seguida, leia o arquivo de volta para confirmar que ele foi escrito:

cat /data/test.txt
My LVM is working!

Seu Logical Volume agora está montado e estará disponível automaticamente toda vez que o sistema iniciar.

Estender o Volume Group e o Logical Volume com vgextend e lvextend

Nesta etapa, você experimentará um dos recursos mais poderosos do LVM: a capacidade de aumentar dinamicamente o tamanho do seu armazenamento. Você adicionará uma nova partição de disco físico ao seu Volume Group existente para expandir sua capacidade total e, em seguida, estenderá seu Logical Volume para usar parte desse novo espaço.

Entendendo a Extensão de Armazenamento

Uma das principais razões para usar o LVM é sua flexibilidade. Quando você fica sem espaço, não precisa realizar uma migração de dados complexa. Em vez disso, você pode simplesmente adicionar outro disco físico (ou partição) ao Volume Group e, em seguida, aumentar seus Logical Volumes conforme necessário. Tudo isso pode ser feito online, sem desmontar o sistema de arquivos.

  • vgextend: Este comando adiciona um ou mais Physical Volumes a um Volume Group existente, aumentando seu tamanho total.
  • lvextend: Este comando aumenta o tamanho de um Logical Volume, extraindo espaço dos extents livres dentro de seu Volume Group.

1. Preparar um Novo Physical Volume

Para estender o Volume Group, você primeiro precisa de um novo Physical Volume. Criaremos uma segunda partição no dispositivo /dev/vdb, assim como você fez na primeira etapa.

Primeiro, crie uma nova partição de 512 MiB. Vamos colocá-la imediatamente após a primeira.

sudo parted /dev/vdb mkpart lvm-part2 513MiB 1025MiB

Em seguida, defina o tipo de partição como lvm.

sudo parted /dev/vdb set 2 lvm on

Certifique-se de que o kernel reconheça a nova partição, /dev/vdb2.

sudo udevadm settle

Finalmente, inicialize esta nova partição como um Physical Volume.

sudo pvcreate /dev/vdb2

Você deve ver a mensagem de sucesso:

  Physical volume "/dev/vdb2" successfully created.

2. Estender o Volume Group

Agora, adicione o novo Physical Volume (/dev/vdb2) ao seu Volume Group existente (my_vg) usando o comando vgextend.

sudo vgextend my_vg /dev/vdb2

A mensagem de confirmação indicará sucesso:

  Volume group "my_vg" successfully extended

Você pode verificar a alteração com o comando vgs. Observe que VSize e VFree aumentaram significativamente.

sudo vgs my_vg
  VG    #PV #LV #SN Attr   VSize    VFree
  my_vg   2   1   0 wz--n- 1022.00m 766.00m

O Volume Group my_vg agora abrange duas partições físicas e tem mais espaço livre disponível.

3. Estender o Logical Volume

Com mais espaço disponível no Volume Group, você pode agora estender seu Logical Volume. Vamos aumentar o tamanho de my_lv de 256 MiB para um novo tamanho total de 400 MiB.

O comando lvextend com a opção -L define o novo tamanho absoluto do volume.

sudo lvextend -L 400M /dev/my_vg/my_lv

A saída confirmará a operação de redimensionamento.

  Size of logical volume my_vg/my_lv changed from 256.00 MiB (64 extents) to 400.00 MiB (100 extents).
  Logical volume my_vg/my_lv successfully resized.

Verifique o novo tamanho do Logical Volume com lvs:

sudo lvs /dev/my_vg/my_lv
  LV    VG    Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  my_lv my_vg -wi-ao---- 400.00m

Importante: Você estendeu com sucesso o Logical Volume (o dispositivo de bloco), mas o sistema de arquivos XFS que reside nele ainda não está ciente desse novo espaço. Se você verificar o tamanho do sistema de arquivos montado, ele ainda relatará o tamanho antigo.

df -h /data
Filesystem                  Size  Used Avail Use% Mounted on
/dev/mapper/my_vg-my_lv     251M   28M  224M  11% /data

Na próxima etapa, você redimensionará o sistema de arquivos para preencher o espaço recém-disponível no Logical Volume.

Redimensionar o Sistema de Arquivos XFS com xfs_growfs

Nesta etapa final, você concluirá o processo de extensão de armazenamento redimensionando o sistema de arquivos XFS para torná-lo ciente do espaço adicional que você alocou para seu Logical Volume subjacente. Esta é a última etapa crucial que torna o novo espaço utilizável para armazenar arquivos.

Entendendo o Redimensionamento do Sistema de Arquivos

Quando você estende um Logical Volume, você está apenas aumentando o tamanho do contêiner (o dispositivo de bloco). O sistema de arquivos dentro desse contêiner permanece em seu tamanho original e não está ciente do novo espaço não utilizado no final do dispositivo.

Para um sistema de arquivos XFS, o comando xfs_growfs é usado para expandir o sistema de arquivos para preencher o dispositivo subjacente. Uma grande vantagem do XFS é que esta operação pode ser realizada online, enquanto o sistema de arquivos está montado e em uso, sem necessidade de tempo de inatividade.

1. Aumentar o Sistema de Arquivos XFS

O comando xfs_growfs recebe o ponto de montagem do sistema de arquivos como seu argumento. No seu caso, o ponto de montagem é /data.

Execute o seguinte comando para expandir o sistema de arquivos:

sudo xfs_growfs /data

O comando emitirá informações sobre a alteração, indicando o número antigo e novo de blocos de dados.

meta-data=/dev/mapper/my_vg-my_lv isize=512    agcount=4, agsize=16384 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=4096   blocks=65536, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 65536 to 102400

A linha chave é data blocks changed from 65536 to 102400, que confirma que o sistema de arquivos cresceu.

2. Verificar o Novo Tamanho do Sistema de Arquivos

Agora, execute o comando df -h novamente para verificar se o tamanho do sistema de arquivos reflete a alteração.

df -h /data

A saída agora deve mostrar o novo tamanho maior, que é aproximadamente 400 MiB.

Filesystem                  Size  Used Avail Use% Mounted on
/dev/mapper/my_vg-my_lv     395M   29M  367M   8% /data

Você também pode verificar se o arquivo de teste que você criou anteriormente ainda está intacto:

cat /data/test.txt
My LVM is working!

Parabéns! Você concluiu com sucesso todo o fluxo de trabalho do LVM: desde particionar um disco físico e criar Physical Volumes, até construir um Volume Group, criar um Logical Volume, formatá-lo e montá-lo e, finalmente, estendê-lo dinamicamente online sem qualquer perda de dados.

Resumo

Neste laboratório, você aprendeu o fluxo de trabalho fundamental para configurar o armazenamento usando o Logical Volume Manager (LVM) no RHEL. Você começou preparando um disco físico, usando parted para criar uma partição com a flag lvm definida e, em seguida, inicializando-a como um Physical Volume (PV) com pvcreate. Em seguida,, você agrupou o PV em um novo Volume Group (VG) usando vgcreate. A partir deste VG, você criou um Logical Volume (LV) com lvcreate, formatou-o com um sistema de arquivos XFS usando mkfs.xfs e configurou-o para montagem persistente adicionando uma entrada em /etc/fstab.

O laboratório também demonstrou a flexibilidade do LVM, guiando você pelo processo de extensão de um logical volume existente. Isso envolveu a preparação de um novo physical volume, adicionando-o ao volume group com vgextend para aumentar o espaço total disponível e, em seguida, estendendo o logical volume em si com lvextend. Finalmente, você redimensionou o sistema de arquivos XFS online usando xfs_growfs para tornar o espaço de armazenamento adicional utilizável pelo sistema operacional, completando o processo completo de gerenciamento dinâmico de armazenamento.