Guia do Linux/Iniciante+Intermediário/Discos e Partições/LVM - Logical Volume Manager
LVM - Logical Volume Manager
editarO 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:
- Uso eficaz de disco, principalmente quando há pouco espaço para criação de partições independentes.
- Permite aumentar/diminuir dinamicamente o tamanho das partições sem reparticionamento do disco rígido usando o espaço livre em outras partições ou utilizando o espaço livre reservado para o uso do LVM.
- Uma partição de disco é identificada por um nome de volume e não pelo dispositivo. Você pode então se referir aos volumes como: usuários, vendas, diretoria, etc.
- Sua divisão em 3 camadas possibilita a adição/remoção de mais discos de um conjunto caso seja necessário mais espaço em volumes, etc.
- Permite selecionar o tamanho do cluster de armazenamento e a forma que eles são acessados entre os discos, possibilitando garantir a escolha da melhor opção dependendo da forma que os dados serão manipulados pelo servidor.
- Permite snapshots dos volumes do disco rígido.
As 3 camadas do LVM são agrupadas da seguinte forma:
- PV (Phisical Volume) - Corresponde a todo o disco rígido/partição ou dispositivo de bloco que será adicionado ao LVM. Os aplicativos que manipulam o volume físico, começam com as letras
pv*
. O espaço disponível no PV é dividido em PE (Phisical Extends, ou extensões físicas). O valor padrão do PE é de 4MB, possibilitando a criação de um VG de 256Gb.
- PV (Phisical Volume) - Corresponde a todo o disco rígido/partição ou dispositivo de bloco que será adicionado ao LVM. Os aplicativos que manipulam o volume físico, começam com as letras
Por exemplo: /dev/hda1
- VG (Volume Group) - Corresponde ao grupo de volumes físicos que fazem parte do LVM. Do grupo de volume são alocados os espaços para criação dos volumes lógicos. Os aplicativos que manipulam o o grupo de volume, começam com as letras
vg*
.
- VG (Volume Group) - Corresponde ao grupo de volumes físicos que fazem parte do LVM. Do grupo de volume são alocados os espaços para criação dos volumes lógicos. Os aplicativos que manipulam o o grupo de volume, começam com as letras
Por exemplo: /dev/lvmdisk0
LV (Logical Volume) - Corresponde a partição lógica criada pelo LVM para gravação de dados. ao invés de ser identificada por nomes de dispositivos, podem ser usados nomes comuns para se referir as partições (tmp,usr,etc.). O Volume lógico é a área onde o sistema de arquivo é criado para gravação de dados, seria equivalente a partição em um sistema SEM LVM só que lógica ao invés de física. O volume lógico tem seu espaço dividido em LE (Logical Extends, ou extensões lógicas) que correspondem aos PE's alocados.
Exemplos: /dev/lvmdisk/usr
, /dev/lvmdisk/tmp
, etc.
Representação gráfica do LVM
editarDesenvolvi 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:
- Nós temos dois volumes físicos representados por
hda1
ehdb1
. Cada um desses volumes físicos tem um Phisical Extend (PE) de 4M (o padrão). - Estes dois volumes físicos acima representam o espaço total do grupo de volume lvmdisk em
/dev/lvmdisk
. - 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/dev/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
editarUm 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.
Colocando LVM em seu sistema
editarNesta 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.
- 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
. - Instale o pacote
lvm10
e uma imagem de kernel 2.4 que tenha suporte a LVM, ou compile seu próprio kernel (caso goste de máquinas turbinadas :-) - 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 :-)
- Rode o
pvcreate
no disco ou partição para dizer que ela será um volume físico do LVM: pvcreate /dev/hda1 ou pvcreate /dev/hda
Em caso de dúvida sobre qual é a partição LVM, digite: fdisk -l /dev/hda (supondo que /dev/hda
é o disco rígido que está configurando o LVM).
- 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, ou algo mais complexo baseado em initrd :-)
- Crie o grupo de volume na partição vgcreate lvmdisk /dev/hda1 /dev/hdb7... Note que partições de discos diferentes podem fazer parte de um mesmo grupo de volume (VG) do LVM. Caso use o devfs, 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.
- Verifique o grupo de volume (VG) recém criado com o comando:
vgdisplay
ouvgdisplay /dev/hda6
. Atente para a linha "Free PE / tamanho", que indica o espaço livre restante para criar os volumes lógicos (LV). - 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. - 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 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
editarO 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. Para alterar o tamanho durante a execução do sistema operacional, é necessária a aplicação do patch ext2online no 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
editarPara 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 neste o sistema de arquivos é reduzido primeiro e depois o LV:
- ext2/3
- e2fsadm -L-1G /dev/lvmdisk/tmp
Você também poderá usar o resize2fs
e depois o lvreduce
, mas deverá dizer o tamanho em blocos para o resize2fs
que varia de acordo com o tamanho do sistema de arquivos:
resize2fs /dev/lvmdisk/tmp 524288 lvreduce -L-1G /dev/lvmdisk/tmp
OBS: Você deverá desmontar o sistema de arquivos antes de alterar o tamanho do sistema de arquivos, a não ser que tenha o patch ext2online aplicado no kernel.
- reiserfs
- resize_reiserfs -s-1G /dev/lvmdisk/tmp 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/2003).