Dal 2001, anno in cui è stato introdotto, ext3 ha dominato la scena dei file system in ambienti Linux: giunto come erede della seconda versione del file system extended, introduceva importanti novità come journaling, processo grazie al quale è possibile preservare l'integrità dei dati, e offriva prestazioni notevolmente migliorate.
Nel frattempo lo sviluppo è continuato, e dal 2006 è nato ext4: da allora sono passati ben 4 anni, ed il panorama delle distribuzioni Linux da qualche tempo ha intrapreso un percorso di migrazione verso questa nuova versione del file system preferito per l'ottimo livello di stabilità e affidabilità raggiunto. Vediamo dunque quali sono le principali caratteristiche di ext4, in cosa si differenzia dalle precedenti versioni, e come passare da ext3 a ext4.
I vantaggi di Ext4
Grazie ad ext4, le dimensioni di file e volumi supportati è cresciuta notevolmente: con questa versione del file system è infatti possibile gestire file di dimensioni fino a 16 TeraByte, mentre la dimensione del file system è addirittura di 1 ExaByte. Ciò è possibile grazie al passaggio ad un metodo di indirizzamento dei blocchi a 48 bit, anche se i piani di sviluppo vedono la possibilità di passare a 64 bit una volta superata una serie di problemi. L'indirizzamento a 48 bit non deve però illudere: la dimensione dei blocchi di default resta di 4 bit, a variare è solo il metodo di indirizzamento.
La gestione di file di grosse dimensioni è stata anche favorita dall'eliminazione del mapping indiretto dei blocchi tipico di ext3, a favore del nuovo concetto di extent: nella precedente versione del file system i file venivano suddivisi in blocchi anche non contigui, dei quali veniva tenuta traccia della posizione per poter ricomporre il file; in ext4, invece, ogni file è composto da blocchi contigui, che vanno a costituire un extent. Le dimensioni massime di ogni extent è di 128MB, dunque per un file di dimensioni inferiori è possibile utilizzare un unico extent. Con ext4, inoltre, l'allocazione a blocchi singoli di ext3 lascia il posto ad un metodo di allocazione multiblocco, grazie al quale le prestazioni sono notevolmente migliorate.
Un altro limite superato da ext4 è quello del numero massimo di sottodirectory che è possibile creare in ogni cartella: se in ext3 tale limite era di 32000, nella versione 4 del file system è in teoria illimitato. L'indicizzazione delle cartelle è stata migliorata, grazie all'adozione di H-Tree, una variante del tradizionale B-Tree con il quale sono spesso organizzate le directory.
Le prestazioni di Ext4
Per migliorare le prestazioni, soprattutto in ambienti che necessitano di ottimizzare l'accesso ai file come quelli dei database, utilizzando ext4 è possibile preallocare spazio di varie dimensioni: in questo modo è garantita la contiguità dei blocchi che compongono i singoli file.
Lo spazio pre-allocato sarà destinato esclusivamente all'applicazione che lo ha richiesto, che provvederà poi a scrivere quanto necessario; al termine della scrittura, lo spazio in eccesso sarà liberato e reso disponibile ad altri processi che necessitano di scrivere sul disco. Se da un lato, dunque, è possibile preallocare spazio sul disco, dall'altro ext4 permette anche di utilizzare l'allocazione ritardata: in questo modo, lo spazio necessario ad un file verrà allocato solo quando si arriverà a scrivere effettivamente sul disco lo stesso, del quale si conoscono le dimensioni, che persisterà nella RAM fin quando non sarà scritto. In questo modo è possibile evitare di allocare continuamente spazio al crescere delle dimensioni dei file in attesa di essere scritti, quando magari poi tali file non saranno mai effettivamente trasferiti dalla RAM al disco fisso.
Sempre per quanto riguarda le prestazioni, bisogna sottolineare il miglioramento del controllo di integrità del file system, che ora impiega un tempo tra le 2 e le 20 volte inferiore rispetto alle precedenti versioni. Questo eccellente passo in avanti è stato possibile grazie ad una gestione degli inode più intelligente: al termine di ogni gruppo di inode è posizionata una lista di quelli inutilizzati, che non verranno dunque controllati e permettono di abbreviare i tempi di controllo. La decisione di introdurre tale funzionalità è scaturita da una semplice considerazione: in media, solo una quantità inferiore al 10% degli inode viene effettivamente utilizzata, e dunque risulta superfluo controllare il restante 90%.
Per quanto ridotto grazie agli strumenti appena citati, il problema della frammentazione dei dati esiste comunque in ext4: basti pensare, ad esempio, ad un file da aggiornare, ma privo di blocchi ad esso contigui a causa della scrittura di altri file. Le uniche due soluzioni sono quelle di allocare l'aggiornamento in una posizione successiva al file stesso, o spostare il tutto. Per ovviare a tale problema ext4 presenta uno strumento di deframmentazione in linea, che permette di garantire la contiguità dei file, soprattutto per quanto riguarda i più importanti.
Caratteristica importante di ext4 è la compatibilità con la precedente versione del file system: tale compatibilità è sia in un verso che nell'altro. Ciò significa che è possibile sia montare partizioni ext4 come ext3, sia fare il contrario. La prima possibilità risulta però essere effettiva solo nel momento in cui non vengono utilizzati gli extent, chiaramente non supportati da ext3.
Passare da ext3 a ext4
La maggior parte delle distribuzioni Linux hanno da tempo integrato nel Kernel fornito nei propri repository il supporto ad ext4: per questo motivo, è possibile passare facilmente da ext3 a ext4. Tale procedura, però, comporta la formattazione delle partizioni interessate con il nuovo file system, per cui è consigliabile effettuare prima una copia di backup dei dati presenti.
Per formattare una certa partizione con ext4, è sufficiente lanciare da terminale il seguente comando, con privilegi di root:
$ mkfs.ext4 -j /dev/sdaX
dove /dev/sdaX sta ad indicare la partizione X sul disco sda. Chiaramente, tale parametro va configurato a seconda delle proprie necessità.
Per montare, poi, la stessa partizione è sufficiente lanciare il comando:
$ mount -t ext4dev /dev/sda6 /mnt/directory_di_mount
dove /mnt/directory_di_mount è il percorso nel quale si vuole montare la partizione ext4.
Conclusioni
Il file system ext4 rappresenta un'importantissima evoluzione per il mondo Linux, grazie alla quale è possibile migliorare le prestazioni del proprio sistema operativo, ed allo stesso tempo garantire una maggiore sicurezza dei propri dati personali. Come già detto, numerose distribuzioni hanno già effettuato il passaggio ad ext4, mentre le altre sono in fase di migrazione: il consiglio è dunque quello di adeguarsi a tale processo, convertendo le proprie partizioni all'ultima versione del file system.