Chiar dacă într-un alt articol am vorbit mai detaliat despre gestionarea spațiului de stocare cu ajutorul LVM, voi reaminti și acum câteva generalități, concentrându-mă mai mult pe comenzile necesare creării și gestionării acestora. Logical Volume Manager (LVM) furnizează o metodă eficientă de a gestiona un fond comun de discuri pentru a crea un disc "virtual" în mod dinamic. Un Logical Volume (LV) are la bază un Volume Group (VG) care poate include mai multe Physical Volumes (PV). Când un disc fizic este configurat pentru LVM, metadatele sunt scrise la începutul discului în cazul unei folosiri normale și la finalul său în cazul unui disc care va fi solosit pentru backup.
Înainte de a începe aceste exerciții, recomand adăugarea mai multor discuri mașinii voastre virtuale, astfel încât să aveți suficient spațiu de manevră:
# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sr0 11:0 1 1024M 0 rom vda 252:0 0 20G 0 disk ├─vda1 252:1 0 1G 0 part /boot └─vda2 252:2 0 19G 0 part ├─centos-root 253:0 0 17G 0 lvm / └─centos-swap 253:1 0 2G 0 lvm [SWAP] vdb 252:16 0 1G 0 disk vdc 252:32 0 1G 0 disk vdd 252:48 0 1G 0 disk vde 252:64 0 1G 0 disk
1. Creați un sistem de fișiere XFS pe un pe un Logical Volume nou de 200 MB numit lv_xfs; Volume Group-ul folosit se va numi vg_xfs. Montați-l permanent, folosind UUID, sub directorul /xfs.
Atenție maximă la dimensiunea stabilită și la codul alocat noii partiții:
# fdisk /dev/vdb Command (m for help): n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p Partition number (1-4, default 1): 1 First sector (2048-2097151, default 2048): Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-2097151, default 2097151): +200M Partition 1 of type Linux and of size 200 MiB is set Command (m for help): t Selected partition 1 Hex code (type L to list all codes): 8e Changed type of partition 'Linux' to 'Linux LVM' Command (m for help): p Device Boot Start End Blocks Id System /dev/vdb1 2048 411647 204800 8e Linux LVM Command (m for help): w The partition table has been altered! # partprobe
Facem un nou Physical Volume pe noua partiție:
# pvcreate /dev/vdb1 Physical volume "/dev/vdb1" successfully created. # pvdisplay /dev/vdb1
Facem un nou Volume Group din /dev/vdb1:
# vgcreate vg_xfs /dev/vdb1 Volume group "vg_xfs" successfully created # vgdisplay vg_xfs
Construim volumul logic cu numele lv_xfs, care va lua tot spațiul liber (toate unitățile extents) din volume group-ul vg_xfs:
# lvcreate -n lv_xfs -l 100%FREE vg_xfs Logical volume "lv_xfs" created. # lvdisplay /dev/vg_xfs/
Ni se cere să-l formatăm XFS, apoi montarea permanentă sub directorul /xfs, folosind UUID:
# mkfs -t xfs /dev/vg_xfs/lv_xfs
# mkdir -p /xfs
# blkid | grep lv_xfs | awk '{print $2}' >> /etc/fstab
# vi /etc/fstab
UUID=f7cdaa16-7358-4d0d-9f05-3a8f8a5196d6 /xfs xfs defaults 0 0
# mount -a
# df -hT
Discul e montat sub directorul cerut.
2. Creați un sistem de fișiere EXT4 pe un pe un Logical Volume nou de 300 MB numit lv_ext4; Volume Group-ul folosit se va numi vg_ext4 și va avea dimensiunea extentului de 8 MB. Montați-l permanent sub directorul /ext4.
# lsblk [...] vdc 252:32 0 1G 0 disk vdd 252:48 0 1G 0 disk
Vom crea o nouă partiție pe întreg discul /dev/vdc (atenție la codul alocat acestei partiții - 8e pentru Linux LVM), vom face un Physical Volume din această partiție, apoi un Volume Group (atenție la comanda care stabilește dimensiunea unui extent), după care vom crea și Logical Volume-ul de dimensiunea cerută. Vom aplica sistemul de fișiere ext4 și îl vom monta sub /ext4.
Mai jos voi scrie doar comenzile necesare (aproape se repetă cele de sus):
# fdisk /dev/vdc
# partprobe
# pvcreate /dev/vdc1
# vgcreate -s 8M vg_ext4 /dev/vdc1
# vgdisplay vg_ext4
# lvcreate -n lv_ext4 -L 300M vg_ext4
# lvdisplay /dev/vg_ext4/lv_ext4
# mkfs -t ext4 /dev/vg_ext4/lv_ext4
# mkdir -p /ext4
# vi /etc/fstab
/dev/vg_ext4/lv_ext4 /ext4 ext4 defaults 0 0
# mount -a
# df -hT
# reboot
Am îndeplinit și această sarcină, noul Logical Volume fiind montat permanent sub directorul /ext4.
3. Redimensionați Logical Volume-ul de la punctul 1 cu 200 MB, iar LV-ul creat la punctul 2 micșorați-l cu 20 extents.
# lvextend -r /dev/vg_xfs/lv_xfs -L +200M
Insufficient free space: 50 extents needed, but only 0 available
Observăm că nu există spațiu suficient pe acest Volume Group pentru a mărti sistemul de fișiere, așa că vom crea o nouă partiție pe /dev/vdb (/dev/vdb2 de 500M cu codul pentru Linux LVM - 8e) și o vom adăuga la Volume Group-ul vg_xfs:
# fdisk /dev/vdb # partprobe # lsblk # pvcreate /dev/vdb2 # vgextend vg_xfs /dev/vdb2 # vgdisplay vg_xfs # lvdisplay /dev/vg_xfs/lv_xfs # lvextend -r /dev/vg_xfs/lv_xfs -L +200M # lvdisplay /dev/vg_xfs/lv_xfs # df -hT *remarcăm noua dimensiune a LV-ului
Remarcați parametrul -r
al comenzii lvextend
: acest parametru face și redimensionarea sistemului de fișiere, astfel încât nu mai trebuie folosită comanda xfs_growfs
.
# umount /ext4 # lvdisplay /dev/vg_ext4/lv_ext4 *în acest moment, LV-ul are 38 extents* # lvresize -r /dev/vg_ext4/lv_ext4 -l -20 # lvdisplay /dev/vg_ext4/lv_ext4 *în acest moment, LV-ul are 18 extents* # mount -a # df-hT *remarcăm noua dimensiune a LV-ului
Observați, din nou, folosirea argumentului -r
la comanda lvresize
: la fel ca mai sus, folosirea acestui parametru face inutilă folosirea ulterioară a comenzii resize2fs
.
Trebuie reținut că un Logical Volume care are sistemul de fișiere XFS poate fi redimensionat fără a fi demontat, pe când un LV formatat ext4 necesită demontare și remontare ulterior redimensionării. Sistemul de fisiere XFS nu poate fi micsorat (poate fi redimensionat doar in sus).
4. Creați un Logical Volume de 300 MB numt lv_swap și adăugați-l permanent spațiului swap curent.
Verificăm swap-ul curent:
# free -m total used free shared buff/cache available Mem: 3950 139 3652 8 158 3591 Swap: 2047 0 2047
Verificăm spațiul swap după device:
# swapon -s Filename Type Size Used Priority /dev/dm-1 partition 2097148 0 -2
Observăm că spațiul swap curent este de 2 GB și avem o singură partiție swap.
Pașii pentru realizarea acestei sarcini seamănă aproape perfect cu cei din exercițiile de mai sus (diferențele vor fi comenzile necesare realizării spațiului swap). În principiu, identificăm spațiul liber pe sistem, facem o nouă partiție (atenție la codul alocat - 82 pentru Linux Swap), un Physical Volume, un Volume Group și LV-ul. La final, marcăm noul LV ca swap și-l montăm permanent după UUID.
Să începem:
# lsblk
# fdisk /dev/vdd
# partprobe
# pvcreate /dev/vdd1
# vgcreate vg_swap /dev/vdd1
# vgdisplay vg_swap
# lvcreate -n lv_swap -L 300M vg_swap
# lvdisplay /dev/vg_swap/lv_swap
# mkswap /dev/vg_swap/lv_swap
# blkid
# blkid | grep lv_swap
# blkid | grep lv_swap | awk '{print $2}' >> /etc/fstab
# vi /etc/fstab
UUID=95bb2c22-b138-4872-b421-feb6128afed9 swap swap defaults 0 0
# swapon -a
# swapon -s
# free -m
# reboot
La verificarea făcută cu ultimele 2 comenzi de mai sus, observăm că spațiul swap a crescut la 2,3 GB și că avem 2 partiții folosite pentru swap.
Pentru a vă simți confortabil cu Logical Volume Manager (LVM), trebuie să lucrați mult în mașini virtuale: creare, ștergere, mărire, micșorare, etc. Astfel, la aceste exerciții nu veți avea deloc emoții în timpul examenului RHCSA.
Catalin a zis
Bine construit articolul, dar as avea doua mici observatii.
1. Un volum logic cu sistem de fisiere ext4 poate fi redimensionat (marit) fara a fi demontat folosind resize2fs (pentru xfs este comanda xfs_growfs) cu lvresize / lvextend -r nu am incercat dar e bun de stiut 🙂
2. Ar fi fost bine de mentionat faptul ca sistemul de fisiere xfs nu se poate micsora.
Bobses a zis
Da, ai dreptate, am gresit eu si din graba am scris xfs_admin in loc de xfs_growfs. 🙂 Am corectat si am adaugat si observatia despre redimensionarea XFS. Multumesc.
Pe unele sisteme am intampinat erori la redimensionarea ext4 montat, erori care au disparut cand fs-ul era demontat - de aceea am facut precizarea respectiva.