Nagyméretű fájlrendszer Az ext4 fájlrendszer akár 1 exbibyte (EiB) méretű köteteket és akár 16 tebibyte (TiB) méretű egyedi fájlokat is támogat a szabványos 4 KiB-os blokkmérettel. A maximális fájl-, könyvtár- és fájlrendszer-mérethatárok legalább arányosan nőnek a fájlrendszer blokkméretével, egészen az ARM és PowerPC/Power ISA CPU-kon elérhető maximális 64 KiB-os blokkméretig. Extents Az extents az ext2 és ext3 által használt hagyományos blokk leképezési sémát váltja fel. A kiterjedés összefüggő fizikai blokkok tartománya, ami javítja a nagy fájlok teljesítményét és csökkenti a töredezettséget. Az ext4-ben egyetlen Extent akár 128 MiB egybefüggő területet is leképezhet 4 KiB-os blokkmérettel. Közvetlenül az inode-ban négy extent tárolható. Ha egy fájlhoz négynél több extent tartozik, a többi extent egy fában indexelve van. Visszafelé kompatibilitás Az ext4 visszafelé kompatibilis az ext3-mal és az ext2-vel, lehetővé téve az ext3 és az ext2 ext4-ként történő mountolását. Ez némileg javítja a teljesítményt, mivel az ext4 implementáció bizonyos új jellemzői az ext3 és ext2 esetén is használhatók, például az új blokkkiosztási algoritmus, anélkül, hogy a lemezen lévő formátumot befolyásolnák. ext3 részben előre kompatibilis az ext4-gyel. Gyakorlatilag az ext4 nem mountolódik ext3 fájlrendszerként a dobozból, hacsak bizonyos új funkciókat nem tiltunk le a létrehozásakor, mint például a ^extent
, ^flex_bg
, ^huge_file
, ^uninit_bg
, ^dir_nlink
és ^extra_isize
. Tartós előkiosztás Az ext4 képes előre kiosztani a lemezen lévő helyet egy fájl számára. Ehhez a legtöbb fájlrendszeren nullákat kellene írni a fájlba létrehozáskor. Az ext4-ben (és néhány más fájlrendszerben, például az XFS-ben) a fallocate()
, a Linux kernel új rendszerhívása használható. A kiosztott hely garantált és valószínűleg összefüggő lesz. Ennek a helyzetnek a média streaming és az adatbázisok esetében vannak alkalmazásai. Késleltetett kiosztás Az ext4 az allocate-on-flush, más néven késleltetett kiosztás nevű teljesítménytechnikát használja. Ez azt jelenti, hogy az ext4 késlelteti a blokkok kiosztását, amíg az adatok ki nem kerülnek a lemezre. (Ezzel szemben egyes fájlrendszerek azonnal kiosztják a blokkokat, még akkor is, ha az adatok az írási gyorsítótárba kerülnek). A késleltetett kiosztás javítja a teljesítményt és csökkenti a töredezettséget, mivel egyszerre nagyobb mennyiségű adatot rendel ki. Alkönyvtárak korlátlan száma Az ext4 nem korlátozza az alkönyvtárak számát egyetlen könyvtárban, kivéve magának a könyvtárnak az eredendő méretkorlátozását. (Az ext3-ban egy könyvtárnak legfeljebb 32 000 alkönyvtára lehet.) A nagyobb könyvtárak és a folyamatos teljesítmény lehetővé tétele érdekében az ext4 a Linux 2.6.23 és újabb verzióiban alapértelmezés szerint bekapcsolja a HTree indexeket (a B-fa egy speciális változata), ami lehetővé teszi, hogy a 2 szintű HTree indexben körülbelül 10-12 millió bejegyzésig terjedő könyvtárak tárolhatók legyenek, és 2 GB könyvtárméret-korlátozással 4 KiB blokkmérethez, a fájlnév hosszától függően. A Linux 4.12 és újabb verziókban a largedir
funkció lehetővé tette a 3 szintű HTree-t és a 2 GB feletti könyvtárméretet, ami körülbelül 6 milliárd bejegyzést tesz lehetővé egyetlen könyvtárban. Napló ellenőrző összegek Az ext4 ellenőrző összegeket használ a naplóban a megbízhatóság javítása érdekében, mivel a napló a lemez egyik leggyakrabban használt fájlja. Ennek a funkciónak van egy mellékhatása is: a naplózás során biztonságosan elkerülhető a lemezen történő I/O várakozás, ami némileg javítja a teljesítményt. A napló ellenőrző összegzését a Wisconsini Egyetem IRON fájlrendszerek című kutatási cikke ihlette (konkrétan a 6. szakasz, “tranzakció ellenőrző összegek”), az IRON fájlrendszer által végrehajtott összetett tranzakciók megvalósításán belüli módosításokkal (amelyet eredetileg Sam Naghshineh javasolt a RedHat csúcstalálkozón). Metaadatok ellenőrző összegzése A 2012-ben kiadott Linux kernel 3.5 óta Gyorsabb fájlrendszer-ellenőrzés Az ext4-ben a nem allokált blokkcsoportok és az inode-táblázat szakaszai megjelölik. Ez lehetővé teszi az e2fsck számára, hogy ezeket teljesen kihagyja, és jelentősen csökkenti a fájlrendszer ellenőrzésének idejét. A Linux 2.6.24 implementálja ezt a funkciót.
Multiblock allocator Amikor az ext3 egy fájlhoz csatol, meghívja a block allocator-t, minden blokkhoz egyszer. Következésképpen, ha több egyidejű író van, a fájlok könnyen töredezetté válhatnak a lemezen. Az ext4 azonban késleltetett kiosztást használ, ami lehetővé teszi az adatok pufferelését és a blokkcsoportok kiosztását. Következésképpen a többblokkos kiosztó jobb döntéseket tud hozni a fájlok összefüggő kiosztásáról a lemezen. A multiblock allokátor akkor is használható, ha a fájlokat O_DIRECT módban nyitják meg. Ez a funkció nem befolyásolja a lemez formátumát. Javított időbélyegzők Ahogy a számítógépek általában gyorsabbá válnak, és ahogy a Linuxot egyre gyakrabban használják kritikus alkalmazásokban, a másodperc alapú időbélyegek szemcsézettsége elégtelenné válik. Ennek megoldására az ext4 nanoszekundumokban mért időbélyegeket biztosít. Ezenkívül a kibővített időbélyegző mező 2 bitje hozzáadódik az időbélyegek másodperc mezőjének legjelentősebb bitjeihez, hogy további 408 évvel elhalassza a 2038-as év problémáját. Az ext4 támogatja a létrehozás idejére vonatkozó időbélyegeket is. De, ahogy Theodore Ts’o rámutat, míg könnyű hozzáadni egy extra létrehozási dátum mezőt az inode-hoz (így technikailag lehetővé téve ezen időbélyegek támogatását az ext4-ben), sokkal nehezebb módosítani vagy hozzáadni a szükséges rendszerhívásokat, mint például a stat() (ami valószínűleg új verziót igényel) és a különböző könyvtárakat, amelyek függnek tőlük (mint például a glibc). Ezek a változtatások sok projekt koordinációját igénylik. Ezért az ext4 által tárolt létrehozási dátum jelenleg csak a felhasználói programok számára érhető el Linuxon astatx()
API-n keresztül. Projektkvóták A projektkvóták támogatása a Linux kernel 4.4-ben 2016. január 8-án került bele. Ez a funkció lehetővé teszi a lemezkvóta-korlátok hozzárendelését egy adott projektazonosítóhoz. Egy fájl projekt azonosítója egy 32 bites szám, amelyet minden egyes fájlon tárolnak, és amelyet a hozzárendelt projekt azonosítóval rendelkező szülői könyvtár alatt létrehozott összes fájl és alkönyvtár örököl. Ez lehetővé teszi a kvótakorlátok hozzárendelését egy adott alkönyvtárfához, függetlenül a fájlhoz való hozzáférési engedélyektől, például az UID-től és GID-től függő felhasználói és projektkvótáktól. Bár ez hasonlít a könyvtárkvótához, a fő különbség az, hogy ugyanaz a projektazonosító több felső szintű könyvtárhoz is hozzárendelhető, és nem szigorúan hierarchikus. Átlátszó titkosítás Az átlátszó titkosítás támogatása a Linux kernel 4.1 2015 júniusában jelent meg. Lusta inicializálás A lazyinit funkció lehetővé teszi az inode táblák háttérben történő tisztítását, felgyorsítva ezzel az inicializálást új ext4 fájlrendszer létrehozásakor. A funkció 2010 óta elérhető a Linux kernel 2.6.37-es verziójában. Írásgátak Az ext4 alapértelmezés szerint engedélyezi az írásgátakat. Ez biztosítja, hogy a fájlrendszer metaadatai helyesen íródjanak és rendeződjenek a lemezre, még akkor is, ha az írási gyorsítótárak lemerülnek. Ez teljesítményköltséggel jár, különösen az olyan alkalmazások esetében, amelyek erősen használják az fsync-et, vagy sok kis fájlt hoznak létre és törölnek. Az akkumulátoros írási gyorsítótárral rendelkező lemezek esetében a korlátok letiltása (barrier=0 opció) biztonságosan javíthatja a teljesítményt.