Logical Volume Manager

LVM, acronimo di Logical Volume Manager, è un gestore per volumi logici creato per i sistemi operativi GNU/Linux, attualmente è disponibile nella versione 2.
Il gestore di volumi logici è una suite software che serve per avere i benefici di una vista ad alto livello rispetto a quella tradizionale che mette a disposizione del sistema operativo solo dischi e partizioni.
Grazie al gestore di volumi logici, scopriremo che è possibile avere maggior flessibilità nell’amministrazione e distribuzione di spazio per programmi e utenti.
Sicuramente possiamo considerare l’utilizzo del gestore di volumi logici un argomento abbastanza ostico e avanzato dovuto essenzialmente alla sua complessità.
Probabilmente chi utilizza un computer portatile, un netbook, o un desktop casalingo potrebbe non aver bisogno di utilizzare il gestore dei volumi logici ma chi ha a che fare tutti giorni applicativi che crescono senza regolarità, in ambienti dove il downtime deve essere minimizzato, avrà sicuramente sperimentato il fatto di ritrovarsi con un disco pieno e doversi ingegnare per dare il minimo disservizio. Quanto è difficile precalcolare quanto spazio sarà necessario per l’intera durata di vita di un servizio?
Nell’ottica di migliorare la qualità del servizio e ridurre il tempo di manutenzione degli apparati possiamo sicuramente consigliare l’adozione di LVM.

Scenario

Supponiamo, ora, che il nostro database abbia riempito completamente il disco.
Vediamo ora di identificare alcune attività che possiamo svolgere per ripristinare il servizio.

  • Possiamo sostituire il disco pieno con un disco più capiente: copiare i dati dal primo disco al secondo.
  • Possiamo spostare una parte dei dati altrove, se possibile, e quindi configurare nuovamente il database.
  • Possiamo creare dei mount point sul quale destinare i dati nuovi.

Queste opzioni comportano tutte dei tempi di fermo del database più o meno marcati.
Ecco che in questo scenario, grazie al gestore dei volumi logici, le cose si fanno più semplici.

Come ribadito inzialmente LVM non è così semplice da capire, tuttavia ha delle ottime potenzialità che capiremo nel corso di questa guida.

Entità di LVM

LVM prevede essenzialmente tre tipi di entità:

  1. Volume fisico (in inglese physical volume) abbreviato con la sigla PV
  2. Gruppo di volumi (in inglese volume group) abbreviato con la sigla VG
  3. Volume logico (in inglese logical volume) abbreviato con la sigla LV

Partiamo coll’enunciare brevemente il physical volume; un volume fisico essenzialmente corrisponde a una partizione oppure a un intero disco.
Un gruppo di volumi è un’astrazione utilizzata dal gestore dei volumi per aggregare un insieme di uno o più volumi fisici.
Un volume logico è equivalente a una partizione tradizionale in un sistema che non usa LVM. Un volume logico può contenere un file system e viene mostrato al sistema operativo come un dispositivo a blocchi normale.

LVM Quick HOW-TO

Vediamo ora come utilizzare il gestore dei volumi logici. Supponiamo di aver a disposizione un disco con dimensione 3 GB che viene identificato dal sistema operativo come /dev/sdd.

La prima cosa da fare è creare un volume fisico: creare un physical volume significa permettere l’uso della partizione indicata o del disco indicato al gestore dei volumi logici.
Vorrei sottolineare che tutti i dati presenti nella partizione o nel disco che verrà utilizzato come PV verranno cancellati irrimediabilmente.

Sebbene sia possibile utilizzare un intero disco come volume fisico, a differenza fra di una singola partizione, questa scelta non è raccomandata perché alcuni vecchi sistemi operativi GNU/Linux , o non compatibili con LVM (es. Windows) potrebbero non riconoscere correttamente i metadati LVM e mostrare il disco come vuoto. Tali sistemi operativi possono tenatare di inizializzare il disco, cosa che può portare alla perdita dei dati.

Per utilizzare una partizione, come volume fisico, è necessario creare una tabella delle partizioni sul disco qualora non fosse già presente ed etichettare la partizione da destinare come volume fisico col codice 8e se si utilizza MBR, oppure 8e00 se si utilizza GPT.

Nel nostro how-to, attiveremo una tabella delle partizioni di tipo MBR, poi creeremo una partizione primaria indentificata come la prima partizione sul disco. La prima partizione verrà etichettata come 8e; tutte queste operazioni mediante il programma fdisk lanciato con il parametro /dev/sdd, ossia il disco destinato ad LVM.

Terminata la preparazione della partizione possiamo usare pvcreate, uno dei comandi della suite LVM.

pvcreate /dev/sdd1

mediante l’invocazione di questo programma viene creato un descrittore di gruppo di volumi all’inizio della partizione /dev/sdd1.

pvcreate

A seguire è possibile creare un gruppo di volumi indicando come parametro un nome da dare al gruppo di volumi, nel nostro caso vg_database, e poi uno o più volumi fisici.

vgcreate vg_database /dev/sdd1

vgcreate

E’ possibile assegnare già in questa fase più di un physical volume al volume group in questo modo:

vgcreate vg_database /dev/sdd1 /dev/sdd2 /dev/sde1

