Configurando partições LVM – CentOS 6.5

O LVM – Logical Volume Management, é um método que permite interagir com os dispositivos de armazenamentos de maneira integrada, sem lidar com peculiaridades inerentes ao hardware. Com o LVM, é possível redimensionar e incluir espaço sem necessidade de reparticionamento.

Quem nunca passou por uma situação onde era necessária a repartição do HD por que a partição estava cheia, e nunca se perguntou “Como seria bom se eu pudesse apenas redimensionar as partições”? Ou quando você tem um monte de HD sobrando e pensa: “Será que eu consigo juntar todos em um só ou tenho que ter uma partição/diretório para cada um deles e colocar meus dados bem separados?”, ou ainda, comprou um HD novo e quer trocar pelo seu antigo mas pensa a mesma coisa, “Será que eu não consigo apenas juntar os dois?”. Pois bem, com o LVM é possível fazer tudo isso.

O LVM (Logical Volume Management) é um método que permite interagir com os dispositivos de armazenamentos de maneira integrada, sem lidar com peculiaridades inerentes ao hardware. Com o LVM, é possível redimensionar e incluir espaço sem necessidade de reparticionamento ou de reinstalação do sistema operacional.

O LVM pode ser dividido em três elementos fundamentais:

PV: Physical Volume – Tipicamente um disco rígido, uma partição de disco ou qualquer dispositivo de armazenamento de mesma natureza.

VG: Volume Group – Nível mais alto de abstração do LVM. Reúne a coleção de volumes lógicos (LV) e volumes físicos (PV) em uma unidade administrativa.

LV: Logical Volume – O equivalente a uma partição de disco tradicional.

O Logical Volume é um “pedacinho” do Volume Group, e como o próprio nome diz, essa ferramenta é capaz de gerenciar os chamados volumes lógicos, substituindo assim as tradicionais partições nos discos. Ao longo do tempo, várias empresas fizeram suas implementações de LVM e o Linux não ficou para trás.
Utilizar volumes lógicos ao invés do esquema de particionamento comum traz algumas boas vantagens como redimensionamento de partições em tempo real, junção de várias partições em uma única, criação de imagens de backup e etc.

Um volume lógico nada mais é que uma representação virtual de pedaços de um dispositivo fixo. Enquanto as partições definem estes pedaços “cruamente”, o volume lógico permite flexibilidade na hora de definir quem são esses pedaços. Por exemplo, um volume lógico pode ter seu espaço dividido em 3 ou mais HDs, mas para o sistema operacional vai parecer como se fosse apenas um dispositivo.

Por exemplo, se o seu /var estiver quase cheio, e se você estiver utilizando LVM, bastará adicionar um novo PV (Physical Volume) ao VG (Volume Group) que possui o LV (Logical Volume) utilizado para o ponto de montagem /VAR, após aumentar a capacidade do VG, você poderá com poucos comandos – em poucos minutos – aumentar o tamanho do /var sem grandes impactos em seu ambiente.Especificamente para aumentar ou diminuir o /var, será necessário parar a máquina, mas dependendo da partição não será preciso. Também é possível diminuir um LV que não esteja usando muito espaço para aumentar outro que esteja precisando de espaço, desde que estejam no mesmo VG.

Um VG é composto por PVs, se um PV quebrar você perde o VG e os LVs, isso pode ser um grande problema, portanto, é importante ter confiança nos discos envolvidos em um ambiente LVM. Se possível é interessante utilizar RAID para poder perder um ou mais discos de um LVM sem perder seu VG inteiro. Há quem diga também que por ser uma camada a mais em seu ambiente, haverá perda de performance em relação a gravação e leitura em um PV, contudo, acho que isso é imperceptível na grande maioria dos ambientes.
Normalmente o LVM versão 2 já vem instalado na maioria das distribuições linux.

Listando as partições do disco:

[root@centos7 ~]# fdisk /dev/sdb -l 

