Logical Volume Manager
Oggi parlerò del sistema di partizionamento dei dischi, a mio avviso, più potente al mondo; LVM o Logical Volume Manager.
Il software in questione offre un livello di astrazione delle unità di storage al limite dell’immaginazione.
Attraverso il Logical Volume Manager o LVM, come dir si voglia, è possibile, ad esempio, definire un volume logico grande quanto la somma di 2 o più volumi fisici. Inoltre, i volumi logici possono essere espansi o ridotti all’occorrenza anche con l’aggiunta di ulteriori volumi fisici.
La differenza sostanziale fra una normale partizione ed un volume logico, sta proprio nel fatto che una partizione può risiedere solo su un disco, e può essere espansa al massimo all’intera capacità del disco stesso, ovvero su un disco da 1T non posso avere una partizione da 2Tb.
Chiaramente questo è un software che non è disponibile per tutte le piattaforme del mondo, è un software disponibile principalmente per linux, io lo adopero per Devuan. È possibile scaricare una versione aggiornata di questo sistema operativo da qui.
Un volume non somiglia ad una partizione, bensì somiglia più ad un disco fisico.
Con il Logical Volume Manager, posso allargare e stringere il volume all’occorrenza senza dover riavviare la macchina o smontare il volume, all’interno di un volume posso contenere sia un partizionamento DOS che un partizionamento GPT, quindi è da vedersi più come un disco fisico che come la partizione di un disco.
Il volume fisico può essere un intero disco o la partizione di un disco più grande.
Un esempio potrebbe essere: /dev/sda1 partizione di boot, /dev/sda2 partizione del volume fisico.
Fra i tanti livelli di astrazione, ce n’è uno molto potente: lo snapshot.
Uno snapshot è un volume logico che rappresenta l’istantanea di un altro volume logico al momento della sua creazione. Quindi può essere usato come punto di partenza per creare un backup senza fermare nessun servizio: ciò è molto utile per effettuare backup di database, server virtuali, file server come FTP o SAMBA, etc etc.
Creare il volume
Per prima cosa dobbiamo individuare il disco o i dischi che dovremo utilizzare con il Logical Volume Manager, poi dovremo partizionarli, se decidiamo di usare le partizioni o lasciarli privi di partizioni se decidiamo di adoperare il disco intero come volume fisico, nel caso decidessimo di non partizionarli, sarà sufficiente dichiarare il nome del disco come volume fisico, in caso contrario dichiareremo come volume fisico la sua partizione, opportunamente preparata in precedenza, per poter accogliere il volume fisico.
Supponendo di aver individuato i dischi /dev/sda, /dev/sdb, /dev/sdc e di volerli usare per intero, scriveremo:
#pvcreate /dev/sda /dev/sdb /dev/sdc
o se preferiamo possiamo ripetere il comando 3 volte, ogni volta con un disco differente. Questo informerà il sistema che quel disco o partizione è da utilizzare come volume fisico.
La cosa bella, è che posso mischiare dischi di capacità differenti oppure dischi e partizioni.
Il comando
# lvm lvmdiskscan
mi mostra i dischi che sono mappati o che sono mappabili come appartenenti ad un volume fisico, mentre il comando
# lvm pvscan
mi mostra solo i dischi che appartengono ad un volume fisico.
Fatto questo dobbiamo raggruppare i dischi in un gruppo di volumi, da notare che un volume fisico può appartenere ad un solo gruppo di volumi, mentre un gruppo di volumi può abbracciare uno o più volumi fisici.
Mi spiego con un esempio:
Supponiamo di avere i 3 dischi visti prima di cui abbiamo imposto essere volumi fisci, creiamo 2 gruppi di volumi, il volume Pinocchio ed il volume Geppetto.
Nel Volume Pinocchio metto /dev/sda e /dev/sdb, mentre nel Volume Geppetto metto /dev/sdc
In questo esempio posso vedere come /dev/sda e /dev/sdb non possono appartenere contemporaneamente a due gruppi di volumi diferenti, mentre il gruppo di volumi Pinocchio annovera 2 dischi.
Quindi andiamo a creare il nostro gruppo di volumi, informiamo il Logical Volume Manager che vogliamo costruire un gruppo di volumi contenente i 3 dischi visti in precedenza:
# lvm vgcreate Pinocchio /dev/sda /dev/sdb /dev/sdc
Con questo comando abbiamo raggruppato 3 volumi fisici in un solo gruppo di volumi.
Il gruppo di volumi avrà una capacità totale pari alla grandezza dei 3 dischi.
Logical Volume
Supponiamo di aver bisogno per ora di un volume logico di circa 1Tb per i nostri file. Dobbiamo creare un logical volume (LV).
Un volume logico è un volume che possiamo utilizzare come se fosse una normale partizione o addirittura hard disk. In realtà, un volume logico potrebbe essere composto di più dischi oppure essere una parte di un disco molto più grande: il Logical Volume Manager si occupa di gestire questi dettagli.
Creiamo dunque il nostro volume logico, chiamato DATI, di grandezza pari a 1TB:
# lvm lvcreate –size 1TB –name DATI Pinocchio
o più semplicemente, nella sua forma contratta
# lvcreate -n DATI -L1T Pinocchio
Analizziamo il comando:
lvcreate, crea un volume logico
-n con il nome di DATI
-L1T di grandezza pari a 1Terabyte
all’interno del gruppo di volumi Pinocchio
impartendo il comando
# fdisk -l
possiamo vedere che è stato creato il disco /dev/Pinocchio/DATI
A questo punto possiamo formattare il nostro volume e montarlo in una directory:
# mke.xfs /dev/Pinocchio/DATI
# mount /dev/Pinocchio/DATI /mnt
il comando
# mount
ci mostra i dischi montati.
Questo volume logico può essere allargato e ristretto in qualsiasi momento.
Snapshot
Lo snapshot, come già detto in precedenza è l’istantanea di un volume logico, una copia fedele, un immagine.
È bene sapere che la dimensione dello snapshot non dipende dalla dimensione del volume originale, bensì dalla velocità con qui questo varia.
Infatti, volendo creare lo snapshot del volume DATI, presente nel gruppo Pinocchio, con una dimensione di 10Gb, non significa creare un volume che contiene solo 10Gb, significa creare un volume dell’intera capacità del originale che ha una vita pari al tempo necessario affinchè il volume originale non abbia compiuto variazioni di consistenza pari a 10Gb.
Mi spiego meglio, facciamo un esempio pratico.
Creo lo snapshot del volume /dev/Pinocchio/DATI e lo creo di grandezza pari a 1Gb. Nel momento in cui inizio il backup o nel momento in cui monto lo snapshot in una qualsiasi posizione, questo rimane uguale identico all’istantanea del suo originale fintanto che sul volume originale non siano intervenute modifiche pari ad 1Gb. Quindi se sul originale aggiungo un file da 100Mb, nello snapshot questo movimento non verrà registrato, dicasi la stessa cosa nel momento in cui TOLGO un file da 100Mb, l’originale cambia normalmente, il suo snapshot rimane congelato. Se creo 51 files da 100Mb l’uno e poi li cancello, avrò generato un movimento di dati superiore a 1Gb, in questo caso si dice che lo snapshot è INCONSISTENTE, perchè ho superato la soglia di 1Gb, soglia che avevo impostato a monte.
BACKUP FEDELE DELLO SNAPSHOT
Trattandosi di un volume logico, quindi paragonabile ad un normale disco, il backup può essere effettuato nei modi più disparati, quello che preferisco io è l’immagine compressa. Vediamo come utilizzare il nostro snapshot.
Per prima cosa dobbiamo creare lo snapshot
#lvm lvcreate –size 1GB –snapshot SNAP0 /dev/Pinocchio/DATA
Questo crea lo snapshot, con nome SNAP0, del volume DATA posizionato nel gruppo Pinocchio ed ha validità fino alla concorrenza di 1Gb di movimentazione di dati.
Giunti a questo punto avremo /dev/Pinocchio/DATA che continua a funzionare come sempre e /dev/Pinocchio/SNAP0 che è il suo snapshot, quindi possiamo procedere al backup.
#dd if=/dev/Pinocchio/SNAP0 |gzip >$(date ‘+%d-%m-%Y’).backup.gz
Un altro metodo utile è quello di usare il comando tar
#tax cpjf $(date ‘+%d-%m-%Y’).backup.tar.bz2 /dev/Pinocchio/SNAP0
o ancora, montare lo snapshot ed effettuarne una copia
#mount -o ro /dev/Pinocchio/SNAP0 /mnt && cp -R /mnt /DESTINAZIONE && sync && umount /mnt
Possiamo usare rsync, possiamo usare qualsiasi cosa, fino alla concorrenza di 1Gb di modifiche del filesystem originale, questo snapshot avrà vita.
Al termine del backup, possiamo semplicemente distruggere lo snapshot
#lvremove -y /dev/Pinocchio/SNAP0
RIPRISTINO DEL BACKUP
Il ripristino del backup è davvero semplicissimo ed intuitivo
Sempre utilizzando il nostro Logical Volume Manager possiamo scegliere se creare un nuovo volume o se sovrascrivere il precedente.
Qualora optassimo per la prima ipotesi, ovvero creare un nuovo volume, vi rimando a questo mio precedente articolo.
In caso si decidesse di sovrascrivere l’attuale volume, sarà sufficiente eseguire i comandi di prima, al contrario.
# gzip -d -c NOMEFILE.backup.gz |dd of=/dev/Pinocchio/DATA
o ancora…
# tar xjf NOMEFILE.tar.bz2 -C /dev/Pinocchio/DATA
Chiaramente, qualora si optasse per costruire un nuovo volume, quello da riscrivere sarà il nuovo volume creato.