Tutorial LVM (Logical Volume Manager) su Linux

Ultimo aggiornamento: 17/12/2025
Autore: Isaac
  • LVM consente di astrarre il immagazzinamento fisico in PV, VG e LV, offrendo una gestione flessibile e dinamica dello spazio in Linux.
  • Con comandi Comandi come pvcreate, vgcreate, lvcreate, lvextend o pvmove consentono di creare, estendere e migrare volumi al volo.
  • Snapshot, mirror e migrazioni tra array di storage rendono LVM uno strumento fondamentale per un'elevata disponibilità e manutenzione senza tempi di inattività.
  • Per la risoluzione dei problemi negli ambienti di produzione è essenziale comprendere gli errori tipici dell'LVM e i file di configurazione.

LVM Logical Volume Manager in Linux

Lavorare con lo storage in Linux senza scervellarsi sulle partizioni classiche è possibile grazie a LVM (gestore del volume logico)Questo sistema aggiunge un livello di astrazione ai dischi fisici che consente di ridimensionare, spostare e proteggere i dati con una flessibilità che, negli ambienti professionali, fa la differenza tra dover spegnere un server o poter fare tutto al volo.

Se gestisci sistemi o ti stai preparando per certificazioni come LPIC, RHCSA o simili, una solida conoscenza di LVM non è più un optional. In questo tutorial, vedremo... Cos'è LVM, come è strutturato, come creare e gestire PV, VG e LVOltre ad approfondire le operazioni del mondo reale: scale-up, scale-down, mirror, snapshot, migrazioni tra array di storage, utilizzo di LUN estese e risoluzione dei problemi tipici che potresti incontrare in produzione.

Cos'è LVM e perché viene utilizzato in Linux?

Quando parliamo di LVM, ci riferiamo ad un sistema che consente gestire lo storage in modo logico invece di affidarsi direttamente a partizioni fisseInvece di avere un /dev/sdb1 da 50 GB e un /dev/sdc1 da 100 GB utilizzati separatamente, LVM consente di raggrupparli in un unico spazio combinando la loro capacità per formare quello che è noto come volume pool o Gruppo di volumi (VG) di 150 GB.

Oltre a questo VG possiamo definire diversi volumi logici (LV), ad esempio uno da 20 GB per /opt, uno da 100 GB per /var e un altro da 30 GB per i backup. Questo livello di astrazione rende possibile ridistribuire lo spazio molto più facilmente rispetto alla partizione tradizionaleuna volta creata la dimensione della partizione, modificarla a caldo è un'operazione delicata o semplicemente impossibile.

Uno dei grandi vantaggi di LVM è che ci consente di creare istantanee di un volume logico per ottenere un punto di ripristino rapido, espandere i file system al volo aggiungendo nuovi dischi al VG o spostare dati da un disco a un altro all'interno dello stesso gruppo senza interrompere i servizi. In ambienti con array di dischi, SAN o storage condiviso, questa capacità di migrare i dati tra dischi o array senza tempi di inattività è inestimabile.

Nel mondo reale, questo si traduce nella tua capacità di spostare un database da una sala server congestionata a una più veloce senza che gli utenti notino nulla oltre a un carico I/O extra, o siano in grado di espandere il file system di un'applicazione perché non è più sufficiente, senza riavviare il server o intervenire manualmente sui servizi.

Struttura di base dell'LVM: PV, VG e LV

Struttura LVM in Linux

Per comprendere appieno il LVM, è necessario avere ben chiari i suoi componenti principali, che formano una gerarchia dal più fisico al più logico. La chiave è che Ogni livello si basa sul precedente per garantire flessibilità. senza che il file system debba conoscere tutti i dettagli del hardware.

Alla base di tutto ci sono le Volume fisico (PV)Si tratta semplicemente di dischi fisici, partizioni (ad esempio, /dev/sdb1, /dev/sdc1), LUN di array di storage o persino dispositivi RAID software come /dev/md0. Ogni PV è internamente suddiviso in unità fisse chiamate Estensioni fisiche (PE)che saranno i pezzi con cui verranno costruiti i volumi logici.