Disk /dev/sdb: 4294 MB, 4294967296 bytes, 8388608 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x5ecc8966

Dispositivo Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     2099199     1048576   83  Linux
/dev/sdb2         2099200     8388607     3144704    5  Extended
/dev/sdb5         2101248     4198399     1048576   83  Linux
/dev/sdb6         4200448     6297599     1048576   83  Linux
/dev/sdb7         6299648     8388607     1044480   83  Linux

Para esse exemplo irei utilizar as partições /dev/sdb5, sdb6 e sdb7 como LVM. Essas já estão na máquina mas poderiam ser novos HD’s.

Vamos setar o tipo da partição como LVM utilizando a opção t do fdisk.

[root@centos7 ~]# fdisk /dev/sdb 
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Comando (m para ajuda): t
Número da partição (1,2,5-7, default 7): 5
Hex code (type L to list all codes): L

Partições /dev/sdb5, sdb6 e sdb7 setadas com tipo LVM como podemos ver abaixo:

[root@centos7 ~]# fdisk /dev/sdb -l 

Disk /dev/sdb: 4294 MB, 4294967296 bytes, 8388608 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x5ecc8966

Dispositivo Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     2099199     1048576   83  Linux
/dev/sdb2         2099200     8388607     3144704    5  Extended
/dev/sdb5         2101248     4198399     1048576   8e  Linux LVM
/dev/sdb6         4200448     6297599     1048576   8e  Linux LVM
/dev/sdb7         6299648     8388607     1044480   8e  Linux LVM

Agora vamos criar um Physical Volume (PV):

[root@centos7 ~]# pvcreate /dev/sdb5  
  Physical volume "/dev/sdb5" successfully created

Podemos verificar os volumes físicos com o comando pvscan, e para mais detalhes podemos utilizar o pvdisplay.

[root@centos7 ~]# pvscan 
  PV /dev/sdb5         lvm2 [1,00 GiB]
  Total: 1 [1,00 GiB] / in use: 0 [0   ] / in no VG: 1 [1,00 GiB]
[root@centos7 ~]# pvdisplay 
  "/dev/sdb5" is a new physical volume of "1,00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb5
  VG Name               
  PV Size               1,00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               iaugmG-uUBc-rbWr-HwW4-pbBU-UVf2-WjRVu5

E criamos um “Volume Group” (VG):

[root@centos7 ~]# vgcreate volume5 /dev/sdb5 
  Volume group "volume5" successfully created

Podemos verificar os volumes criados com o comando vgscan e para mais detalhes com o vgdisplay.

[root@centos7 ~]# vgscan 
  Reading all physical volumes.  This may take a while...
  Found volume group "volume5" using metadata type lvm2
[root@centos7 ~]# vgdisplay 
  --- Volume group ---
  VG Name               volume5
  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               1020,00 MiB
  PE Size               4,00 MiB
  Total PE              255
  Alloc PE / Size       0 / 0   
  Free  PE / Size       255 / 1020,00 MiB
  VG UUID               3nUODE-2snm-0SnB-PvJA-oHle-T3Q8-9078qv

Criamos o volume lógico:

[root@centos7 ~]# lvcreate -n LV5 -L 1G volume5 
  Volume group "volume5" has insufficient free space (255 extents): 256 required.

Não foi possível criar o volume lógico LV5 de 1GB no Volume Group (VG) volume5. Vamos remover o Volume Group volume5 e criar outro com maior capacidade:

[root@centos7 ~]# vgremove volume5 
  Volume group "volume5" successfully removed

E criamos o novo volume5 utilizando as duas partições /dev/sdb5 e /dev/sdb6:

[root@centos7 ~]# vgcreate volume5 /dev/sdb5 /dev/sdb6 
  Physical volume "/dev/sdb6" successfully created
  Volume group "volume5" successfully created

Já podemos notar o novo tamanho do VG:

[root@centos7 ~]# vgdisplay | grep -E "VG Size|VG Name" 
  VG Name               volume5
  VG Size               1,99 GiB

