13.2. Principali file system in Linux

A differenza di due o tre anni fa, la scelta di un file system per un sistema Linux non è più processo che dura pochi secondi (Ext2 o ReiserFS). I kernel, a partire dalla versione 2.4, offrono vari file system fra i quali scegliere. Quella che segue è una panoramica del funzionamento di base di questi file system e di quali vantaggi offrono.

È molto importante tenere presente che potrebbero non esistere file system adatti a tutti i tipi di applicazioni. Ciascun file system possiede i propri punti di forza e punti deboli particolari che devono essere tenuti in considerazione. Tuttavia, nemmeno il file system più sofisticato può sostituire un'accettabile strategia di backup.

I termini integrità dei dati e coerenza dei dati, quando utilizzati in questo capitolo, non si riferiscono alla coerenza dei dati dello spazio utente (i dati che l'applicazione scrive sui propri file). La coerenza di questi dati deve essere controllata dall'applicazione stessa.

[Important]Impostazione dei file system

Tutti i passi richiesti per l'impostazione o la modifica delle partizioni e dei file system possono essere eseguite utilizzando YaST, tranne quando indicato diversamente nel capitolo.

13.2.1. ReiserFS

Ufficialmente una delle caratteristiche chiave della versione 2.4 del kernel, ReiserFS è disponibile come patch per i kernel SUSE 2.2.x a partire da SUSE Linux versione 6.4. ReiserFS è stato progettato da Hans Reiser con il team di sviluppo Namesys e si è rivelato una potente alternativa a Ext2. Fra le sue qualità principali vi sono migliore utilizzazione dello spazio su disco, migliori prestazioni di accesso al disco e più rapido ripristino del sistema arrestato in modo anomalo.

In dettaglio, i punti di forza di ReiserFS sono:

Migliore utilizzo dello spazio su disco

In ReiserFS, tutti i dati sono organizzati un una struttura chiamata B*-balanced tree. La struttura ad albero contribuisce a una migliore utilizzazione dello spazio su disco, in quanto i file di piccole dimensioni posso essere memorizzati direttamente nei nodi foglia dell'albero B* anziché essere memorizzati altrove, semplicemente mantenendo un puntatore relativo all'effettiva posizione su disco. Inoltre, la memorizzazione non è allocata in porzioni di 1 o 4 kB, ma in porzioni esattamente delle dimensioni necessarie. Un altro vantaggio consiste nell'allocazione dinamica degli inode. Questo mantiene il file system più flessibile dei file system tradizionali, ad esempio Ext2, dove la densità inode deve essere specificata alla creazione del file system.

Migliori prestazioni di accesso al disco

Per file di piccole dimensioni, dati di file e "stat_data" (inode), le informazioni sono spesso memorizzate le une accanto alle altre. Possono così essere lette con una singola operazione di I/O del disco, vale a dire che è sufficiente un solo accesso al disco per richiamare tutte le informazioni necessarie.

Rapido recupero del sistema arrestato in modo anomalo

L'utilizzo un diario per tenere traccia delle modifiche recenti ai metadati consente di verificare il file system in pochi secondi, anche quando questo sia di dimensioni molto grandi.

Affidabilità per mezzo di journaling dei dati

ReiserFS supporta inoltre il journaling dei dati e modi ordinati di dati, simili ai concetti delineati nella Sezione 13.2.3, "Ext3" di Ext3. La modalità predefinita è data=ordered, che garantisce l'integrità sia dei dati, sia dei metadati, ma utilizza il journaling solo per i metadati.

13.2.2. Ext2

Le origini di Ext2 risalgono ai primi tempi della storia di Linux. Il suo predecessore, l'Extended File System, era sta implementato nell'aprile 1992 e integrato in Linux 0.96c. L'Extended File System ha subito varie modifiche e, come Ext2, è stato il più diffuso file system Linux per molti anni. Con la creazione dei file system journaling e grazie ai loro incredibilmente rapidi tempi di recupero, Ext2 è diventato meno importante.

Un breve riassunto dei punti di forza di Ext2 aiuterà a comprendere perché era, e in alcuni aree lo è tuttora, il file system Linux preferito da molti utenti.

Solidità

Dato che si tratta di un "veterano", Ext2 ha ricevuto molte migliorie ed è stato accuratamente verificato. Questo è probabilmente il motivo per cui molti utenti lo considerano incredibilmente solido. Dopo un'interruzione del sistema, quando il file system non può essere smontato correttamente, e2fsck inizia l'analisi dei dati del file system. I metadati vengono portati a uno stato coerente e i file o i blocchi di dati in sospeso vengono scritti in una directory predefinita, denominata lost+found. A differenza dei sistemi journaling, e2fsck analizza l'intero file system e non solo i bit recentemente modificati nei metadati Ciò richiede un tempo significativamente maggiore rispetto alla verifica dei dati del log di un file system journaling. A seconda della dimensione del file system, questa procedura può impiegare mezz'ora o più; pertanto non è consigliabile selezionare Ext2 per server che necessitano di alta disponibilità. Tuttavia, dato che Ext2 non mantiene un diario e utilizza una quantità di memoria significativamente inferiore, è talvolta più rapido di altri file system.

Semplice aggiornabilità

Il codice di Ext2 rappresenta le robuste fondamenta sulle quali Ext3 è diventato l'apprezzato file system della generazione successiva. La sua affidabilità e solidità sono state elegantemente combinate con i vantaggi di un file system journaling.

13.2.3. Ext3

Ext3 è stato progettato da Stephen Tweedie. A differenza degli altri file system di nuova generazione, Ext3 non segue un principio di programmazione completamente nuovo, ma è basato su Ext2. Questi due file system sono strettamente correlati e un file system Ext3 può essere costruito su un file system Ext2 con molta semplicità. La principale differenza fra Ext2 ed Ext3 consiste nel fatto che Ext3 supporta il journaling. in definitiva, Ext3 ha tre principali vantaggi da offrire:

Upgrade semplice e affidabile da Ext2

Dato che Ext3 è basato sul codice di Ext 2 e ne condivide il formato del disco nonché il formato dei metadati, l'upgrade da Ext2 a Ext3 è incredibilmente semplice. A differenza della transizione verso altri file system journaling quali ReiserFS o XFS, che può risultare molto lunga e laboriosa (esecuzione di backup dell'intero file system e sua ricreazione da zero), la transizione verso Ext3 richiede pochi minuti. È inoltre molto sicura, in quanto la ricreazione da zero di un intero file system potrebbe comportare dei problemi. Considerato il numero di sistemi Ext2 esistenti che attendono un upgrade a file system journaling, è facile immaginare come Ext3 sia importante per molti amministratori di sistema. Il downgrade da Ext3 a Ext2 è altrettanto semplice. È sufficiente smontare correttamente il file system Ext3 e montarlo nuovamente come file system Ext2.

