LVM - Logical Volume Manager

O lvm (Logical Volume Manager) faz a associação entre dispositivos/partições físicas (incluindo discos RAID, MO, mass storages diversos, MD, e loop) e dispositivos lógicos. O método tradicional faz a alocação de todo espaço físico ao tamanho da partição do disco (o método tradicional), o que traz muito trabalho quando o espaço esgota, cópia de dados ou planejamento de uso de máquina (que pode mudar com o passar do tempo). O sistema de lvm soluciona os seguintes problemas:

As 3 camadas do LVM são agrupadas da seguinte forma:

Representação gráfica do LVM

Desenvolvi este desenho para representar a idéia de organização de um sistema LVM para o guia Foca GNU/Linux e apresentar a descrição prática da coisa:

+------[ Grupo de Volume (VG) - lvmdsk ]------+
| +--[ PV - hda1 ]---+ +--[ PV - hdb1 ]--+    |
| | PE PE PE PE PE PE| | PE PE PE PE PE  |    |
| +------------------+ +-----------------+    |
|    |  |                   |        |        |
|    |  | +-----------------+        |        |
|    |  +----------------+           |        |
|    |    |              |           |        |
|  +-[ LV - var ]-+    +-[ LV - home ]-+      |
|  | LE LE LE LE  |    | LE LE LE LE   |      |
|  +--------------+    +---------------+      |
+---------------------------------------------+

O gráfico acima representa a seguinte situação:

  1. Nós temos dois volumes físicos representados por hda1 e hdb1. Cada um desses volumes físicos tem um Phisical Extend (PE) de 4M (o padrão).

  2. Estes dois volumes físicos acima representam o espaço total do grupo de volume lvmdisk em /dev/lvmdisk.

  3. Do grupo de volume lvmdisk são criados dois volumes lógicos chamados var e home, estando disponíveis para particionamento através de /dev/lvmdisk/var e /var/lvmdisk/home.

Na prática, o espaço do volume lógico é definido alocando-se alguns Phisical Extends (PE) dos volumes físicos como logical extends (LE) dos volumes lógicos. Desta forma, o tamanho de todos os PEs e LEs existentes dentro de um mesmo grupo de volume devem ser iguais.

Performance do LVM

Um sistema com LVM tem sua performance um pouco reduzida quanto ao acesso a disco, devido as camadas adicionais de acesso aos dados, sendo afetadas operações em caracteres e inteligentes de acesso a dados.

Entretanto, a performance de leitura/gravação de blocos é melhorada consideravelmente após a adoção do LVM. O LVM também garante que o sistema não mostre sintomas de paradas durante o esvaziamento de cache de disco, mantendo sempre uma certa constância na transferência de dados mesmo em operações pesadas de I/O no disco. Depende de você avaliar estes pontos e considerar sua adoção.

Instalando LVM em seu sistema

Nesta seção não tenho a intenção de cobrir todos os detalhes técnicos da implantação do LVM, a idéia aqui é fornecer uma referência básica e prática para uso em qualquer sistema normal (desconsiderando usos críticos). A idéia aqui é mostrar de forma prática como implantar LVM em sua máquina e preparar seu uso nos discos.

