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à)
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
» 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
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.
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.
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
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
Si tratta invece di una scelta opzionale per Ubuntu Desktop, che deve essere esplicitamente attivata fra le opzioni avanzate
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.