Dov’è finito lo spazio su disco?

disk

Negli ultimi mesi ho avuto a che fare con un paio di problemi riguardo allo spazio su disco sulle macchine che gestisco, sono casi abbastanza rari ma piuttosto curiosi che vorrei condividere.

Solitamente nelle installazioni server la gestione dei dischi, per chi non fosse ferrato sull’argomento, è un po’ diversa dall’installazione di un sistema su un portatile in quanto conviene sempre partizionare il disco a seconda degli utilizzi. Si tende infatti sempre a evitare di mettere tutti i dati in una sola partizione per evitare che il riempimento porti a un’instabilità del servizio installato o del sistema intero. Un altro vantaggio dell’avere partizioni multiple è la possibilità di montare cartelle direttamente su dischi separati anche per poterle gestire successivamente: nel mondo di AWS è molto comodo vista la possibilità di poterli ingrandire con un click.

Uno degli esempi più comuni è la separazione della partizione /home, ma possono esserci altri esempi come nel mio caso le cartelle /opt e /db e /logs e /tmp sono tutte su partizioni e dischi separati.

Capita però che per errori di configurazione, o semplicemente per sfortuna, le cose vadano a rotoli nelle maniere più strane.

Il primo caso che voglio descrivere è partito da uno dei nostri controlli che ci sveglia con:

cannot touch ‘/opt/myfile’: No space left on device

e già qui scopro un errore di configurazione: un symbolic link avrebbe dovuto puntare a una cartella su una partizione separata ma alla fine il percorso era sulla partizione di root: fin qui nulla di tragico, errore sì, ma non era previsto un utilizzo di spazio eccessivo. 

Però:

df -h

mi dice che la partizione di root è usata al 70% circa, perché non ho quel messaggio di errore?

Così mi venne in mente una cosa: inodes, quei piccoli bastardi!!!

In Linux, un inode (indice nodo) è una struttura di dati che rappresenta un singolo file o cartella nel sistema di file e a ogni file o cartella è associato a un inode univoco. Grazie a ChatGPT per la definizione.

Ho pensato che un qualche processo generasse miriadi di file piccoli o vuoti che avrebbero saturato la capacità degli inodes; avendo partizionato il disco, la partizione di root non è particolarmente grande e il numero di inodes disponibili dipende dalla dimensione del file system.

Quindi ho pescato tra miei appunti un primo comando che va a contare i file:

find / -xdev -type f | cut -d "/" -f 2 | sort | uniq -c | sort -n

Ma non ha dato un risultato sperato, nessun valore era fuori scala, se non fosse che in un altro post ho trovato un comando diverso:

for i in /*; do echo $i; find $i | wc -l; done

e qui mi ritrovo 5 milioni di cartelle annidate e vuote in /db, per la precisione 5130921.

Quindi, messo in piedi un task periodico di pulizia, il disco è tornato a respirare … e abbiamo anche sistemato la cartella sulla partizione giusta.

Se il primo caso partiva con un “non riesco a scrivere perché il disco è pieno anche se non sembra” il secondo è “ho il disco pieno, ma non so dove si è riempito, quindi non so come ripulirlo”

Anche in questo caso la vittima è la partizione di root che mi sono trovato piena: unico indizio … si è riempita poco tempo dopo un reboot.

Dopo una serie di elucubrazioni arriviamo al dunque: a seguito del riavvio, il sistema non ha montato, solo in quel caso e per ragioni che non ho capito, il disco dove è montata la cartella /logs.

L’applicativo e gli altri servizi hanno quindi iniziato a loggare sì nella cartella /logs ma sulla partizione di sistema, riempiendola.

Nel cercare ci capirci qualcosa sono stati fatti diversi riavvii, ma da dopo il fattaccio, le partizioni venivano montate correttamente nascondendo sotto il tappeto la cartella /logs sulla partizione di sistema rendendo il contenuto invisibile.

L’unico modo per uscirne è stato quello di stoppare tutti i servizi e verificare con lsof che nulla scrivesse in quella cartella.

Da lì è stato necessario smontare la partizione corretta per rendere visibile il contenuto della stessa cartella sulla partizione di sistema, ripulire tutto, rimontare le partizioni e riavviare tutti i sistemi … o riavviare la macchina, tanto sarebbe ripartito tutto in automatico.

Ovvio che sono 2 casi piuttosto specifici, ma se in futuro vi capitasse di non capire chi vi ha rubato lo spazio su disco, controllare inodes e montaggio dei file system potrebbe risparmiarvi un po’ di mal di testa o meglio ancora downtime dei servizi.

Fonte: https://www.marcosbox.org/2024/01/dove-finito-lo-spazio-su-disco.html

Se vuoi sostenerci, puoi farlo acquistando qualsiasi cosa dai diversi link di affiliazione che abbiamo nel nostro sito o partendo da qui oppure alcune di queste distribuzioni GNU/Linux che sono disponibili sul nostro negozio online, quelle mancanti possono essere comunque richieste, e su cui trovi anche PC, NAS e il ns ServerOne. Se ti senti generoso, puoi anche donarmi solo 1€ o più se vuoi con PayPal e aiutarmi a continuare a pubblicare più contenuti come questo. Grazie!

Hai dubbi o problemi? Ti aiutiamo noi!

Se vuoi rimanere sempre aggiornato, iscriviti al nostro canale Telegram.
Se vuoi ricevere supporto per qualsiasi dubbio o problema, iscriviti alla nostra community Facebook o gruppo Telegram.
Cosa ne pensi? Fateci sapere i vostri pensieri nei commenti qui sotto.
Ti piace quello che leggi? Per favore condividilo con gli altri.
Amazon Music
Scopri le ultime offerte per dischi ssd su Acquista su Amazon
Scopri le ultime offerte per memorie RAM DDR su Acquista su Amazon
Scopri le ultime offerte per Chromebook su Acquista su Amazon
Scopri le ultime offerte per Raspberry su Acquista su Amazon

Potrebbero interessarti anche...

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.