LVM - Parte1 Administrando Volumes Lógicos
Autor: Badtux's Blog | Publicado: 2011-11-12T22:52:00-02:00

Tudo bem povo! O assunto hoje é LVM (Logical Volume Manager)! Vamos dividir o tutorial em partes, como sempre, e por conta do LVM render um bom papo! Segue a primeira parte! ;)

Acredito a utilização do LVM em servidores hoje é obrigatória, pois facilita a vida do sysadmin que constantemente sofre com problemas de filesystem cheio. Quando trabalhava em uma consultoria e atendia diversos tipos de cliente, cerca de 60% dos chamados era referente a disco, ou o esgotamento dele. Seja um caso de squid que parou, pois o /var estourou, ou ainda um banco de dados que parou pois sua partição havia enchido. Enfim, pode haver diversas situações onde o problema é o espaço em disco, seja por causa de um sizing elaborado de maneira equivocada ou por falta de recursos.



O LVM ajuda na administração dos discos, pois com ele é possível você reunir várias partições um grupos e ainda poder aumentar ou diminuir suas "partições" em alguns minutos, e o melhor, sem perder nenhum dado. Lembre que o LVM não tem qualquer semelhança com ferramentas como o QParted, Fdisk ou CfDisk, pois essas ferramentas apenas fazem o particionamento do disco. O LVM vai além, ele administra realmente os discos, podendo agrupar diversos discos em apenas um grupo e através desse grupo de volume criar os volumes lógicos que abrigarão nossos diretórios.

Antes de começar a entender os comandos de administração do LVM, é necessário conhecer sua nomenclatura e entender o que é cada um:

PV =&gt; Physical Volume - Normalmente é um disco ou um partição.
VG =&gt; Volume Group - É o grupo de volume composto por PV's (Physical Volume).
LV =&gt; Logical Volume - É o volume lógico, é como se fosse a partição do disco, um pedaço do VG. É no LV onde montamos nossos diretórios.
PE =&gt; "Pedaços" de diversos discos que podem compor um VG

Agora vamos por a mão na massa!
Primeiro, vamos instalar o LVM:


# apt-get installl lvm2

Após a instalação, já podemos incluir as partições no LVM, em nosso exemplo vamos incluir a partição /dev/sdg1:

# pvcreate /dev/sdg1 
  Physical volume "/dev/sdg1" successfully created
Com isso, o LVM já estará administrando o disco e agora podemos atribui-lo a algum VG, mas antes vamos visualizar o disco que acabamos de adicionar:


# pvdisplay 
  "/dev/sdg1" is a new physical volume of "232,88 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdg1
  VG Name               
  PV Size               232,88 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               A8VDH0-PhYA-0qRq-X5dT-RndT-UfmJ-PYYKWv

O comando pvdisplay mostra informações sobre os discos e partições que estão sendo administrado pelo LVM, em nosso exemplo somente a partição sdg1 com cerca de 240GB. 

Agora, vamos criar um VG e utilizar esse disco que acabamos de adicionar ao LVM:


# vgcreate giropops /dev/sdg1 
  Volume group "giropops" successfully created
Com o comando acima, criamos um VG chamado giropops, no exemplo estamos utilizando apenas um disco, porém o cenário do dia a dia não é esse, normalmente o que temos é um VG composto por diversas partições.

Vamos visualizar as informações desse VG que acabamos de criar:


# vgdisplay 
  --- Volume group ---
  VG Name               giropops
  System ID             
  Format                lvm2
  Metadata Areas        1
  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                1
  Act PV                1
  VG Size               232,88 GiB
  PE Size               4,00 MiB
  Total PE              59618
  Alloc PE / Size       0 / 0   
  Free  PE / Size       59618 / 232,88 GiB
  VG UUID               F6FNce-Xdh2-2Jn5-ga5d-VrWO-UsCz-5SyWP3
Utilizamos o comando vgdisplay para obter maiores informações dos VG's. O LVM divide o disco em pequenos pedaços, pequenos blocos. E esses blocos são chamados de PE que por padrão tem o tamanho de 4MB. 

Podemos observar na saída acima, que ainda não utilizamos nada do nosso VG, pois ainda não criamos os volumes lógicos, os LV's.

Vamos agora criar nosso primeiro volume lógico:


# lvcreate -L 50GB -n dados01 giropops
  Logical volume "dados01" created
Feito isso, criamos nosso volume lógico de 50GB chamado de dados01. O parametro -L define o tamanho do nosso volume, já o -n define o nome do volume.

Criando mais dois volumes:


# lvcreate -L 50GB -n binarios01 giropops
  Logical volume "binarios01" created
