6. File system esteso(Ext, Ext2, Ext3)

Il file system esteso (ext fs), il secondo file system esteso (ext2fs) ed il terzo file system esteso (ext3fs) sono stati progettati e realizzati su Linux da Rémy Card, Laboratoire MASI--Institut Blaise Pascal, <card@masi.ibp.fr>, Theodore Ts'o, Massachussets Institute of Technology, <tytso@mit.edu> e Stephen Tweedie, University of Edinburgh, <sct@redhat.com>

6.1. File system esteso(ExtFS)

Questo è un vecchio file system usato nelle vecchie versioni di Linux.

6.2. Secondo file system esteso (Ext2 FS)

Il secondo file system esteso è probabilmente il più utilizzato file system nella comunità Linux. Fornisce la semantica Unix standard per i file e caratteristiche avanzate. Inoltre, grazie alle ottimizzazioni incluse nel codice del kernel, è robusto ed offre prestazioni eccellenti.

Poichè ext2fs è stato progettato considerandone l'evoluzione, esso contiene hooks (agganci) che possono essere utilizzate per aggiungere nuove caratteristiche. Alcuni stanno lavorando su estensioni all'attuale file system: liste di controllo d'accesso conformi alla semantica Posix, undelete e compressione dei file "al volo".

Ext2fs è stato il primo sviluppato ed integrato nel kernel di Linux ed è ora attivamente portato su altri sistemi operativi. Un server ext2fs che gira sullo GNU Hard è stato realizzato. Alcuni stanno lavorando ad una versione per il server LITES, che gira sul micro kernel Mach e sul sistema operativo VSTa. In ultimo, Ext2fs è una importante parte del sistema operativo Masix, attualmente in sviluppo da parte di uno degli autori.

6.2.3. Caratteristiche avanzate di Ext2fs

In aggiunta alle caratteristiche standard Unix, Ext2fs supporta alcune estensioni che non sono normalmente presenti nel file system Unix.

Gli attributi dei file permettono agli utenti di modificare il comportamento del kernel quando opera su un insieme di file. Si possono definire attributi per un file o per una directory. Nel secondo caso, tutti i file creati successivamente nella directory erediteranno gli attributi.

Al momento del mount si può scegliere la semantica BSD o quella del System V Versione 4. Una opzione del mount permette infatti di scegliere la semantica per la creazione dei file. In un file system montato con la semantica BSD, i file sono creati con lo stesso id di gruppo della directory madre. La semantica System V è un pò più complicata: se la directory ha il bit setgid abilitato, i nuovi file ereditano l'di di gruppo della directory e le nuove sotto directory ereditano sia l'id di gruppo che il bit setgid; in caso contrario, file e directory sono creati con l'id di gruppo principale del processo.

Gli aggiornamenti sincroni alla BSD possono essere utilizzati in Ext2fs. Una opzione del mount permette all'amministratore di richiedere che i meta dati (inode, blocchi di bitmap, blocchi indiretti e blocchi di directory) vengano scritti in maniera sincrona su disco quando vengono modificati. Questo può essere utile per mantenere una rigida consistenza dei meta dati ma porta a prestazioni molto scarse. In realtà, questa possibilità non viene in genere usata, perchè, in aggiunta al decadimento delle prestazioni associato all'aggiornamento sincrono dei meta dati, può essere causa di corruzione dei dati utente che non vengono segnalati dal controllore del file system.

Ext2fs permette all'amministratore di scegliere le dimensioni del blocco logico quando viene creato un file system. Le dimensioni del blocco possono tipicamente essere di 1024, 2048 e 4096 byte. Usare blocco di grandi dimensioni può velocizzare le operazioni di I/O per le ridotte richieste di I/O e quindi per i minori spostamenti della testina del disco che devono essere fatti per accedere ad un file. D'altro canto blocchi grossi sprecano più spazio su disco: in media l'ultimo blocco di ogni file è pieno per metà, quindi, al crescere delle dimensioni del blocco, più spazio viene sprecato nell'ultimo blocco. Inoltre, molti dei vantaggi nell'usare blocchi grandi sono ottenuti dalle tecniche di pre allocazione del file system Ext2fs.

