Esploreremo ora una serie di comandi utili per conoscere con le potenzialità operative che rendono realmente conveniente l’adozione di LVM nella gestione del nostro spazio disco. I comandi di base sono stati illustrati al precedente capitolo di questa guida.
Aggiungere un disco LVM
Supponiamo di aver esaurito tutta la capienza dello storage a nostra disposizione su LVM. Tuttavia, dal punto di vista hardware, è ancora possibile dotare di hard disk aggiuntivi il sistema in cui i nostri dati sono ospitati. Dopo aver installato un hard disk, aver eliminato ogni partizione e aver battezzato il nuovo disco come gestito da LVM secondo la tecniche illustrate nel capitolo precedente questi comparirà fra i nuovi physical volume (PV) elencati da pvdisplay. Adesso non dovremo fare altro che estendere il Volume Group (VG) con cui vogliamo utilizzarlo inglobando il nuovo PV in esso mediante l’uso di vgextend. Gli passeremo come primo argomento il nome del VG e come secondo il nome del PV. Poi estenderemo il Logical Volume (LV) e il filesystem in esso contenuto adoperando le conoscenze già in nostro possesso.
fprincipe@html3:~$ sudo pvdisplay
--- Physical volume ---
PV Name /dev/sdb
VG Name test2
[...]
"/dev/sdc" is a new physical volume of "500.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdc
VG Name
PV Size 500.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID 0NQGju-TpRG-teG9-8lfY-DCtJ-xgeS-Lhx0UN
fprincipe@html3:~$ sudo vgextend test2 /dev/sdc
Volume group "test2" successfully extended
fprincipe@html3:~$ df -h
Filesystem Size Used Avail Use% Mounted on
[...]
/dev/mapper/test2-lv03 492G 73M 467G 1% /home/fprincipe/mountpoint
fprincipe@html3:~$ sudo lvextend -l +10%FREE test2/lv03
Size of logical volume test2/lv03 changed from
Liberare Spazio in un Volume Group
Ovviamente esiste anche il comando per diminuire la grandezza di un LV. Il comando in questione è lvresize. Oltre alle opzioni -L e -l di funzionamento simile a lvextend, lvresize accetta valori negativi. A esempio il comando sudo lvresize -L -3g test2/lv04 ridurrà il Logical Volume lv04 di 3 Gb.
fprincipe@html3:~$ sudo lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv03 test2 -wi-ao----
Un altro metodo per ottimizzare la capienza di un Volume Group è quello di eliminare completamente un Logical Volume in esso contenuto. Il comando in questione è lvremove seguito come argomento dal LV che andrà eliminato.
fprincipe@html3:~$ sudo lvremove test2/lv04
Do you really want to remove and DISCARD active logical volume test2/lv04? [y/n]: y
Logical volume "lv04" successfully removed
fprincipe@html3:~$ sudo lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv03 test2 -wi-ao----
Spostare Dati
Anche per lo spostamento dei dati LVM esistono potenti strumenti da utilizzare. Lanciando il comando pvmove seguito da due PV riverseremo tutto il contenuto del primo nel secondo. Potremo limitare la migrazione anche a un specifico LV utilizzando l’opzione -n e facendo seguire a esso il nome di un LV. La procedura può risultare molto lunga quindi è possibile collocarla in background adoperando l’opzione -b.
fprincipe@html3:~$ sudo pvmove /dev/sdc -n lv03 /dev/sdd
/dev/sdc: Moved: 0.25%
[...]
/dev/sdc: Moved: 100.00%
Creare Snapshot
Di un LV è altresì possibile creare uno snapshot sempre utilizzando lvcreate ma con opzione -s, otterremo un vero e proprio nuovo LV che di fatto sarà un elemento differenziale rispetto allo LV da cui è stato creato. Occorrerà assegnare a esso uno “spazio” che all’occorrenza potremo anche espandere come abbiamo imparato a fare nel precedente capitolo. Questo spazio servirà per conservare le informazioni necessarie a risalire allo stato esatto del LV di origine nel momento in cui abbiamo creato lo snapshot. Le informazioni necessarie per far ciò aumenteranno all’aumentare delle differenze introdotte fra il LV di origine e lo snapshot man mano che modificheremo il primo. Proprio per questo all'instante iniziale in pratica queste saranno nulle. All’esaurirsi dello spazio lo snapshot sarà disallineato e quindi diventerà inutilizzabile. Utilizzando lvconvert −−merge e il nome di uno shapshot attivo potremo invertire lo snapshot con l’orgine. Lo snapshot non avrà più alcuna utilità quindi scomparirà. Come è possibile constatare nell'esempio a seguire, dopo aver usato lvconvert e aver effettuato di nuovo il montaggio, non sarà più presente la directory ~/mountpoint/appenacreata semplicemente perché nel momento in cui era stato generato lo snapshot questa non era ancora presente nell'origine.
fprincipe@html3:~$ sudo lvcreate -s -n snap2 -L 100g test2/lv03
Using default stripesize 64.00 KiB.
Logical volume "snap2" created.
fprincipe@html3:~$ sudo lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv03 test2 owi-a-s---
fprincipe@html3:~/mountpoint$ ls
lost+found
fprincipe@html3:~/mountpoint$ sudo lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv03 test2 owi-aos---
RAID
Attraverso LVM è possibile emulare il funzionamento delle tecnologie RAID.
Per far ciò sarà semplicemente necessario utilizzare il comando lvcreate con l’opzione −−type passando a questa il nome del type desiderato. Ecco una tabella che riassume i tipi principali e il loro funzionamento.
linear | I dati sono accodati uno di seguito all’altro in modo lineare. E’ la tipologia di default. |
raid1 | Crea copie dei dati, di default una, specificando l’argomento -m è possibile definire il numero di copie oltre la prima da creare (es.: con -m 2 le repliche totali saranno 3). |
raid5 | Emula un volume raid5. Sono necessari almeno tre PV. |
raid6 | Genera un volume raid6. Sono necessari almeno quattro PV. |
stripped | Al fine di incrementare le performance vengono creati dei segmenti di dati gestiti in modo simile a un raid0. E’ necessario utilizzare almeno due PV e l’opzione -i per specificare il numero di stripes da utilizzare. |