Duży system plików System plików ext4 może obsługiwać woluminy o rozmiarach do 1 eksbajta (EiB) i pojedyncze pliki o rozmiarach do 16 tebibajtów (TiB) przy standardowym rozmiarze bloku 4 KiB. Maksymalne limity rozmiaru plików, katalogów i systemu plików rosną co najmniej proporcjonalnie z rozmiarem bloku systemu plików, aż do maksymalnego rozmiaru bloku 64 KiB dostępnego na procesorach ARM i PowerPC/Power ISA. Extents Extents zastępują tradycyjny schemat mapowania bloków używany przez ext2 i ext3. Zakres to szereg sąsiadujących ze sobą bloków fizycznych, co poprawia wydajność dużych plików i zmniejsza fragmentację. Pojedynczy zakres w ext4 może mapować do 128 MiB ciągłej przestrzeni o rozmiarze bloku 4 KiB. Bezpośrednio w węźle mogą być przechowywane cztery ekstenty. Gdy w pliku jest więcej niż cztery ekstenty, reszta ekstentów jest indeksowana w drzewie. Kompatybilność wsteczna ext4 jest kompatybilny wstecz z ext3 i ext2, umożliwiając montowanie ext3 i ext2 jako ext4. Poprawi to nieco wydajność, ponieważ niektóre nowe funkcje implementacji ext4 mogą być również używane z ext3 i ext2, takie jak nowy algorytm alokacji bloków, bez wpływu na format na dysku. ext3 jest częściowo kompatybilny z ext4. Praktycznie, ext4 nie będzie montowany jako system plików ext3 po wyjęciu z pudełka, chyba że pewne nowe funkcje zostaną wyłączone podczas jego tworzenia, takie jak ^extent
, ^flex_bg
, ^huge_file
, ^uninit_bg
, ^dir_nlink
i ^extra_isize
. Trwała prealokacja ext4 może prealokować miejsce na dysku dla pliku. Aby to zrobić w większości systemów plików, podczas tworzenia pliku zapisywane są do niego zera. W ext4 (i niektórych innych systemach plików takich jak XFS) fallocate()
, nowe wywołanie systemowe w jądrze Linuksa, może być użyte. Przydzielone miejsce byłoby gwarantowane i prawdopodobnie ciągłe. Sytuacja ta ma zastosowanie w strumieniowym przesyłaniu mediów i bazach danych. Opóźniona alokacja ext4 wykorzystuje technikę wydajnościową zwaną allocate-on-flush, znaną również jako opóźniona alokacja. Oznacza to, że ext4 opóźnia alokację bloków do czasu, aż dane zostaną przepłukane na dysk. (W przeciwieństwie do tego, niektóre systemy plików alokują bloki natychmiast, nawet gdy dane trafiają do pamięci podręcznej do zapisu). Opóźniona alokacja poprawia wydajność i zmniejsza fragmentację, efektywnie alokując większe ilości danych za jednym razem. Nieograniczona liczba podkatalogów ext4 nie ogranicza liczby podkatalogów w pojedynczym katalogu, z wyjątkiem nieodłącznego limitu rozmiaru samego katalogu. (W ext3 katalog może mieć co najwyżej 32 000 podkatalogów.) Aby umożliwić tworzenie większych katalogów i zachować wydajność, ext4 w Linuksie 2.6.23 i nowszych domyślnie włącza indeksy HTree (wyspecjalizowana wersja drzewa B), co pozwala na przechowywanie katalogów do około 10-12 milionów wpisów w 2-poziomowym indeksie HTree i limit rozmiaru katalogu 2 GB dla bloku o rozmiarze 4 KiB, w zależności od długości nazwy pliku. W Linuksie 4.12 i nowszych funkcja largedir
umożliwiała 3-poziomowe HTree i rozmiary katalogów powyżej 2 GB, pozwalając na około 6 miliardów wpisów w pojedynczym katalogu. Sumy kontrolne dziennika ext4 używa sum kontrolnych w dzienniku, aby zwiększyć niezawodność, ponieważ dziennik jest jednym z najczęściej używanych plików na dysku. Ta funkcja ma też dodatkową zaletę: pozwala uniknąć oczekiwania na operacje wejścia/wyjścia dysku podczas tworzenia dziennika, co nieznacznie poprawia wydajność. Sumowanie kontrolne dzienników zostało zainspirowane artykułem badawczym z University of Wisconsin, zatytułowanym IRON File Systems (konkretnie, sekcja 6, nazwana „transaction checksums”), z modyfikacjami w ramach implementacji transakcji złożonych wykonywanych przez system plików IRON (pierwotnie zaproponowanych przez Sama Naghshineha w szczycie RedHat). Metadata checksumming Since Linux kernel 3.5 released in 2012 Faster file-system checking In ext4 unallocated block groups and sections of the inode table are marked as such. Dzięki temu e2fsck może je całkowicie pominąć i znacznie skraca czas potrzebny na sprawdzenie systemu plików. Linux 2.6.24 implementuje tę cechę.
Alokator wieloblokowy Gdy ext3 dołącza do pliku, wywołuje alokator blokowy, raz dla każdego bloku. W konsekwencji, jeśli istnieje wielu współbieżnych pisarzy, pliki mogą łatwo ulec fragmentacji na dysku. Jednak ext4 używa alokacji opóźnionej, co pozwala na buforowanie danych i przydzielanie grup bloków. W związku z tym, alokator wieloblokowy może dokonywać lepszych wyborów dotyczących alokacji plików przylegających do siebie na dysku. Alokator wieloblokowy może być również używany, gdy pliki są otwierane w trybie O_DIRECT. Ta funkcja nie ma wpływu na format dysku. Ulepszone znaczniki czasu W miarę jak komputery stają się coraz szybsze, a Linux jest coraz częściej wykorzystywany do zastosowań krytycznych, ziarnistość znaczników czasu opartych na sekundach staje się niewystarczająca. Aby rozwiązać ten problem, ext4 dostarcza znaczniki czasu mierzone w nanosekundach. Dodatkowo, 2 bity rozszerzonego pola timestamp są dodawane do najbardziej znaczących bitów pola sekund w timestampach, aby odroczyć problem roku 2038 o dodatkowe 408 lat. ext4 dodaje także obsługę timestampów opartych na czasie utworzenia. Ale, jak zauważa Theodore Ts’o, podczas gdy łatwo jest dodać dodatkowe pole creation-date w inode (w ten sposób technicznie umożliwiając wsparcie dla tych znaczników czasu w ext4), trudniej jest zmodyfikować lub dodać niezbędne wywołania systemowe, takie jak stat() (które prawdopodobnie wymagałyby nowej wersji) i różne biblioteki, które od nich zależą (jak glibc). Zmiany te będą wymagały koordynacji wielu projektów. Dlatego data utworzenia przechowywana przez ext4 jest obecnie dostępna tylko dla programów użytkownika w Linuksie poprzez APIstatx()
. Kwoty projektowe Wsparcie dla kwot projektowych zostało dodane w jądrze Linux 4.4 w dniu 8 stycznia 2016 roku. Funkcja ta pozwala na przypisanie limitów kwot dyskowych do konkretnego identyfikatora projektu. Identyfikator projektu pliku jest 32-bitowym numerem przechowywanym na każdym pliku i jest dziedziczony przez wszystkie pliki i podkatalogi utworzone pod katalogiem nadrzędnym z przypisanym identyfikatorem projektu. Pozwala to na przypisanie limitów kwot do konkretnego drzewa podkatalogów niezależnie od uprawnień dostępu do pliku, takich jak kwoty użytkowników i projektów, które są zależne od UID i GID. Podczas gdy jest to podobne do kwot katalogowych, główna różnica polega na tym, że ten sam identyfikator projektu może być przypisany do wielu katalogów najwyższego poziomu i nie jest ściśle hierarchiczny. Przezroczyste szyfrowanie Obsługa przezroczystego szyfrowania została dodana w jądrze Linux 4.1 w czerwcu 2015 roku. Leniwa inicjalizacja Funkcja lazyinit pozwala na czyszczenie tablic inode w tle, przyspieszając inicjalizację podczas tworzenia nowego systemu plików ext4. Jest ona dostępna od 2010 roku w wersji 2.6.37 jądra Linuksa. Bariery zapisu ext4 domyślnie włącza bariery zapisu. Zapewnia to, że metadane systemu plików są poprawnie zapisywane i porządkowane na dysku, nawet gdy pamięci podręczne tracą moc. Wiąże się to z kosztami wydajności, szczególnie dla aplikacji, które intensywnie korzystają z fsync lub tworzą i usuwają wiele małych plików. W przypadku dysków z podtrzymywaną bateryjnie pamięcią podręczną, wyłączenie barier (opcja 'barrier=0′) może bezpiecznie poprawić wydajność.