LVM – Logical Volume Manager
Tutorial Gerenciador de Volumes Lógicos
Autor: Marcio Katan
Técnico de Suporte Linux e Instrutor Certificado Conectiva Mandriva
Autor do livro: Linux no Computador Pessoal com Conectiva 10
marcio_katan@yahoo.com.br
Rio de Janeiro – RJ
Logical Volume Manager – Gerenciador de Volumes Lógicos
O LVM é uma implementação que permite agrupar vários dispositivos (partições e/ou HDs) para formar um único volume de armazenamento de dados. Este volume (dispositivo) pode ser dimensionado de acordo com as necessidades do sistema (servidor). Por redimencionamento, podemos dizer que ele pode ter seu tamanho (capacidade de armazenamento) aumentado e/ou até mesmo diminuído.
A grande vantagem do LVM é a flexibilidade de se trabalhar com o sistema de arquivos do GNU/Linux.
Para se trabalhar com o LVM no GNU/Linux, deve-se conhcer os componentes de um sistema LVM. Vejamos:
PV (Physical Volume – Volume Físico) – Dispositivo primário (básico) do volume lógico. É o dispositivo de bloco (HD e/ou partição) utilizado para se criar o volume de armazenamento.
PE (Physical Extent – Extensão Física) – São unidades de alocação do Volume lógico mapeados no PV. Todo PV é (sub)dividido em PEs que irão determinar o tamanho final do volume. A PE é utilizado pelo LVM para redimensionar e determinar o tamanho final do volume. O número de PEs de um sistema LVM é sempre de 64K (65.536) e não pode ser mudado. E o seu tamanho varia de 8KB (mínimo) para um volume de armazenamento de 512 MB a 16GB (máximo) para um volume de armazenamento de 2TB (dois Tera-bytes!)
Na hora de se configurar o tamanho da PE, se este valor for omitido, no sistema Debian, assume-se o valor padrão de 4MB, limitando o tamanho do volume em 256GB (de acordo com a página man do comando vgcreate do LVM). No Mandriva, se omitido, assume-se o mesmo valor. O sistema utilizado como base foi o Debian Sarge 3.1 r0.
Lembre-se sempre deste detalhe acima explicado!
VG (Volume Group – Grupo de Volumes) – Agrupamento de PVs para se criar um volume de armazenamento. É na VG que agrupamos as PVs para criar um volume de armazenamento.
LV (Logical Volume – Volume Lógico) – Criado à partir do VG, é a unidade de armazenamento do LVM. É neste que será criado o sistema de arquivos para armazenar os dados.
O primeiro componente de um LVM é o PV. É o dispositivo primário do LVM. Pode ser uma partição ou até mesmo um HD inteiro. Ao se trabalhar com LVM, deve-se, primeiro, criar os PVs definidos previamente no programa FDISK. O código no fdisk a ser utilizado para a partição é 8e Linux LVM (0x082 em hexadecimal).
Após definido os PVs, deve-se agrupá-los na VG para ser utilizada no LVM. Atenção especial deve ser dada na hora de se criar a VG, pois é na VG que será definido o tamanho da PE utilizado na criação do volume lógico.
Muita atenção neste detalhe!
E finalmente, após criada a VG, podemos criar (definir) o LV (volume lógico) que será utilizado para armazenamento dos dados.
Veja o esquema abaixo:

O sistema de arquivos (ext2/3, reiserfs, xfs, etc) deve ser criado “por cima” do LV. Somente depois de criado o dispositivo de armazenamento (LV) é que definimos o tipo de sistema de arquivos a ser utilizado.
Vários LVs podem ser criados à partir do VG, desde que aqueles (LVs) não ultrapassem o tamanho deste (da VG).

