# Guia do Linux/Iniciante+Intermediário/Discos e Partições/LVM - Logical Volume Manager
## 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:
** 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

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

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

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

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

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