Ext2fs supporta i link simbolici veloci. Un link simbolico veloce non usa alcun blocco dati del file system. Il nome del file target non è salvato nel blocco dati ma nell'inode stesso. Questa politica permette di risparmiare spazio su disco (non servono blocchi dati) e velocizza le operazioni sui link (non è necessario accedere a blocchi dati). Naturalmente lo spazio all'interno degli inode è limitato per cui non tutti i link possono essere realizzati come link veloci. Le dimensioni massime del nome del file target sono 60 caratteri. Si prevede di poter estendere questo limite in futuro.

Ext2fs tiene traccia dello stato del file system. Un campo speciale nel super blocco è usato dal kernel per indicare lo stato del file system. Quando un file system è montato in lettura e scrittura, il suo stato è posto a 'Not Clean'. Quando è smontato o rimontato in sola lettura, il suo stato è posto a 'Clean'. Durante il boot, il controllore del file system usa queste informazioni per decidere se un file system deve essere controllato. Il codice del kernel tiene traccia anche degli errori in questo campo. Quando una inconsistenza è rilevata dal codice del kernel, il file system è marcato come 'Erroneus'. Il controllore del file system verifica questo in modo da forzare il controllo del file system indipendentemente dal suo stato.

Saltare sempre i controlli del file system può essere a volte pericoloso, per cui Ext2fs fornisce due modi per forzare i controlli ad intervalli regolari. Un contatore di mount è gestito nel super blocco. Ogni volta che il file system viene montato in lettura e scrittura, il contatore viene incrementato. Quando raggiunge il valore massimo (anch'esso memorizzato nel super blocco), il controllore del file system forza una verifica anche se il file system è 'Clean'. Anche la data dell'ultimo controllo ed il massimo intervallo consentito tra due controlli sono salvati nel super blocco. Questi due campi permettono all'amministratore del sistema di forzare controlli periodici. Quando l'intervallo massimo viene superato, il file system viene controllato indipendentemente dal suo stato.

Un attributo permette agli utenti di richiedere la cancellazione dei file in modo sicuro. Quando un file viene cancellato in maniera sicura, dati casuali vengono scritti nei blocchi su disco in precedenza usati dal file. Questo non permette a malintenzionati di ottenere l'accesso al precedente contenuto del file usando un disk editor.

In ultimo, nuovi tipi di file ispirati dal file system di BSD 4.4 sono stati di recente introdotti in Ext2fs. I file immutabili possono essere solo letti: nessuno può scriverci o cancellarli. Questo può essere utile per proteggere file di configurazione importanti. File a sola aggiunta possono essere aperti solo in scrittura ma i dati sono sempre aggiunti in fondo al file. Questi file non possono, come quelli immutabili, essere cancellati o rinominati. Questo tipo è particolarmente indicato per i log file.

6.2.4. Struttura fisica

La struttura fisica di un file system Ext2fs è stata fortemente influenzata dal layout del file system BSD. Un file system è costituito da gruppi di blocchi (analoghi ai gruppi di cilindri del file system BSD). Tuttavia i gruppi di blocchi non sono legati alla disposizione fisica dei blocchi sul disco poichè i dischi moderni tendono ad essere ottimizzati per un accesso sequenziale e nascondono la loro geometria fisica al sistema operativo ,---------+---------+---------+---------+---------, | Settore | Gruppo | Gruppo | ... | Gruppo | | di boot | bloc. 1 | bloc. 2 | | bloc. n | `---------+---------+---------+---------+---------'

Ogni gruppo di blocchi contiene una copia ridondante delle informazioni di controllo cruciali del file system (il super blocco e i descrittori del file system) e contiene anche una parte del file systsem (un blocco bitmap, una bitmap degli inode, una parte della tabella degli inode e i blocchi dato). La struttura del gruppo di blocchi è rappresentata in questa tabella: ,---------+---------+---------+---------+---------+---------, | Super | FS | Blocco | Bitmap | Tabella | Blocchi | | blocco | desc. | bitmap | inode | inode | dato | `---------+---------+---------+---------+---------+---------'

Usare i gruppi di blocchi è un grosso vantaggio per l'affidabilità: poichè le strutture di controllo sono replicate in ogni gruppo, è facile ripristinare un file system con il super blocco danneggiato. Questa struttura aiuta anche ad ottenere delle buone prestazioni: riducendo la distanza tra la tabella degli inode ed i blocchi dato, è possibile ridurre gli spostamenti della testina del disco durante l'I/O sui file.

In Ext2fs, le directory sono gestite con liste collegate con voci di dimensioni variabile. Ogni voce contiene il numero di inode, le dimensioni della voce, il nome del file e la sua lunghezza. Usando voci di dimensioni variabili, è possibile gestire i nomi lunghi senza sprecare spazio su disco.

6.2.5. Ottimizzazioni per le prestazioni

In Linux, il codice Ext2fs nel kernel contiene molte ottimizzazioni per le prestazioni, le quali tendono a migliorare la velocità di I/O durante la lettura e la scrittura dei file.

Ext2fs si avvantaggia della gestione del cache buffer per eseguire delle letture in anticipo: quando un blocco deve essere letto, il codice del kernel richiede l'I/O di diversi blocchi contigui. In questo modo, si cerca di assicurare che il blocco successivo da leggere sia già caricato nel buffer. Le letture in anticipo sono normalmente effettuate durante l'accesso sequenziale dei file; Ext2fs le estende anche alla lettura delle directory, sia in modo esplicito (chiamate alla readdir(2)) sia in modo implicito (ricerca con namei).

Ext2fs contiene anche molte ottimizzazioni di allocazione. I gruppi di blocchi sono utilizzati per raggruppare insieme inode e dati correlati: il codice del kernel cerca sempre di allocare per un file blocchi dato nello stesso gruppo di blocchi del suo inode. Questo per ridurre gli spostamenti della testina del disco quando si leggono un inode ed i suoi blocchi dato.

Nello scrivere dati in un file, Ext2fs prealloca fino a 8 blocchi adiacenti quando alloca un nuovo blocco. La preallocazione ha una percentuale di successo di circa il 75%, anche su un file system molto pieno. Con questa preallocazione si raggiungono buone prestazioni in scrittura a pieno carico. Permette anche che blocchi contigui siano allocati per lo stesso file, velocizzando così le future letture sequenziali.

Questi due ottimizzazioni nelle allocazioni producono una localizzazione molto buona di:

6.3. Terzo file system esteso(Ext3 FS)

Ext3 possiede le stesse caratteristiche di Ext2 ma include anche il journaling. Si può scarica la versione preliminare da .

6.4. E2compr - Compressione transparente per Ext2fs

Implementa il comando `chattr +c' per il file system Ext2fs. Il software consiste in una patch per il kernel Linux ed in versioni modificate di diversi programmi (principalmente e2fsprogs cioè e2fsck ed amici). Sebbene alcuni lo utilizzino da anni, questo software è ancora in sviluppo e non è pronto per l'utente finale.

6.5. Accedere a Ext2 da DOS (strumenti Ext2)

Una collezione di programmi DOS che permettono di leggere un file system Ex2fs Linux da DOS.

6.6. Accedere a Ext2 da DOS, Windows 9x/NT ed altri Unix (LTools)

Gli LTools sono sotto DOS/Windows 3.x/Windows 9x/Windows NT e UNIX non Linux quello che gli MTools sono sotto Linux. Puoi accedere (in lettura, scrittura e modifica) ai file Linux quando si esegue un altro sistema operativo. Il kernel degli LTools è un insieme di programmi da linea di comando. In aggiunta è disponibile un programma JAVA come interfaccia grafica stand-alone. In alternativa è possibile usare un browser web standard come interfaccia grafica. Gli LTools non solo permettono l'accesso ai file linux sulla macchina ma anche di accedere remotamente a file su altre macchine.

6.7. Accedere a Ext2 da OS/2

EXT2-OS2 è un pacchetto che permette ad OS/2 di accedere facilmente a partizioni formattate Ext2 da OS/2 come drive standard OS/2. Lo scopo ultimo di questo pacchetto è quello di poter usare un file system ext2 in sostituzione della FAT o HPFS. Al momento l'unico caratteristica mancante per raggiungere questo obiettivo è il supporto per gli attributi estesi di OS/2.

6.8. Accedere a Ext2 da Windows 95/98 (FSDEXT2)

6.9. Accedere a Ext2 da Windows 95 (Explore2fs)

Un applicazione utente che può leggere e scrivere su Ext2fs. Supporta hard disk e media rimovibili, inclusi gli zip e i floppy. Usa una interfaccia simile a windows explorer per mostrare file e dettagli. Supporta il Drag&Drop, i menu contestuali, etc.. Scritto per Windows NT, ha anche qualche supporto per Windows95. Dischi molto grandi possono causare problemi.

6.10. Accedere a Ext2 da Windows NT (ext2fsnt)

6.11. Accedere a Ext2 da BeOS

Questo è un driver che permette a BeOS di montare un file system Ext2 Linux. La versione attualmente rilasciata è considerata dall'autore stabile. Molti l'hanno usata per molto tempo, senza report di bachi.

L'autore lavora adesso per la Be Inc per cui non si vedrà il suo supporto per Ext2 e NTFS aggiornato su web per molto tempo. I driver dovrebbero essere inseriti nelle future versioni di BeOS.

6.12. Accedere a Ext2 da MacOS (MountX)

Driver MacOS che permette di montare un file system Ext2 (Linux e MkLinux) su MacIntosh.

6.13. Accedere a Ext2 da MiNT

Questo è un driver completamente funzionante per il file system Ext2 su FreeMiNT. Si può leggere e scrivere l'attuale versione di Ext2 così come implementata su Linux per esempio. Le dimensioni delle partizioni non sono limitate e quelle del settore logico possono essere di 1024, 2048 e 4096 byte. La sola restrizione è che le dimensioni del settore fisico devono essere più piccole o uguali di quelle del settore logico. Le dimensioni del blocco possono essere configurate con mke2fs in fase di inizializzazione della partizione.

6.14. Ext2fs defrag

Deframmenta il file system Ext2fs. Richiede un aggiornamento per le librerie Glib.

6.15. Ext2fs resize

Ridimensiona il secondo file system esteso.

6.16. Ext2end

Da usare con la Sezione 2.6. Consiste in due programmi di utilità: ext2endable riorganizza un file system ext2 vuoto per permettere di essere esteso mentre ext2end estende un file system ext2 non montato. Se ext2endable non è stato eseguito durante la creazione del file system, ext2end sarà solo in grado di estenderlo a multipli di 256MB.

6.17. Riparare/analizzare/creare Ext2 con E2fsprogs

Il pacchetto ext2fsprogs contiene programmi di utilità essenziali per il file system ext2 tra cui e2fsck, mke2fs, debugfs, dumpe2fs, tune2fs e gran parte delle utilità principali del file system ext2fs.

6.18. Editor per il file system Ext2 - Ext2ed

EXT2ED è un disk editor per il file system Ext2. Mostra le strutture del file system in una simpatica ed intuitiva modalità, permettendo una facile navigazione per le necessarie modifiche.

6.19. Editor per il file system di Linux - lde

Permette di vedere alcuni file system Linux; la modifica in esadecimale dei blocchi e degli inode sono ora supportati e si può salvare un file cancellato su un'altra partizione con un pò di lavoro. Supporta ext2, minix e xiafs. Include una introduzione sul file system Minix in LaTeX. E' necessario applicare delle patch ai sorgenti per compilarlo per i kernel 2.2.x e 2.3.x, a causa della mancanza nel kernel degli header Xia.

6.20. Programma di utilità "undelete" per Ext2

Questa è una patch per il kernel 2.0.30 che aggiunge capacità di recupero da cancellazioni (undelete) utilizzando l'attributo di "undeletable" fornito da ext2fs. La patch include le pagine man, il demone undelete ed i programmi di utilità. Controllare la pagina web per l'ultima versione.