Chiaramente, /dev/sdd2 e /dev/sde1 devono essere già preventivamente dei volumi fisici.

Una volta creato un gruppo di volumi, adeguato alle nostre necessità, è possibile creare un volume logico sul VG appena creato:

lvcreate -l 100%FREE -n lv_database vg_database

Il comando richiede almeno i seguenti parametri: il nome del nuovo volume logico, nel nostro caso lv_database, e il gruppo di volumi dal quale assegnare il volume logico, ossia nello scenario da noi descritto vg_database.

lvcreate

Nel comando che abbiamo mostrato, abbiamo creato un LV che utilizza completamente lo spazio del gruppo di volumi ma è anche possibile creare un volume logico che usi parzialmente lo spazio a disposizione.

lvcreate -L 2G -n lv_database vg_database

In questo caso soltanto 2GB verranno assegnato al LV lv_database, il restante spazio può essere utilizzato per creare altri LV oppure da utilizzare in seguito espandendo il volume logico lv_database.

Una volta creato il volume logico è necessario formattare lo spazio messo a disposizione. Però qui le cose si complicano un po’ in quanto le distribuzioni GNU/Linux assegnano un nome diverso la dispositivo a blocchi associato al LV.
Per accerarsi di quale sia il nome che la propria distribuzione ha assegnato al volume logico, si può usare il comando lvs oppure lvdisplay.
Digitando il comando:

lvdisplay vg_database

viene restituita una serie di informazioni tra cui LV Name di lv_database. LV Name corrisponde al nome del dispositivo a blocchi da utilizzare per la formattazione del file system.

lvdisplay
Supponiamo che nel nostro scenario LV Name sia /dev/vg_database/lv_database. SUSE Linux Enterprise 11 assegna tipicamente un nome formato da /dev/VG NAME/LV “short” NAME, altre distribuzioni come ArchLinux adottano questo modello: /dev/mapper/VG NAME-LV “short” NAME

Per formattare il logical volume nel formato del file system EXT4 utilizzare la seguente sintassi:

mkfs.ext4 /dev/vg_database/lv_database

dove /dev/vg_database/lv_database è il LV Name.

mkfs

Attenzione: la formattazione prevede la cancellazione di tutti i dati contenuti sulla partzione oggetto del partizionamento.

Espansione di un LV

Probabilmente molti molti di voi si chiederanno come mani si debbano utilizzare così tanti comandi prima di avere a disposizione dello spazio utilizzabile e questo sicuramente è uno dei lati negativi del gestore logico di volumi.
Tengo a precisare che questa complessità permette di avere una flessibilità con l’uso delle partizioni tradizionali non si può certo avere.

Ritornando all’esempio iniziale il database ha riempito tutto il logical volume.

A questo punto possiamo aggiungere un ulteriore disco rigido (sia un tradizione hard disco o un più moderno SSD) o allargare le dimensioni del disco (in ambienti virtuali come VMware Esxi, Microsoft Hyper-V,…).

Sia che sia un nuovo disco o un “estensione” del disco originale, creiamo una partizione di tipo LVM usando per esempio fdisk.

Nel caso seguente, fdisk è stato lanciato sul dispositivo /dev/sdd in quanto tale disco è stato allargato passando da 3 GB a 6 GB.

add-additional-partition

Successivamente creiamo un volume fisico su questo disco, ossia abilitiamo l’uso di LVM su questo disco mediante pvcreate.

pvcreate /dev/sdd2

In questa occasione non serve creare un nuovo gruppo di volumi, ma possiamo aggiungere questo PV al gruppo di volumi già dedicato al database.
Per fare questo utilizziamo il comando vgextend il cui primo parametro è il nome del gruppo di volumi e il secondo parametro è il nome del volume fisico o una lista di PV, in questo caso abbiamo voluto aggioungere due PV: /dev/sdd2 e /dev/sde1 (ATTENZIONE: devono essere entrambi PV)

vgextend vg_database /dev/sdd2 /dev/sde1

Utilizzando il comando per mostrare le caratteristiche del gruppo di volumi:

vgdisplay vg_database

noteremo che è possibile espandere il volume logico in quanto c’è dello spazio libero indicato dalla voce Free PE / Size.

vgdisplay-after-extend

Per espandere il volume logico possiamo utilizzare il comando lvextend.
La sintassi non è molto differente da a quella di lvcreate:

lvextend -l +100%FREE /dev/vg_database/lv_database

lvextend

A questo punto dovremo ricordarci di ridimensionare il file system.

Ridimensionare un file system, nella fattispecie aumentare le dimensioni, in linea (ossia con il dispositivo montato ed evitando di rendere inaccessibili dati mentre la macchina accesa) è possibile utilizzando file system tipo ext3, ext4 oppure un file system moderno.

resize2fs /dev/vg_database/lv_database

resize2fs

Attenzione perchè alcuni file system come ext2 richiedono che il file system sia smontato prima nell’attività di ridimensionamento.
Ridurre la dimensione di un file system potrebbe non essere possibile in linea, ossia con il file system montato.

cloud

Articolo precedente

Aggiungere un datastore in VMware ESXi 6
linux

Articolo successivo

Installare Zabbix 2.2 su Debian Jessie