Sistem de fișiere de mari dimensiuni Sistemul de fișiere ext4 poate suporta volume cu dimensiuni de până la 1 exbibyte (EiB) și fișiere individuale cu dimensiuni de până la 16 tebibyte (TiB) cu dimensiunea standard a blocurilor de 4 KiB. Limitele maxime de dimensiune a fișierelor, directoarelor și a sistemului de fișiere cresc cel puțin proporțional cu dimensiunea blocului sistemului de fișiere până la dimensiunea maximă a blocului de 64 KiB disponibilă pe procesoarele ARM și PowerPC/Power ISA. Extents Extents înlocuiesc schema tradițională de cartografiere a blocurilor utilizată de ext2 și ext3. O extensie este un interval de blocuri fizice contigue, ceea ce îmbunătățește performanța fișierelor de mari dimensiuni și reduce fragmentarea. O singură extensie în ext4 poate cartografia până la 128 MiB de spațiu contiguu cu o dimensiune a blocului de 4 KiB. Pot exista patru extinderi stocate direct în inode. Atunci când există mai mult de patru extents pentru un fișier, restul extents sunt indexate într-un arbore. Compatibilitate retroactivă ext4 este compatibil cu ext3 și ext2, ceea ce face posibilă montarea ext3 și ext2 ca ext4. Acest lucru va îmbunătăți ușor performanța, deoarece anumite caracteristici noi ale implementării ext4 pot fi utilizate și cu ext3 și ext2, cum ar fi noul algoritm de alocare a blocurilor, fără a afecta formatul de pe disc. ext3 este parțial compatibil cu ext4. Practic, ext4 nu se va monta din start ca un sistem de fișiere ext3, cu excepția cazului în care anumite caracteristici noi sunt dezactivate la crearea acestuia, cum ar fi ^extent
, ^flex_bg
, ^huge_file
, ^uninit_bg
, ^dir_nlink
și ^extra_isize
. Prealocare persistentă ext4 poate pre-aloca spațiu pe disc pentru un fișier. Pentru a face acest lucru pe majoritatea sistemelor de fișiere, în fișier ar fi scrise zerouri la crearea acestuia. În ext4 (și în unele alte sisteme de fișiere, cum ar fi XFS) se poate utiliza fallocate()
, un nou apel de sistem din kernelul Linux. Spațiul alocat ar fi garantat și probabil contiguu. Această situație are aplicații pentru streamingul media și bazele de date. Alocarea întârziată ext4 utilizează o tehnică de performanță numită allocate-on-flush, cunoscută și sub denumirea de alocare întârziată. Altfel spus, ext4 amână alocarea blocurilor până când datele sunt descărcate pe disc. (În schimb, unele sisteme de fișiere alocă blocurile imediat, chiar și atunci când datele intră într-o memorie cache de scriere). Alocarea întârziată îmbunătățește performanța și reduce fragmentarea prin alocarea efectivă a unor cantități mai mari de date la un moment dat. Număr nelimitat de subdirectoare ext4 nu limitează numărul de subdirectoare dintr-un singur director, decât prin limita de dimensiune inerentă a directorului însuși. (În ext3, un director poate avea cel mult 32.000 de subdirectoare.) Pentru a permite directoare mai mari și o performanță continuă, ext4 în Linux 2.6.23 și versiunile ulterioare activează în mod implicit indicii HTree (o versiune specializată a unui arbore B), ceea ce permite stocarea în indexul HTree pe două niveluri a unor directoare de până la aproximativ 10-12 milioane de intrări și o limită de dimensiune a directoarelor de 2 GB pentru o dimensiune a blocurilor de 4 KiB, în funcție de lungimea numelui de fișier. În Linux 4.12 și ulterior, caracteristica largedir
a permis un HTree pe 3 niveluri și dimensiuni ale directoarelor de peste 2 GB, permițând aproximativ 6 miliarde de intrări într-un singur director. Sumele de control ale jurnalului ext4 utilizează sume de control în jurnal pentru a îmbunătăți fiabilitatea, deoarece jurnalul este unul dintre cele mai utilizate fișiere de pe disc. Această caracteristică are un beneficiu secundar: poate evita în siguranță o așteptare de intrare/ieșire pe disc în timpul jurnalizării, îmbunătățind ușor performanța. Sumele de control ale jurnalului au fost inspirate de un articol de cercetare de la Universitatea din Wisconsin, intitulat IRON File Systems (mai exact, secțiunea 6, numită „transaction checksums”), cu modificări în cadrul implementării tranzacțiilor compuse efectuate de sistemul de fișiere IRON (propus inițial de Sam Naghshineh în cadrul summit-ului RedHat). Verificarea sumelor de control ale metadatelor Începând cu kernelul Linux 3.5 lansat în 2012 Verificarea mai rapidă a sistemului de fișiere În ext4, grupurile de blocuri nealocate și secțiunile din tabelul inode sunt marcate ca atare. Acest lucru îi permite lui e2fsck să le ocolească în întregime și reduce foarte mult timpul necesar pentru verificarea sistemului de fișiere. Linux 2.6.24 implementează această caracteristică.
Allocator multiblock Atunci când ext3 adaugă la un fișier, el apelează alocatorul de blocuri, o dată pentru fiecare bloc. În consecință, dacă există mai mulți scriitori concomitenți, fișierele pot deveni ușor fragmentate pe disc. Cu toate acestea, ext4 utilizează alocarea întârziată, ceea ce îi permite să bufferizeze datele și să aloce grupuri de blocuri. În consecință, alocatorul multibloc poate face alegeri mai bune în ceea ce privește alocarea fișierelor în mod contiguu pe disc. Alocătorul multibloc poate fi utilizat, de asemenea, atunci când fișierele sunt deschise în modul O_DIRECT. Această caracteristică nu afectează formatul discului. Marcaje temporale îmbunătățite Pe măsură ce computerele devin mai rapide în general, iar Linux este utilizat din ce în ce mai mult pentru aplicații critice, granularitatea marcajelor temporale bazate pe secunde devine insuficientă. Pentru a rezolva acest lucru, ext4 oferă timestamp-uri măsurate în nanosecunde. În plus, 2 biți ai câmpului timestamp extins sunt adăugați la cei mai semnificativi biți ai câmpului secunde din timestamp-uri pentru a amâna problema anului 2038 cu încă 408 ani. ext4 adaugă, de asemenea, suport pentru timestamp-uri de timp de creare. Dar, după cum subliniază Theodore Ts’o, deși este ușor să se adauge un câmp suplimentar de dată de creare în inode (permițând astfel, din punct de vedere tehnic, suportul pentru aceste timestamp-uri în ext4), este mai dificil să se modifice sau să se adauge apelurile de sistem necesare, cum ar fi stat() (care ar necesita probabil o nouă versiune) și diferitele biblioteci care depind de acestea (cum ar fi glibc). Aceste modificări vor necesita coordonarea mai multor proiecte. Prin urmare, data de creare stocată de ext4 este în prezent disponibilă doar pentru programele de utilizator pe Linux prin intermediul APIstatx()
. Cotele de proiect Suportul pentru cotele de proiect a fost adăugat în kernelul Linux 4.4 la 8 ianuarie 2016. Această caracteristică permite atribuirea unor limite de cote de disc la un anumit ID de proiect. ID-ul de proiect al unui fișier este un număr pe 32 de biți stocat pe fiecare fișier și este moștenit de toate fișierele și subdirectoarele create sub un director părinte cu un ID de proiect atribuit. Acest lucru permite atribuirea de limite de cote la un anumit arbore de subdirectoare independent de permisiunile de acces la fișier, cum ar fi cotele de utilizator și de proiect care depind de UID și GID. Deși acest lucru este similar cu o cotă de director, principala diferență constă în faptul că același ID de proiect poate fi atribuit mai multor directoare de nivel superior și nu este strict ierarhic. Criptare transparentă Suportul pentru criptare transparentă a fost adăugat în kernelul Linux 4.1 în iunie 2015. Inițializare leneșă Caracteristica lazyinit permite curățarea tabelelor inode în fundal, accelerând inițializarea la crearea unui nou sistem de fișiere ext4. Aceasta este disponibilă din 2010 în versiunea 2.6.37 a kernelului Linux. Bariere de scriere ext4 activează în mod implicit barierele de scriere. Aceasta asigură că metadatele sistemului de fișiere sunt scrise și ordonate corect pe disc, chiar și atunci când memoriile cache de scriere își pierd puterea. Acest lucru se însoțește de un cost de performanță, în special pentru aplicațiile care folosesc mult fsync sau care creează și șterg multe fișiere mici. Pentru discurile cu o memorie cache de scriere susținută de o baterie, dezactivarea barierelor (opțiunea „barrier=0”) poate îmbunătăți în mod sigur performanța.