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:



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

Using volume group(s) on command line

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:


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

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




  • Marcio Cantanhêde, conhecido como Marcio Katan, é Instrutor certificado Conectiva Mandriva em Administração de Sistemas, Consultor e Técnico de Suporte em Linux.

  • Autor do livro “Linux no Computador Pessoal com Conectiva 10” Editora Ciência Moderna


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





Editora: Ciência Moderna

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.
Tido como difícil de usar, este mito começa a ser quebrado com esta obra. Veremos neste livro o quão fácil é utilizar o GNU/Linux.
Tratado de forma simples e direta, o uso do sistema irá parecer brincadeira de criança. Veremos como substituir todas as funcionalidades do Windows pelo GNU/Linux. Neste existe um substitutivo para quase todos os programas que você utiliza na plataforma Microsoft.


Sumário:

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.




1