Se anche tu, come me, hai creato molti container (CT) e virtual machine (VM) sul tuo nodo Proxmox, probabilmente ti ritrovi nella situazione in cui lo spazio su disco del volume "local-lvm" sta per esaurirsi. Di contro, il volume "local" ha ancora decine di gigabyte inutilizzati, e che probabilmente non utilizzerai mai. In questa guida vedremo dunque come "rimpicciolire" il volume "local" di Proxmox e utilizzare lo spazio recuperato per "ingrandire" il volume "local-lvm", il tutto nel modo più semplice e veloce possibile, senza bisogno di distruggere i volumi e perdere così i container e le VM presenti
Partiremo da una situazione simile a quella mostrata negli screenshot seguenti, in cui:
- lo storage
local
ha ancora spazio libero - lo storage
local-lvm
ha esaurito (o "sta per esaurire") lo spazio libero
Ho personalmente svolto la procedura illustrata di seguito sul mio nodo con Proxmox 8.4, ma dovrebbe essere valida per tutte le versioni moderne.
» Leggi anche: [guida] Come aggiornare Proxmox senza perdere dati
Come è suddiviso un disco Proxmox
Non è necessario che tu sia un esperto di Proxmox per svolgere la procedura. Ma ti servono alcune informazioni preliminari.
Di default, la procedura di installazione di Proxmox crea, oltre alle 2 partizioni "di servizio" (bootloader e i dati UEFI), una grande, unica partizione "principale", alla quale assegna la maggior parte dello spazio disponibile.
Nello screenshot seguente si vede la situazione appena descritta: sul mio nodo Proxmox (ricavato da un vecchio PC desktop), l'SSD SATA da 250 GB nominali (232.83 GiB "reali") è identificato come /dev/sda
e la procedura di installazione di Proxmox ha assegnato quasi tutto lo spazio alla partizione /dev/sda3
Detta partizione "principale" è gestita tramite Logical Volume Manager (LVM): un sistema che, volendo semplificare al massimo, consente di creare volumi logici (LV) che sono poi esposti come se fossero partizioni. Al contrario delle partizioni "classiche", però, gli LV possono crescere, ridursi, spostarsi e combinarsi in modo pratico e veloce, oltre a consentire di catturare al volo degli snapshot, ovvero "foto istantanee" dello stato dei volumi stessi.
I vari volumi logici di Proxmox sono automaticamente raggruppati in un gruppo di volumi (VG) che la procedura di installazione nomina automaticamente pve
.
Per visualizzare quanto appena detto puoi accedere alla console web di Proxmox (oppure connetterti in SSH) e impartire pvs
. La partizione "principale" (colonna PV
, acronimo del termine physical volume utilizzato da LVM per identificare una partizione) è assegnata al VG
di nome pve
All'interno del gruppo pve
, la procedura di installazione di Proxmox crea 3 LV:
data
: contiene i dischi dei container e delle VM. È un LV "particolare", di tipo LVM-thin pool, e non ha un proprio file system. Piuttosto: al suo interno si creano volumi chiamati thin volume, i quali possono essere formattati con un file system a piacimento (ext4, btrfs, NTFS ecc.) e che, nelle dinamiche di Proxmox, costituiscono i dischi dei container e delle VM. Questo spazio, tramite interfaccia web, viene visualizzato comelocal-lvm
root
: contiene il sistema operativo Linux sul quale si poggia Proxmox (la distribuzione Debian), nonché tutti i pacchetti di Proxmox stesso, gli eventuali backup di CT e VM nonché le immagini ISO utilizzate per installare i sistemi operativi all'interno di CT e VM. È un LV "tradizionale", formattato con il classico file system ext4. Questo spazio, tramite interfaccia web, viene visualizzato comelocal
swap
: è l'area di swap (memoria virtuale) utilizzata dal sistema operativo Linux sul quale si poggia Proxmox
Per visualizzare quanto appena detto, possiamo impartire lvs
. La visualizzazione potrebbe essere complicata dal fatto che vengono elencati qui anche eventuali snapshot e i dischi di CT e VM, ma dovremmo riuscire a distinguere i tre elementi appena citati: data
, root
e swap
Questa introduzione è necessaria per comprendere che:
- per ampliare lo spazio su disco a disposizione di CT e VM dobbiamo espandere
local-lvm
, cioè lo spazio chiamatodata
- per ricavare tale spazio dobbiamo ridurre
local
, cioè il LV identificato comeroot
Trattandosi di volumi LVM, possiamo svolgere questi ridimensionamenti in modo diretto, senza perdere dati, con grande rapidità e un buon grado di tranquillità, molto superiori rispetto a quanto non potremmo fare se fossero partizioni "classiche".
Passo "zero": Backup!
La procedura può essere svolta direttamente sul disco di Proxmox: tutti i dati (configurazioni, VM, container, ...) verranno conservati.
Ciò nonostante, è bene capire che stiamo comunque svolgendo un intervento delicato: se qualcosa andasse storto, magari a causa di uno sbalzo di corrente o di una qualsiasi altra circostanza imprevista, potresti perdere l'accesso al nodo e/o alle virtual machine e container. È dunque imperativo fare un backup prima di cominciare.
Ci sono vari modi:
- per gli ambienti più strutturati, la soluzione di riferimento è Proxmox Backup Server (open source)
- in alternativa, puoi catturare un'immagine completa del disco
- usare la funzione di backup integrata (sezione
Backup
all'interno di ogni singola VM o container), ricordando poi di copiare il file generato su un disco esterno al nodo Proxmox
Passo 1: Spegnimento completo del nodo
Procedi dunque a spegnere il tuo nodo Proxmox. Puoi usare il comando Spegnimento
presente nell'interfaccia web oppure impartire, da linea di comando, poweroff
Passo 2: Avvio da USB con Ubuntu
Per lavorare in tutta sicurezza useremo il desktop "Live" di Ubuntu. Procedi quindi a scaricare l'immagine ISO di Ubuntu Desktop e a trasferirla su memoria USB. Per la guida passo per passo, fai riferimento a questo articolo:
» Leggi: Video-guida: come installare Ubuntu da chiavetta USB (Linux facile)
In alternativa, ti ricordo che puoi anche usare l'immagine ISO di Ubuntu con Ventoy, come ho fatto io:
» Leggi: Come preparare una chiavetta USB con molteplici ISO di boot: guida a Ventoy (video)
Usa la memoria USB con Ubuntu per effettuare il boot del PC o server sul quale si trova il tuo nodo Proxmox. Per essere assolutamente chiari: devi collegare la chiavetta USB con Ubuntu al PC sul quale hai installato Proxmox, e avviare il sistema operativo dalla chiavetta USB stessa, e non dal disco interno.
» Leggi: Avviare un computer dal lettore CD-ROM o da pendrive
Raggiunta la schermata iniziale, assicurati di scegliere Prova Ubuntu
per lavorare dal desktop live senza installare nulla
Passo 3: Avviare il Terminale e divenire root
Avvia ora il Terminale di Ubuntu e impartisci sudo -s
per ottenere i privilegi di root
» Leggi anche: Come aprire il terminale di Ubuntu
Passo 4: Attivare LVM
Ora attiva e rendi disponibili i volumi LVM presenti sul disco Proxmox tramite questo comando:
lvm vgchange -a y
Passo 5: Verificare che i volumi siano attivi
Impartisci ora i comandi pvs
e lvs
citati durante l'introduzione per assicurarti che il sistema operativo Live possa effettivamente "vedere" i volumi LVM
Passo 6: Controllare l'integrità del file system di root
Come detto, il volume nel quale risiede il sistema operativo con Proxmox utilizza il "classico" file system ext4. Prima di ridimensionarlo, è una buona idea verificare che non contenga errori tramite questo comando:
e2fsck -fp /dev/mapper/pve-root
I parametri significano:
f
: esegui il controllo anche se il file system sembra "pulito"p
: correggi automaticamente tutti gli errori/dev/mapper/pve-root
: è il percorso del volume da controllare. Il volume di Proxmox si trova sempre in questo specifico percorso
Passo 7: Ridurre la dimensione del file system "root" ("local")
Procediamo ora a ridurre la dimensione del file system ext4 presente sul volume. Ipotizzando di voler portare il file system ad una dimensione totale di 25 GB, il comando è simile a questo:
resize2fs -f /dev/mapper/pve-root 25G
In caso volessi ottenere una dimensione diversa, modifica il numero a seconda delle tue necessità. In linea di massima, ti consiglio di scegliere un valore che sia pari a circa il doppio dello spazio attualmente occupato, arrotondando un po' per eccesso. Nel mio caso, ad esempio:
- il volume aveva 11 GB di spazio occupato (lo si vede dallo screenshot dell'interfaccia web ad inizio articolo (volume
local
)) - avrei dovuto immettere qui il doppio, quindi 11x2 =
22G
- ho abbondato un po', arrivando a
25G
Passo 8: Ridurre il volume "root" ("local")
Allo stesso modo, dobbiamo ridurre anche il volume che contiene il file system, portandolo alla stessa dimensione. Il comando è:
lvreduce -L25G /dev/mapper/pve-root
Di nuovo: devi modificare il valore 25G
, facendolo coincidere con il numero che hai scelto al Passo precedente quando ha ridimensionato il file system.
Ti verrà mostrato un minaccioso messaggio di conferma. Se hai già eseguito il backup del disco e hai correttamente ridimensionato il file system come mostrato al Passo precedente, puoi battere y
per procedere
Non appena l'operazione va a buon fine, abbiamo raggiunto un ottimo "checkpoint": abbiamo infatti liberato lo spazio che potremo poi assegnare al volume dei dati.
Passo 9: Espandere il volume "data" ("local-lvm")
Come detto, il volume "data" non ha un file system che dobbiamo controllare o espandere. Possiamo dunque procedere direttamente ad espandere il volume stesso fino ad assegnargli tutto lo spazio:
lvextend -l +100%FREE /dev/mapper/pve-data
Passo 10: Riavvio e verifica
L'operazione è conclusa. Non ti resta ora altro da fare se non impartire il comando di riavvio (reboot
) dal terminale della tua sessione live e rimuovere la memoria USB quando compare il relativo messaggio.
Tornato a Proxmox, dovresti trovare subito lo spazio aggiuntivo disponibile su local-lvm
.