Agora vamos criar o Volume Lógico:

[root@centos7 ~]# lvcreate -n LV5 -L 1G volume5 
  Logical volume "LV5" created.
[root@centos7 ~]# lvdisplay | grep -E "LV Name| VG Name| LV Size"  
  LV Name                LV5
  VG Name                volume5
  LV Size                1,00 GiB

Agora vamos criar um sistema de arquivos para o volume criado. Podemos verificar o path completo do volume lógico com o comando:

[root@centos7 ~]# lvdisplay | grep "LV Path" 
  LV Path                /dev/volume5/LV5

E criamos o sistema de arquivos:

[root@centos7 ~]# mkfs.ext4 /dev/volume5/LV5 
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
65536 inodes, 262144 blocks
13107 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=268435456
8 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

Criamos um diretório para onde o volume irá ser montado:

[root@centos7 /]# mkdir lvm5 

E montamos o volume:

[root@centos7 /]# mount /dev/volume5/LV5 /lvm5/

Já podemos ver o volume lógico montado:

[root@centos7 /]# df -h  | grep ^/dev 
/dev/sda3                6,8G  1,1G  5,7G  16% /
/dev/sda1                497M  122M  376M  25% /boot
/dev/mapper/volume5-LV5  976M  2,6M  907M   1% /lvm5

OBS: Note que o volume foi identificado como dentro de /dev/mapper, o mapeador de dispositivos (Device-mapper) é uma nova infraestrutura no Kernel do Linux versão 2.6 que provê uma forma genérica de se criar camadas virtuais de blocos de dispositivos que podem fazer coisas diferentes sobre uma camada de dispositivos reais, como dividí-lo, concatená-lo, espelhá-lo, sincronizá-lo, etc. O Mapeador de dispositivos (device-mapper) é utilizado nas ferramentas LVM2 e consequentemente os dispositivos LVM serão montados com esse nome.

Podemos ver o volume lógico operando normalmente com o comando:

[root@centos7 /]# mount -l | grep ^/dev | grep 5 
/dev/mapper/volume5-LV5 on /lvm5 type ext4 (rw,relatime,seclabel,data=ordered)

Como o Volume Group criado foi de 2GB, podemos ampliar o volume lógico conforme a necessidade:

[root@centos7 /]# lvextend -L +600M /dev/volume5/LV5  
  Size of logical volume volume5/LV5 changed from 1,00 GiB (256 extents) to 1,59 GiB (406 extents).
  Logical volume LV5 successfully resized.

Para as alterações surtirem efeito é necessário utilizar o seguinte comando:

[root@centos7 /]# resize2fs /dev/volume5/LV5 
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/volume5/LV5 is mounted on /lvm5; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/volume5/LV5 is now 415744 blocks long.

No comando anterior aumentamos o tamanho do volume lógico e não do sistema de arquivos.

[root@centos7 /]# df -h | grep ^/dev | grep volume
/dev/mapper/volume5-LV5  1,6G  3,0M  1,5G   1% /lvm5

Vamos colocar o filesystem para bootar com o sistema:

[root@centos7 ~]# blkid | grep volume
/dev/mapper/volume5-LV5: UUID="d016c92f-e5f8-4c5a-9525-685f8a77028e" TYPE="ext4"

Adicionamos no /etc/fstab:

[root@centos7 ~]# cat /etc/fstab  

#
# /etc/fstab
# Created by anaconda on Sun Nov 27 15:42:15 2016
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=6918479b-eefd-4b95-9be0-5bdb6724d048 /                       xfs     defaults        0 0
UUID=17d2153d-b1cd-4292-8088-31cf646f7f95 /boot                   xfs     defaults        0 0
UUID=03f5f195-549d-4bc9-8255-937dec120ddd swap                    swap    defaults        0 0
UUID=d016c92f-e5f8-4c5a-9525-685f8a77028e /lvm5 		          ext4	  defaults 	      0 0 

Done.