La situazione è cambiata rispetto a due o tre anni fa', oggi non si ha solo la scelta tra Ext2 o ReiserFS. A partire dalla versione 2.4 il kernel offre una vasta scelta di file system. Segue una breve rassegna della modalità di funzionamento dei file system e dei loro vantaggi.
Chiaramente nessun file system si adatta perfettamente a tutte le applicazioni. Ogni file system ha dei vantaggi e dei svantaggi che vanno ponderati. Neanche il file system più sofisticato potrà mai sostituire un buon concetto di backup.
I termini “integrità dei dati” o “ consistenza dei dati” in questo capitolo non si riferiscono alla consistenza dei dati memorizzati di un utente (quei dati che la vostra applicazione scrive nei vostri file). La consistenza dei dati deve essere garantita dalla stessa applicazione.
![]() | Configurare i file system |
|---|---|
In tema di creazione e configurazione nonché partizionamento di file system si lascia realizzare tutto comodamente con se non vengono indicati esplicitamente degli altri modi per apportare delle modifiche ai file system. | |
Una delle funzionalità principali del kernel versione 2.4, ReiserFS, era disponibile a partire da 6.4 sotto forma di kernel patch per il SUSE kernel 2.2.x. ReiserFS è stato concepito da Hans Reiser e dall'équipe di sviluppatori Namesys. ReiserFS è una valida alternativa a Ext2. I suoi maggiori punti di forza sono una migliore gestione della memoria del disco rigido, migliore accessibilità al disco e ripristino veloce dopo un crollo del sistema. L'unica nota dolente: ReiserFS si concentra più sui meta-dati tralasciando i dati in sè. Le future versioni di ReiserFS conterranno il data-journaling (sia dati-meta che i dati concreti verranno scritti nel Journal) nonché accessi in scrittura ordinati (si veda data=ordered sotto Ext3). I punti di forza di ReiserFS:
In ReiserFS i dati vengono organizzati in un struttura ad albero bilanciato (ingl. B*-balanced tree). La struttura ad albero contribuisce a sfruttare meglio la memoria del disco rigido, dato che piccoli file possono essere memorizzati nello stesso blocco, invece di essere memorizzati altrove e dover gestire il puntatore sulla localizzazione effettiva. Inoltre la memoria non viene assegnata nella misura di unità di 1 o 4 kbyte, ma esattamente nella misura richiesta. Un altro vantaggio è l'allocazione dinamica degli inode che rende i file system più flessibili rispetto ai tradizionali file system come ad esempio Ext2, dove bisogna indicare la densità degli inode al momento della generazione del file system.
Nel caso di piccoli file vi sarete accorti che sia i dati file sia le informazioni (inode) “stat_data” vengono memorizzati gli uni accanto agli altri. Basta accedere una volta sola al disco per avere tutte le informazioni di cui avete bisogno.
L'uso dei journal, per ricostruire le modifiche apportate ai meta-dati, riduce i tempi di verifica anche nel caso di grandi file system ad una manciata di secondi.
Ext2 risale agli inizi di Linux. Deriva dall'Extended File System ed è stato implementato nell'aprile del 1992 e dunque integrato in Linux 0.96c. L'Extended File System è stato successivamente modificato più volte e come Ext2 è stato per anni il più noto file system di Linux. Con l'avvento dei cosiddetti journaling File system e la velocità con la quale eseguono un ripristino, Ext2 perse in termini di importanza.
Forse una breve rassegna dei vantaggi di Ext2 vi aiuterà a capire come mai continua ad avere tanti sostenitori tra gli utenti Linux che ancora oggi preferiscono lavorare con questo file system.
L'appellativo “solido come una roccia” non è dovuta al caso visto che nel corso degli anni Ext2 è stato continuamente migliorato ed ampiamente testato. Nel caso di un crollo del sistema senza un corretto smontaggio del file system, e2fsck analizza i dati del file system. I meta-dati vengono resi consistenti, e file o blocchi di dati in sospeso vengono scritti in una determinata directory (chiamata lost+found). Contrariamente alla maggior parte dei journaling file system, e2fsck analizza l'intero file system e non solo i bit dei meta-dati modificati di recente. Questo richiede più tempo rispetto alla verifica dei dati protocollo di un journaling file system. A seconda del volume del file system, questo processo può durare mezz'ora o oltre. Per questo motivo Ext2 non è particolarmente adatto per server ad alta disponibilità. Dato che Ext2 comunque non deve aggiornare continuamente alcun journal e occupa una quantità notevolmente inferiore di spazio di memoria a volte risulta essere più veloce di altri file system.
Basato sulla solida base di Ext2, Ext3 divenne l'acclamato file system di prossima generazione. L'affidabilità e la stabilità vennero coniugate sapientemente con i vantaggi di un journaling file system.
Ext3 è stato sviluppato da Stephen Tweedie. Diversamente dai file system di “prossima generazione” Ext3 non si ispira a principi del tutto nuovi, si basa invece su Ext2. I due file system sono molto simili tra di loro; è semplice implementare un file system Ext3 su di un file system Ext2. La differenza principale tra Ext2 e Ext3 è che Ext3 supporta il journaling.
Riassumendo, sono tre i vantaggi che offre Ext3:
Visto che Ext3 si basa sul codice di Ext2 e che appoggia sia il formato on-disk che formato meta-dati di Ext2, gli upgrade da Ext2 verso Ext3 risultano essere facilissimi da eseguire. Si può eseguire un upgrade anche quando ad essere montati sono i file system di Ext2. Diversamente dalla migrazione verso altri journaling file system, come ReiserFS, JFS o XFS che può diventare una faccenda davvero laboriosa, (dovete fare delle copie di sicurezza di tutto il file system e successivamente ricostruirlo “ex novo”), passare a Ext3 è una questione di pochi minuti. Inoltre è molto sicuro visto che durante la ricostruzione di un completo file system spesso si possono verificare degli errori. Se si considera l'elevato numero di sistemi Ext2 che aspettano un upgrade a un journaling file system, si può facilmente intuire l'importanza di Ext3 per tanti sistemisti. Eseguire un downgrade da Ext3 a Ext2 è così facile come eseguire un upgrade. Basta smontare correttamente il file system Ext3 e montarlo in seguito come file system Ext2.
Altri journaling file system seguono l'approccio cosiddetto journaling metadata-only, cioè i vostri meta-dati rimangono in uno stato consistente, cosa che comunque non può essere garantita automaticamente per i dati del file system. Ext3 è in grado invece di assolvere entrambi i compiti, e persino il grado di consistenza si lascia impostare individualmente. Il più elevato grado di sicurezza (cioè integrità dei dati) si ottiene lanciando Ext3 nel modo data=journal che comunque può comportare un rallentamento del sistema, giacché vengono rilevati sia i meta-dati che i dati del journal. Un approccio relativamente recente consiste nell'utilizzo del modo data=ordered che provvede sia alla integrità dei dati che dei meta-dati, ma che usa il journaling solo per i meta-dati. Il driver del file system raccoglie tutti i blocchi di dati appartenenti ad un aggiornamento dei meta-dati. Questi blocchi vengono raggruppati in una transaction e vengono scritti sul disco prima dell'aggiornamento dei meta-dati. In questo modo si ha una consistenza dei meta-dati e dei dati senza un calo di performance. Una terza possibilità consiste nel data=writeback. In questo caso i dati possono essere scritti nel file system principale dopo che i meta-dati sono stati consegnati al journal. Questa opzione è considerata da tanti la migliore sotto il punto di vista delle prestazioni. Comunque può accadere che ricompaiano nei file vecchi dati dopo un crash e ripristino, mentre è garantita l'integrità interna del file system. Se non avete cambiato impostazioni, Ext3 viene inizializzato nel modo data=ordered.
invocate tune2fs -j come utente root. tune2fs crea il journal Ext3 con i parametri standard. Se volete determinare voi stessi la dimensione e su quale dispositivo il journal debba essere generato, immettete invece tune2fs -J accompagnato dai parametri size= e device=. Per ulteriori informazioni su tune2fs consultate la relativa pagina di manuale.
Affinché il sistema rilevi e riconosca il file system Ext3 come tale, aprite il file /etc/fstab e modificate il tipo di file system della partizione interessata da ext2 a ext3 . Dopo il prossimo reboot del sistema la vostra modifica verrà applicata.
Se volete avviare il vostro file system root come ext3 dovrete inoltre integrare i moduli ext3 e jbd in initrd. A tal fine dovete immettere i due moduli nel file /etc/sysconfig/kernel sotto INITRD_MODULES ed invocate il comando mk_initrd.
JFS, il Journaling File System, è stato sviluppato da IBM per AIX. Nell'estate del 2000 esce la prima versione beta di JFS per Linux. La versione 1.0.0 è stata rilasciata nel 2001. JFS è tagliato per ambienti server con una elevata velocità di trasferimento dei dati (throughput), visto che in questo ambito quello che conta sono in prima linea le prestazioni. Essendo un file system a 64 bit, JFS supporta file voluminosi e partizioni (LFS ovvero Large File Support), caratteristica che lo qualifica ulteriormente per l'utilizzo in ambito server.
Se consideriamo più attentamente JFS scopriremo anche il motivo per cui questo file system si adatta bene ad un server Linux:
JFS segue alla stregua di ReiserFS l'approccio “ metadata only”. Al posto di una verifica dettagliata vengono rilevati solo le modifiche apportate ai meta-dati dovute a recenti attività del file system. Questo permette di velocizzare considerevolmente il ripristino. Attività contemporanee che richiedono diversi registrazioni di protocollo possono essere raccolte in un cosiddetto commit di gruppo, laddove il calo dal punto di vista della prestazione del file system viene compensato dal processo di scrittura multipla.
JFS si adatta alla struttura della directory. Nel caso di piccole directory consente di salvare direttamente il contenuto della directory nel suo inode. Per directory più capienti utilizza alberi bilanciati (ingl. B+trees) che semplificano notevolmente l'amministrazione delle directory.
Sotto Ext2 dovete indicare a priori la densità degli inode (memoria occupata da informazioni di natura amministrativa). Questo impone un limite massimo di file o directory per il vostro file system. Con JFS invece la memoria inode viene assegnata dinamicamente e gli esuberi vengono subito messi nuovamente a disposizione del sistema.
Originariamente pensato come file system per il proprio sistema operativo IRIX, XFS è stato concepito dalla SGI già agli inizi degli anni `90 come journaling file system a 64 bit ad alte prestazioni, all' altezza delle sempre crescenti richieste rivolte ad un file system moderno. XFS si adatta bene per file di una certa dimensione e dà prova di buona performance su hardware high-end. Comunque anche nel caso di XFS il tallone di Achille è rappresentato, come già per ReiserFS, dal fatto che XFS si concentra maggiormente sulla integrità dei meta-dati e meno sulla integrità dei dati.
Se osserviamo da vicino alcune funzionalità centrali di XFS vedremo il perché esso rappresenta una valida alternativa ad altri journaling file system in ambito della elaborazione dati high-end.
Al momento della generazione di un file system XFS, il block device su cui posa il file system viene suddiviso in otto o più settori lineari di ugual misura, detti “allocation groups” che chiameremo gruppi di allocazione. Ogni “gruppo di allocazione” gestisce gli inode e la memoria libera. I gruppi di allocazione sono in pratica dei “file system nei file system”. Visto che i gruppi di allocazione sono fino ad un certo grado autonomi, il kernel ha la possibilità di indirizzarne contemporaneamente più di uno. Ecco "il segreto" della alta scalabilità di XFS. Questa suddivisione in gruppi di allocazione è particolarmente indicata per sistemi multi-processore.
La memoria libera e gli inode vengono gestiti da alberi B+ all'interno dei gruppi di allocazione. Gli alberi B+ contribuiscono in maniera determinante alla performance e alla scalabilità di XFS. Una caratteristica di XFS unica nel suo genere è la “delayed allocation”. XFS elabora l'assegnazione della memoria (ingl. allocation ) bipartendo il processo. Una transazione “in sospeso” viene memorizzata nella RAM e riservato il corrispondente spazio di memoria. XFS non stabilisce subito dove precisamente memorizzare i dati (cioè in quali blocchi del file system). Questa decisione viene rinviata il più possibile. Così file temporanei di breve durata non vengono scritti sul disco, visto che al momento di determinare la loro locazione sul disco sono già obsoleti. In tal modo XFS aumenta le prestazioni e riduce la frammentazione del file system. Dato però che una allocazione differita comporta un minor numero di accessi in scrittura rispetto ad altri file system, è probabile che la perdita di dati in seguito al verificarsi di un crollo durante il processo di scrittura risulterà essere maggiore.
Prima di scrivere i dati nel file system, XFS riserva lo spazio necessario per il file (ingl. preallocate ). In questo modo si riduce notevolmente la frammentazione del file system, e si aumenta la performance, dato che il contenuto di un file non viene distribuito più lungo tutto il file system.