O Gerenciador de Volumes Lógicos[1] (LVM) é um subsistema para gerenciamento ativo de armazenagem em disco que se transformou em um padrão para gerenciamento de armazenagem em sistemas UNIX.
O Gerenciador de Volumes Lógicos consiste em uma camada adicional entre os dispositivos físicos e a interface de E/S no kernel para fornecer uma visão lógica no armazenamento. Ao contrário dos esquemas de particionamento atuais onde discos são divididos em partições contínuas de tamanho fixo, o LVM permite ao usuário considerar discos, também conhecidos como Volumes Físicos[2] (PV), como um volume de armazenamento de dados, consistindo de extensões de tamanhos iguais.
Um sistema de LVM compõe-se de grupos arbitrários de volumes físicos, organizados em Grupos de Volumes[3](VG). Um grupo de volume pode consistir de um ou mais volumes físicos. Pode haver mais de um grupo de volume no sistema. Uma vez criado, o grupo de volume, e não o disco, é a unidade básica de armazenamento de dados (um disco virtual compondo-se de um ou mais discos físicos).
A quantidade de espaço em disco, que é representada por um grupo de volume, pode ser alocada em partições virtuais, chamadas de Volumes Lógicos[4] (LV) de vários tamanhos. Um volume lógico pode conter um número de volumes físicos ou representar apenas uma porção de um volume físico. O tamanho de um volume lógico é determinado pelo seu número de extensões. Uma vez criados, volumes lógicos podem ser utilizados como partições de disco regulares - para criar um sistema de arquivos ou um dispositivo de troca.
Tradicionalmente, o tamanho de uma partição é definido na instalação do sistema. O redimensionamento de partições estáticas pode ser realizado com o aplicativo parted. Isso requer que o administrador faça um planejamento prévio da quantidade máxima de dados que a partição poderá vir a armazenar no futuro. Quando um usuário exceder o espaço de uma partição, ele terá de reparticionar (o que pode envolver uma reinstalação completa do sistema) ou se utilizar de artifícios, como as ligações simbólicas.
Por exemplo, suponha que você possui um disco de 1GB e cria-se uma partição /home utilizando 600MB. Imagine que você necessita de mais espaço e descobre que será necessário 1GB no /home. Utilizando a antiga noção de partições, é necessário ter outra unidade de pelo menos 1GB de tamanho. Então, pode-se adicionar o disco, criar o novo /home e copiar os dados existentes para ele.
Entretanto, com uma configuração LVM, é necessário apenas adicionar um disco de 400MB (ou maior) e adicionar esta unidade de armazenamento na partição /home. Outras ferramentas permitem o redimensionamento de um sistema de arquivos já existente sem a necessidade de se reformatar o mesmo.
Nota: Note que, como o LVM depende de módulos do kernel, algumas partições simplesmente não podem ser usadas com LVM. O / e o /boot são exemplos claros disso, pois os módulos do kernel necessários para a montagem de um volume virtual (além do próprio kernel) não estariam acessíveis.
O LVM vem com vários jargões que precisam ser entendidos para não haver problemas com os sistemas de arquivos. Nesta seção será vista esta terminologia utilizada pelo LVM.
Você deve usar a palavra física com um pouco de cuidado; de qualquer forma, inicialmente ela será vista como sendo um simples disco rígido, ou uma partição. Por exemplo, /dev/hda, /dev/hda2, /dev/sda. Pode-se transformar qualquer número consecutivo de blocos de um dispositivo de blocos em um Volume Físico.
Um PV[5] não é nada mais que um meio físico com alguns dados administrativos adicionados a ele - uma vez que adicione-se estes dados, o LVM irá reconhecê-los como proprietários das Extensões Físicas.
Extensões Físicas[6] são como blocos de um sistema de arquivos (regiões contínuas do disco) realmente grandes, muitas vezes com um tamanho na casa dos megabytes. PEs podem ser atribuídas a um Grupo de Volumes.
Um VG[7] é composto por um determinado número de Extensões Físicas. Deste Grupo de volumes, PEs podem ser atribuídas a um Volume Lógico.
Um Volume Lógico é o resultado final de todo o trabalho, e é aqui que as informações são armazenadas. Ele é um dispositivo de bloco funcionalmente equivalente a uma partição. É sobre o Volume Lógico que será criado um sistema de arquivos.
O sistema de arquivos pode ser de vários tipos: o ext2 padrão, o ext3, ReiserFS, etc. Para o usuário, não há diferença entre uma partição regular e um Volume Lógico.
Seguem alguns diagramas que ajudarão a visualizar estes conceitos.
A figura mostra dois sistemas de arquivos, dividindo dois discos. O sistema de arquivos /home contém quatro Extensões Físicas, o sistema de arquivos /var duas.
Para implementar a solução LVM não é necessário nenhum requisito adicional. Se desejar uma implementação do LVM em mais discos rígidos, basta adquirí-los.
É bom lembrar também que a implementação do LVM pode ser feita durante a instalação, pois o instalador possui a opção para a criação de volumes lógicos para as partições selecionadas.
Para esta solução, você precisa executar o Synaptic e selecionar os seguintes pacotes:
lvm-base
lvm-iop10
lvm-iop6
util-linux
ou utilize o apt para a instalação:
apt-get install lvm-.* util-linux |
Será apresentado aqui um exemplo comentado mostrando o processo para a criação de um Volume Lógico. Serão utilizadas duas partições em um mesmo disco para este exemplo, /dev/hda5 e /dev/hda6 com 2GB e 1GB respectivamente. O uso de LVM faz mais sentido com partições em discos diferentes, porém aqui, somente para fins didáticos, será usado um mesmo disco, sendo estas mesmas regras aplicáveis a vários discos. Os dados destas partições serão perdidos.
Observe as figuras mostradas anteriormente em caso de dúvida. Primeiramente, serão modificados os tipos das partições /dev/hda5 e /dev/hda6 para 0x8e.
# fdisk /dev/hda |
Carregue o módulo do LVM:
# insmod lvm-mod |
Para criar o arquivo /etc/lvmtab vazio, execute o comando:
# vgscan |
Agora pode-se criar os Volumes Físicos utilizando o comando a seguir:
# pvcreate /dev/hda5 |
Adicione este dois PVs a um Grupo de Volumes chamado test com o comando vgcreate:
# vgcreate test /dev/hda5 /dev/hda6 |
Para criar o arquivo /etc/lvmtab, execute o comando:
# vgscan |
Caso os Grupos de Volumes estejam inativos, utilize o comando vgchange com o parâmetro -ay para ativar todos os VGs disponíveis:
# vgchange -ay |
Existe um Grupo de Volumes vazio; visualize-o vgdisplay com o parâmetro - -verbose ou -v:
# vgdisplay -v test |
Pode-se observar que não há Volumes Lógicos definidos; deve-se, portanto, criar um para poder utilizá-lo. Também é possível ver com este comando o estado dos PVs, seus nomes e o número total de blocos alocados e disponíveis. Gere um volume de 500MB chamado lv01 no Grupo de Volumes test:
# lvcreate -L 500M -n lv01 test |
Crie um sistema de arquivos:
# mke2fs /dev/test/lv01 |
Crie um diretório para montar este sistema de arquivos e observe o seu tamanho:
# mkdir /mnt/lvm |
Veja novamente o Grupo de Volumes e observe as mudanças:
# vgdisplay -v test |
Todas as informações do VG estão disponíveis na saída deste comando, como seu nome, tipo de acesso, estado atual, parâmetros do LV e PV e tamanhos totais e alocados do PE. O /dev/hda6 está totalmente livre, enquanto que o /dev/hda5 está com 125 Extensões Físicas em uso.
É possível também fazer redimensionamentos do volume lógico. O primeiro que será coberto por esta configuração é o aumento de um volume lógico.
O pré-requisito para esta operação é ter espaço livre no Grupo de Volumes, caso contrário deve-se adicionar mais PVs. A seguinte linha de comando faz esta operação:
# lvextend -L+2000M /dev/test/lv01 |
Aumenta-se, com esta operação, o Volume Lógico /dev/test/lv01 em 2000MB. Note que o sistema de arquivos ainda não foi redimensionado, e portanto:
# df -h /dev/test/lv01 |
A partição ainda apresenta o seu tamanho original.
Uma segunda operação que pode ser feita é aumentar o sistema de arquivos. Primeiramente vamos desmontar o nosso sistema de arquivos:
# umount /mnt/lvm |
Antes de redimensioná-lo force a verificação do sistema de arquivos com o e2fsck:
# e2fsck -f /dev/test/lv01 |
Basta redimensionar o sistema de arquivos com a ferramenta resize2fs:
# resize2fs /dev/test/lv01 |
Você também poderá utilizar o comando resize_reiserfs para redimensionar sistemas de arquivos ReiserFS.
Já é possível montar novamente o sistema de arquivos e verificar seu novo tamanho:
# mount /dev/test/lv01 /mnt/lvm/ |
Diminua o sistema de arquivos para depois diminuir também o Volume Lógico. Primeiramente desmonte o sistema de arquivos:
# umount /mnt/lvm/ |
Force a verificação do sistema de arquivos com o comando:
# e2fsck -f /dev/test/lv01 |
Redimensione o sistema de arquivos para 500 mil blocos (500MB aproximadamente); por exemplo:
# resize2fs /dev/test/lv01 500000 |
De uma forma similar ao comando que foi usado para aumentar o Volume Lógico, agora porém com um valor negativo, pode-se diminuir o Volume Lógico:
# lvreduce -L-2000M /dev/test/lv01 |
Também é possível especificar um valor absoluto em blocos, como -L50 por exemplo. Force a verificação do sistema de arquivos novamente:
# e2fsck -f /dev/test/lv01 |
-->Redimensione novamente o sistema de arquivos para aproveitar ao máximo o tamanho do Volume Lógico:
# resize2fs /dev/test/lv01 |
Monte novamente o sistema de arquivos e observe seu tamanho reduzido:
# mount /dev/test/lv01 /mnt/lvm/ |
O valor é um pouco diferente dos 500MB originais, pelo fato de que 500 mil blocos não correspondem exatamente a 500MB. Se fosse preciso ter um valor exato, deve-se fazer o cálculo com mais precisão e especificar os valores precisos em número de blocos.
Por questões de performance, é possível distribuir dados em múltiplos discos. Isto significa que o bloco 1 está no Volume Físico A, e o bloco 2 está no PV B, enquanto que o bloco 3 pode estar no PV A novamente. Também é possível fazer stripes com mais de dois discos.
Esse arranjo disponibiliza uma maior largura de banda, em razão do paralelismo no acesso aos dados.
A performance de disco é influenciada pelo menos por três fatores. O mais óbvio é a velocidade em que cada dado no disco pode ser lido ou escrito seqüencialmente. Este é o fator limitante quando se está lendo ou gravando um arquivo grande em um barramento SCSI/IDE com apenas um disco.
Há a largura de banda disponível para o disco. Se existem sete discos em uma interface SCSI, a limitação de banda pode causar um impacto maior que a velocidade de escrita para o próprio disco. Com um orçamento suficiente, pode-se prevenir e evitar que este gargalo se torne um problema.
A latência é sempre um problema e para minimizá-la não pode-se simplesmente aumentar os custos para termos uma latência menor. A maioria dos discos aparentemente tem um latência de algo em torno de sete milissegundos. Existe a latência de SCSI, que tende a ser algo em torno de 25 milissegundos.
A latência combinada em um caso típico será em torno de 30 milissegundos. É possível, portanto, efetuar aproximadamente, apenas 33 operações em disco por segundo. Se deseja-se uma capacidade para fazer várias centenas de requisições por segundo, e o cache não é muito grande, não é possível realizar esta tarefa.
Se múltiplos discos trabalham em paralelo, múltiplos comandos podem ser executados simultaneamente, que facilmente irão resolver o problema da latência. Algumas aplicações, como um servidor de notícias muito grande, não irão funcionar sem striping ou outras técnicas ágeis de E/S[8].
Isto é o que o striping pode fazer. Se o barramento tem este suporte, cada leitura e cada escrita seqüencial poderão ser mais rápida.
O striping sem medidas adicionais aumenta as chances de falhas, em uma visão de bits. Se alguma coisa nos discos falhar, todo o Volume Lógico irá falhar junto. Se os dados forem concatenados, apenas uma parte do sistema de arquivos será perdida. Em último caso, pode-se utilizar espelhamento em stripes.
A configuração que especifica as stripes é feita quando cria-se o Volume Lógico com o comando lvcreate. Há dois parâmetros relevantes. Com o -i indica-se para o LVM quantos Volumes Físicos serão usados. O striping na realidade não é feito em uma base bit-por-bit, mas em blocos. Com o -I especifica-se a granulação em kilobytes. Note que este valor deve ser uma potência de 2, e que a granulação grosseira é de 128KB. Por exemplo:
# lvcreate -n slv01 -i 2 -I 64 test -L 200M |
Criando o sistema de arquivos:
# mke2fs /dev/test/slv01 |
Efetue a montagem do dispositivo e verifique seu tamanho:
# mount /dev/test/slv01 /mnt/lvm/ |
Notícias de Desempenho: O ganho de desempenho poderá ser muito negativo se for colocada mais que uma partição do mesmo disco em uma stripe - isto deve ser evitado. O striping com dois discos em uma única interface IDE também se torna inviável - isto dependerá da tecnologia IDE para resolver este problema.
Placas mãe antigas podem ter duas interfaces IDE, porém o uso da segunda pode ser catastrófico, se for dedicada a servir uma unidade de CD-ROM lenta. Benchmarks podem ser efetuados com várias ferramentas; a mais notória se chama Bonnie++, e pode ser encontrada em , podendo ser usada para medir o desempenho dos dados.
O teste principal consiste em acessar as partições que foram configuradas e, como foi mostrado na seção Configuração, redimensioná-las para o tamanho que se deseja.
Experimente também colocar outros discos; o procedimento é similar ao descrito neste capítulo. Teste os volumes acessando as partições.
Documento do LVM .
Gerenciador gráfico para LVM, com algumas informações .
[1] |
Logical Volume Manager. |
[2] |
Physical Volumes. |
[3] |
Volume Groups. |
[4] |
Logical Volumes. |
[5] |
Physical Volume. |
[6] |
Physical Extents. |
[7] |
Volume Group. |
[8] |
Entrada/Saída |