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.