====== Logical Volume Manager (LVM) ====== Si installa il pacchetto Debian **lvm2**: apt install lvm2 Con **parted** si crea la partizione e si imposta il flag **lvm**: (parted) set 5 lvm on ===== Concetti ===== ^ physical volumes | Dispositivi a blocchi (//block devices//) che costituiscono la base per lo spazio di memorizzazione LVM. Possono essere semplici partizioni di un disco, volumi RAID, ecc. | ^ volume groups | Un //volume group// è l'unione di uno o più //physical volumes//, il cui spazio totale viene visto come entità unica di cui disporre. | ^ logical volumes | Lo spazio di un //volume group// viene allocato creando uno o più //logical volumes// al suo interno. Tale volume è un block device che può essere utilizzato ad esempio per contenere un filesystem. | ===== physical volumes, volume groups e logical volumes ===== Crea due **physical volumes**: pvcreate /dev/sda5 pvcreate /dev/sdb1 Crea un **volume group** (per il momento con un solo volume fisico) e lo attiva: vgcreate data_vg /dev/sda5 vgchange --activate y data_vg Crea un **logical volume** che si estende per il 100% dello spazio libero: lvcreate --extents +100%FREE data_vg --name data Creazione di alcuni **logical volume** con dimensione specifica nel volume group **vg_server1**: lvcreate --size 32G --name lv_rootfs vg_server1 lvcreate --size 16G --name lv_swap vg_server1 lvcreate --size 100G --name lv_var vg_server1 ===== Verifica configurazione ===== Verifica i volumi fisici, i gruppi di volumi e i volumi logici esistenti: pvs PV VG Fmt Attr PSize PFree /dev/sda5 data_vg lvm2 a-- 918,47g 0 /dev/sdb1 lvm2 --- 931,51g 931,51g vgs VG #PV #LV #SN Attr VSize VFree data_vg 1 0 0 wz--n- 918.47g 918.47g lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert data data_vg -wi-a----- 918.47g /dev/data_vg/data -> ../dm-0 ===== Modifica configurazione ===== Estende il volume group con un volume fisico aggiuntivo: vgextend data_vg /dev/sdb1 Estende il volume logico **data** aggiungendo tutto lo spazio libero nel volume group **data_vg**. Il filesystem viene ridimensionato contestualmente (funziona anche con filesystem montato e in uso): lvextend --extents +100%FREE --resizefs data_vg/data ===== Riduzione di un volume logico ===== Può capitare che di desideri aggiungere o **aumentare lo spazio libero** in un **volume group**, ad esempio per poter creare uno snapshot di un volume logico. In questo caso di decide di **ridurre la dimensione di un volume logico** esistente, effettuando contestualmente il **resize del filesystem** in esso contenuto: lvreduce --resizefs --size -2G /dev/vg_server1/lv_home ===== Resize disco => LVM => filesystem ===== Vedere **[[http://sirlagz.net/2016/01/20/live-resizing-lvm-on-linux/|Live Resizing LVM on Linux]]**. Supponiamo che esista una partizione LVM che occupa un intero disco. La partizione potrebbe essere stata creata in precedenza con questi comandi, prima usando **parted**: parted (parted) mklabel gpt (parted) mkpart primary 0% 100% (parted) set 1 lvm on e quindi usando i **tool LVM**: ~# pvcreate /dev/sdb1 ~# vgcreate home_vg /dev/sdb1 ~# vgchange --activate y home_vg ~# lvcreate --extents +100%FREE home_vg --name homefs ~# pvs ~# vgs ~# lvs ... FIXME Il seguito è da verificare! Appunti per aumentare la dimensione di una partizione LVM dopo aver allargato il disco (virtuale, ovviamente!). Con parted verificare che il disco sia davvero allargato e che abbia spazio libero contiguo alla partizione da allargare: parted /dev/sdb (parted) unit b (parted) print free Allargare la partizione per lo spazio libero risultante: (parted) resizepart 1 75161927679B Allargare il **physical volume**: pvresize /dev/sdb1 Allargare il **logical volume**: lvresize -l +100%FREE /dev/home_vg/homefs Il percorso del volume logico si vede con **lvs**, ed è composto da **%%/dev/[VolumeGroup]/[LogicalVolume]%%**. Allaragare il filesystem: resize2fs /dev/home_vg/homefs ===== Snapshot ===== Crea uno snapshot del volume logico **lv_rootfs** assegnando il nome **lv_rootfs_snap** e allocando al massimo 2 Gb di spazio: lvcreate --snapshot --size 2G --name lv_rootfs_snap /dev/vg_server1/lv_rootfs Viene creato il device virtuale **/dev/vg_server1/lv_rootfs_snap**. Per vedere lo **stato dello snapshot** (soprattutto lo spazio usato dei 2 Gb allocati): lvdisplay /dev/vg_server1/lv_rootfs_snap ... COW-table size 2.00 GiB ... Allocated to snapshot 16.76% ... Se lo spazio tende ad esaurirsi è possibile allocarne altro con **lvextend**, sempre ammesso che esista spazio libero nel volume group. Nel caso in cui lo spazio dello snapshot si esaurisca, il device snapshot viene invalidato e mostra l'attributo **I** in **lvs**: lvs LV VG Attr LSize Pool Origin Data% lv_rootfs vg_server1 owi-aos--- 32.00g lv_rootfs_snap vg_server1 swi-a-s--- 2.00g lv_rootfs 27.21 lvs LV VG Attr LSize Pool Origin Data% lv_rootfs vg_server1 owi-aos--- 32.00g lv_rootfs_snap vg_server1 swi-I-s--- 2.00g lv_rootfs 100.00 Infine per liberare lo spazio si rimuove lo snapshot con **lvremove**: lvremove /dev/vg_server1/lv_rootfs_snap ===== Web References ===== * **[[https://wiki.archlinux.org/title/LVM|ArchWiki LVM]]**