Antes de começar, retire QUALQUER CD que estiver inserido na unidade de CD-ROM, pois eles podem causar erro no pvscan, pvdisplay, etc.

  1. No particionamento, defina as partições do tipo 8E (Linux LVM). A partição Linux LVM é exatamente igual a Linux Native (82), a única vantagem é que o LVM utilizará auto detecção para saber quais partições ele deve utilizar no pvscan.

  2. Instale o pacote e uma imagem de kernel 4.x ou 5.x que tenha suporte a LVM, ou compile seu próprio kernel (caso goste de máquinas turbinadas :-)

  3. Execute o pvscan para detectar as partições marcadas como LVM e criar sua configuração em /etc/lvmtab.d.

    OBS: É normal o sistema procurar dispositivos de CD-ROM durante a execução do pvscan, apenas não deixe um CD na unidade para evitar grandes sustos se estiver desatento com os passos :-)

  4. Rode o pvcreate no disco ou partição para dizer que ela será um volume físico do LVM: pvcreate /dev/sda1 ou pvcreate /dev/sda

    Em caso de dúvida sobre qual é a partição LVM, digite: fdisk -l /dev/sda (supondo que /dev/sda é o disco rígido que está configurando o LVM).

  5. Rode o pvdisplay /dev/hda1 para verificar se o volume físico foi criado. Recomendo que deixe a partição raíz (/) de fora do LVM para não ter futuros problemas com a manutenção do seu sistema, a menos que tenha muitas opções de inicialização com suporte a LVM em mãos :-)

  6. Crie o grupo de volume na partição vgcreate lvmdisk /dev/sda1 /dev/sdb7. Note que partições de discos diferentes podem fazer parte de um mesmo grupo de volume (VG) do LVM. Caso use o devfs ou em algumas versões do udev, será preciso usar o caminho completo do dispositivo ao invés do link: vgcreate lvmdisk /dev/ide/host0/bus0/target0/lun0/part1

    O valor padrão do "Phisical Extend" é de 4MB mas pode ser alterado pelo parâmetro "-s tamanho", assim o tamanho máximo do grupo de volume será de 256GB (4MB * 64.000 extends que são suportados por volume lógico). Os valores do Phisical Extend (PE) pode ser de 8k a 16GB. Não é possível modificar o tamanho do PE após ele ser definido.

  7. Verifique o grupo de volume (VG) recém criado com o comando: vgdisplay ou vgdisplay /dev/sda7. Atente para a linha "Free PE / tamanho", que indica o espaço livre restante para criar os volumes lógicos (LV).

  8. Crie o volume lógico (LV) com o comando: lvcreate -L1500 -ntmp lvmdisk Que vai criar uma partição LVM de 1500MB (1,5GB) com o nome tmp (acessível por /var/lvmdisk/tmp) dentro do grupo lvmdisk. Você deverá fazer isso com as outra partições.

  9. Agora resta criar um sistema de arquivos (ext3, reiserfs, xfs, jfs, etc) como faria com qualquer partição física normal:

    mkfs.ext3 /dev/lvmdisk/tmp ou mkfs.reiserfs /dev/lvmdisk/tmp

OBS: Caso deseje montar automaticamente o volume LVM, coloque o caminho completo do LVM ao invés do volume físico no /etc/fstab: /dev/lvmdisk/tmp.

Aumentando o tamanho de um volume lógico

O processo para aumentar o tamanho do volume lógico consiste em primeiro aumentar o tamanho do VG com o lvextend e depois ajustar o tamanho do sistema de arquivos:

# Aumenta o espaço do volume lógico tmp para 1G
lvextend -L1G /dev/lvmdisk/tmp

# Aumenta em 200MB o espaço no volume lógico tmp
lvextend -L+200M /dev/lvmdisk/tmp

As unidades Kk,Mm,Gg,Tt podem ser usadas para especificar o espaço. Após modificar o volume lógico, será preciso aumentar o tamanho do sistema de arquivos para ser exatamente igual ao tamanho do LV. Isto depende do seu sistema de arquivos:

ext2/3

resize2fs /dev/lvmdisk/tmp

O ext2/3 ainda vem com o utilitário e2fsadm que executa os dois comandos (lvextend e resize2fs) de uma só vez: e2fsadm -L+1G /dev/lvmdisk/tmp

OBS: Você deverá desmontar o sistema de arquivos antes de alterar o tamanho de um sistema de arquivos ext2 ou ext3. Em kernels da serie 2.6.17 e superiores, a alteração pode ser feita on-line (devido ao patch ext2online incorporado ao kernel).

reiserfs

resize_reiserfs -f /dev/lvmdisk/tmp

O tamanho do sistema de arquivos reiserfs poderá ser modificado on-line, assim não precisa parar seu servidor para esta operação.

xfs

xfs_growfs /tmp

Note que deve ser especificado o ponto de montagem ao invés do dispositivo. O sistema de arquivos deverá ser montado antes de ser modificado e incluido no /etc/fstab.

Diminuindo um volume lógico

Para diminuir o tamanho de um volume lógico, certifique-se de ter calculado o espaço corretamente para acomodar todos os dados que já existem na partição. A diferença para o processo de aumentar o LV é que primeiramente o sistema de arquivos é reduzido primeiro e depois o LV (pois o LV que acomoda o sistema de arquivos):

ext2/3/4

resize2fs /dev/lvmdisk/tmp 4G e depois lvreduce -L-1G /dev/lvmdisk/tmp

Podem ser usados K, M ou G para especificar o novo tamanho. Caso esteja usando um kernel 2.6.17 ou superior, o tamanho poderá ser ajustado com o sistema de arquivos on-line (sem desmontar).

reiserfs

resize_reiserfs -s-1G /dev/lvmdisk/tmp e depois lvreduce -L-1G /dev/lvmdisk/tmp

O tamanho do sistema de arquivos reiserfs poderá ser modificado on-line, assim não precisa parar seu servidor para a modificação.

xfs

Não é possível diminuir o tamanho de um sistema de arquivos XFS em sua versão atual (12/2006).