Affidabilità e prestazioni

Alcuni altri file system journaling seguono il metodo "solo metadati" per il journaling. Ciò significa che i metadati sono sempre mantenuti in uno stato coerente, ma le stesse condizioni non possono essere automaticamente garantite per i dati del file system stesso. Ext3 è progettato per prendersi cura sia dei metadati sia dei dati. Il livello di "attenzione" può essere personalizzato. L'abilitazione di Ext3 nella modalità data=journal offre la massima sicurezza (integrità dei dati), ma potrebbe rallentare il sistema in quanto viene eseguito il journaling sia dei metadati, sia dei dati. Un approccio relativamente nuovo comporta l'utilizzo della modalità data=ordered, che garantisce l'integrità sia dei dati, sia dei metadati, ma utilizza il journaling solo per i metadati. Il driver del file system raccoglie tutti i blocchi di dati che corrispondono ad un aggiornamento dei metadati. Questi blocchi di dati vengono scritti sul disco prima dell'aggiornamento dei metadati. Il risultato è che si ottiene coerenza per i metadati e per i dati senza rinunciare alle prestazioni. Una terza opzione comporta l'utilizzo di data=writeback, che consente la scrittura dei dati nel file system principale dopo che i relativi metadati sono stati salvati nel diario. Spesso questa opzione è considerata la migliore per quanto riguarda le prestazioni. Può tuttavia consentire a dati obsoleti di riapparire nei file dopo un arresto anomalo del sistema e relativo recupero, mentre viene mantenuta l'integrità del sistema. Se non si specifica un altro parametro, Ext3 viene eseguito con data=ordered come opzione predefinita.

13.2.4. Conversione di un file system Ext2 in Ext3

Per convertire un file system Ext2 in Ext3, procedere come segue:

  1. Creare un diario Ext3, eseguendo tune2fs -j come root. Questo crea un diario Ext3 con i parametri predefiniti.

    Per decidere le dimensioni del diario e su quale dispositivo si trovi, eseguire invece tune2fs -J con le opzione size= e device= desiderate per il diario. Ulteriori informazioni sul programma tune2fs sono disponibili nella documentazione di tune2fs.

  2. Per garantire che il file system Ext3 sia riconosciuto come tale, modificare il file /etc/fstab come root, modificando il tipo di file system specificato per la partizione corrispondente da ext2 a ext3. Le verranno applicate al successivo riavvio.

  3. Per avviare un file system radice impostato come partizione Ext3, includere i moduli ext3 e jbd in initrd. A questo scopo, modificare /etc/sysconfig/kernel come root, aggiungendo ext3 e jbd alla variabile INITRD_MODULES. Dopo aver salvato le modifiche, eseguire il comando mkinitrd, che compila un nuovo initrd e lo prepara per l'utilizzo.

13.2.5. Reiser4

Immediatamente dopo il rilascio del kernel 2.6, la famiglia dei file system journaling si è arricchita di un altro membro: Reiser4. Reiser4 è fondamentalmente differente dal suo predecessore ReiserFS (versione 3.6) in quanto introduce il concetto di plug-in per manipolare le funzionalità del file system e un concetto di sicurezza più accurato.

