Saltar para o conteúdo

Guia do Linux/Iniciante+Intermediário/Discos e Partições/LVM - Logical Volume Manager

Origem: Wikilivros, livros abertos por um mundo aberto.

LVM - Logical Volume Manager

[editar | editar código-fonte]

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:

    • 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.

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*.

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

[editar | editar código-fonte]

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:

  • 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).
  • 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

[editar | editar código-fonte]

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.

Colocando LVM em seu sistema

[editar | editar código-fonte]

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.

  • 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 ou vgdisplay /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

[editar | editar código-fonte]

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. 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

[editar | editar código-fonte]

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 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).