Introduzione
LVM, o Logical Volume Management, è una tecnologia di gestione dei dispositivi di archiviazione che offre agli utenti la possibilità di raggruppare e astrarre la disposizione fisica dei componenti dei dispositivi di archiviazione per una gestione flessibile. Utilizzando il framework del kernel Linux device mapper, la versione attuale, LVM2, può essere utilizzata per raggruppare i dispositivi di archiviazione esistenti in gruppi e allocare unità logiche dallo spazio combinato secondo necessità.
I principali vantaggi di LVM sono l’aumento dell’astrazione, della flessibilità e del controllo. I volumi logici possono avere nomi significativi come “databases” o “root-backup”. I volumi possono essere ridimensionati dinamicamente man mano che cambiano le esigenze di spazio e possono essere migrati tra dispositivi fisici all’interno del pool su un sistema in esecuzione o esportati. LVM offre anche funzionalità avanzate come la creazione di snapshot, lo striping e il mirroring.
In questa guida, imparerai come funziona LVM e praticherai i comandi di base per iniziare rapidamente su una macchina bare metal.
Architettura e terminologia di LVM
Prima di approfondire i comandi amministrativi di LVM, è importante avere una comprensione di base di come LVM organizza i dispositivi di archiviazione e di alcuni dei termini che utilizza.
Strutture di Gestione dello Storage LVM
LVM funziona stratificando astrazioni sopra dispositivi di storage fisici. I livelli di base che LVM utilizza, partendo dal più primitivo, sono:
-
Volumi Fisici: Il prefisso dell’utilità LVM per i volumi fisici è
pv...
. Questi sono dispositivi di blocchi fisici o altri dispositivi simili a dischi (ad esempio, altri dispositivi creati da device mapper, come array RAID) e vengono utilizzati da LVM come materia prima grezza per livelli superiori di astrazione. I volumi fisici sono dispositivi di storage regolari. LVM scrive un header sul dispositivo per allocarlo per la gestione. -
Gruppi di Volumi: Il prefisso dell’utilità LVM per i gruppi di volumi è
vg...
.
LVM combina i volumi fisici in pool di storage noti come gruppi di volumi. I gruppi di volumi astraggono le caratteristiche dei dispositivi sottostanti e funzionano come un dispositivo logico unificato con capacità di storage combinata dei volumi fisici componenti. -
Volumi logici: Il prefisso dell’utilità LVM per i volumi logici è
lv...
, le utility LVM generiche potrebbero iniziare conlvm...
. Un gruppo di volumi può essere suddiviso in qualsiasi numero di volumi logici. I volumi logici sono equivalenti funzionalmente alle partizioni su un disco fisico, ma con molta più flessibilità. I volumi logici sono il componente principale con cui interagiranno gli utenti e le applicazioni.
LVM può essere utilizzato per combinare volumi fisici in gruppi di volumi per unificare lo spazio di archiviazione disponibile su un sistema. Successivamente, gli amministratori possono suddividere il gruppo di volumi in volumi logici arbitrari, che fungono da partizioni flessibili.
Comprensione degli estendi
Ogni volume all’interno di un gruppo di volumi è suddiviso in piccoli blocchi di dimensioni fisse chiamati extent. La dimensione degli extent è determinata dal gruppo di volumi. Tutti i volumi all’interno del gruppo devono avere la stessa dimensione degli extent.
Gli extent su un volume fisico sono chiamati extent fisici, mentre gli extent di un volume logico sono chiamati extent logici. Un volume logico è una mappatura che LVM mantiene tra extent logici ed extent fisici. Grazie a questa relazione, la dimensione dell’extent rappresenta la quantità minima di spazio che può essere allocata da LVM.
Gli extent sono alla base della flessibilità e della potenza di LVM. Gli extent logici, presentati come un dispositivo unificato da LVM, non devono corrispondere a extent fisici continui. LVM può copiare e riorganizzare gli extent fisici che compongono un volume logico senza interruzioni per gli utenti. I volumi logici possono anche essere espansi o ridotti aggiungendo o rimuovendo extent dal volume.
Casi d’uso comuni
Ora che sei familiare con alcuni dei termini e delle strutture utilizzati da LVM, puoi esplorare alcuni modi comuni per utilizzare LVM. Inizierai con una procedura che utilizzerà due dischi fisici per formare quattro volumi logici.
Contrassegnare i dispositivi fisici come volumi fisici
Inizia scandendo il sistema per i dispositivi di blocco a cui LVM può accedere e gestire. Puoi farlo con il seguente comando:
- sudo lvmdiskscan
Il risultato restituirà tutti i dispositivi di blocco disponibili con cui LVM può interagire:
Output /dev/ram0 [ 64.00 MiB]
/dev/sda [ 200.00 GiB]
/dev/ram1 [ 64.00 MiB]
. . .
/dev/ram15 [ 64.00 MiB]
/dev/sdb [ 100.00 GiB]
2 disks
17 partitions
0 LVM physical volume whole disks
0 LVM physical volumes
In questo esempio, notare che attualmente ci sono due dischi e 17 partizioni. Le partizioni sono principalmente partizioni /dev/ram*
utilizzate nel sistema come disco RAM per miglioramenti delle prestazioni. I dischi in questo esempio sono /dev/sda
, che ha uno spazio di 200G, e /dev/sdb
, che ha 100G.
Avviso: Assicurati di verificare attentamente che i dispositivi che intendi utilizzare con LVM non abbiano già dati importanti scritti su di essi. L’utilizzo di questi dispositivi all’interno di LVM sovrascriverà i contenuti attuali. Se hai dati importanti sul tuo server, effettua il backup prima di procedere.
Ora che conosci i dispositivi fisici che vuoi utilizzare, contrassegnali come volumi fisici all’interno di LVM usando il comando pvcreate
:
- sudo pvcreate /dev/sda /dev/sdb
Output Physical volume "/dev/sda" successfully created
Physical volume "/dev/sdb" successfully created
Questo scriverà un’intestazione LVM sui dispositivi per indicare che sono pronti per essere aggiunti a un gruppo di volumi.
Verifica che LVM abbia registrato i volumi fisici eseguendo il comando pvs
:
- sudo pvs
Output PV VG Fmt Attr PSize PFree
/dev/sda lvm2 --- 200.00g 200.00g
/dev/sdb lvm2 --- 100.00g 100.00g
Si noti che entrambi i dispositivi sono presenti sotto la colonna PV
, che sta per volume fisico.
Aggiunta dei volumi fisici a un gruppo di volumi
Ora che hai creato volumi fisici dai tuoi dispositivi, puoi creare un gruppo di volumi. Nella maggior parte dei casi, hai solo un singolo gruppo di volumi per sistema per massima flessibilità nell’allocazione. Nell’esempio seguente il gruppo di volumi è denominato LVMVolGroup
. Puoi nominare il tuo gruppo di volumi come preferisci.
Per creare il gruppo di volumi e aggiungere entrambi i tuoi volumi fisici ad esso, esegui:
- sudo vgcreate LVMVolGroup /dev/sda /dev/sdb
Output Volume group "LVMVolGroup" successfully created
Controllando di nuovo l’output di pvs
indicherà che i tuoi volumi fisici sono ora associati al nuovo gruppo di volumi:
- sudo pvs
Output PV VG Fmt Attr PSize PFree
/dev/sda LVMVolGroup lvm2 a-- 200.00g 200.00g
/dev/sdb LVMVolGroup lvm2 a-- 100.00g 100.00g
Elencare un breve riassunto del gruppo di volumi con vgs
:
- sudo vgs
Output VG #PV #LV #SN Attr VSize VFree
LVMVolGroup 2 0 0 wz--n- 299.99g 299.99g
Il tuo gruppo di volumi attualmente ha due volumi fisici, zero volumi logici, e ha la capacità combinata dei dispositivi sottostanti.
Creazione di volumi logici dal pool del gruppo di volumi
Ora che hai a disposizione un gruppo di volumi, puoi usarlo come pool per allocare volumi logici. A differenza della partizionamento convenzionale, quando si lavora con volumi logici, non è necessario conoscere la disposizione del volume poiché LVM mappa e gestisce questo per te. Devi solo fornire la dimensione del volume e un nome.
Nell’esempio seguente, creerai quattro volumi logici separati dal tuo gruppo di volumi:
- Volume “progetti” da 10G
- Volume “www” da 5G per contenuti web
- Volume “db” da 20G per un database
- Volume “workspace” che riempirà lo spazio rimanente
Per creare volumi logici, usa il comando lvcreate
. Devi passare il gruppo di volumi da cui estrarre e puoi dare un nome al volume logico con l’opzione -n
. Per specificare direttamente la dimensione, puoi usare l’opzione -L
. Se, invece, desideri specificare la dimensione in termini di numero di estensioni, puoi utilizzare l’opzione -l
.
Crea i primi tre volumi logici con l’opzione -L
:
- sudo lvcreate -L 10G -n projects LVMVolGroup
- sudo lvcreate -L 5G -n www LVMVolGroup
- sudo lvcreate -L 20G -n db LVMVolGroup
Output Logical volume "projects" created.
Logical volume "www" created.
Logical volume "db" created.
Puoi visualizzare i volumi logici e la loro relazione con il gruppo di volumi selezionando un output personalizzato dal comando vgs
:
- sudo vgs -o +lv_size,lv_name
Output VG #PV #LV #SN Attr VSize VFree LSize LV
LVMVolGroup 2 3 0 wz--n- 299.99g 264.99g 10.00g projects
LVMVolGroup 2 3 0 wz--n- 299.99g 264.99g 5.00g www
LVMVolGroup 2 3 0 wz--n- 299.99g 264.99g 20.00g db
In questo esempio, hai aggiunto le ultime due colonne dell’output. Indica quanto spazio è allocato per i tuoi volumi logici.
Ora, puoi allocare il resto dello spazio nel gruppo di volumi al volume "workspace"
utilizzando l’opzione -l
, che funziona in estensioni. Puoi anche fornire una percentuale e un’unità per comunicare meglio le tue intenzioni. In questo esempio, alloca lo spazio libero rimanente, quindi puoi inserire 100%FREE
:
- sudo lvcreate -l 100%FREE -n workspace LVMVolGroup
Output Logical volume "workspace" created.
Controllando le informazioni sul gruppo di volumi con il comando personalizzato vgs
, nota che hai utilizzato tutto lo spazio disponibile:
- sudo vgs -o +lv_size,lv_name
Output VG #PV #LV #SN Attr VSize VFree LSize LV
LVMVolGroup 2 4 0 wz--n- 299.99g 0 10.00g projects
LVMVolGroup 2 4 0 wz--n- 299.99g 0 5.00g www
LVMVolGroup 2 4 0 wz--n- 299.99g 0 20.00g db
LVMVolGroup 2 4 0 wz--n- 299.99g 0 264.99g workspace
Il volume workspace
è stato creato e il gruppo di volumi LVMVolGroup
è completamente allocato.
Formattazione e Montaggio dei Volumi Logici
Ora che hai volumi logici, puoi utilizzarli come dispositivi a blocchi normali.
I dispositivi logici sono disponibili nella directory /dev
come altri dispositivi di archiviazione. Puoi accedervi in due modi:
/dev/nome_gruppo_di_volumi/nome_volume_logico
/dev/mapper/nome_gruppo_di_volumi-nome_volume_logico
Per formattare i quattro volumi logici con il filesystem Ext4, esegui i seguenti comandi:
- sudo mkfs.ext4 /dev/LVMVolGroup/projects
- sudo mkfs.ext4 /dev/LVMVolGroup/www
- sudo mkfs.ext4 /dev/LVMVolGroup/db
- sudo mkfs.ext4 /dev/LVMVolGroup/workspace
In alternativa, puoi eseguire il seguente:
- sudo mkfs.ext4 /dev/mapper/LVMVolGroup-projects
- sudo mkfs.ext4 /dev/mapper/LVMVolGroup-www
- sudo mkfs.ext4 /dev/mapper/LVMVolGroup-db
- sudo mkfs.ext4 /dev/mapper/LVMVolGroup-workspace
Dopo la formattazione, crea punti di mount:
- sudo mkdir -p /mnt/{projects,www,db,workspace}
Quindi monta i volumi logici nella posizione appropriata:
- sudo mount /dev/LVMVolGroup/projects /mnt/projects
- sudo mount /dev/LVMVolGroup/www /mnt/www
- sudo mount /dev/LVMVolGroup/db /mnt/db
- sudo mount /dev/LVMVolGroup/workspace /mnt/workspace
Per rendere i mount persistenti, utilizza il tuo editor di testo preferito per aggiungerli al file \texttt{/etc/fstab}. Nell’esempio seguente si utilizza \texttt{nano}:
- sudo nano /etc/fstab
. . .
/dev/LVMVolGroup/projects /mnt/projects ext4 defaults,nofail 0 0
/dev/LVMVolGroup/www /mnt/www ext4 defaults,nofail 0 0
/dev/LVMVolGroup/db /mnt/db ext4 defaults,nofail 0 0
/dev/LVMVolGroup/workspace /mnt/workspace ext4 defaults,nofail 0 0
Dopo aver modificato il file, salva ed esci. Se stai utilizzando \texttt{nano}, premi \texttt{CTRL+c}, quindi \texttt{y}, quindi \texttt{ENTER}.
Il sistema operativo dovrebbe ora montare automaticamente i volumi logici LVM all’avvio.
Conclusione
Ora hai una comprensione dei vari componenti che LVM gestisce per creare un sistema di archiviazione flessibile, e come far funzionare i dispositivi di archiviazione in un setup LVM.
Per saperne di più sul lavoro con LVM, consulta la nostra guida all’uso di LVM con Ubuntu 18.04.