Lavorare con LVM | INTROSERV
EUR
european

EUR

usa

USD

Italy It
Ex. VAT Ex. VAT 0%

Lavorare con LVM

LVM (Logical Volume Manager) è un sistema di gestione dei dischi che aggiunge un livello di astrazione sopra lo storage fisico. Consente di allocare lo spazio su disco in modo flessibile, ridimensionarlo online e creare backup basati su snapshot. È ampiamente utilizzato come livello di storage per la virtualizzazione. Nei sistemi cifrati, LVM viene spesso configurato sopra un dispositivo cifrato con LUKS, in modo che un singolo sblocco renda disponibile l'intero gruppo di volumi.

Questo articolo spiega come installare LVM su Linux, creare Physical Volume, Volume Group e Logical Volume, modificarne le dimensioni, utilizzare gli snapshot e il thin provisioning.

Installare LVM

LVM è incluso per impostazione predefinita nella maggior parte delle distribuzioni Linux. Se non è disponibile, installare il pacchetto lvm2 utilizzando il gestore dei pacchetti del sistema.

Su Debian e Ubuntu:

sudo apt-get install lvm2

Su RHEL, CentOS Stream, AlmaLinux e Rocky Linux:

sudo dnf install lvm2

Creare un Physical Volume

Un Physical Volume (PV) è il componente di base di LVM al livello più basso. Può essere un disco intero (ad esempio, /dev/sdb) oppure una singola partizione (ad esempio, /dev/sdb1).

Info

Utilizzare un disco intero come PV semplifica le operazioni di ridimensionamento successive, poiché non è necessario aumentare prima una partizione sottostante. L'utilizzo di una partizione è preferibile quando il disco deve anche ospitare dati non gestiti da LVM o quando altri strumenti del sistema richiedono una tabella delle partizioni.

Creare un Physical Volume con pvcreate:

sudo pvcreate /dev/sdb

Sostituire /dev/sdb con il percorso del dispositivo a blocchi.

Verificare il risultato con pvdisplay:

sudo pvdisplay

L'output elenca i Physical Volume attualmente gestiti da LVM, insieme alle relative dimensioni e alle informazioni sul Volume Group.

Creare un Volume Group

Un Volume Group (VG) combina uno o più Physical Volume in un unico pool di storage. Da questo pool vengono creati i Logical Volume.

Creare un Volume Group denominato vg0 a partire da un singolo Physical Volume:

sudo vgcreate vg0 /dev/sdb

Oppure da più Physical Volume contemporaneamente:

sudo vgcreate vg0 /dev/sdb /dev/sdc

Verificare il risultato con vgdisplay:

sudo vgdisplay

Creare un Logical Volume

Un Logical Volume (LV) viene visualizzato dal sistema come un normale dispositivo a blocchi. È possibile formattarlo con un file system e montarlo.

Creare un Logical Volume lv0 da 10 GB all'interno del Volume Group vg0:

sudo lvcreate -n lv0 -L 10G vg0

L'opzione -n imposta il nome del Logical Volume, mentre -L ne imposta la dimensione.

Verificare il risultato con lvdisplay:

sudo lvdisplay

Creare un file system sul Logical Volume:

sudo mkfs.ext4 /dev/vg0/lv0

Creare un punto di montaggio e montare il file system:

sudo mkdir -p /mnt/lv0 sudo mount /dev/vg0/lv0 /mnt/lv0

Il nuovo file system sarà ora disponibile in /mnt/lv0. Per montarlo automaticamente all'avvio, aggiungere una voce corrispondente a /etc/fstab.

Info

LVM espone ogni Logical Volume attraverso due percorsi equivalenti: /dev/<vg>/<lv> e /dev/mapper/<vg>-<lv>. Nell'esempio precedente sono /dev/vg0/lv0 e /dev/mapper/vg0-lv0. Entrambi i percorsi puntano allo stesso dispositivo; gli strumenti e i file di configurazione possono utilizzare uno dei due.

Per visualizzare la gerarchia completa PV/VG/LV insieme ai normali dispositivi a blocchi, eseguire:

lsblk

Ridimensionare i volumi

LVM supporta il ridimensionamento online a ogni livello: Physical Volume, Volume Group e Logical Volume.

