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

Guida Proxmox: come ridurre volume local ampliare local-lvm (ridimensionare partizioni senza perdere dati) - proxmox riduci local espandi local-lvm

Partiremo da una situazione simile a quella mostrata negli screenshot seguenti, in cui:

  1. lo storage local ha ancora spazio libero
  2. lo storage local-lvm ha esaurito (o "sta per esaurire") lo spazio libero

Guida Proxmox: come ridurre volume local ampliare local-lvm (ridimensionare partizioni senza perdere dati)

Guida Proxmox: come ridurre volume local ampliare local-lvm (ridimensionare partizioni senza perdere dati)

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

Guida Proxmox: come ridurre volume local ampliare local-lvm (ridimensionare partizioni senza perdere dati)

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

Guida Proxmox: come ridurre volume local ampliare local-lvm (ridimensionare partizioni senza perdere dati)

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 come local-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 come local
  • 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

Guida Proxmox: come ridurre volume local ampliare local-lvm (ridimensionare partizioni senza perdere dati)

Questa introduzione è necessaria per comprendere che:

  1. per ampliare lo spazio su disco a disposizione di CT e VM dobbiamo espandere local-lvm, cioè lo spazio chiamato data
  2. per ricavare tale spazio dobbiamo ridurre local, cioè il LV identificato come root

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

Guida Proxmox: come ridurre volume local ampliare local-lvm (ridimensionare partizioni senza perdere dati)

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

Guida Proxmox: come ridurre volume local ampliare local-lvm (ridimensionare partizioni senza perdere dati)

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)

Guida Proxmox: come ridurre volume local ampliare local-lvm (ridimensionare partizioni senza perdere dati) - ubuntu usb spotlight

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

Guida Proxmox: come ridurre volume local ampliare local-lvm (ridimensionare partizioni senza perdere dati)

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

Guida Proxmox: come ridurre volume local ampliare local-lvm (ridimensionare partizioni senza perdere dati)

Passo 4: Attivare LVM

Ora attiva e rendi disponibili i volumi LVM presenti sul disco Proxmox tramite questo comando:

lvm vgchange -a y

Guida Proxmox: come ridurre volume local ampliare local-lvm (ridimensionare partizioni senza perdere dati)

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

Guida Proxmox: come ridurre volume local ampliare local-lvm (ridimensionare partizioni senza perdere dati)

Guida Proxmox: come ridurre volume local ampliare local-lvm (ridimensionare partizioni senza perdere dati)

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

Guida Proxmox: come ridurre volume local ampliare local-lvm (ridimensionare partizioni senza perdere dati)

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:

  1. il volume aveva 11 GB di spazio occupato (lo si vede dallo screenshot dell'interfaccia web ad inizio articolo (volume local))
  2. avrei dovuto immettere qui il doppio, quindi 11x2 = 22G
  3. ho abbondato un po', arrivando a 25G

Guida Proxmox: come ridurre volume local ampliare local-lvm (ridimensionare partizioni senza perdere dati) - 15_resize2fs_root

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

Guida Proxmox: come ridurre volume local ampliare local-lvm (ridimensionare partizioni senza perdere dati)

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

Guida Proxmox: come ridurre volume local ampliare local-lvm (ridimensionare partizioni senza perdere dati)

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.