«No space left on device» è uno dei messaggi più temuti da chi gestisce un server: il database smette di scrivere, gli aggiornamenti falliscono, a volte non si riesce nemmeno ad accedere. Sul desktop il problema è meno drammatico ma altrettanto fastidioso. La reazione istintiva è cancellare qualcosa a caso; quella giusta è un metodo in tre passaggi: capire quale filesystem è pieno, trovare dove si concentra lo spazio, decidere cosa si può eliminare in sicurezza.
Passo 1: quale filesystem è pieno
Il comando è df:
df -h
Mostra ogni filesystem montato con dimensione, spazio usato, disponibile, percentuale e punto di montaggio. Su Linux possono esistere più partizioni: la radice /, a volte /home o /var separate, la partizione di avvio /boot. Sapere quale è piena cambia completamente la ricerca. Le righe con tipo tmpfs sono filesystem in memoria e di solito si possono ignorare; con df -h -x tmpfs -x devtmpfs spariscono.
Un caso particolare: df -h mostra spazio libero ma il sistema dice comunque che il disco è pieno. Allora si controllano gli inode:
df -i
Ogni file occupa un inode, e il loro numero su ext4 è fissato alla creazione del filesystem. Milioni di file minuscoli, come sessioni o file temporanei di un'applicazione web, possono esaurirli prima dello spazio.
Passo 2: dove si concentra lo spazio
du misura lo spazio occupato da cartelle e file. Il modo più utile per usarlo è guardare un livello alla volta, ordinando i risultati:
sudo du -h --max-depth=1 / 2>/dev/null | sort -h
L'ultima riga è la cartella più pesante. Si entra in quella e si ripete:
sudo du -h --max-depth=1 /var 2>/dev/null | sort -h
Due opzioni aiutano: -x impedisce a du di attraversare altri filesystem montati, così misuri solo la partizione che ti interessa; 2>/dev/null nasconde gli errori sulle cartelle virtuali come /proc.
Per un'esplorazione più comoda c'è ncdu, disponibile nei repository di quasi tutte le distribuzioni. Analizza la cartella indicata e mostra un elenco navigabile con le frecce, ordinato per dimensione; con d si elimina l'elemento selezionato, dopo conferma.
sudo ncdu -x /
Sui desktop esistono equivalenti grafici, come Analizzatore di utilizzo del disco in GNOME o Filelight in KDE.
Passo 3: i soliti sospetti
Nella mia esperienza lo spazio scompare quasi sempre negli stessi posti:
| Posizione | Cosa contiene | Come intervenire |
|---|---|---|
/var/log |
registri di sistema e applicazioni | journalctl --vacuum-size=, verificare logrotate |
/var/cache/apt o la cache di dnf |
pacchetti scaricati | sudo apt clean o sudo dnf clean all |
/var/lib/docker |
immagini, container e volumi | docker system df, poi docker system prune |
/var/lib/snapd o Flatpak |
versioni precedenti dei pacchetti | ridurre le revisioni conservate, flatpak uninstall --unused |
/boot |
kernel vecchi | sudo apt autoremove |
~/.cache |
cache di browser e programmi | si può svuotare con i programmi chiusi |
cestino in ~/.local/share/Trash |
file eliminati dal desktop | svuotare il cestino |
Con Docker, attenzione: docker system prune rimuove container fermi, reti inutilizzate e immagini senza nome; aggiungere --volumes elimina anche i volumi non collegati, che possono contenere dati di database. Meglio leggere prima cosa verrebbe eliminato.
Su una partizione /boot piccola, l'accumulo di kernel vecchi è una causa frequente di aggiornamenti falliti. autoremove li elimina tenendo quello in uso e il precedente.
Il caso dei file cancellati ma ancora aperti
A volte si elimina un file di log enorme, ma df continua a mostrare il disco pieno. Il motivo: un processo ha ancora il file aperto. Su Linux il file sparisce dalla cartella, ma lo spazio viene liberato solo quando l'ultimo processo lo chiude. Per trovarli:
sudo lsof +L1
L'elenco mostra i file eliminati e ancora in uso, con il processo che li tiene. La soluzione è riavviare quel servizio. Per svuotare un log senza questo problema, invece di cancellarlo si tronca:
sudo truncate -s 0 /var/log/applicazione/grande.log
Lo spazio riservato di ext4
Su ext4 una piccola percentuale del disco è riservata a root, il 5% per impostazione predefinita, per permettere al sistema di funzionare anche quando gli utenti hanno riempito tutto. Per questo df può mostrare la partizione al 100% mentre root riesce ancora a scrivere. Su un disco dedicato ai soli dati, la riserva si può ridurre con sudo tune2fs -m 1 /dev/sdb1; sulla partizione di sistema conviene lasciarla.
Prevenire
- Impostare limiti ai registri, con
SystemMaxUseper journald e regole di logrotate per i file di testo. - Ripulire periodicamente cache dei pacchetti e immagini di container non usate.
- Monitorare lo spazio libero con un avviso sotto una soglia, per esempio il 15%, invece di accorgersene quando è finito.
In sintesi
df -hdice quale filesystem è pieno;df -icontrolla gli inode.du --max-depth=1 | sort -honcdu -xtrovano la cartella responsabile, un livello alla volta.- Log, cache dei pacchetti, Docker e kernel vecchi sono le cause più frequenti.
- Un file cancellato ma aperto occupa spazio finché il processo non lo chiude:
lsof +L1. - I log si troncano con
truncate, non si cancellano mentre sono in uso.