Nel 2006, alla nascita del progetto di sviluppo del file system ext4, alcuni sviluppatori proposero di creare il nuovo codice partendo dal codice sorgente già esistente del ext3 (fork o branch per l’ambiente di programmazione).
Questa soluzione non è rara nell’ambiente open source dove, quando due o più team di sviluppo lavorano sullo stesso codice di partenza, i risultati possono essere diversissimi creando dei veri e propri “scismi”.
Nel nostro caso, l’ext4 è nato con lo scopo di aumentare i limiti di immagazzinamento a 64 bit e di migliorare alcune prestazioni. Il nuovo codice è stato rilasciato nel mese di dicembre 2008 e da quella data tutte le principali distribuzioni Linux ne prevedono il supporto, poiché anche il recente file system Ext3 soffre (essendo totalmente retro compatibile con Ext2) dei problemi legati alla massima dimensione allocabile per singolo file.
Della decisione della compatibilità beneficiano oggi gli amministratori di sistema, che possono migrare da Ext3 a Ext4 in modo automatico e senza dover ricopiare manualmente i dati. Per superare la limitazione della dimensione massima raggiungibile per singolo file sono stati introdotti gli Extents.
Si tratta di un gruppo di memoria contiguo che può essere allocato al posto dei singoli blocchi. Un singolo extent può mappare fino a 128MB con una dimensione del blocco di 4KB. Ciò rende l'allocazione dei dati molto più efficiente decrementando la frammentazione del disco e, cosa più importante, consentendo la creazione di file e volumi più grandi rispetto al passato.
La dimensione massima di un file con Ext4 è, infatti, di 16 TeraByte, mentre una partizione può arrivare a crescere fino a 1 ExaByte, ovvero 1024 x 1024 x 1 TB. Gli extent vengono abilitati di default a partire dal kernel 2.6.23.
Precedentemente l’opzione “extents” andava attivata esplicitamente (es. mount /dev/sda1 /mnt/point -t ext4dev -o extents). Il filesystem ext4 è compatibile in avanti con ext3.
Questo significa che una partizione ext4 può essere montata come ext3 (usando “ext3” come tipo di filesystem) Tuttavia, se la partizione ext4 usa gli extent (una delle principali caratteristiche introdotte in ext4), si perde la compatibilità .
Un altro metodo per diminuire la frammentazione previsto da Ext4 è la preallocazione. I blocchi di memoria possono cioè essere preservati ed allocati solo successivamente o in condizioni favorevoli del disco.