pvresize aggiorna la configurazione di LVM relativa a un Physical Volume dopo che il dispositivo a blocchi sottostante è stato ridimensionato (ad esempio, dopo aver aumentato un disco virtuale nell'hypervisor):

sudo pvresize /dev/sdb

vgextend aggiunge un Physical Volume a un Volume Group esistente, aumentando così le dimensioni del Volume Group:

sudo vgextend vg0 /dev/sdc

vgreduce rimuove un Physical Volume da un Volume Group:

sudo vgreduce vg0 /dev/sdc

lvresize modifica le dimensioni di un Logical Volume. Ad esempio, per aggiungere 5 GB a lv0:

sudo lvresize -L +5G /dev/vg0/lv0

Oppure per estendere il Logical Volume utilizzando tutto lo spazio libero nel Volume Group:

sudo lvresize -l +100%FREE /dev/vg0/lv0

Info

Notare la differenza tra -L (maiuscola) e -l (minuscola). La versione maiuscola accetta una dimensione con un suffisso di unità come M, G o T. La versione minuscola accetta un numero di extent o una percentuale.

Il ridimensionamento di un Logical Volume non ridimensiona il file system che contiene. Utilizzare lo strumento appropriato per il file system. Per ext2, ext3 ed ext4:

sudo resize2fs /dev/vg0/lv0

Per XFS, eseguire xfs_growfs sul punto di montaggio del file system.

Sui file system supportati, inclusi ext4 e XFS, lvextend con l'opzione -r ridimensiona il Logical Volume e il file system in un'unica operazione:

sudo lvextend -r -L +5G /dev/vg0/lv0

Questa è la forma più comune per l'estensione online.

Warning

La riduzione di un Logical Volume richiede l'ordine inverso: prima deve essere ridotto il file system e solo successivamente il Logical Volume. Eseguire l'operazione nell'ordine opposto tronca il dispositivo sottostante mentre il file system continua a considerare disponibile la dimensione originale, causando la distruzione dei dati. Per ext4, l'operazione deve essere eseguita offline. Smontare il file system, eseguire sudo e2fsck -f /dev/vg0/lv0, ridurre il file system con sudo resize2fs /dev/vg0/lv0 <new_size>, ridurre il Logical Volume alla stessa dimensione con sudo lvresize -L <new_size> /dev/vg0/lv0 e quindi montare nuovamente il file system. XFS non supporta affatto la riduzione. L'unico modo per rendere più piccolo un file system XFS è eseguire un backup, crearne uno più piccolo e ripristinare i dati.

Tutti i comandi indicati sopra supportano --help per visualizzare l'elenco completo delle opzioni.

Snapshot LVM

Uno snapshot cattura lo stato di un Logical Volume in un determinato momento. Funziona tramite un meccanismo copy-on-write: quando il Logical Volume originale cambia, i blocchi modificati vengono salvati nello spazio riservato dello snapshot, che continua quindi a mostrare lo stato originale.

Gli snapshot sono utili per creare backup coerenti con gli arresti anomali di un file system in esecuzione e per testare modifiche che possono essere annullate eliminando lo snapshot. I backup coerenti con l'applicazione richiedono un coordinamento aggiuntivo, come il congelamento del file system o la sospensione temporanea dell'applicazione prima della creazione dello snapshot.

Creare uno snapshot

Creare uno snapshot con lvcreate e l'opzione -s:

sudo lvcreate -L 1G -s -n myvolume_snap /dev/myvg/myvolume

Questo crea uno snapshot denominato myvolume_snap del Logical Volume myvolume nel Volume Group myvg, riservando 1 GB per le modifiche. Scegliere la dimensione riservata in base alla quantità di dati che si prevede possa cambiare durante la vita dello snapshot: gli snapshot di volumi per lo più inattivi richiedono poco spazio, mentre i volumi soggetti a molte scritture possono richiedere una parte significativa della dimensione originale.

Per snapshot di lunga durata e scenari che ne prevedono un numero elevato, prendere in considerazione gli thin snapshot all'interno di un thin pool. Essi utilizzano lo spazio del pool condiviso su richiesta invece di riservare in anticipo una quantità fissa, risultando generalmente più efficienti nell'utilizzo dello spazio.

Warning

Se il Logical Volume originale cambia più di quanto lo snapshot sia in grado di contenere, lo snapshot diventa non valido e i dati da esso acquisiti vanno persi. Dimensionare lo snapshot in modo da coprire la quantità di modifiche prevista durante il suo ciclo di vita.

Utilizzare uno snapshot

Uno snapshot può essere montato come qualsiasi altro Logical Volume. Per le operazioni di backup e ispezione, montarlo in sola lettura a meno che non sia effettivamente necessario l'accesso in scrittura:

sudo mkdir -p /mnt/snapshot sudo mount -o ro /dev/myvg/myvolume_snap /mnt/snapshot

Una volta montato, lo snapshot può essere utilizzato per la lettura, il backup o l'ispezione.

Rimuovere uno snapshot

Quando lo snapshot non è più necessario, rimuoverlo con lvremove:

sudo lvremove /dev/myvg/myvolume_snap

La rimozione di uno snapshot libera lo spazio che aveva riservato. Tutti i dati scritti direttamente nello snapshot, anziché nel volume originale, andranno persi.

Per riportare il volume originale allo stato acquisito dallo snapshot, utilizzare lvconvert --merge invece di lvremove:

sudo lvconvert --merge /dev/myvg/myvolume_snap

Dopo l'unione, lo snapshot viene consumato e rimosso automaticamente. Se il volume originale è attualmente in uso, l'unione viene posticipata fino alla successiva attivazione del volume.

Thin provisioning

Un thin pool è un tipo speciale di Logical Volume che assegna lo spazio di archiviazione su richiesta. I Logical Volume creati al suo interno (thin volume) possono essere creati con una dimensione dichiarata superiore allo spazio libero effettivamente disponibile nel pool; solo i blocchi che vengono scritti consumano spazio di archiviazione reale.

Questa tecnologia viene utilizzata ampiamente nella virtualizzazione, dove molti dischi virtuali condividono un unico pool di archiviazione, ma raramente raggiungono tutti contemporaneamente la capacità dichiarata.

Creare un thin pool

Creare un thin pool mythinpool da 50 GB nel Volume Group myvg:

sudo lvcreate -L 50G -T -n mythinpool myvg

L'opzione -L imposta la dimensione del pool, -T indica a lvcreate di creare un thin pool e -n imposta il nome del pool. LVM assegna il pool dallo spazio libero del Volume Group; al termine del comando è possibile specificare Physical Volume specifici se il pool deve essere posizionato su determinati dispositivi.

Creare un thin volume

Creare un thin volume mythinvolume da 10 GB all'interno di mythinpool:

sudo lvcreate -V 10G -T myvg/mythinpool -n mythinvolume

L'opzione -V imposta la dimensione virtuale del thin volume, -T fa riferimento al thin pool e -n imposta il nome del nuovo volume.

Utilizzare un thin volume

Un thin volume viene utilizzato come qualsiasi altro Logical Volume. Creare un file system al suo interno:

sudo mkfs.ext4 /dev/myvg/mythinvolume

Successivamente il thin volume può essere montato e utilizzato come un normale dispositivo a blocchi.

Warning

Poiché i thin pool possono essere sovraassegnati, è necessario monitorarne l'utilizzo effettivo. Sia lo spazio dati sia lo spazio dei metadati possono esaurirsi indipendentemente e entrambi sono critici: se un thin pool esaurisce lo spazio dati o lo spazio dei metadati mentre viene eseguita una scrittura su un thin volume, le operazioni di scrittura su quel volume inizieranno a non riuscire.

L'utilizzo attuale dello spazio dati e dei metadati di ogni Logical Volume, compresi i thin pool, può essere verificato con lvs:

sudo lvs -o +data_percent,metadata_percent

Quando data_percent o metadata_percent si avvicina al 100%, estendere il thin pool con lvextend prima che si riempia completamente.

Riferimento dei comandi

Comandi LVM comuni raggruppati per livello.

Physical Volume:

  • pvcreate inizializza un dispositivo a blocchi come Physical Volume.
  • pvdisplay mostra informazioni dettagliate sui Physical Volume.
  • pvs mostra una tabella riepilogativa compatta dei Physical Volume.
  • pvresize aggiorna un Physical Volume dopo che il dispositivo sottostante è stato ridimensionato.

Volume Group:

  • vgcreate crea un Volume Group da uno o più Physical Volume.
  • vgextend aggiunge un Physical Volume a un Volume Group.
  • vgreduce rimuove un Physical Volume da un Volume Group.
  • vgdisplay mostra informazioni dettagliate sui Volume Group.
  • vgs mostra una tabella riepilogativa compatta dei Volume Group.

Logical Volume:

  • lvcreate crea un Logical Volume.
  • lvextend e lvresize modificano le dimensioni di un Logical Volume.
  • lvremove rimuove un Logical Volume.
  • lvconvert --merge unisce uno snapshot nuovamente al volume di origine.
  • lvdisplay mostra informazioni dettagliate sui Logical Volume.
  • lvs mostra una tabella riepilogativa compatta dei Logical Volume.

Per l'utilizzo quotidiano, i comandi riepilogativi brevi pvs, vgs e lvs sono generalmente più pratici delle varianti dettagliate *display. Ogni comando supporta --help per visualizzare l'elenco completo delle opzioni.

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • germany
  • Español
  • Italiano
  • Poland
  • Русский
  • Slovenski
  • Türkçe
  • ukraine
  • kingdom
  • French
  • Hrvatska
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA