Ext4

Z Wiki XperiaSite.pl
Skocz do: nawigacja, szukaj
Twórca Mingming Cao, Andreas Dilger, Alex Zhuravlev (Tomas), Dave Kleikamp, Theodore Ts'o, Eric Sandeen, Sam Naghshineh i inni
Identyfikator 0x83 (MBR)
EBD0A0A2-B9E5-4433-87C0-68B6B72699C7 (GPT Windows)
FC63DAF-8483-4772-8E79-3D69D8477DE4 (GPT Linux)
Struktura
Zawartość katalogów Lsta, Hashowane drzewko B+
Przydział plików Stopień, bitmapa
Bad blocks Tablica
Limity
Maksymalna wielkość wolumenu 1 EB
16 TB (rekomendowane)
Maksymalna wielkość pliku 16 TB
Maksymalna liczba plików 4 biliony
Maksymalna długość nazw 255 bajtów
Dopuszczalne znaki w nazwach Wszystkie poza / oraz NUL
. i .. są wykorzystywane w nazwach specjalnych
Cechy
Zapisywane daty Stworzenia (crtime), modyfikacji (mtime), modyfikacji atrybutu (ctime), usunięcia (dtime) oraz dostępu (atime)
Rozpiętość czasowa dat 14 grudnia 1901 - 10 maja 2446
Minimalna jednostka czasu Nanosekunda
Typ zezwalania na dostęp POSIX
Atrybuty acl, bh, bsddf, commit=nrsec, data=journal, data=ordered, data=writeback, delalloc, extents, journal_dev, mballoc, minixdf, noacl, nobh, nodelalloc, noextents, nomballoc, nouser_xattr, oldalloc, orlov, user_xattr
Jawna kompresja Nie
Jawne szyfrowania Tak
Duplikaty danych Nie
Inne
Wspierane systemy Linux
FreeBSD (tylko odczyt)
OS X (zapis z ExtFS)
Windows (z ext2fsd)
KalibriOS (tylko odczyt)

Extended file system, a dokładniej Fourth extended file system to system plików stworzony jako następca ext dla lepszej kontroli plików w systemach UNIX (głównie Linux i pochodnych).


Historia

ext4 powstał jako seria dodatków wstecznie kompatybilnych z ext3. Wiele z nich było stworzone dla sytemu plików Lustre pozwalając na zwiększenie limitu wielkości wolumenów i poprawiając wydajność.

Twórcy kernela Linuxa nie zgodzili się na ich implementację w ext3 obawiając się problemów ze stabilnością i zaproponowali fork kodu źródłowego ext3 i stworzenie nowego systemu plików o nazwie ext4. Propozycja została przyjęta i 28 czerwca 2008 ogłoszono plany rozwoju nowego systemu plików.

Pierwsza wersja systemu dołączona została do kernela w wersji 2.6.19, a już 11 października 2008 stabilny kod pojawił się w kodzie wersji 2.6.28, która swoją premierę miała 25 grudnia tego samego roku.

Od 15 stycznia 2010 roku system ten wykorzystywany jest także w urządzeniach z systemem Android (od wersji 2.3, choć zależy to od producenta, Xperie 2011 dalej korzystają z YAFFS2).

Możliwości

Wielkość wolumenów

ext4 wspiera ogromne partycje do 1 EB wielkości z plikami mogącymi sięgać 16 TB. Jednakże zaleca się korzystanie z maksymalnie 100 TB wolumenów, a nawet nie większych niż 16 TB.

Extent

ext4 zamiast tradycyjnego mapowania bloków korzysta z ekstentów pozwalających na mapowanie do 128 MB ciągłej przestrzeni korzystając z bloku o wielkości 4 KB. Na każdy węzeł inode przypaść mogą cztery ekstenty. Jeśli plik zajmuje więcej niż cztery, to reszta ekstentów nie jest indeksowana.

Wsteczna kompatybilność

Wszystkie zmiany wprowadzane przez ext4 są wstecznie kompatybilne ze starszą wersją, a więc osoby chcące (i potrafiące) mogą korzystać z systemu plików ext3, który będzie posiadał wszystkie udogodnienia systemu ext4. Sam system jest na tyle kompatybilny, że istnieje możliwość zamontowania partycji ext2 lub ext3 jako ext4, co przynosi lekką poprawę wydajności.

Także ext3 jest kompatybilne z ext4, ale nie na tyle aby móc zamontować ext4 jako ext3. Jendakże jest to możliwe korzystając z flag -O narzędzia mke2fs wyłączających nowe funkcje przynoszone przez ext4. Te flagi to ^extent, ^flex_bg, ^huge_file, ^uninit_bg, ^dir_nlink, ^extra_isize.

Przydział pamięci

Jak inne systemy, także ext4 potrafi zarezerwować miejsce na dysku dla pliku. Jednak nie robi tego poprzez wcześniejsze zapisanie obszaru zerami, a korzysta z funkcji kernela Linuxa zwanej fallocate(), które po prostu rezerwuje dany obszar pamięci i gwarantuje jego "pustość".

Opcja ta jest przydatna podczas streamu mediów i dla aplikacji baz danych.

Opóźniony przydział

Dodatkowo wykorzystywane jest opóźnienie w przydziale bloków (technika zwana allocate-on-flush) do momentu ostatecznego zapisu danych, zamiast ciągłego zapisywania w trakcie kolejnych edycji cache danych. Polepsza to wydajność pamięci i zmniejsza jej fragmentację.

Nielimitowana liczba podkatalogów

W przeciwieństwie do ext3, gdzie liczba podkatalogów mogła wynieść maksymalnie 32 tysiące, ext4 nie ma żadnego ich limitu. Aby to było możliwe, po przekroczeniu liczby 23 tysięcy podkatalogów ext4 uruchamia zmodyfikowaną wersję drzewka B-tree zwaną indeksem HTree (może zostać ona włączona także w ext3).

Sumy kontrolne journali

Sumy kontrolne poprawia niezawodności, jako że journal jest najczęściej wykorzystywanym plikiem na dysku. Dodatkowo pozwala to na pominięcie oczekiwania na działanie I/O dysku znacznie poprawiając wydajność.

Pomysł został wzięty z pracy badawczej Uniwersytetu Wisconsin nazwanej IRON File Systems na temat planowanego systemu plików IRON.

Sumy kontrolne metadanych

Od kernela w wersji 3.16.

Szybsze testowanie systemu plików

Niewykorzystane grupy i sekcje węzła inode są oznaczone jako niewykorzystane co pozwala narzędziu e2fcsk je pominąć i skraca czas testowania wolumenu.

Opcja ta jest zaimplementowana kernelu od wersji 2.6.24.

Alokator wielu bloków

W systemie ext3 każdy blok posiada własny alokator, a więc, gdy kilka z nich pracuje w tym samym momencie łatwo może dojść do fragmentacji danych.

Ext4 dzięki opcji opóźnionego przydziału pozwala na wykorzystanie jednego alokatora dla kilku bloków.

Poprawione znaczniki czasu

Wraz z rozwojem komputerów i technologii, system Linux wykorzystywany jest w ważnych misjach, gdzie czas jest wartością krytyczną. Z tego powodu wraz z systemem plików ext4 czas mierzony jest już na poziomie nanosekund. Dodane zostały także 2 bajty do pola czasowego, które pozwalają na odsunięcie problemu roku 2038 o 408 lat.

Limitacje

Wg głównego programisty systemów ext3 i ext4, Theorore'a Ts'o, system ext, a więc i ext4, mają znaczne limitacje powodowane przez starszą technologię i ext4, choć przynosi wiele nowości, także jest przestarzały. Wg niego najlepszym kierunkiem rozwoju jest system btrfs.

Opóźniony przydział a utrata danych

Utrata zasilania lub zawieszenie się systemu może spowodować utratę niezapisanych danych. Opóźnienie przydziału miejsca może spowodować brak zapisania wcześniej już "zapisanych" przez użytkownika danych. Z tego powodu wraz z kernelem 2.6.30 (poźniej backportowany do 2.6.28 i 2.6.29) pojawił się patch, który w takim wypadku wymusza działanie przydziału (podobne jak w systemie plików ext3). Pozwala to na wymuszenie natychmiastowego zapisu danych, w zamian za niewielki koszt wydajności.

Flaga noauto_da_alloc pozwala tę opcję wyłączyć.