Neste artigo irei ensinar como utilizar o LVM – Lógical Volume Manager, como a própria sigla diz o LVM é gerenciador de volumes lógicos. Ao contrário do método tradicional de particionamento, a implementação LVM cria um grande disco virtual, que pode inclusive ter mais de um dispositivo de armazenamento (HD/SSD), e divide em partições virtuais. A grande vantagem é permitir o redimensionamento das áreas de modo dinâmico, ou seja, com o sistema operacional sendo utilizado, sem precisar desligar.
Para compreendermos como funciona o LVM primeiro precisamos conhecer a sua estrutura e como funciona, logo abaixo irei explicar a sua estrutura.
PV – Physical Volumes (Volumes Físicos) – São partições locadas para LVM. No Linux é necessário criar a partição e alterar o tipo para “Linux LVM”, tipo 8e do fdisk, para que ela possa ser utilizada no LVM;
VG – Volume Group (Grupo de Volume) – Um conjunto de PV podem ser necessários para criar filesystems maiores que a limitação física de um disco rígido. Esses PV são agrupados em um VG;
PE – (Physical Extent) – Quando um PV é inserido em um VG o LVM o divide em várias partes de tamanho igual e essas partes são associadas a uma LE (Logical Extent), o menor valor de alocação dentro de um VG (do ponto de vista do LVM);
LV – Logical Volume (Volume Lógico) – São volumes lógicos que você pode redimensionar a capacidade de forma dinâmica. Esse elemento é uma área de alocação das LE, na qual criamos o filesystem, que podemos manipular ou criar o sistema de arquivos, já criado ele nos atribuí um device para que possamos montar, e segue a seguinte lógica: /dev/nome-do-vg/nome-do-lv;
Quando é necessário utilizar? Imagine que você tem um compartilhamento em Samba que é o servidor de arquivos da sua empresa, se o disco desse compartilhamento encher, você terá que trocar o disco por um de capacidade maior e restaurar o backup para o disco novo, imagine o transtorno. Agora se utilizar o LVM, e esse disco encher basta você aumentar o tamanho da capacidade do armazenamento lógico dele, lembrando que você precisa ter disco disponível em seu servidor ou no seu storage, isso seria muito mais fácil não é?
Lembrando que esse artigo serve para qualquer distribuição linux!
Crie as partições que serão utilizadas no LVM
Você pode adicionar um disco virtual em seu virtualbox ou outro hypervisor que esteja utilizando.
Liste os discos existentes utilizando o fdisk:
# fdisk -l
Disk /dev/sda: 20 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes<br>
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt<br>
Disk identifier: FA2921A5-A813-4CC4-8754-12AC7E445C58
Device Start End Sectors Size Type
/dev/sda1 2048 4095 2048 1M BIOS boot
/dev/sda2 4096 41940991 41936896 20G Linux filesystem
Irei adicionar um disco extra de 10GB, estou utilizando o VirtualBox.
Abaixo listei os discos e suas partições usando o comando lsblk, repare que o disco de 10GB é o sdb e está sem nenhuma partição.
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
loop0 7:0 0 91M 1 loop /snap/core/6350
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1M 0 part
└─sda2 8:2 0 20G 0 part /
sdb 8:16 0 10G 0 disk
sr0 11:0 1 1024M 0 rom
Iremos utilizar o fdisk novamente só que dessa vez para criar a partição, conforme eu citei no começo do artigo, a partição precisa ser do tipo Linux LVM, o código dela no disk é 8e.
# fdisk /dev/sdb
Command (m for help): p >> exibir a tabela de partição
Disk /dev/sdb: 10 GiB, 10737418240 bytes, 20971520 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
Disklabel type: dos
Disk identifier: 0x9ea3111c
Command (m for help): n >> criar nova partição
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): p >> tipo da partição (primária)
Partition number (1-4, default 1): >> padrão (enter)
First sector (2048-20971519, default 2048): >> padrão (enter)
Last sector, +sectors or +size{K,M,G,T,P} (2048-20971519, default 20971519): >> padrão (enter)
Created a new partition 1 of type 'Linux' and of size 10 GiB. >> nova partição criada, porém iremos alterar para Linux LVM.
Command (m for help): t >> aleterar o tipo de partição
Selected partition 1
Hex code (type L to list all codes): 8e >> código da partição
Changed type of partition 'Linux' to 'Linux LVM'.
Command (m for help): w >> gravar as alterações
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
Execute novamente o comando fdisk para conferir se a partição foi criada:
# fdisk -l
/sdb: 10 GiB, 10737418240 bytes, 20971520 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
Disklabel type: dos
Disk identifier: 0x9ea3111c
Device Boot Start End Sectors Size Id Type
/dev/sdb1 2048 20971519 20969472 10G 8e Linux LVM
Agora iremos criar o Volume Físico, que será o volume que será adicionado no grupo do LVM.
# pvcreate /dev/sdb1
Physical volume "/dev/sdb1" successfully created.
Liste o Physical Volume criado
# pvdisplay
"/dev/sdb1" is a new physical volume of "<10.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb1
VG Name
PV Size <10.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID 1xZJKN-d2FR-q60T-eix3-vYFC-LJzP-UN2elR
Crie o Grupo de Volumes, onde iremos atribuir o Volume Físico que acabamos de criar.
# vgcreate backup-vg /dev/sdb1
Volume group "backup" successfully created
Habilite o Volume Group (Grupo de Volume) com o comando vgchange.
# vgchange -a y
1 logical volume(s) in volume group "backup-vg" now active
Liste os grupos existentes, vc pode utilizar o vgscan que exibe somente os grupos criados ou use o vgdisplay para exibir com mais detalhes.
# vgscan
Reading volume groups from cache.
Found volume group "backup" using metadata type lvm2
# vgdisplay -v backup
--- Volume group ---
VG Name backup-vg
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 <10.00 GiB
PE Size 4.00 MiB
Total PE 2559
Alloc PE / Size 0 / 0
Free PE / Size 2559 / <10.00 GiB
VG UUID tJKC16-1CIx-SVQt-xhcM-j9sH-G8My-81DKIF
--- Physical volumes ---
PV Name /dev/sdb1
PV UUID prkMdi-FaPu-23jJ-FRmz-HPmB-my6s-xAQLZ8
PV Status allocatable
Total PE / Free PE 2559 / 2559
Agora iremos criar um Logical Volume (Volume Lógico) onde iremos definir um sistema de arquivos para armazenar os dados.
# lvcreate -L 5GB -n backup-lv backup-vg
Logical volume "backup-lv" created.
Vamos listar os nosso Logical Volume com o comando lvdisplay, se quiser listar de forma mais detalhada utilize o comando: vgdisplay -v backup-vg.
# lvdisplay
--- Logical volume ---
LV Path /dev/backup-vg/backup-lv
LV Name backup-lv
VG Name backup-vg
LV UUID iblism-Fjrb-J6wI-oTa9-uajj-Ih82-kB7ro4
LV Write Access read/write
LV Creation host, time ubuntu-18-04, 2019-05-05 06:07:28 +0000
LV Status available
# open 1
LV Size 5.00 GiB
Current LE 1280
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0
Nota: Quando vc cria um volume group, ele cria dentro do diretório
/dev
um subdiretório com o nome do seu volume group, ficando dessa forma:/dev/backup-vg/
e dentro do diretório do seu volume group fica os devices dos seus volumes lógicos, ficando dessa forma:/dev/backup-vg/backup-lv
.
Crie um sistema de arquivos no seu Volume Lógico:
# mkfs.ext4 /dev/backup-vg/backup-lv
mke2fs 1.44.1 (24-Mar-2018)
Creating filesystem with 1310720 4k blocks and 327680 inodes
Filesystem UUID: c011c0e5-1bf4-46ff-94bf-5cc9064e0388
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736
Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
Crie o diretório onde iremos montar o nosso Volume Lógico e monte em seguida:
# mkdir /backup
# mount /dev/backup-vg/backup-lv /backup/
Após montado execute o comando df, para exibir as partições montadas.
# df -h
Filesystem Size Used Avail Use% Mounted on
udev 463M 0 463M 0% /dev
tmpfs 99M 984K 98M 1% /run
/dev/sda2 20G 3.7G 15G 20% /
tmpfs 493M 0 493M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 493M 0 493M 0% /sys/fs/cgroup
/dev/loop0 91M 91M 0 100% /snap/core/6350
tmpfs 99M 0 99M 0% /run/user/1000
/dev/mapper/backup--vg-backup--lv 4.9G 20M 4.6G 1% /backup >> show :P
Agora que aprendemos a criar um Volume Físico, Grupo de Volume e Volume Lógico, vamos aprender a expandir o nosso Volume Lógico, em um cenário real, isso ocorreria se o seu volume enchesse e precisasse aumentar o armazenamento desse volume, em nosso cenário irei acrescentar mais 2 Gigas.
Desmonte o sua partição:
# umount /backup
Aumente mais 2GB do seu volume lógico.
# lvextend -L +2GB /dev/backup-vg/backup-lv
Size of logical volume backup-vg/backup-lv changed from 5.00 GiB (1280 extents) to 7.00 GiB (1792 extents).
Logical volume backup-vg/backup-lv successfully resized.
Vamos checar o nosso LV com o comando e2fsck.
# e2fsck -f /dev/backup-vg/backup-lv
e2fsck 1.44.1 (24-Mar-2018)
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/backup-vg/backup-lv: 11/327680 files (0.0% non-contiguous), 42078/1310720 blocks
Agora vamos aumentar a partição ext4
# resize2fs -p /dev/backup-vg/backup-lv
resize2fs 1.44.1 (24-Mar-2018)
Resizing the filesystem on /dev/backup-vg/backup-lv to 1835008 (4k) blocks.
The filesystem on /dev/backup-vg/backup-lv is now 1835008 (4k) blocks long.
Monte a partição novamente.
# mount /dev/backup-vg/backup-lv /backup/
Liste as partições
# df -h
Filesystem Size Used Avail Use% Mounted on
udev 463M 0 463M 0% /dev
tmpfs 99M 984K 98M 1% /run
/dev/sda2 20G 3.7G 15G 20% /
tmpfs 493M 0 493M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 493M 0 493M 0% /sys/fs/cgroup
/dev/loop0 91M 91M 0 100% /snap/core/6350
tmpfs 99M 0 99M 0% /run/user/1000
/dev/mapper/backup--vg-backup--lv 6.9G 23M 6.5G 1% /backup >> :)
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
loop0 7:0 0 91M 1 loop /snap/core/6350
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1M 0 part
└─sda2 8:2 0 20G 0 part /
sdb 8:16 0 10G 0 disk
└─sdb1 8:17 0 10G 0 part
└─backup--vg-backup--lv 253:0 0 7G 0 lvm /backup
sr0 11:0 1 1024M 0 rom
Diminuindo o Volume Lógico.
# umount /backup
Cheque novamente a partição novamente
# e2fsck -f /dev/backup-vg/backup-lv
e2fsck 1.44.1 (24-Mar-2018)
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/backup-vg/backup-lv: 11/458752 files (0.0% non-contiguous), 50943/1835008 blocks
Irei diminuir para 5GB
# resize2fs -p /dev/backup-vg/backup-lv 5G
resize2fs 1.44.1 (24-Mar-2018)
Resizing the filesystem on /dev/backup-vg/backup-lv to 1310720 (4k) blocks.
Begin pass 3 (max = 56)
Scanning inode table XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
The filesystem on /dev/backup-vg/backup-lv is now 1310720 (4k) blocks long.
Diminuir a partição ext4 em 5Gigas.
Nota: Cuidado ao reduzir a sua partição, tenha certeza que irá não irá reduzir pra um tamanho menor do que a quantidade de dados armazenados na partição.
# lvreduce -L 5G /dev/backup-vg/backup-lv
WARNING: Reducing active logical volume to 5.00 GiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce backup-vg/backup-lv? [y/n]: y
Size of logical volume backup-vg/backup-lv changed from 7.00 GiB (1792 extents) to 5.00 GiB (1280 extents).
Logical volume backup-vg/backup-lv successfully resized.
Verifique a partição novamente:
# e2fsck -f /dev/backup-vg/backup-lv
e2fsck 1.44.1 (24-Mar-2018)
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/backup-vg/backup-lv: 11/327680 files (0.0% non-contiguous), 42078/1310720 blocks
Rode novamente o comando resize2fs para ter certeza que sua partição vai ficar do mesmo tamanho do Volume Lógico.
# resize2fs /dev/backup-vg/backup-lv
resize2fs 1.44.1 (24-Mar-2018)
The filesystem is already 1310720 (4k) blocks long. Nothing to do!
Cheque novamente.
# e2fsck -f /dev/backup-vg/backup-lv
e2fsck 1.44.1 (24-Mar-2018)
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/backup-vg/backup-lv: 11/327680 files (0.0% non-contiguous), 42078/1310720 blocks
Agora monte novamente a sua partição:
# mount /dev/backup-vg/backup-lv /backup/
Vamos verificar se o disco foi redimensionado para 5 Gigas.
# df -h
Filesystem Size Used Avail Use% Mounted on
udev 463M 0 463M 0% /dev
tmpfs 99M 984K 98M 1% /run
/dev/sda2 20G 3.7G 15G 20% /
tmpfs 493M 0 493M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 493M 0 493M 0% /sys/fs/cgroup
/dev/loop0 91M 91M 0 100% /snap/core/6350
tmpfs 99M 0 99M 0% /run/user/1000
/dev/mapper/backup--vg-backup--lv 4.9G 20M 4.6G 1% /backup
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
loop0 7:0 0 91M 1 loop /snap/core/6350
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1M 0 part
└─sda2 8:2 0 20G 0 part /
sdb 8:16 0 10G 0 disk
└─sdb1 8:17 0 10G 0 part
└─backup--vg-backup--lv 253:0 0 5G 0 lvm /backup
sr0 11:0 1 1024M 0 rom
Pronto! agora vc aprendeu como utilizar o LVM, criação de grupos, definir o sistema de arquivos para um Volume Lógico, aumentar e diminuir uma partição.
Para montar a partição automático, acesse o artigo sobre fstab.
Acredito que irá ajudar bastante gente, fiquei ausente devido algumas mudanças na minha carreira, acredito que agora eu volte com muito conteúdo para vcs!
Até a próxima, não esqueça de compartilhar e curtir as nossas redes sociais: @linuxnaweb.
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/storage_administration_guide/ext4grow
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/logical_volume_manager_administration/lvm_definition
https://www.vivaolinux.com.br/artigo/Entendendo-e-configurando-o-LVM-manualmente?pagina=2
http://gutocarvalho.net/octopress/2013/05/17/lvm-dicas-rapidas/
Se una com os assinantes de nossa Newsletter, sempre que tiver postagem nova você será notificado.