Carregando...
CentOSDebianDeepinLinuxServidores LinuxUbuntu

Como utilizar o LVM no Linux

Tempo de leitura: 9 minutos

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.

Estrutura LVM

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;

Estrutura visual do LVM

Estrutura LVM

Estrutura simplificada do LVM

Estrutura LVM

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!

Utilizando o LVM

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

Criando a partição Linux LVM

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

Criando Volume Físico (Physical Volume)

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

Criando Grupo de Volumes (Volume Group)

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

Criando Volume Lógico (Logical Volume)

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.

Criando o sistema de arquivos EXT4.

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.

Aumentando a capacidade do seu Volume Lógico.

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 tamanho do seu Volume Lógico.

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.

Referências:

redhat.com/resize2fs | redhat.com/lvm | vivaolinux | gutocarvalho

4 comentários
  1. Paulo Junior

    Muito bom o artigo. Parabéns Gerson.
    Já estou utilizando, me ajudou muito.
    Abraço

  2. Laercio

    É possível transformar um sistema de arquivos linux para mim sem perder os dados?

Deixe uma resposta

%d blogueiros gostam disto: