4.7 Journaled filesystem

Un filesystem è detto consistente quando i blocchi di informazioni in esso contenuti sono liberi o utilizzati (allocati): ogni blocco allocato è utilizzato da un solo file o directory ed è possibile accedere a tutti i file e directory per mezzo di altre directory del filesystem. Quando un sistema GNU/Linux viene spento utilizzando gli appositi comandi messi a disposizione dal sistema, attraverso il comando shutdown (v. sez. 2.9), i filesystem vengono “smontati” (unmounted, v. sez. 4.9) in maniera opportuna (in modo “pulito”) ed il sistema provvede ad impostare il bit clean per indicare la consistenza del filesystem.

Nonostante gli algoritmi sempre più sofisticati per la gestione della scrittura delle informazioni sulla memoria di massa abbiano ampiamente ridotto, se non addirittura eliminato, la possibilità di inconsistenza del filesystem, l’eventuale mancanza improvvisa dell’alimentazione elettrica costituisce di fatto un problema di possibile inconsistenza per un filesystem. Quando un sistema GNU/Linux viene spento in modo non “pulito”, ovvero senza passare dall’opportuna procedura di spegnimento (shutdown) del sistema, il bit clean non viene impostato e così al successivo riavvio, il sistema provvederà automaticamente a verificare la consistenza del filesystem al momento del mounting (v. sez. 4.9), tramite fsck (filesystem check) (man page fsck(8)).

____________________________________________________________________

Comando: fsck
Path: /sbin/fsck

SINTASSI  
# fsck [option] device [...] [--] [fs_option]  
DESCRIZIONE

____________________________________________________________________

I valori di ritorno di fsck sono interpretati bit a bit ed il significato di ogni singolo bit (dal LSB al MSB) è riportato nella tab. 4.13.


bit-|Descrizione-------------------------------|
0-|Gli errori presenti nel filesystem-sono stati corretti.
1 |Il sistema deve essere riavviato.               |
2 |Gli errori presenti nel filesystem non sono stati corretti.
3 |Errore nell’operazione.                       |
45 |ERrirsoerrev daito s.intassi.                          |
6 |Riservato.                                 |
7--Errore di libreria.---------------------------

Tabella 4.13: Valori di ritorno di fsck.

L’inconsistenza del filesystem è dovuta al fatto che ext2 aggiorna i metadati dopo aver aggiornato i dati (non potrebbe avvenire il contrario per ragioni di prestazioni) e l’aggiornamento dei metadati avviene in momenti non necessariamente immediatamente consecutivi all’aggiornamento dei dati, poiché il driver che gestisce lo specifico filesystem effettua l’aggiornamento dei metadati nei periodi “morti”. Una volta che il filesystem è inconsistente, il driver relativo non è più in grado di ritrovare tutte le informazioni in esso memorizzate, pertanto si rende opportuno un meccanismo che ricontrolla l’intero filesystem e lo ripristina opportunamente (fsck).

Il tempo impiegato nel controllo e ripristino della consistenza di un filesystem non è da sottovalutare ed aumenta all’aumentare della capacità della memoria di massa (per una partizione delle dimensioni di 40 GiB si possono avere tempi di ripristino dell’ordine di decine di minuti).

Al fine di evitare (per quanto possibile) le inconsistenze del filesystem e ridurre drasticamente i tempi di un eventuale ripristino dello stesso, viene adottata una tecnica di gestione delle informazioni che va sotto il nome di journaling. Tale tecnica si basa sull’utilizzo di una parte del filesystem detta journal o log (da cui il nome journaled filesystem) nella quale vengono memorizzate le operazioni che il sistema si accinge ad effettuare sul filesystem. Subito dopo il sistema effettua le modifiche sui dati e quindi sui metadati. Dopodiché il sistema elimina le informazioni precedentemente memorizzate nella parte journal. In questo modo, anche se il sistema non viene spento in modo “canonico”, il ripristino del filesystem verrà effettuato controllando soltanto la parte relativa all’ultima modifica tracciata nella parte journal che non risulta essere stata ancora effettuata, senza ricontrollare l’intero filesystem.

Esistono vari journaled filesystem supportati da GNU/Linux tra i quali XFS sviluppato dalla Silicon Graphics, ReiserFS sviluppato da H. Reiser, JFS (Journaling FileSystem) sviluppato da IBM ed ext3 sviluppato da S. Tweedie (uno degli autori di ext2) in Red Hat.


  4.7.1 ext3