Un filesystem sano e con spazio libero non fa notizia; quando manca uno dei due l’utente chiama. Questi sono i comandi che apri per primi in quel momento, e l’esame li chiede nella forma esatta.

du: quanto occupano i file

du (disk usage) percorre le directory e somma. Da solo stampa blocchi da 1 KB, quindi in pratica si usa sempre con -h.

$ du -h            totale per ogni sottodirectory, in formato leggibile
$ du -ah           conta anche i singoli file
$ du -sh /var/log  solo il totale complessivo della directory
$ du -Sh           esclude le sottodirectory dal conteggio di ciascuna
$ du -h -d 1       si ferma a un livello di profondità
$ du -ah --exclude="*.bin"

Attenzione alla coppia -s e -S: la minuscola dà un unico totale, la maiuscola tiene separato lo spazio dei file di una directory da quello delle sue sottodirectory. Le opzioni sono case sensitive e LPI ci gioca. Per «quanto pesano solo i file qui, senza scendere» la risposta è du -Shd 0. Con -c aggiungi un totale generale in fondo all’elenco, comodo quando confronti più percorsi in un colpo solo.

df: spazio e inode che restano

du guarda i file, df guarda i filesystem montati. Anche qui -h è d’obbligo.

$ df -h                 spazio usato e disponibile
$ df -i                 inode invece di blocchi
$ df -hT                aggiunge la colonna del tipo
$ df -ht ext4           mostra solo i filesystem ext4
$ df -hx tmpfs          esclude i tmpfs
$ df --output=source,target,fstype,pcent

Distinzione che ricorre nelle domande: -T stampa il tipo, -t filtra per tipo, -x esclude un tipo. E --output= accetta un elenco separato da virgole di campi (source, target, fstype, size, used, avail, pcent) e dei loro equivalenti per gli inode (itotal, iused, iavail, ipcent).

La lezione operativa: un filesystem può rifiutare scritture con df -h fermo al 60%. Sono gli inode esauriti, tipico di directory con milioni di file minuscoli. df -i è il secondo comando da lanciare, sempre.

fsck ed e2fsck: mai su un filesystem montato

fsck non controlla niente da solo: riconosce il tipo e chiama l’utility giusta, e2fsck per ext2/3/4, fsck.vfat per FAT e così via. Con -t gli dici tu quale usare.

# fsck -A             controlla tutto quello che è elencato in /etc/fstab
# fsck -A -R          ...saltando il filesystem di root
# fsck -N /dev/sdb1   dice cosa farebbe, senza farlo
# fsck -t vfat /dev/sdc1

La regola non negoziabile: si smonta prima. Un fsck su un filesystem montato in lettura e scrittura corrompe i dati. Sul root, in pratica, si passa da un supporto di avvio oppure si lascia lavorare il controllo automatico al boot.

e2fsck è interattivo di default e chiede conferma a ogni errore. Le opzioni che ti tolgono dalla sedia sono -p (ripara da solo quello che può e si ferma se serve una decisione umana), -y (sì a tutto), -n (no a tutto, e monta in sola lettura: è il modo sicuro per guardare) e -f, che forza il controllo anche se il filesystem risulta pulito. -C mostra una barra di avanzamento. Le domande a completamento su questa parte del programma chiedono spesso proprio l’opzione secca, senza alternative da riconoscere: -p per riparare senza chiedere, -n per guardare in sicurezza, -f per controllare comunque.

tune2fs: i parametri di un filesystem ext

tune2fs -l /dev/sda1 stampa tutto quello che c’è da sapere su un ext: UUID, etichetta, numero di inode e di blocchi, blocchi riservati, stato, contatore dei mount. Gli stessi valori li fissa mke2fs alla creazione; tune2fs li cambia dopo.

# tune2fs -c 30 /dev/sdb1    controllo ogni 30 mount
# tune2fs -C 0  /dev/sdb1    azzera il contatore dei mount
# tune2fs -i 10d /dev/sdb1   controllo ogni 10 giorni (w e m per settimane e mesi)
# tune2fs -L dati /dev/sdb1  etichetta
# tune2fs -e remount-ro /dev/sdb1
# tune2fs -j /dev/sdb1       aggiunge il journal: da ext2 a ext3

Di nuovo -c e -C sono cose diverse. -e decide come reagisce il kernel a un errore trovato: continue, remount-ro o panic; su dati sensibili remount-ro è la scelta prudente perché blocca subito le scritture. E -j è la risposta canonica alla domanda «come converto ext2 in ext3»: aggiungendo un journal.

XFS: strumenti propri

Su XFS fsck non serve: fsck.xfs esiste ma non fa nulla, e il journal viene riapplicato al montaggio. L’equivalente è xfs_repair, e il primo passo è sempre l’analisi senza modifiche.

# xfs_repair -n /dev/sdb1                controlla e riporta, non ripara
# xfs_repair /dev/sdb1                   ripara
# xfs_repair -l /dev/sdc1 -n /dev/sdb1   log su un altro device

Anche xfs_repair pretende il filesystem smontato. -L azzera un log corrotto ed è l’ultima spiaggia: può costare dati. Per ispezionare le strutture interne c’è xfs_db, un prompt interattivo con help; per deframmentare un XFS montato c’è xfs_fsr. Nota di distribuzione: su Red Hat e derivate XFS è il filesystem di default, su Debian e Ubuntu lo è ext4, quindi sapere quale coppia di strumenti tirare fuori a seconda della macchina è metà del lavoro. E gli strumenti XFS stanno nel pacchetto xfsprogs, che non è sempre installato.