Guida di un utente Linux alla gestione dei volumi logici
Gestire lo spazio su disco è sempre stato un compito importante per i sysadmin. L’esaurimento dello spazio su disco era l’inizio di una lunga e complessa serie di operazioni per aumentare lo spazio disponibile su una partizione del disco. Richiedeva anche la messa fuori linea del sistema. Questo di solito comportava l’installazione di un nuovo disco rigido, l’avvio in modalità ripristino o utente singolo, la creazione di una partizione e di un filesystem sul nuovo disco rigido, l’uso di punti di montaggio temporanei per spostare i dati dal filesystem troppo piccolo a quello nuovo e più grande, la modifica del contenuto del file /etc/fstab per riflettere il nome corretto del dispositivo per la nuova partizione, e il riavvio per rimontare il nuovo filesystem sul punto di montaggio corretto.
Devo dirvi che, quando LVM (Logical Volume Manager) ha fatto la sua prima apparizione in Fedora Linux, ho resistito piuttosto fortemente. La mia reazione iniziale era che non avevo bisogno di questo ulteriore livello di astrazione tra me e i dischi rigidi. Si è scoperto che mi sbagliavo, e che la gestione dei volumi logici è molto utile.
LVM permette una gestione molto flessibile dello spazio su disco. Fornisce caratteristiche come la possibilità di aggiungere spazio su disco a un volume logico e al suo filesystem mentre il filesystem è montato e attivo e permette di raccogliere più dischi rigidi fisici e partizioni in un unico gruppo di volumi che può essere diviso in volumi logici.
Il volume manager permette anche di ridurre la quantità di spazio su disco allocato a un volume logico, ma ci sono un paio di requisiti. Primo, il volume deve essere smontato. Secondo, il filesystem stesso deve essere ridotto di dimensioni prima che il volume su cui risiede possa essere ridotto.
È importante notare che il filesystem stesso deve permettere il ridimensionamento perché questa funzione funzioni. I filesystem EXT2, 3 e 4 permettono tutti il ridimensionamento sia offline (non montato) che online (montato) quando si aumenta la dimensione di un filesystem, e il ridimensionamento offline quando si riduce la dimensione. Dovreste controllare i dettagli dei filesystem che intendete usare per verificare se possono essere ridimensionati e soprattutto se possono essere ridimensionati mentre sono online.
Espandere un filesystem al volo
Mi piace sempre eseguire nuove distribuzioni in una macchina virtuale VirtualBox per alcuni giorni o settimane per assicurarmi di non incorrere in problemi devastanti quando inizio a installarle sulle mie macchine di produzione. Una mattina di un paio di anni fa ho iniziato a installare una nuova versione di Fedora in una macchina virtuale sulla mia workstation primaria. Pensavo di avere abbastanza spazio su disco assegnato al filesystem dell’host in cui la VM veniva installata. Non era così. A circa un terzo dell’installazione ho finito lo spazio su quel filesystem. Fortunatamente, VirtualBox ha rilevato la condizione di spazio esaurito e ha messo in pausa la macchina virtuale, e ha anche visualizzato un messaggio di errore che indicava l’esatta causa del problema.
Nota che questo problema non era dovuto al fatto che il disco virtuale era troppo piccolo, era piuttosto il volume logico sul computer host che stava finendo lo spazio e quindi il disco virtuale appartenente alla macchina virtuale non aveva abbastanza spazio per espandersi sul volume logico dell’host.
Siccome la maggior parte delle distribuzioni moderne utilizzano il Logical Volume Management per impostazione predefinita, e avevo dello spazio libero disponibile sul gruppo di volumi, sono stato in grado di assegnare ulteriore spazio su disco al volume logico appropriato e quindi espandere il filesystem dell’host al volo. Questo significa che non ho dovuto riformattare l’intero disco rigido e reinstallare il sistema operativo o addirittura riavviare. Ho semplicemente assegnato parte dello spazio disponibile al volume logico appropriato e ridimensionato il filesystem, il tutto mentre il filesystem era on-line e il programma in esecuzione, La macchina virtuale stava ancora utilizzando il filesystem dell’host. Dopo aver ridimensionato il volume logico e il filesystem ho ripreso l’esecuzione della macchina virtuale e l’installazione ha continuato come se non si fosse verificato alcun problema.
Anche se questo tipo di problema potrebbe non esservi mai capitato, l’esaurimento dello spazio su disco mentre un programma critico è in esecuzione è capitato a molte persone. E mentre molti programmi, specialmente quelli di Windows, non sono così ben scritti e resistenti come VirtualBox, il Logical Volume Management di Linux ha reso possibile il recupero senza perdere alcun dato e senza dover riavviare la lunga installazione.
Struttura di LVM
La struttura di un ambiente disco Logical Volume Manager è illustrata dalla Figura 1, sotto. Logical Volume Management permette la combinazione di più dischi rigidi individuali e/o partizioni del disco in un singolo gruppo di volumi (VG). Quel gruppo di volumi può poi essere suddiviso in volumi logici (LV) o usato come un unico grande volume. I file system regolari, come EXT3 o EXT4, possono essere creati su un volume logico.
Nella Figura 1, due dischi rigidi fisici completi e una partizione da un terzo disco rigido sono stati combinati in un singolo gruppo di volumi. Due volumi logici sono stati creati dallo spazio nel gruppo di volumi, e un filesystem, come un filesystem EXT3 o EXT4 è stato creato su ciascuno dei due volumi logici.
Figura 1: LVM permette di combinare partizioni e interi dischi rigidi in gruppi di volumi.
Aggiungere spazio su disco a un host è abbastanza semplice ma, nella mia esperienza, viene fatto relativamente di rado. I passi di base necessari sono elencati di seguito. Puoi creare un gruppo di volumi completamente nuovo o puoi aggiungere il nuovo spazio ad un gruppo di volumi esistente ed espandere un volume logico esistente o crearne uno nuovo.
Aggiungere un nuovo volume logico
Ci sono momenti in cui è necessario aggiungere un nuovo volume logico ad un host. Per esempio, dopo aver notato che la directory contenente i dischi virtuali per le mie macchine virtuali VirtualBox stava riempiendo il filesystem /home, ho deciso di creare un nuovo volume logico in cui memorizzare i dati della macchina virtuale, compresi i dischi virtuali. Questo libererebbe molto spazio nel mio filesystem /home e mi permetterebbe anche di gestire lo spazio su disco per le VM in modo indipendente.
I passi fondamentali per aggiungere un nuovo volume logico sono i seguenti.
- Se necessario, installare un nuovo disco rigido.
- Opzionale: Creare una partizione sul disco rigido.
- Creare un volume fisico (PV) del disco rigido completo o una partizione sul disco rigido.
- Assegnare il nuovo volume fisico a un gruppo di volumi (VG) esistente o creare un nuovo gruppo di volumi.
- Creare un nuovo volume logico (LV) dallo spazio nel gruppo di volumi.
- Creare un filesystem sul nuovo volume logico.
- Aggiungere voci appropriate a /etc/fstab per montare il filesystem.
- Montare il filesystem.
Ora i dettagli. La seguente sequenza è presa da un esempio che ho usato come progetto di laboratorio quando insegnavo sui filesystem Linux.
Esempio
Questo esempio mostra come usare la CLI per estendere un gruppo di volumi esistente per aggiungere più spazio, creare un nuovo volume logico in quello spazio e creare un filesystem sul volume logico. Questa procedura può essere eseguita su un filesystem montato e in funzione.
AVVERTENZA: solo i filesystem EXT3 e EXT4 possono essere ridimensionati al volo su un filesystem montato e in funzione. Molti altri filesystem inclusi BTRFS e ZFS non possono essere ridimensionati.
Installare il disco fisso
Se non c’è abbastanza spazio nel gruppo di volumi sul disco fisso esistente nel sistema per aggiungere la quantità di spazio desiderata, potrebbe essere necessario aggiungere un nuovo disco fisso e creare lo spazio da aggiungere al volume logico. Per prima cosa, installa il disco rigido fisico, e poi esegui i seguenti passi.
Crea il Volume Fisico dal disco rigido
È prima necessario creare un nuovo Volume Fisico (PV). Usa il comando qui sotto, che presuppone che il nuovo disco rigido sia assegnato come /dev/hdd.
pvcreate /dev/hdd
Non è necessario creare una partizione di alcun tipo sul nuovo disco rigido. Questa creazione del volume fisico che sarà riconosciuto dal Logical Volume Manager può essere eseguita su un disco grezzo appena installato o su una partizione Linux di tipo 83. Se hai intenzione di usare l’intero disco rigido, creare prima una partizione non offre particolari vantaggi e usa lo spazio su disco per i metadati che potrebbero altrimenti essere usati come parte del PV.
Estendere il gruppo di volumi esistente
In questo esempio estenderemo un gruppo di volumi esistente piuttosto che crearne uno nuovo; puoi scegliere di farlo in entrambi i modi. Dopo che il volume fisico è stato creato, estendi il Volume Group (VG) esistente per includere lo spazio sul nuovo PV. In questo esempio il Volume Group esistente si chiama MyVG01.
vgextend /dev/MyVG01 /dev/hdd
Creare il Volume Logico
Prima di tutto create il Volume Logico (LV) dallo spazio libero esistente all’interno del Volume Group. Il comando seguente crea un LV con una dimensione di 50GB. Il nome del gruppo di volumi è MyVG01 e il nome del volume logico è Stuff.
lvcreate -L +50G --name Stuff MyVG01
Crea il filesystem
La creazione del volume logico non crea il filesystem. Questo compito deve essere eseguito separatamente. Il comando sottostante crea un filesystem EXT4 che si adatta al volume logico appena creato.
mkfs -t ext4 /dev/MyVG01/Stuff
Aggiungi un’etichetta al filesystem
L’aggiunta di un’etichetta al filesystem rende facile identificare il filesystem in caso di crash o altri problemi relativi al disco.
e2label /dev/MyVG01/Stuff Stuff
Monta il filesystem
A questo punto puoi creare un punto di montaggio, aggiungere una voce appropriata al file /etc/fstab, e montare il filesystem.
Dovresti anche controllare che il volume sia stato creato correttamente. Puoi usare i comandi df, lvs e vgs per farlo.
Ridimensionare un volume logico in un filesystem LVM
La necessità di ridimensionare un filesystem esiste fin dall’inizio delle prime versioni di Unix e non è scomparsa con Linux. È diventato più facile, tuttavia, con Logical Volume Management.
- Se necessario, installare un nuovo disco rigido.
- Opzionale: Creare una partizione sul disco rigido.
- Creare un volume fisico (PV) del disco rigido completo o una partizione sul disco rigido.
- Assegnare il nuovo volume fisico a un gruppo di volumi (VG) esistente o creare un nuovo gruppo di volumi.
- Crea uno o più volumi logici (LV) dallo spazio nel gruppo di volumi, o espandi un volume logico esistente con parte o tutto il nuovo spazio nel gruppo di volumi.
- Se hai creato un nuovo volume logico, crea un filesystem su di esso. Se aggiungi spazio ad un volume logico esistente, usa il comando resize2fs per ingrandire il filesystem per riempire lo spazio nel volume logico.
- Aggiungi voci appropriate a /etc/fstab per montare il filesystem.
- Monta il filesystem.
Esempio
Questo esempio descrive come ridimensionare un volume logico esistente in un ambiente LVM usando la CLI. Aggiunge circa 50GB di spazio al filesystem /Stuff. Questa procedura può essere usata su un filesystem montato, live, solo con il Kernel Linux 2.6 (e superiore) e filesystem EXT3 e EXT4. Non vi consiglio di farlo su qualsiasi sistema critico, ma può essere fatto e l’ho fatto molte volte; anche sul filesystem root (/). Usate il vostro giudizio.
AVVERTENZA: solo i filesystem EXT3 e EXT4 possono essere ridimensionati al volo su un filesystem montato e in funzione. Molti altri filesystem inclusi BTRFS e ZFS non possono essere ridimensionati.
Installare il disco fisso
Se non c’è abbastanza spazio sul disco fisso esistente nel sistema per aggiungere la quantità di spazio desiderata, potrebbe essere necessario aggiungere un nuovo disco fisso e creare lo spazio da aggiungere al volume logico. Per prima cosa, installa il disco rigido fisico e poi esegui i seguenti passi.
Crea un Volume Fisico dal disco rigido
È prima necessario creare un nuovo Volume Fisico (PV). Usa il comando qui sotto, che presuppone che il nuovo disco rigido sia assegnato come /dev/hdd.
pvcreate /dev/hdd
Non è necessario creare una partizione di alcun tipo sul nuovo disco rigido. Questa creazione del volume fisico che sarà riconosciuto dal Logical Volume Manager può essere eseguita su un disco grezzo appena installato o su una partizione Linux di tipo 83. Se hai intenzione di usare l’intero disco rigido, creare prima una partizione non offre particolari vantaggi e usa lo spazio su disco per i metadati che potrebbero altrimenti essere usati come parte del PV.
Aggiungi PV a un Gruppo di Volume esistente
Per questo esempio, useremo il nuovo PV per estendere un Gruppo di Volume esistente. Dopo che il volume fisico è stato creato, estendi il Volume Group (VG) esistente per includere lo spazio sul nuovo PV. In questo esempio, il Volume Group esistente si chiama MyVG01.
vgextend /dev/MyVG01 /dev/hdd
Estendi il Volume Logico
Estendi il Volume Logico (LV) dallo spazio libero esistente nel Volume Group. Il comando seguente espande il LV di 50GB. Il nome del gruppo di volumi è MyVG01 e il nome del volume logico è Stuff.
lvextend -L +50G /dev/MyVG01/Stuff
Espandere il filesystem
Espandere il volume logico espanderà anche il filesystem se si usa l’opzione -r. Se non si usa l’opzione -r, questo compito deve essere eseguito separatamente. Il comando sottostante ridimensiona il filesystem per adattarlo al nuovo volume logico ridimensionato.
resize2fs /dev/MyVG01/Stuff
Si dovrebbe controllare che il ridimensionamento sia stato eseguito correttamente. Puoi usare i comandi df, lvs e vgs per farlo.
Suggerimenti
Nel corso degli anni ho imparato alcune cose che possono rendere la gestione del volume logico ancora più facile di quanto non sia già. Speriamo che questi consigli possano essere utili.
- Utilizzate i file system Extended a meno che non abbiate una chiara ragione per usare un altro filesystem. Non tutti i filesystem supportano il ridimensionamento, ma EXT2, 3 e 4 sì. I filesystem EXT sono anche molto veloci ed efficienti. In ogni caso, possono essere sintonizzati da un sysadmin esperto per soddisfare le esigenze della maggior parte degli ambienti se i parametri di sintonizzazione predefiniti non lo fanno.
- Utilizzare nomi significativi di volumi e gruppi di volumi.
- Utilizzare etichette di filesystem EXT.
So che, come me, molti sysadmin hanno resistito al cambiamento al Logical Volume Management. Spero che questo articolo vi incoraggi a provare almeno LVM. Sono davvero contento di averlo fatto; i miei compiti di gestione del disco sono molto più facili da quando ho fatto il passaggio.