Sopra il PV abbiamo il Gruppo di volume (VG)I gruppi di volumi (VG) raggruppano uno o più volumi fisici per formare un pool di archiviazione. La dimensione di un VG è la somma della capacità di tutti i PV che lo compongono, meno lo spazio già allocato ai volumi logici. In pratica, il VG è il "contenitore" da cui estrarremo lo spazio per creare LV personalizzati.

In fondo alla scala ci sono i Volume logico (LV)Questi sono i volumi che il sistema vede quasi come se fossero normali partizioni. È su un LV che creiamo il file system (ext4, xfs, ecc.) e lo montiamo in /, /var, /home o dove necessario. Internamente, ogni LV è costituito da Estensioni logiche (LE)che sono mappati 1:1 con i PE del VG, ma possono essere distribuiti su più dischi fisici senza essere contigui.

Il kernel utilizza il mappatore di dispositivi per tradurre questi dispositivi logici (ad esempio, /dev/mapper/vg00-rootvol) nei blocchi fisici corrispondenti. I nomi intuitivi di LVM sono solitamente link simbolici a dispositivi come /dev/dm-0, /dev/dm-1, ecc., consentendo un'enorme flessibilità nella combinazione di dischi, RAID, crittografia e LVM senza che i livelli superiori se ne accorgano.

In un sistema reale, se eseguiamo comandi come vgs, pvs e lvs Saremo in grado di vedere l'elenco dei gruppi di volumi esistenti, volumi fisici e volumi logici, la loro dimensione totale e spazio libero, nonché attributi di attivazione, stato, UUID, ecc. Con vgdisplay -v Possiamo ottenere ancora più dettagli: numero di LV, dimensione di PE, numero di PE liberi, elenco di PV che formano il gruppo, ecc.

  La tua velocità di download di Steam è lenta. Questa è la soluzione!

Visualizza la struttura LVM esistente nel sistema

Comandi LVM in Linux

Prima di toccare qualsiasi cosa, è essenziale sapere Quale struttura LVM abbiamo attualmente nel sistema?Per fare ciò, vengono utilizzati tre comandi principali: pvs, vgs e lvs. Ognuno di essi mostra una visione diversa e complementare della stessa realtà.

Se vogliamo vedere quali dischi o partizioni appartengono a ciascun gruppo, usiamo pvQuesto comando visualizzerà i percorsi dei dispositivi (ad esempio, /dev/sda2, /dev/sdb1, /dev/sdc1), il VG a cui appartengono, la dimensione del PV e la quantità di spazio non allocato ancora disponibile su ciascuno. È molto utile per verificare che un nuovo disco sia stato aggiunto correttamente a un VG.

Con il comando eccetera Otterremo un elenco di tutti i gruppi di volumi, indicando quanti PV, LV e snapshot (SN) ciascuno contiene, nonché la dimensione totale del gruppo e lo spazio libero disponibile. Questo ci consente di identificare rapidamente quali gruppi sono più pieni e dove abbiamo spazio per l'espansione.

Infine, con LVS Vedremo l'elenco dei volumi logici, con informazioni come la dimensione, il VG a cui appartengono, gli attributi (ad esempio, se sono mirror, snapshot, thin, ecc.), la percentuale di utilizzo nel caso degli snapshot e altri dati chiave. Su server con molti LV, questo comando diventa quasi indispensabile per tenere traccia dei diversi file system.

Se vogliamo un report ancora più dettagliato su un gruppo specifico, possiamo eseguire vgdisplay -v NomeVGQuesto comando visualizzerà la configurazione del VG, tutti i suoi LV con informazioni estese e, infine, i dettagli di ogni PV che lo compone. È particolarmente utile per attività di diagnostica o di auditing dello storage.