# lvcreate -L 50GB -n logs01 giropops
  Logical volume "logs01" created
Agora vamos visualizar as informações sobre esses volumes lógicos que acabamos de criar:


# lvdisplay 
  --- Logical volume ---
  LV Name                /dev/giropops/dados01
  VG Name                giropops
  LV UUID                F1cmT0-xhMn-gvgk-CqlX-hYCy-phln-1Cn93n
  LV Write Access        read/write
  LV Status              available
  # open                 0
  LV Size                50,00 GiB
  Current LE             12800
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           252:0

  --- Logical volume ---
  LV Name                /dev/giropops/binarios01
  VG Name                giropops
  LV UUID                gZvsVi-YdW0-jZjm-hg1U-gfXN-Rr29-SEL867
  LV Write Access        read/write
  LV Status              available
  # open                 0
  LV Size                50,00 GiB
  Current LE             12800
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           252:1

  --- Logical volume ---
  LV Name                /dev/giropops/logs01
  VG Name                giropops
  LV UUID                mcfRgd-tEDd-pxql-gqRu-s0xN-23QH-cUBOGl
  LV Write Access        read/write
  LV Status              available
  # open                 0
  LV Size                50,00 GiB
  Current LE             12800
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           252:2

Como vemos, a saída do comando lvdisplay traz maiores detalhes sobre os três volumes que acabamos de criar, podemos ver que o tamanho de cada um deles é de 50GB e que estão configurados como leitura e escrita.
Agora que nossos volumes lógicos já estão criados, podemos formatá-los para que possamos utilizá-los no armazenamento de informações, já montados em nosso sistema de arquivos!


# mkfs.ext3 /dev/giropops/dados01 
mke2fs 1.41.14 (22-Dec-2010)
Filesystem label=
Tipo de SO: Linux
Tamanho do bloco=4096 (log=2)
Tamanho do fragmento=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
3276800 inodes, 13107200 blocks
655360 blocos (5.00%) reservados para o super usuário
First data block=0
Maximum filesystem blocks=0
400 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
    4096000, 7962624, 11239424

Writing inode tables: pronto                            
Creating journal (32768 blocks): concluído
Writing superblocks and filesystem accounting information: concluído

# mkfs.ext3 /dev/giropops/binarios01 
mke2fs 1.41.14 (22-Dec-2010)
Filesystem label=
Tipo de SO: Linux
Tamanho do bloco=4096 (log=2)
Tamanho do fragmento=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
3276800 inodes, 13107200 blocks
655360 blocos (5.00%) reservados para o super usuário
First data block=0
Maximum filesystem blocks=0
400 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
    4096000, 7962624, 11239424

Writing inode tables: pronto                            
Creating journal (32768 blocks): concluído
Writing superblocks and filesystem accounting information: concluído

# mkfs.ext3 /dev/giropops/logs01 
mke2fs 1.41.14 (22-Dec-2010)
Filesystem label=
Tipo de SO: Linux
Tamanho do bloco=4096 (log=2)
Tamanho do fragmento=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
3276800 inodes, 13107200 blocks
655360 blocos (5.00%) reservados para o super usuário
First data block=0
Maximum filesystem blocks=0
400 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
    4096000, 7962624, 11239424

Writing inode tables: pronto                            
Creating journal (32768 blocks): concluído
Writing superblocks and filesystem accounting information: concluído
Agora já vamos montar nossos volumes lógicos em seus respectivos diretórios:

# mount /dev/giropops/dados01 /dados/# mount /dev/giropops/binarios01 /binarios/ # mount /dev/giropops/logs01 /logs/

# df -h
Sist. Arq.            Tamanho de uso avaliado% Montado em
/dev/sda6             118G   13G  100G  12% /
none                  1,6G  716K  1,6G   1% /dev
none                  1,6G  1,4M  1,6G   1% /dev/shm
none                  1,6G  216K  1,6G   1% /var/run
none                  1,6G     0  1,6G   0% /var/lock
/dev/mapper/giropops-dados01                       50G  180M   47G   1% /dados/dev/mapper/giropops-binarios01                       50G  180M   47G   1% /binarios/dev/mapper/giropops-logs01                       50G  180M   47G   1% /logs
Pronto! Podemos utilizar nossos volumes lógicos, da mesma forma como utilizariamos com partições, porém sabendo que podemos aumentar e diminuir a o tamanho do volume lógico a qualquer momento sem perder os dados, alias, esse é o assunto da segunda parte desse tutorial, onde iremos abordar alguns temas mais avançados do LVM!

Aproveita para seguir o blog e recomendá-lo! ;)