Oggi ho ricevuto il messaggio No space left on device mentre stavo lavorando su uno dei miei PC dotati di Ubuntu Server. L'aspetto curioso è che il sistema operativo mostrava la partizione principale (/) con una grandezza di appena 20 GB, quando, in realtà, il disco fisso in dotazione al sistema era abbondantemente più grande. Indagando in rete ho scoperto che si tratta di un problema molto diffuso, dovuto al modo in cui Ubuntu è stato installato. Fortunatamente, bastano pochi comandi per ridimensionare la partizione, utilizzare tutto il disco e risolvere il problema senza bisogno di formattare e reinstallare.

Il problema

Iniziamo chiarendo che, in questo articolo, affronteremo un problema specifico: Ubuntu segnala che lo spazio su disco è esaurito e mostra l'occupazione al 100%, quando, in realtà, siamo certi che il disco contiene molti meno dati rispetto alla capacità totale. Per verificarlo, lanciamo il comando

df -h

Come si vede nell'immagine seguente, la partizione principale, chiamata /dev/mapper/ubuntu--vg-ubuntu--lv, mostra una capacità di appena 20G (20 GB), di cui 20G occupati (la totalità)

[risolto] Ubuntu, spazio disco esaurito (no space left on device): partizione ubuntu--vg-ubuntu--lv è più piccola disco fisso! Come ridimensionare risolvere senza reinstallare?

Poiché sono sicuro che il disco in questione abbia una capacità superiore ai 20 GB rilevati, c'è qualcosa che non va.

Di più: in fase di installazione avevo scelto il partizionamento automatico, lasciando le impostazioni di default: questo significa che l'installazione di Ubuntu ha creato una partizione più piccola rispetto alla capacità del disco.

Per risolvere il problema dobbiamo semplicemente ridimensionare la partizione principale, fino a farle sfruttare tutto il disco. Notiamo però che la soluzione proposta di seguito funziona solo se Ubuntu è stato installato utilizzando LVM (è il default su Ubuntu Server, ma non su Ubuntu Desktop): lo possiamo scoprire facilmente osservando l'output del comando precedente: se il disco principale viene mostrato con un nome simile a /dev/mapper/ubuntu--vg-ubuntu--lv, il sistema sta usando LVM.

Ridimensionare Ubuntu, Passo 1: Avviare il Terminale

Chi stesse lavorando con Ubuntu Server accede direttamente alla linea di comando, quindi può proseguire.

Chi invece abbia preferito Ubuntu Desktop deve avviare il Terminale tramite la combinazione da tastiera Ctrl+Alt+T. In alternativa, cliccare sul pulsante con i 3x3 punti in basso a sinistra e cercare terminale per lanciare rapidamente l'omonima applicazione

[risolto] Ubuntu, spazio disco esaurito (no space left on device): partizione ubuntu--vg-ubuntu--lv è più piccola disco fisso! Come ridimensionare risolvere senza reinstallare? - linux apri terminale

» Leggi anche: Come aprire il terminale di Ubuntu

Ridimensionare Ubuntu, Passo 2: Diventare root

Le operazioni descritte di seguito richiedono i privilegi di amministratore. Per non impazzire, acquisiamoli immediatamente impartendo il comando sudo -s

[risolto] Ubuntu, spazio disco esaurito (no space left on device): partizione ubuntu--vg-ubuntu--lv è più piccola disco fisso! Come ridimensionare risolvere senza reinstallare?

In caso venisse richiesta la password, digitiamo quella dell'utente corrente.

Ridimensionare Ubuntu, Passo 3: Ricavare un po' di spazio libero

Prima di proseguire oltre, dobbiamo assolutamente ricavare alcuni megabyte di spazio libero. Allo scopo, cancelliamo la cache di apt (verrà ri-generata alla prossima esecuzione) impartendo il comando:

rm -rf /var/cache/apt/*

Valutiamo anche di eliminare tutti i log:

rm -rf /var/log/*

Ridimensionare Ubuntu, Passo 4: Ridimensionare il volume

Impartiamo ora il seguente comando per estendere l'occupazione del volume principale fino al 100%:

lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv

Dovremmo ottenere una risposta simile alla seguente:

Size of logical volume ubuntu-vg/ubuntu-lv changed from 20.00 GiB (5120 extents) to <39.00 GiB (9983 extents).

Logical volume ubuntu-vg/ubuntu-lv successfully resized.

[risolto] Ubuntu, spazio disco esaurito (no space left on device): partizione ubuntu--vg-ubuntu--lv è più piccola disco fisso! Come ridimensionare risolvere senza reinstallare?

Perfetto!

Ridimensionare Ubuntu, Passo 5: Ridimensionare il filesystem

Non ci resta ora alto da fare se non modificare il filesystem affinché occupi tutto il volume appena esteso. Il comando è:

resize2fs /dev/ubuntu-vg/ubuntu-lv

In risposta otteniamo qualcosa di simile a:

resize2fs 1.45.5 (07-Jan-2020)

Filesystem at /dev/ubuntu-vg/ubuntu-lv is mounted on /; on-line resizing requiredold_desc_blocks = 3, new_desc_blocks = 5

The filesystem on /dev/ubuntu-vg/ubuntu-lv is now 10222592 (4k) blocks long.

[risolto] Ubuntu, spazio disco esaurito (no space left on device): partizione ubuntu--vg-ubuntu--lv è più piccola disco fisso! Come ridimensionare risolvere senza reinstallare?

Magnifico! A questo punto il problema è risolto.

Verificare la dimensione della partizione

Verifichiamo che tutto lo spazio disponibile sulla partizione principale sia a disposizione del sistema operativo impartendo nuovamente:

df -h

Come si vede nell'immagine seguente, nel mio caso siamo passati dai 20 GB di capacità inizialmente rilevata a 40 GB, che è effettivamente la capacità attesa per questo disco

[risolto] Ubuntu, spazio disco esaurito (no space left on device): partizione ubuntu--vg-ubuntu--lv è più piccola disco fisso! Come ridimensionare risolvere senza reinstallare?

Lo spazio occupato rimane attorno ai 20 GB, esattamente come in precedenza, ma ora vi è molto più spazio libero a disposizione per crescere.

Da cosa dipende questo problema?

Il problema è causato dal modo in cui Ubuntu è stato installato. Se l'utente ha scelto la modalità LVM ( Logical Volume Management), il sistema non crea un volume grande tanto quanto il disco, ma si limita ad utilizzarne solo alcuni gigabyte. LVM è la modalità predefinita per l'installazione di Ubuntu Server

[risolto] Ubuntu, spazio disco esaurito (no space left on device): partizione ubuntu--vg-ubuntu--lv è più piccola disco fisso! Come ridimensionare risolvere senza reinstallare?

Si tratta invece di una scelta opzionale per Ubuntu Desktop, che deve essere esplicitamente attivata fra le opzioni avanzate

[risolto] Ubuntu, spazio disco esaurito (no space left on device): partizione ubuntu--vg-ubuntu--lv è più piccola disco fisso! Come ridimensionare risolvere senza reinstallare?

Il problema è presente almeno sin dal vecchissimo Ubuntu 16.04, ma permane ancora oggi. Non mi è del tutto chiaro il motivo per cui Canonical non abbia ancora corretto, ma suppongo che possa trattarsi di una scelta progettuale esplicita, forse per lasciare il resto dello spazio a disposizione dell'utente per creare un'altra partizione dedicata ai dati.

Fonti e riferimenti