Criando o Volume:
Para a confecção do tutorial foi utilizado o Sistema Debian Sarge 3.1 r0, com dois HDs SCSI de 4GB cada. Os pacotes necessráios para o LVM são lvm2 e lvm10.
O primeiro HD (sda) contém o sistema raiz(/) e a SWAP. O segundo será utilizado para a criação do volume lógico para armazenamento dos dados.
Antes de começar a trabalhar com o LVM, devemos configurar os dispositivos (partições) no fdisk para serem reconhecidas. Se o LVM for configurado no momento da instalação da distribuição, este passo não será necesário, visto que, o instalador irá configurar isto.
Entre no fdisk e marque (sinalize) as partiçõoes como sendo do tipo 8e linux LVM.
Depois de feito este passo, deveremos ter algo como o equema abaixo:
|
debian:~# fdisk -l |
|
|
|
|
||
|---|---|---|---|---|---|---|
|
|
||||||
|
Disk /dev/sda: 4294 MB, 4294967296 |
||||||
|
255 heads, 63 sectors/track, 522 cylinders |
||||||
|
Units = cilindros of 16065 * 512 = 8225280 bytes |
||||||
|
|
||||||
|
Dispositivo |
Boot |
Start |
End |
Blocks |
Id |
System |
|
/dev/sda1 |
* |
1 |
496 |
3984088+ |
83 |
Linux |
|
/dev/sda2 |
|
497 |
522 |
208845 |
5 |
Estendida |
|
/dev/sda5 |
|
497 |
522 |
208813+ |
82 |
Linux swap / Solaris |
|
|
||||||
|
Disk /dev/sdb: 4294 MB, 4294967296 |
||||||
|
255 heads, 63 sectors/track, 522 cylinders |
||||||
|
Units = cilindros of 16065 * 512 = 8225280 bytes |
||||||
|
|
||||||
|
Dispositivo |
Boot |
Start |
End |
Blocks |
Id |
System |
|
/dev/sdb1 |
|
1 |
62 |
497983+ |
8e |
Linux LVM |
|
/dev/sdb2 |
|
63 |
124 |
497015 |
8e |
Linux LVM |
|
/dev/sdb5 |
|
125 |
186 |
498015 |
8e |
Linux LVM |
|
|
||||||
Foram criados 3 (três) dispositivos (partições) de 500MB cada uma.
Com os dispositivos prontos, podemos partir para a configuração do LVM.
O primeiro passo na configuração do LVM, é verificar se o kernel está com o suporte ativado. Para tanto, digite:
debian:~# cat /proc/devices | grep mapper
254 device-mapper
Se a reposta for igual a esta, o sistema está pronto. Se não, instale o pacote lvm10 e lvm2.
Devemos agora executar o comando vgscan para criar o arquivo /etc/lvmtab e o diretório /etc/lvmtab.d ou então iniciar o serviço lvm em /etc/init.d:
debian:~# vgscan
Reading all physical volumes. This may take a while...
No volume group found
Ou:
debian:~# /etc/init.d/lvm start
Setting up LVM Volume Group
Reading all physical volumes. This may take a while...
No volume group found
No volume group found
No volume group found
Este último passo, carrega todos os módulos necessários ao LVM , e é o mais indicado.
Com o arquivo e diretório criados, e os módulos do LVM carregados, podemos criar as Pvs.
Começaremos por criar duas PVs apenas. Mais adiante será ensinado como criar outras PVs para serem adicionadas ao VG, e consequentemente, adicionado ao LV.
Criando as PVs
O comando para criar PVs é o pvcreate.
pvcreate <device1> <device2> ... <deviceN>
Digite:
debian:~# pvcreate /dev/sdb1 /dev/sdb2
Physical volume “/dev/sdb1” successfully created
Physical volume “/dev/sdb2” successfully created
Podemos visualizar as PVs criadas com o comando pvscan:
debian:~# pvscan
PV /dev/sdb1 lvm2 [486,12 MB]
PV /dev/sdb2 lvm2 [486,12 MB]
PV /dev/sdb3 lvm2 [486,12 MB]
Total: 3 [1,42 GB] / in use: 0 [0 ] / in no VG: 3 [1,42 GB]
Com as PVs criadas, podemos criar a VG para “abrigar” as PVs. Nossa VG será chamada VG00 (VG zero zero)
ATENÇÃO: É neste momento que definimos o tamanho da PE para ser utilizado no volume lógico.
Como o sistema foi somente utilizado para testes, e possui um HD de 4 GB, foi definido em 64KB o tamanho da PE, permitindo om volume de até 4GB.
Hoje é muito comum HDs de grande capacidade de armazenamento – 120, 160 GB – de tamanho. Neste caso, a PE deve ter no mínimo 8MB de tamanho para se trabalhar com folga. Este valor (8MB) permite um volume lógico de até 512 GB de capacidade. Muito!? Você decide!
Criando a VG
Digite:
debian:~# vgcreate vg00 -s 64k /dev/sdb1 /dev/sdb2
Volume group “vg00” successfully created
Devemos agora ativar o VG criado:
debian:~# vgchange -ay
0 logical volume(s) in volume group “vg00” now active
Visualizando os detalhes da VG criada:
debian:~# vgdisplay -v vg00
Finding volume group “vg00”
- - - Volume group - - -
VG Name vg00
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 2
Act PV 2
VG Size 971,81 MB
PE Size 64,00 KB
Total PE 15549
Alloc PE / Size 0 / 0
Free PE / Size 15549 / 971,81 MB
VG UUID h0TW1H-Wpka-5FWF-UZt4-U8Rx-Zplb-wkMLMs
- - - Physical volumes - - -
PV Name /dev/sdb1
PV UUID Wfe6vb-p5UX-1KNH-Jk5A-RI3n-gk6z-e7RtyV
PV Status allocatable
Total PE / Free PE 7774 / 7774
PV Name /dev/sdb2
PV UUID t2HFVs-ik2F-HWnh-1N97-3JKll2-gk8yp-e7RT56
PV Status allocatable
Total PE / Free PE 7775 / 7775
O comando acima mostra detalhes do VG e das duas PVs adicionadas à ela.
Criando o LV
Agora que a Vg fo criada, podemos criar o LV. O comando para isto é o lvcreate.
lvcreate -L <size[kKmMgGtT] -n <LV_name> <VG_base>
Opções:
-L <size> Tamanho do LV.
-n <LV_name> Nome do Volume Lógico (LV)
<VG_base> Nome da VG que foi criada para abrigar o LV
debian:~# lvcreate -L 700M -n lv00 vg00
Logical volume “lv00” created
Com o LV criado, podemos verificar as informações sobre ele:
debian:~# lvdisplay
- - - Logical volume - - -
LV Name /dev/vg00/lv00
VG Name vg00
LV UUID v333hu-3BJM-m4o0-t4UY-cay4-KNDv-GPT4sY
LV Write Access read/write
LV Status available
# open 0
LV Size 700,00 MB
Current LE 11200
Segments 2
Allocation inherit
Read ahead sectors 0
Block device 254:0
Formatando o LV – Criando o Sistema deArquivos
Com o LV pronto, podemos formatá-lo para ser usado. O sistema de arquivos fica a critério de cada um. Como exemplo, utilizarei o ext3.
debian:~# mkfs.ext3 -c /dev/vg00/lv00
mke2fs 1.37 (21-Mar-2005)
Filesystem label =
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
89664 inodes, 179200 blocks
8960 blocks (5.00%) reserved for the super user
First data block=0
6 block groups
32768 blocks per group, 32768 fragments per group
14944 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840
Checking for bad blocks (read-only test): done
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 25 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
Montando o dispositivo
Falta-nos agora criar o ponto de montagem para utilizar o volume lógico e montá-lo.
debian:~# mkdir /dados
debian:~# mount /dev/vg00/lv00 /dados
kjournald starting. Commit interval 5 seconds
EXT3 FS on dm-0, internal journal
EXT3-fs: mounted filesystem with ordered data mode
Podemos, agora, verificar o dipositivo montado:
debian:~# df -h
|
Sist. Arq. |
Tam |
Usad |
Disp |
Uso% |
Montado em |
|
|---|---|---|---|---|---|---|
|
/dev/sda1 |
3,8G |
402M |
3,2G |
12% |
/ |
|
|
tmpfs |
94M |
0 |
94M |
0% |
/dev/shm |
|
|
/dev/mapper/vg00-lv00 |
689M |
17M |
638M |
3% |
/dados |
|
Para efetuar a montagem de modo automático no momento do boot, basta edita o arquivo /etc/fstab. Ele deverá ficar parecido com o sequema abaixo (somente a última linha nos interessa):
# /etc/fstab: static file system information
#
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc defaults 0 0
/dev/sda1 / ext3 defaults,errors=remount-ro 0 1
/dev/sda5 none swap sw 0 0
/dev/hdc /media/cdrom0 iso9660 ro,user,noauto 0 0
/dev/fd0 /media/floppy0 auto rw,user,noauto 0 0
#
# Dispositivo LVM
/dev/vg00/lv00 /dados ext3 defaults 0 2
Após adicionar o volume no arquivo /etc/fstab, salvar e sair do editor, digite mount -a. Se não aparecer nenhuma mensagem de erro, o arquivo foi editado corretamente e o dispositivo reconhecido.
Redimensionando o Volume Lógico
Aumentado o tamanho do volume lógico
Em um determindao momento da administração de nossos servidrores, o espaço de armazenamento torna-se escasso. Com o uso do LVM isto é superado facilmente.
Para redimensionar o tamanho do volume lógico, alguns passos são necessários e, estes, devem ser executados com a máxima cautela e precisão “cirúrgica”! Um erro na sequência dos comandos abaixo, e seu volume lógico pode ir para o “espaço”! Você foi avisado!
Pirmeiro devemos desmontar o volume lógico do seu ponto de montagem:
debian:~# umount /dados
Com o volume desmontado, devemos executar a ferramenta lvextend, e com ela, indicar o quanto quremos acrescer o tamanho do volume lógico. Como exemplo, irei aumentar o tamanho do volume em mais 150MB.
debian:~# lvextend -L +150M /dev/vg00/lv00
Extending logical volume lv00 to 850,00 MB
Logical volume lv00 successfully resized
A opção -L do lvextend funciona de duas maneiras:
Se omitido o sinal de “+”, o valor a ser acrescentado é o valor original do volume, mais o valor a ser acrescido. Por exemplo: O nosso volume possui 700MB de tamanho. Para alcançarmos o tamanho de 850MB, teríamos que colocar o comando da seguinte maneira:
lvextend -L850MB /dev/vg00/lv00
Ou seja. O valor para o opção -L seria os 700MB do valor atual, mais os 150MB que seriam acrescido.
Com a opção -L +<valor>, basta colcarmos o valor a ser acrescido.
Após o comando de extensão do volume, deve ser executado a ferramenta de verificação do sistema de arquivos – o fsck.
debian:~# fsck.ext3 -f /dev/vg00/lv00
e2fsck 1.37 (21-Mar-2005)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/vg00/lv00: 11/89664 files (0.0% non-contiguous), 6929/179200 blocks
Por último, temos que executar a ferramenta de redimensionamento do sistema de arquivos – resize2fs.
debian:~# resize2fs /dev/vg00/lv00
resize2fs 1.37 (21-Mar-2005)
Resizing the filesystem on /dev/vg00/lv00 to 217600 (4k) blocks.
The filesystem on /dev/vg00/lv00 is now 217600 blocks long.
Agora é só montar o volume já redimensionado e verificar o seu tamanho:
debian:~# mount /dev/vg00/lv00 /dados
kjournald starting. Commit interval 5 seconds
EXT3 FS on dm-0, internal journal
EXT3-fs: mounted filesystem with ordered data mode
debian:~# df -h
|
Sist. Arq. |
Tam |
Usad |
Disp |
Uso% |
Montado em |
|---|---|---|---|---|---|
|
/dev/sda1 |
3,8G |
402M |
3,2G |
12% |
/ |
|
tmpfs |
94M |
0 |
94M |
0% |
/dev/shm |
|
/dev/mapper/vg00-lv00 |
838M |
17M |
779M |
3% |
/dados |
Por causa do uso do LVM, o sistema dearquivos perde um pouco de sua capacidade.
Adicinando PVs ao VG
A medida em ocupamos o espaço no volume lógico, surge a necesidade de se adicionar mais dispositivos ao volume. Esta é a grande vamtagem do LVM, a adição de dispositvos após o LVM estar configurado e funcionando (em operação).
Para adicionar um novo dispositivo no volume, primeiro, devemos desmontar o LV:
debian:~# umount /dados
Com o volume desmontado, temos que criar o PV com a nova partição:
debian:~# pvcreate /dev/sdb3
Physical volume “/dev/sdb3” successfully created
Devemos agora adicionar o novo PV ao VG do volume que estamos utilizando. O comando para isto é o vgextend.
vgextend <VG> <PV>
debian:~# vgextend vg00 /dev/sdb3
Volume group “vg00” succesfully extended
Podemos agora verficar as alterações no VG:
debian:~# vgdisplay -v vg00
Using volume group(s) on command line
Finding volume group “vg00”
- - - Volume group - - -
VG Name vg00
System ID
Format lvm2
Metadata Areas 3
Metadata Sequence No 4
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 0
Max PV 0
Cur PV 3
Act PV 3
VG Size 1,42 GB
PE Size 64,00 KB
Total PE 23324
Alloc PE / Size 13600 / 850,00 MB
Free PE / Size 9724 / 607,75 MB
VG UUID h0TWlH-Wpka-5FWF-UZt4-U8Rx-ZpLb-wkMLMs
- - - Logical volume - - -
LV Name /dev/vg00/lv00
VG Name vg00
LV UUID v333hu-3BJM-m4o0-t4Uy-caY4-KNDv-GPT4sY
LV Write Access read/write
LV Status available
# open 0
LV Size 850,00 MB
Current LE 13600
Segments 2
Allocation inherit
Read ahead sectors 0
Block device 254:0
- - - Physical volumes - - -
PV Name /dev/sdb1
PV UUID WFe6vb-p5UX-1KNH-Jk5A-RI3n-gk6z-e7RtyV
PV Status allocatable
Total PE / Free PE 7774 / 0
PV Name /dev/sdb2
PV UUID t2HFVs-lK24-HWsH-1N97-K0Tk-zoTJ-M01ksq
PV Status allocatable
Total PE / Free PE 7775 / 1949
PV Name /dev/sdb3
PV UUID CCc1Fc-pTpd-sUxV-oOJe-ujgA-zrSP-K9fr9S
PV Status allocatable
Total PE / Free PE 7775 / 7775
Temos agora três PV em nosso volume. É só aumentar o tamanho do LV para poder usufruir do novo dispositivo adicionado.
Reduzindo o volume lógico
Pode parecer incoerente diminuir a capacidade de armazenamento de um dipositivo LVM. Mas pode acontecer. E você deve estar preparado. Neste caso, pode-se, somente, dimunuir o tamanho do LV, ou até mesmo retirar do volume um dispositivo que não esteja sendo utilizado.
ATENÇÃO: O processo de redução é feito de forma um pouco diferente da de aumento do LV.
Diminuindo o volume lógico
Primeiro temos que desmontar o LV:
debian:~# umount /dados
A primeira ferramenta a ser utilizada é o resize2fs. Neste caso, temos que passar ao resize2fs o quanto queremos de tamanho final para o nosso dispositivo LV. Este paramêtro deve ser passado em tamanhos de bloco – 1000 (mil) blocos equivalem a 1MB.
Vamos reduzir o nosso LV para 500MB - 500000 (500 mil blocos).
debian:~# resize2fs /dev/vg00/lv00 500000
resize2fs 1.37 (21-Mar-2005)
The containing partition (or device) is only 263376 (4k) blocks.
You requested a new size of 500000 blocks.
Podemos, agora, diminuir o tamanho do volume utilizando a ferramenta lvreduce.
Esteja ciente do uso desta ferramenta, pois se houver dados no espaço em que estiver sendo reduzido, este processo poderá corromper o sistema de arquivos do volume lógico.
lvreduce -L <-tamanho> <LV>
debian:~# lvreduce -L500M /dev/vg00/lv00
WARNING: Reducing active logical volume to 500,00 MB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce lv00? [y/n]: y
Reducing logical volume lv00 to 500,00 MB
Logical volume lv00 successfully resized
Repare que o tamanho passado como paramêtro para a opção -L é o tamanho final do LV.
Agora é só montar e verificar o espaço diminuído:
debian:~# mount /dev/vg00/lv00 /dados
debian:~# df -h
|
Sist. Arq. |
Tam |
Usad |
Disp |
Uso% |
Montado em |
|---|---|---|---|---|---|
|
/dev/sda1 |
3,8G |
402M |
3,2G |
12% |
/ |
|
tmpfs |
94M |
0 |
94M |
0% |
/dev/shm |
|
/dev/mapper/vg00-lv00 |
489M |
21M |
468M |
3% |
/dados |
Removendo dispositivos
Removendo LV
Para se remover um volume lógico, utilizamos o comando lvremove:
debian:~# lvremove /dev/vg00/lv00
Do you really want to remove active logical volume “lv00”? [y/n]: y
Logical volume “lv00” successfully removed
Removendo PVs da VG
Caso alguma PV não esteja sendo utilizada, podemos removê-la do VG.
debian:~# vgreduce vg00 /dev/sdb3
Removed “/dev/sdb3” from volume group “vg00”
OBS.: Caso a ferramenta vgreduce apresente algum problema, pode-se utilizar a opção - - removemissing.
Removendo VG
debian:~# vgremove vg00
Volume group “vg00” successfully removed
Com a VG removida, podemos utilizar as PVs livremente.
Referências:
http://www.tldp.org/HOWTO/LVM-HOWTO/
The LVM HOW-TO
http://www.conectiva.com/doc/livros/online/9.0/servidor/lvm.html
Manual do Conectiva para o LVM
Páginas man do lvm, pvcreate, ,pvscan, vgcreate, vgreduce, vgremove, vgscan, vgchange, lvcreate, lvreduce, lvremove, lvscan.
Sobre o autor:
|
|
Usuário de Linux há 7 anos, a 5 aboliu o Microsoft Windows de seu computador e hoje vive feliz com o sistema GNU/Linux. Instrutor de Redes e Linux no Rio de Janeiro
Contato: marcio_katan@yahoo.com.br MSN: marcio_katan@hotmail.com Cel.: 9123-7454 |
Quer usar Linux em seu computador pessoal?
Compre o livro Linux no Computador Pessoal com Conectiva 10
|
|
Com presença
marcante nos servidores das empresas, e agora nos desktops
corporativos, o sistema operacional GNU/Linux começa a
travar a maior de todas as suas batalhas: a conquista do
computador caseiro.
Capítulo 1 – Iniciando o mundo GNU/Linux; Capítulo 2 –Instalando o Linux; Capítulo 3 – Conhecendo o Conectiva 10; Capítulo 4 – Configurações; Capítulo 5 – Instalando, removendo e atualizando programas; Capítulo 6 – Internet; Capítulo 7 – Impressão; Capítulo 8 – Multimídia e Entretenimento; Capítulo 9 – Programas Office; Capítulo 10 – Outros programas. |