D'altra parte, se ispezioniamo i file system montati con Mount o df -hVedremo che i punti di raccolta puntano ai percorsi sotto /dev/mapper/VG-LVAd esempio, /dev/mapper/vg00-rootvol montato su /, /dev/mapper/vg00-varvol su /var, ecc. Ciò conferma che i file system sono effettivamente supportati sui volumi logici LVM.

Creazione di una struttura LVM da zero

Per impostare una nuova struttura LVM, si parte da uno o più dischi (o partizioni) liberi. Il flusso di lavoro tipico prevede: creare un PV, poi un VG e infine uno o più LV di cui formatear file system.

Inizializzare un volume fisico (PV)

Il primo passo è contrassegnare un disco o una partizione come volume fisico per LVM utilizzando il comando pvccreateQuesto inizializza i metadati necessari a LVM per gestirlo. Ad esempio, se vogliamo usare /dev/sdb come PV, eseguiremo:

pvcreate /dev/sdb

Dopo questo passaggio, il dispositivo diventa capace per integrare in un gruppo di volumiIn alcune distribuzioni come Red Hat, quando si crea un VG da zero, il programma di installazione esegue automaticamente pvcreate, ma conoscere il comando è essenziale per le estensioni e le configurazioni manuali.

Creare un gruppo di volumi (VG)

Con i PV pronti, definiamo il gruppo di volumi con il comando vgcreateQuesto comando prende il nome del VG e l'elenco dei dispositivi fisici che lo comporranno. Ad esempio, per creare un VG chiamato vgMySQL con due dischi:

vgcreate vgMySQL /dev/sdb /dev/sdc

Da quel momento, vgMySQL sarà un pool di archiviazione su cui possiamo creare uno o più volumi logici per diversi usi (dati, i registri, backup, ecc.). Possiamo controllare il risultato con vgdisplay vgMySQL o con il breve riassunto eccetera.

Definisci volumi logici (LV)

Una volta creato il gruppo di volumi, il passaggio successivo è riservare spazio all'interno di quel gruppo per ogni LVLo facciamo con il comando lvcreate, specificando nome, dimensione e VG. Un semplice esempio potrebbe essere:

lvcreate -n lvMySQL -L 10G vgMySQL

Quel comando creerà un volume logico da 10 GB all'interno di vgMySQL, che apparirà come /dev/vgMySQL/lvMySQL (e anche come /dev/mapper/vgMySQL-lvMySQL). D'ora in poi, lo tratteremo quasi come se fosse una partizione tradizionale su cui creare un file system.

Crea il file system sul LV

Con il LV creato, tutto ciò che rimane è formattarlo con il tipo di file system più adatto alle nostre esigenzeAd esempio, se vogliamo utilizzare XFS sul volume logico per il database:

mkfs.xfs /dev/vgMySQL/lvMySQL

Successivamente, creeremo il punto di montaggio (ad esempio, /Backup_MySQL, /data_mysql, ecc.) e aggiungeremo la voce corrispondente in /etc/fstab in modo che venga montato automaticamente all'avvio. Da quel momento in poi, le applicazioni vedranno solo un file system normale, anche se al di sotto viene utilizzato LVM.

Unisci due gruppi di volumi (vgmerge)

A volte potremmo volere unire due VG in uno Per semplificare la gestione o per riallocare facilmente lo spazio tra volumi logici che in precedenza si trovavano in gruppi separati, esiste il comando `vgmerge`, che combina il secondo gruppo nel primo.

Prima di procedere alla fusione, è importante assicurarsi che Non dovrebbero esserci nomi LV duplicati tra entrambi i gruppi e che la dimensione delle estensioni (PE) sia la stessa in entrambi i VG, altrimenti il ​​comando fallirà o richiederà passaggi di regolazione precedenti.

  Scopri come correggere l'errore Err_Connexion_Aborted in Chrome

La procedura tipica include smontare i filesystem interessatiDisattiva il VG che vuoi integrare ed esegui vgmerge. Ad esempio, per unire vgPostreSQL in vgMySQL:

vgchange -an vgPostreSQL
vgmerge vgMySQL vgPostreSQL

Dopo la fusione, tutti i LV che appartenevano a vgPostreSQL diventerà parte di vgMySQLe possiamo riattivarli e montarli normalmente. Questo tipo di operazione è utile quando si riorganizza lo storage del server a medio o lungo termine.

Comandi essenziali per la gestione di LVM

Oltre a creare PV, VG e LV, nell'amministrazione quotidiana è fondamentale conoscere aumentare, diminuire, eliminare e spostare i volumi senza compromettere i dati. LVM offre un'ampia gamma di comandi che vale la pena padroneggiare, sia nella loro forma base che in scenari avanzati.

Estensione di un file system in LVM

Uno dei compiti più frequenti è quando un file system esaurisce lo spazio e abbiamo bisogno aumentare la dimensione del LV e del file systemIl flusso di lavoro generale nei file system ext3/ext4 prevede solitamente l'utilizzo di lvextend per il volume logico e quindi dello strumento di crescita FS, come resize2fs.

Ad esempio, per ridurre un volume a una dimensione totale di 512 MB, potremmo eseguire:

lvextend -L 512M /dev/VolGroup00/LogVol02
resize2fs /dev/VolGroup00/LogVol02

Se invece quello che vogliamo è aggiungere spazio aggiuntivo alla dimensione attuale (ad esempio, per aumentare di 512 MB rispetto a quanto già presente nel LV), utilizziamo la sintassi con il segno più:

lvextend -L+512M /dev/VolGroup00/LogVol02

Nei sistemi con XFS, la crescita del file system viene effettuata con xfs_growfs puntando al punto di montaggio o al dispositivo. È importante conoscere lo strumento corretto per ogni tipo di file system, poiché non tutti si comportano allo stesso modo con gli aggiornamenti.

Riduzione delle dimensioni di un file system e di un LV

L'operazione inversa, la riduzione, è più delicata perché comporta rimpicciolisci il file system e poi il LVNon tutti i file system lo consentono: EXT4 supporta la riduzione, mentre XFS, ad esempio, non supporta la riduzione, ma solo l'aumento.

Un tipico flusso di lavoro con ext4 prevede innanzitutto la riduzione del file system (di solito dopo averlo smontato ed eseguito fsck se lo strumento lo richiede) e quindi l'utilizzo di lvreduce per regolare la dimensione del volume logico. Molte distribuzioni facilitano questa operazione con l'opzione -r in lvreduce, che coordina entrambi i passaggi in modo più sicuro:

lvreduce -r -L95G /dev/mapper/vgdml-lvdml

Il processo stesso eseguirà controlli di integrità, regolerà la dimensione del file system e infine ridurrà il LV al valore specificato. Ciononostante, è prudente avere fare sempre il backup quando si effettuano delle riduzioni, poiché un errore in questo punto può essere critico.

Elimina un volume logico

Per eliminare un LV di cui non abbiamo più bisogno, dobbiamo assicurarci che non montato o in usoUna volta smontato il file system, possiamo eliminare il volume logico con lvremove:

lvremove /dev/VolGroup00/LogVol02

Questo comando rimuove la definizione LV e rilascia le sue estensioni all'interno del VGin modo che questo spazio sia disponibile per creare altri volumi o per ampliare quelli esistenti all'interno dello stesso gruppo.

Creazione e gestione di mirror con LVM

Se non abbiamo un RAID per controller nell'hardware, possiamo configurare specchi a livello LVMQuesto funziona a patto che il VG abbia spazio sufficiente e che i dischi fisici siano distribuiti correttamente. Le versioni precedenti utilizzavano `lvextend` con l'opzione `-m`, ma le versioni più recenti utilizzano `lvconvert`.

