Linux Logical Volume Manager (LVM) este un mecanism de virtualizare a discurilor. Poate crea și gestiona o partiție de disc "virtuală" dinamică folosind unul sau mai multe hard disk-uri fizice. Această partiție poaste fi mărită, micșorată sau mutată de pe un disc pe altul, în funcție de necesități: grupului de volume LVM (VG - Volume Group) i se pot adăuga sau scoate discuri după dorință. Aceste modificări se pot face în timp ce sistemul vostru Linux rulează, nefiind necesară restartarea serverului. În acest articol voi prezenta (cu exemple) câteva comenzi LVM folosite în Linux.
Pentru a vă învăța să lucrați cu LVM nu este de ajuns doar citirea unui articol: trebuie și puțină practică. De aceea, recomand instalarea unei mașini virtuale în Virtualbox (de exemplu CentOS sau Ubuntu server - eu am folosit CentOS 7 pentru exemplele din acest articol), căreia îi puteți atașa diverse discuri asupra cărora puteți folosi comenzile LVM.
Înainte de a începe voi menționa două reguli generale:
- pentru fiecare disc adăugat unui Volume Group, trebuie rulată prima dată comanda
pvcreate
: aceasta va "marca" discul ca LVM Physical Drive; - Volume Group-ul (VG) este "înființat" cu comanda
vgcreate
; discurile adiționale sunt adăugate în VG cu comandavgextend.
Între timp s-a terminat și instalarea CentOS în mașina virtuală. Pentru a putea copia comenzile din terminal, m-am conectat prin SSH la mașina virtuală din Virtualbox.
Pentru a vedea ce am în prezent:
[root@bobcentos ~]#fdisk -l
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 1050623 524288 83 Linux
/dev/sda2 1050624 16777215 7863296 8e Linux LVM
Se observă că partiția sda2 este de tipul 8e și este marcată ca fiind LVM.
Altfel, comanda lsblk
ne arată cam același lucru (suplimentar, această comandă ne arată din ce este compus grupul de volume LVM numit cl_bobcentos: partițiile /, /home și swap):
[root@bobcentos ~]#
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 8G 0 disk
├─sda1 8:1 0 512M 0 part /boot
└─sda2 8:2 0 7.5G 0 part
├─cl_bobcentos-root 253:0 0 4.5G 0 lvm /
├─cl_bobcentos-swap 253:1 0 1G 0 lvm [SWAP]
└─cl_bobcentos-home 253:2 0 2G 0 lvm /home
Voi mai adăuga niște discuri la mașină din interfața Virtualbox. Pentru aceasta, voi închide sistemul din mașina virtuală și, cu click dreapta pe numele mașinii virtuale, voi merge la Settings - Storage și voi adăuga încă 3 discuri:
Repornim mașina virtuală și ne vom conecta prin SSH la ea. Comanda lsblk
ne arată și discurile nou adăugate - sdb, sdc și sdd (discuri goale, nepartiționate):
[root@bobcentos ~]#
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 8G 0 disk
├─sda1 8:1 0 512M 0 part /boot
└─sda2 8:2 0 7.5G 0 part
├─cl_bobcentos-root 253:0 0 4.5G 0 lvm /
├─cl_bobcentos-swap 253:1 0 1G 0 lvm [SWAP]
└─cl_bobcentos-home 253:2 0 2G 0 lvm /home
sdb 8:16 0 1G 0 disk
sdc 8:32 0 1G 0 disk
sdd 8:48 0 1G 0 disk
Vreau să fac un grup de volume (Volume Group) din cele 3 discuri - sdb, sdc și sdd. Comanda ls -lA /dev/disk/by-id
ne arată:
root@bobcentos ~]#
ls -l /dev/disk/by-id
lrwxrwxrwx. 1 root root 9 May 6 13:24 ata-VBOX_HARDDISK_VB0e0eb063-aa394a63 -> ../../sdb --> disc gol
lrwxrwxrwx. 1 root root 9 May 6 13:24 ata-VBOX_HARDDISK_VB0e8d9fc3-285df115 -> ../../sdd --> disc gol
lrwxrwxrwx. 1 root root 9 May 6 13:24 ata-VBOX_HARDDISK_VB42164fd9-5dec8975 -> ../../sda
lrwxrwxrwx. 1 root root 10 May 6 13:24 ata-VBOX_HARDDISK_VB42164fd9-5dec8975-part1 -> ../../sda1
lrwxrwxrwx. 1 root root 10 May 6 13:24 ata-VBOX_HARDDISK_VB42164fd9-5dec8975-part2 -> ../../sda2
lrwxrwxrwx. 1 root root 9 May 6 13:24 ata-VBOX_HARDDISK_VBd4a7e026-9b2eb91c -> ../../sdc --> disc gol
Mergem mai departe și vom marca fiecare din cele 3 discuri ca LVM cu comanda pvcreate
:
[root@bobcentos ~]#
pvcreate
/dev/sdb --> inițializează discul "/dev/sdb" ca un volum fizic LVM
Physical volume "/dev/sdb" successfully created.[root@bobcentos ~]#
pvcreate
/dev/sdc --> inițializează discul "/dev/sdc" ca un volum fizic LVM
Physical volume "/dev/sdc" successfully created.[root@bobcentos ~]#
pvcreate
/dev/sdd --> inițializează discul "/dev/sdd" ca un volum fizic LVM
Physical volume "/dev/sdd" successfully created.
Cu ajutorul comenzii pvs
vom lista toate volumele fizice LVM de pe mașina locală:
Cu comanda vgcreate
voi crea grupul de volume numit vg_bobses din sdb și sdc:
#
vgcreate
vg_bobses /dev/sdb /dev/sdc
Volume group "vg_bobses" successfully created
Comanda vgs
ne afișează toate grupurile de volume LVM de pe sistemul local (după cum se observă în imaginea de mai jos, am două grupuri de volume LVM: primul, numit cl_bobcentos, conține partiția sda2 pe care este instalat sistemul de operare, iar cel de-al doilea, vg_bobses, este cel proaspăt creat:
Dacă rulez din nou comanda pvs, îmi vor fi listate toate volumele fizice LVM de pe mașina locală (îmi va fi arătat și că grupul vg_bobses este format din sdb și sdc) - discul sdd, chiar dacă este marcat ca LVM, nu face parte din niciun grup:
Cu ajutorul comenzii vgextend
voi adăuga discul sdd grupului de volume vg_bobses:
#
vgextend
vg_bobses /dev/sdd
Volume group "vg_bobses" successfully extended
Coamnda vgs
ne va afișa:
Acum, comanda pvs
ne va arăta și discul sdd în interiorul volumului vg_bobses:
Cu ajutorul comenzii vgreduce
vom scoate discul sdd din grupul de volume vg_bobses:
# vgreduce
vg_bobses /dev/sdd
Removed "/dev/sdd" from volume group "vg_bobses"
Vom afișa noua componență a grupurilor de volume, apoi vom adăuga discul sdd grupului de volume cl_bobcentos folosind comenzile cunoscute: vgextend
pentru mărirea unui grup de volume, vgs
și pvs
pentru listare - ilustrare în imaginea de mai jos:
Comanda lvs
listează toate partițiile logice din interiorul unul grup de volume LVM - după cum se observă în imaginea de mai jos, grupul de volume vg_bobses nu conține nicio partiție logică, dar grupul cl_bobcentos este format, cum am zis și mai sus, din partțiile /, /home și swap:
Comanda pvdisplay
ne arată statusul curent al volumelor fizice care intră în componența unui grup de volume LVM:
#
pvdisplay
--- Physical volume ---
PV Name /dev/sdb
VG Name vg_bobses
PV Size 1.00 GiB / not usable 4.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 255
Free PE 255
Allocated PE 0
PV UUID wsoHKj-BFoL-2VYL-KOgo-1cJf-bZFB-DAXonD--- Physical volume ---
PV Name /dev/sdc
VG Name vg_bobses
PV Size 1.00 GiB / not usable 4.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 255
Free PE 255
Allocated PE 0
PV UUID r4EQho-f7iW-QawL-YYAD-qmnQ-sNI7-IUvKLC--- Physical volume ---
PV Name /dev/sda2
VG Name cl_bobcentos
PV Size 7.50 GiB / not usable 3.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 1919
Free PE 1
Allocated PE 1918
PV UUID 51QV2f-7CZE-Q9iq-ZOyS-cZ9a-dok1-gP1mGw--- Physical volume ---
PV Name /dev/sdd
VG Name cl_bobcentos
PV Size 1.00 GiB / not usable 4.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 255
Free PE 255
Allocated PE 0
PV UUID GER3Py-5eI9-FddS-HPQI-ki0W-fIDJ-VlXVpy
Comanda vgdisplay
ne spune câteva amănunte despre grupurile noastre de volume:
#
vgdisplay
--- Volume group ---
VG Name vg_bobses
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 3
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 1.99 GiB
PE Size 4.00 MiB
Total PE 510
Alloc PE / Size 0 / 0
Free PE / Size 510 / 1.99 GiB
VG UUID nwQ0NA-o0Ot-tVJt-pNWx-4xQC-VRW6-LeRz1E--- Volume group ---
VG Name cl_bobcentos
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 7
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 3
Open LV 3
Max PV 0
Cur PV 2
Act PV 2
VG Size 8.49 GiB
PE Size 4.00 MiB
Total PE 2174
Alloc PE / Size 1918 / 7.49 GiB
Free PE / Size 256 / 1.00 GiB
VG UUID y6XbCQ-qXwk-nev0-Y1vx-0JXl-MMGy-D95ffE
Comanda vgscan
scanează și afișează toate grupurile de volume LVM din sistemul nostru:
Cu comanda vgrename
putem redenumi un grup de volume:
#
vgrename
cl_bobcentos centos7
Volume group "cl_bobcentos" successfully renamed to "centos7"
Comanda vgremove
șterge un grup de volume LVM:
# vgremove
vg_bobses
Volume group "vg_bobses" successfully removed
[root@bobcentos ~]# vgscan
Reading volume groups from cache.
Found volume group "centos7" using metadata type lvm2
Acum voi recrea un alt grup de volume din sdb și sdc:
#
vgcreate
vg_grup /dev/sdb /dev/sdc
Volume group "vg_grup" successfully created
Cu ajutorul comenzii lvcreate
voi face 2 partiții logice în acest grup de volume:
#
lvcreate
--name backup --size 1G vg_grup
Logical volume "backup" created.
Voi folosi restul spațiului rămas liber ca să fac partiția logică media:
#
lvcreate
--name media -l 100%FREE vg_grup
Logical volume "media" created.
Comanda lvs
(pe care am folosit-o și mai sus) ne va arăta partițiile logice din grupul vg_grup:
Comanda lvdisplay
ne arată o privire de ansamblu asupra tuturor partițiilor logice din sistemul nostru (de pe toate grupurile de volume din sistem):
#
lvdisplay
--- Logical volume ---
LV Path /dev/centos7/home
LV Name home
VG Name centos7
LV UUID 634nkO-jb9y-SVEC-kosK-Whl3-cRAE-aB1j2V
LV Write Access read/write
LV Creation host, time bobcentos, 2017-05-06 12:24:19 +0300
LV Status available
# open 1
LV Size 2.00 GiB
Current LE 512
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:2--- Logical volume ---
LV Path /dev/centos7/swap
LV Name swap
VG Name centos7
LV UUID lSozLh-gkVh-hc2e-ccvY-LBBj-cgoq-xLapnF
LV Write Access read/write
LV Creation host, time bobcentos, 2017-05-06 12:24:22 +0300
LV Status available
# open 2
LV Size 1.00 GiB
Current LE 256
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:1--- Logical volume ---
LV Path /dev/centos7/root
LV Name root
VG Name centos7
LV UUID tOvUT8-poRu-isPA-TZVN-aVgq-K1PC-GyVXzR
LV Write Access read/write
LV Creation host, time bobcentos, 2017-05-06 12:24:24 +0300
LV Status available
# open 1
LV Size 4.49 GiB
Current LE 1150
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:0--- Logical volume ---
LV Path /dev/vg_grup/backup
LV Name backup
VG Name vg_grup
LV UUID c29JVg-Fc4o-5bQ9-Egmf-QSaz-2oRg-GRWF8H
LV Write Access read/write
LV Creation host, time bobcentos, 2017-05-06 14:23:11 +0300
LV Status available
# open 0
LV Size 1.00 GiB
Current LE 256
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:3--- Logical volume ---
LV Path /dev/vg_grup/media
LV Name media
VG Name vg_grup
LV UUID CnY1Lv-fKFR-fREx-eplf-sRmP-Hf4H-ddN2pP
LV Write Access read/write
LV Creation host, time bobcentos, 2017-05-06 14:25:54 +0300
LV Status available
# open 0
LV Size 1016.00 MiB
Current LE 254
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:4
Echivalentul comenzii vgscan pentru partiții logice este comanda lvscan
, care afișează toate partițiile logice din sistem:
#
lvscan
ACTIVE '/dev/centos7/home' [2.00 GiB] inherit
ACTIVE '/dev/centos7/swap' [1.00 GiB] inherit
ACTIVE '/dev/centos7/root' [4.49 GiB] inherit
ACTIVE '/dev/vg_grup/backup' [1.00 GiB] inherit
ACTIVE '/dev/vg_grup/media' [1016.00 MiB] inherit
Redenumire unei partiții logice se face cu comanda lvrename
:
#
lvrename
vg_grup media muzica
Renamed "media" to "muzica" in volume group "vg_grup"
Un volum logic se șterge cu comanda lvremove
:
#
lvremove
/dev/vg_grup/muzica
Do you really want to remove active logical volume vg_grup/muzica? [y/n]: y
Logical volume "muzica" successfully removed
Să extindem partiția logică backup din grupul vg_grup cu încă 500 MB cu ajutorul comenzii lvextend
:
#
lvextend
-L1.5G /dev/vg_grup/backup
Size of logical volume vg_grup/backup changed from 1.00 GiB (256 extents) to 1.50 GiB (384 extents).
Logical volume vg_grup/backup successfully resized.
Cu comanda lvreduce
se poate micșora dimensiunea unei partiții logice.
Putem adăuga un disc nou grupului de volume vg_grup, se poate reface partiția logică media, o putem extinde în limita spațiului liber rămas în grupul de volume și multe altele. Putem adăuga un sistem de fișiere unei partiții logice dintr-un volum folosind comenzile descrise aici.
Un foarte scurt rezumat a ceea ce am spus până acum: cu ajutorul mai multor hard disk-uri fizice, putem face un grup de volume LVM. În interiorul acestui grup de volume, putem avea una sau mai multe partiții logice. Dacă avem nevoie de mai mult spațiu, putem adăuga un nou disc fizic grupului de volume, apoi să extindem partiția logică cu probleme. Toate modificările ulterioare (cu ajutorul comenzilor de mai sus) se fac fără a restarta sistemul Linux.
Ce frumos e în AWS (Amazon Web Services) când te joci cu volumele (atașate/detașate de la o instanță la alta) și-ți gestionezi din câteva click-uri și comenzi spațiul de stocare după necesități... 🙂
Ice Alinutza a zis
Felicitări!!! Un articol "muncit" la propriu, foarte bine structurat, interesant și accesibil!!! Nu-s întru totul de acord cu "introducerea" vis-a-vis de definiția LVM-ului dar este ceva minor...
Bobses a zis
Mulțumesc.
Cât despre introducere, am încercat s-o fac să fie cât mai pe înțelesul celor care nu știu nimic despre LVM. E posibil să nu fi reușit întru totul...