Come risolvere efficacemente l’errore “Spazio esaurito sul dispositivo” su Linux



Trovarsi di fronte al messaggio “Spazio esaurito sul dispositivo” può essere davvero frustrante, soprattutto quando il disco sembra ancora piuttosto vuoto. Linux può essere strano in questo senso: a volte non è una questione di spazio libero sufficiente, ma di qualcos’altro di subdolo che si muove sotto il cofano. Tra i possibili colpevoli ci sono processi che trattengono file eliminati, esaurimento degli inode o persino hardware difettoso. Capire quale dei due sta creando problemi ti risparmia un sacco di grattacapi. Ecco come risolvere il problema e risolverlo senza perdere la testa.

Come risolvere l’errore “Spazio esaurito sul dispositivo” in Linux

Assicurati che ci sia effettivamente spazio: controlla con du e df

Questo è il primo passo, perché a volte Linux ti segnala che non c’è spazio quando in realtà il disco non è pieno. Esegui questi comandi nel terminale:

sudo du -sh /

Fornisce un rapido riepilogo dell’utilizzo totale del disco nella directory radice. Aspettatevi un output piuttosto lungo, ma concentratevi sul totale in alto. Dopodiché, controllate lo spazio libero sui vostri mount con:

sudo df -h

Questo mostra quanto spazio è disponibile sui file system montati. Confrontare questi output aiuta a verificare se lo spazio è davvero esaurito o se l’errore è causato da qualcos’altro. A volte, un processo ha eliminato un file di grandi dimensioni ma non ha liberato lo spazio perché è ancora aperto da un processo, quindi Linux mostra lo spazio pieno anche quando c’è spazio.

Correzione 1: terminare i processi che trattengono i file eliminati

Questo è un problema comune. A volte, un processo blocca un file che è stato eliminato e Linux non riesce a liberare spazio perché tecnicamente è ancora “in uso”.Procedi in questo modo:

sudo lsof / | grep deleted

Questo comando elencherà i processi che hanno file eliminati ma ancora aperti. Non so perché funzioni, ma su alcune macchine questo comando aiuta a individuare la mela marcia. Per liberare quello spazio, riavvia il processo:

sudo systemctl restart your-service-name

Se non si conosce il servizio esatto o se ce ne sono più di uno, è possibile ricaricare tutte le dipendenze di sistema con:

sudo systemctl daemon-reload

Nota: una volta riavviato o ricaricato il sistema, lo spazio occupato dai processi dovrebbe essere liberato. Di solito, questo risolve il problema abbastanza rapidamente. Tuttavia, in alcune configurazioni, potrebbe essere necessario riavviare il sistema per vedere l’effetto completo, soprattutto se sono coinvolti molti servizi.

Correzione 2: controlla se hai esaurito gli inode

Questa è una causa meno ovvia. Gli inode sono come piccoli contenitori di metadati per ogni file. Se hai tonnellate di file di piccole dimensioni, potresti raggiungere i limiti degli inode prima che il disco sia pieno. Per verificare, esegui:

sudo df -i

Questo comando mostra il numero totale di inode, utilizzati e liberi. Se il sistema ha 0 inode liberi, il problema è questo. Eliminare piccoli file non necessari o svuotare la cache può aiutare a liberare inode. A differenza dello spazio su disco, non è possibile generarne altri: gli inode vengono impostati durante la formattazione dell’unità.

Correzione 3: contrassegnare i settori danneggiati sull’unità

L’usura dell’hardware può portare alla formazione di settori danneggiati, ovvero aree del disco fisicamente danneggiate. Potrebbero ancora essere visualizzati come spazio libero, ma in realtà non è possibile scrivere o leggere alcun dato. Per risolvere questo problema, è necessario avviare il sistema da un ambiente live ed eseguire un controllo del file system:

sudo fsck -vcck /dev/sda

Sostituisci /dev/sdacon il percorso effettivo del dispositivo per la tua unità. Questo comando esegue la scansione dei settori danneggiati e li contrassegna come inutilizzabili, contribuendo a prevenire errori durante la scrittura dei dati. Tieni presente che questo non libererà magicamente spazio; renderà solo il file system più sicuro da eventuali danneggiamenti. Se i settori danneggiati continuano a comparire, potrebbe essere necessaria una pulizia e forse la sostituzione dell’hardware.

Altri suggerimenti che vale la pena provare

  • Cancella i log o le cartelle della cache che potrebbero essere aumentate di volume. Ad esempio, /var/log o /tmp.
  • Rivedi la tua routine di pulizia del disco: a volte, vecchi kernel o snapshot dei dispositivi consumano gigabyte.
  • Se si utilizzano volumi specifici, controllare le relative quote: potrebbe essere che il limite sia impostato su un valore inferiore a quello previsto.

Capire quale bug causa l’errore “Spazio esaurito” può richiedere un po’ di tentativi ed errori. Ma, nella maggior parte dei casi, i processi che trattengono file eliminati o l’esaurimento degli inode sono i soliti sospetti. Tieni presente che i problemi hardware sono una questione completamente diversa e potrebbero richiedere una diagnostica o una sostituzione dell’hardware.

  • Eseguire sudo du -sh / e sudo df -h per confermare i problemi di spazio.
  • Utilizzare sudo lsof / | grep deleted per identificare i processi che bloccano i file eliminati.
  • Riavviare i servizi o i processi problematici per liberare spazio.
  • Verificare la disponibilità dell’inode con sudo df -i. Eliminare i file di piccole dimensioni se necessario.
  • Se si sospetta la presenza di settori danneggiati, eseguire il controllo del file system con sudo fsck -vcck /dev/sda.

Incartare

Nella maggior parte dei casi, il problema è dovuto a processi persistenti o limiti di inode. Una volta eliminati, lo spazio su disco dovrebbe tornare a funzionare normalmente. A volte, ci vuole un po’ di pazienza e di lavoro, ma questi passaggi coprono la maggior parte delle situazioni. Speriamo che questo risparmi qualche ora di frustrazione a qualcuno.



Questo articolo è stato utile?