Per creare uno specchio di un LV esistente, specifichiamo il numero di copie (m1 (si intende una copia speculare oltre all'originale):

lvconvert -m1 /dev/VolGroup00/LogVol02 /dev/sdae

Durante il processo, LVM sincronizza entrambe le copie e possiamo osservare i progressi con lvs, vedendo come percentuale di sincronizzazione Va da 0 a 100. Se in qualsiasi momento vogliamo tornare alla modalità lineare (senza mirroring), possiamo usare lvconvert con -M0 per rimuovere lo specchio.

In un tipico esempio pratico, un nuovo VG viene creato con due dischi e un LV in modalità specchio e formattato. Dopo aver copiato i dati sul file system (ad esempio, un DVD di installazione ISO di grandi dimensioni per verificarne l'integrità), è possibile verificare che la sincronizzazione sia terminata e che entrambi i dischi contengano lo stesso contenuto.

Un'altra situazione interessante è quando vogliamo rompere lo specchio per rimuovere un disco (ad esempio, per sostituirlo con un altro). Per prima cosa, convertiamo il LV in modalità lineare con lvconvert -m0, che ci consente di uno dei dischi VG è lasciato libero dai datiSuccessivamente, eseguiamo `vgreduce` per rimuovere il PV dal gruppo e, infine, possiamo riciclare o rimuovere fisicamente il disco. In seguito, possiamo aggiungere una nuova unità con `vgextend` e rieseguire il mirroring con `lvconvert -m1`.

Spostamento di dati tra dischi all'interno dello stesso VG (pvmove)

Nei grandi ambienti aziendali è comune che, con il tempoAlcuni array di dischi potrebbero diventare lenti o sovraccarichi. LVM fornisce il comando pvmove Per spostare dati da un vecchio PV a uno nuovo all'interno dello stesso VG senza interrompere i servizi, copiando le estensioni da un disco all'altro in modo trasparente.

Il flusso di lavoro tipico sarebbe quello di aggiungere prima i nuovi dischi veloci al VG con vgextendin modo da poter vedere sia quelli vecchi che quelli nuovi in ​​pvs. Quindi eseguiamo pvmove specificando l'origine e la destinazione, ad esempio:

  I 6 migliori software di emulazione PC Mac[Elenco 2019]

pvmove /dev/sdg1 /dev/sdk1

Durante l'esecuzione, pvmove visualizza la percentuale di completamento. È un processo che richiede molte operazioni di I/O e che dovrebbe essere pianificato al di fuori delle ore di punta, perché Leggerà dal vecchio disco, scriverà su quello nuovo e cancellerà i vecchi dati.Una volta terminato e verificato che non ci sono più dati rimasti nel vecchio PV, possiamo rimuoverlo dal gruppo con vgreduce in modo da non utilizzare più quella cabina lenta.

Attivare e disattivare i gruppi di volumi (vgchange)

Nelle configurazioni ad alta disponibilità, in particolare nei cluster, è comune che I VG vengono attivati ​​e disattivati ​​su nodi diversi a seconda di dove è in esecuzione il servizio. Sebbene questa operazione sia solitamente gestita dal software del cluster, a volte deve essere eseguita manualmente.

Per contrassegnare un VG come attivo (disponibile per montare i tuoi LV) utilizziamo:

vgchange -a y NombreVG

Per disattivarlo, ad esempio prima di migrare un volume su un altro server, si utilizza quanto segue:

vgchange -a n NombreVG

Combinata con vgscanForzando il sistema a scansionare i dispositivi per trovare le strutture LVM, possiamo fare in modo che un altro nodo del cluster riconosca e attivi gli stessi gruppi che sono stati creati o modificati nel primo.

Snapshot in LVM: creazione, ripristino ed eliminazione

Una delle caratteristiche più potenti di LVM è la sua capacità di creare snapshot di volumi logiciUno snapshot cattura lo stato di un server live in un dato momento e viene archiviato in un'area di archiviazione aggiuntiva dove vengono registrate le modifiche successive. Ciò consente di annullare le modifiche in caso di problemi con un aggiornamento o una modifica alla configurazione.

Il flusso di base sarebbe: creare un file o un set di dati nel file system di origine, generare lo snapshot con lvcreate utilizzando l'opzione -sApportare ulteriori modifiche e, se qualcosa non funziona, smontare il FS e unire lo snapshot con lvconvert –merge per ripristinare lo stato precedente.

Ad esempio, per creare uno snapshot da 100 MB di /dev/vgtest/lvtest potremmo eseguire:

lvcreate -s -n lvtest_snapshot -L 100M /dev/vgtest/lvtest

Finché esiste lo snapshot, LVM continuerà a salvare l' blocchi modificati rispetto all'originale. Se vogliamo "annullare" le modifiche apportate al file system dopo aver creato lo snapshot, smontiamo il volume, eseguiamo `lvconvert --merge` sullo snapshot e rimontiamo il file system. I file torneranno allo stato in cui erano al momento della creazione dello snapshot.

Se invece verifichiamo che tutto funzioni correttamente e vogliamo rendere permanenti le modifiche, eliminiamo semplicemente lo snapshot con rimuovereIn questo modo liberiamo lo spazio che era riservato nel VG ed evitiamo che si riempia a causa di modifiche eccessive.

Strumenti e comandi chiave LVM

LVM2, la versione utilizzata nei kernel moderni, offre un'ampia gamma di comandi specializzati. Sebbene ne abbiamo già menzionati alcuni, è utile avere una panoramica degli strumenti più importanti per gestire il ciclo di vita completo dei volumi.

  • pvcreate, vgcreate, lvcreateCreano volumi fisici, di gruppo e logici.
  • pvdisplay, vgdisplay, lvdisplay: Mostrano informazioni dettagliate su ciascun tipo di oggetto LVM.
  • pvs, vgs, lvsForniscono una vista riepilogativa molto utile per ottenere una rapida istantanea dello stato di archiviazione.
  • estendere, estendere: Espandono i volumi logici o i gruppi aggiungendo dimensioni o nuovi PV.
  • ridurre, ridurre: ridurre le dimensioni dei LV o rimuovere PV da un VG.
  • pvscan, vgscan, lvscanEseguono la scansione del sistema alla ricerca di strutture LVM.
  • pvchange, vgchange, lvchange: modifica gli attributi (ad esempio, attivazione, permessi) dei diversi elementi.
  • pvmove: migra i dati da un volume fisico a un altro all'interno dello stesso VG.
  • pvresize, lvresizeAdattano la struttura dei dati per poter aumentare o ridurre i volumi.
  • vgcfgbackup, vgcfgrestore: Salvano e ripristinano i metadati VG.
  • vgconvert: modifica il formato dei metadati, utile per la migrazione tra le versioni di LVM.
  • lvconvert: converte i volumi tra le modalità lineare, mirror, snapshot, ecc.
  • vgexport, vgimport, vgimportcloneEsportano/importano VG per spostarli su altri sistemi, evitando conflitti di nomi.
  • vgmerge, vgsplit: consente di unire o dividere gruppi di volumi.
  • vgrename, lvrename: modifica il nome di VG e LV senza influenzare i dati.
  • pvremove, lvremove: Rimuovono i PV da LVM ed eliminano gli LV che non sono più in uso.

Avere una certa padronanza di questo set di strumenti rende il lavoro con l'archiviazione in Linux qualcosa molto più malleabile e meno traumaticoconsentendo cambiamenti profondi senza interrompere i servizi e facilitando la manutenzione a lungo termine.

Per padroneggiare LVM è necessario avere una conoscenza approfondita della sua struttura PV-VG-LV, del modo in cui interagisce con i file system e saper usare comandi quali pvcreate, vgcreate, lvcreate, pvmove, lvextend e snapshot; con queste basi, qualsiasi amministratore può gestire l'archiviazione dei server Linux. con molta più sicurezza e flessibilità rispetto alla partizione tradizionale.

Memoria persistente o PMEM: di cosa si tratta?
Articolo correlato:
Persistent Memory Storage (PMEM): cos'è e come utilizzarlo