ext4

Z Wikipedii, wolnej encyklopedii

ext4 (ang. Fourth Extended File System) – czwarta wersja rozszerzonego systemu plików, następca ext3. Obecnie jeden z najpopularniejszych systemów plików dla Linuksa. Obecny jest w źródłach Linuksa od wersji 2.6.19. Od wersji jądra 2.6.28, wydanego 25 grudnia 2008 roku, uznany za stabilny.

Historia[edytuj | edytuj kod]

ext4 powstał jako seria wstecznie kompatybilnych rozszerzeń do ext3. Wiele z nich, oryginalnie rozwijanych przez Cluster File Systems dla systemu plików Lustre w latach 2003–2006, miało rozszerzać limity pojemności oraz dodawać poprawki wydajności. Developerzy jądra Linux sprzeciwili się jednak zaakceptowaniu rozszerzeń do ext3 ze względów na stabilność i zaproponowali zforkowanie kodu źródłowego ext3, a następnie przeniesienie rozwoju do nowej gałęzi ext4. Miało to umożliwić rozwój bez wpływu na dotychczasowych użytkowników ext3. Propozycja ta została zaakceptowana i 28 czerwca 2006 Theodore Ts’o, opiekun ext3, ogłosił nowy plan rozwoju ext4.

Wstępna wersja rozwojowa ext4 została włączona do wersji 2.6.19 jądra Linux. 11 października 2008, kod ext4, oznaczony już jako stabilny, został włączony do repozytoriów jądra Linux w wersji 2.6.28. Jądro 2.6.28, zawierające system plików ext4, zostało wydane 25 grudnia 2008. 15 stycznia 2010 Google ogłosiło zamiar aktualizacji swojej infrastruktury przechowywania danych z ext2 do ext4. 14 grudnia 2010 ogłoszono również, że ext4 będzie używany również zamiast YAFFS w systemie Android z serii 2.3.

Własności[edytuj | edytuj kod]

większe limity rozmiaru

Umożliwia obsługę woluminów do 1 eksbibajta (EiB). Wielkość pojedynczego pliku nie może przekraczać 16 tebibajtów (TiB)[1].

obsługa extents

Za pomocą mechanizmu extents zmieniona została filozofia organizacji bloków, w których przechowywany jest plik na dysku. W systemie ext4 pliki przechowywane są w ciągłym zbiorze bloków, nazywanym extent. W i-węźle przechowywane mogą być maksymalnie 4 informacje o extent, a każdy taki zbiór może zawierać maksymalnie 128 MiB przy rozmiarze bloku 4kiB (przy większym rozmiarze pliku używane jest pośrednie adresowanie). Dane te są przechowywane zamiast wskaźników do bloków.

prealokacja

System plików z włączoną obsługą extents może realizować prealokację bloków należących do pliku. Aby z niej skorzystać program użytkownika musi użyć funkcji fallocate() informującej system plików jaki rozmiar należy zablokować. Algorytm alokacji bloków uwzględnia to, że powinny być one ciągłe.

opóźniona alokacja

System plików pozwala na alokację opóźnioną (allocate-on-flush), pozwalającą na zaalokowanie bloków dopiero w trakcie zapisu całego pliku na dysku. Stosując tę technikę, jądro zapisuje plik na dysku dopiero podczas zapisywania brudnych buforów, lub gdy program użytkownika wywoła funkcję fsync().

kompatybilność wsteczna

ext4 jest wstecznie kompatybilny z ext3 oraz ext2, co pozwala na zamontowanie ext3 oraz ext2 jako ext4. Pozwala to nieznacznie poprawić wydajność ponieważ niektóre z nowych funkcji ext4, jak na przykład nowy algorytm alokacji bloków, mogą być również użyte z ext3 oraz ext2. ext3 jest częściowo kompatybilny wprzód z ext4, co oznacza że ext4 może być zamontowany jako ext3 (używając „ext3” jako system plików podczas montowania). Jednak jeżeli partycja ext4 używa extents (głównej nowej funkcji ext4), wtedy nie ma możliwości zamontowania jako ext3.

zwiększona liczba obsługiwanych podfolderów

W systemie ext3 katalog może posiadać maksymalnie 31 998 podkatalogów. W ext4 limit ten został usunięty[2].

Struktura[edytuj | edytuj kod]

Wstęp[edytuj | edytuj kod]

Ext4 dzieli urządzenie magazynujące na serie grup blokowych. By zmniejszyć trudności związane z wydajnością w wyniku fragmentacji alokator blokowy stara się utrzymać bloki każdego pliku w tej samej grupie, by skrócić czas wyszukiwania.

Blok[edytuj | edytuj kod]

Ext4 przydziela pamięć w jednostce zwanej „blokiem”. Blok to grupa sektorów między 1kB a 64 kB (domyślnie 4kB), gdzie liczba sektorów musi być potęgą liczby 2. Bloki z kolei są pogrupowane w większe jednostki zwane grupami bloków. Rozmiar bloku jest określany w czasie zakładania systemu plików poleceniem mkfs. Domyślnie system plików może zawierać 232 bloków, chyba że funkcja „64-bitowa” jest włączona, to system plików może mieć 264 bloków.

Układ grupy bloków[edytuj | edytuj kod]

Poniżej układ grupy bloków w oparciu o Grupę 0

Przesunięcie Grupy 0 Super blok Grupa deskryptorów Zarezerwowane bloki na grupę deskryptorów Bitmapa bloku danych Bitmapa i-węzłów Tablica i-węzłów Bloki danych
1024 bajty 1 blok kilka bloków kilka bloków 1 blok 1 blok kilka bloków pozostałe bloki w grupie

Przesunięcie Grupy 0 – służy do specjalnych zastosowań. Pierwsze 1024 bajty są nieużywane, pozwalając na instalację sektorów bootujących dla x86.

Super blok – przechowuje różne informacje o swoim systemie plików, takie jak liczba bloków, liczba i-węzłów, wspierane funkcje, informacje statystyczne.

Zobacz też[edytuj | edytuj kod]

Przypisy[edytuj | edytuj kod]

  1. Roderick W. Smith, Migrating to ext4. Preparing for the newest Linux file system [online], www.ibm.com [dostęp 2011-12-27] [zarchiwizowane z adresu 2013-10-10] (ang.).
  2. Ext4. kernelnewbies.org. [dostęp 2016-05-30]. (ang.).

Linki zewnętrzne[edytuj | edytuj kod]