Concetto di sicurezza più accurato

Nella progettazione di Reiser4, gli sviluppatori hanno posto l'attenzione sull'implementazione di funzione importanti per la sicurezza. Reiser4, pertanto, è dotato di una serie di plug-in di sicurezza dedicati. Il più importante introduce il concetto di "elementi" di file. Attualmente, i controlli di accesso ai file sono definiti per file. Nel caso vi sia un file di grandi dimensioni contenente informazioni rilevanti per più utenti, gruppi o applicazioni, i diritti di accesso devono essere relativamente imprecisi, in modo da coprire tutte le parti coinvolte. Con Reiser4 è possibile dividere tali file in parti di dimensioni minori, gli "elementi". I diritti di accesso possono quindi essere impostati separatamente per ciascun elemento e ciascun utente, consentendo una gestione più precisa della sicurezza dei file. Un esempio perfetto è /etc/passwd. Al momento, solo l'utente root è in grado di leggere e modificare tale file, mentre gli utenti non-root hanno solo accesso in lettura al file. Utilizzando il concetto di elemento di Reiser4, è possibile suddividere questo file in una serie di elementi (uno per utente) e consentire agli utenti o alle applicazioni di modificare i propri dati, ma non di accedere ai dati di altri utenti. Questo concetto aggiunge sicurezza e flessibilità.

Estensibilità per mezzo di plug-in

In Reiser4, molte funzioni di file system ed esterne, normalmente utilizzate da un file system, sono implementate come plug-in. Questi plug-in possono essere aggiunti al sistema di base in modo semplice. Non è più necessario ricompilare il kernel o riformattare il disco rigido per aggiungere nuove funzionalità al file system.

Migliore layout del file system per mezzo di allocazione ritardata

Analogamente a XFS, Reiser4 supporta l'allocazione ritardata. Vedere la Sezione 13.2.6, "XFS". L'utilizzo dell'allocazione ritardata fornisce un migliore layout generale persino con i metadati.

13.2.6. XFS

Progettato inizialmente come file system per i propri IRIX OS, SGI ha iniziato lo sviluppo di XFS all'inizio degli anni 90. Il concetto di base di XFS era di creare un file system journaling a 64 bit con alte prestazioni per soddisfare le le sfide estreme di elaborazione odierne. XFS è adatto alla manipolazione di file di grandi dimensioni e fornisce buone prestazioni con hardware di fascia alta. Tuttavia, persino XFS presenta un inconveniente. Analogamente a ReiserFS, XFS pone molta attenzione all'integrità dei metadati, ma minore attenzione all'integrità dei dati.

Un rapido esame delle funzioni principali di XFS evidenzia i motivi per i quali rappresenta un forte concorrente per altri file system journaling in elaborazioni di fascia alta.

Alta scalabilità grazie all'utilizzo di gruppi di allocazione

Durante la creazione di un file system XFS, il dispositivo di blocco alla base del file system viene diviso in otto o più regioni lineari di dimensioni uguali. Queste regioni vengono chiamate gruppi di allocazione. Ciascun gruppo di allocazione gestisce i propri inode e lo spazio libero su disco. In pratica, i gruppi di allocazione possono essere considerati come file system all'interno del file system. Dato che i gruppi di allocazione sono abbastanza indipendenti l'uno dall'altro, il kernel potrà indirizzarne contemporaneamente più di uno. Questa funzione è alla base della grande scalabilità di XFS. Naturalmente il concetto di gruppi di allocazione indipendenti è adatto ai requisiti di sistemi multiprocessore.

Alte prestazioni grazie alla gestione efficiente dello spazio su disco

Lo spazio libero e gli inode sono gestiti dagli alberi B+ all'interno dei gruppi di allocazione. L'utilizzo di alberi B+ contribuisce enormemente alle prestazioni e alla scalabilità di XFS. XFS utilizza l'allocazione ritardata. Gestisce l'allocazione dividendo il processo in due parti. Una transazione in sospeso viene memorizzata nella RAM e viene riservata la quantità di spazio necessaria. XFS tuttavia non ha ancora deciso esattamente dove (in termine di blocchi di sistema) verranno memorizzati i dati; questa decisione viene rinviata fino all'ultimo momento possibile. Alcuni dati temporanei di breve durata non verranno mai salvati su disco, in quanto obsoleti nel momento in cui XFS deciderà dove effettivamente salvarli. In questo modo, XFS migliora le prestazioni in scrittura e riduce la frammentazione del file system. Dato che l'allocazione ritardata riduce la frequenza di eventi in scrittura rispetto ad altri file system, è probabile che la perdita di dati in seguito a un arresto anomalo del sistema durante la scrittura sia maggiore.

Preallocazione per evitare frammentazione del file system

Prima di scrivere i dati sul file system, XFS riserva (prealloca) lo spazio libero necessario per un file; pertanto la frammentazione del file system viene drasticamente ridotta e le prestazioni migliorano, in quanto i contenuti di un file non vengono distribuiti su tutto il file system.