wew2 - ext2
Deweloper(zy) | Karta Remy |
---|---|
Pełne imię i nazwisko | Drugi rozszerzony system plików |
Wprowadzono | Styczeń 1993 z Linuksem |
Identyfikator partycji |
Apple_UNIX_SVR2 ( Apple Partition Map ) 0x83 ( Główny rekord rozruchowy ) EBD0A0A2-B9E5-4433-87C0-68B6B72699C7 ( GPT ) |
Struktury | |
Zawartość katalogu | Stół |
Przydział plików | bitmapa (wolne miejsce), tabela (metadane) |
Złe bloki | Stół |
Limity | |
Maks. wielkość woluminu | 2-32 TiB |
Maks. rozmiar pliku | 16 GiB – 2 TiB |
Maks. liczba plików | 10 18 |
Maks. długość nazwy pliku | 255 bajtów |
Dozwolone znaki w nazwach plików | Wszystkie bajty z wyjątkiem NUL ('\0') i '/' |
Cechy | |
Daty zarejestrowania | modyfikacja (mtime), modyfikacja atrybutu (ctime), dostęp (atime) |
Zakres dat | 14 grudnia 1901 - 18 stycznia 2038 |
Rozdzielczość daty | 1 s |
Uprawnienia systemu plików | POSIX |
Przezroczysta kompresja | Nie (dostępne poprzez poprawki) |
Przejrzyste szyfrowanie | Nie |
Inne | |
Obsługiwane systemy operacyjne | Linux , BSD , ReactOS , Windows (za pośrednictwem IFS ), macOS (za pośrednictwem IFS ) |
Ext2 lub drugi rozszerzony system plików jest system plików dla systemu Linux kernel . Został pierwotnie zaprojektowany przez francuskiego programistę Rémy Card jako zamiennik dla rozszerzonego systemu plików (ext). Zaprojektowany zgodnie z tymi samymi zasadami, co Berkeley Fast File System firmy BSD , był pierwszym komercyjnym systemem plików dla Linuksa.
Kanoniczną implementacją ext2 jest sterownik systemu plików "ext2fs" w jądrze Linuksa. Inne implementacje (o różnej jakości i kompletności) istnieją w GNU Hurd , MINIX 3 , niektórych jądrach BSD , w MiNT oraz jako sterowniki innych firm Microsoft Windows i macOS .
ext2 był domyślnym systemem plików w kilku dystrybucjach Linuksa , w tym w Debianie i Red Hat Linux , dopóki nie został wyparty przez ext3 , który jest prawie całkowicie kompatybilny z ext2 i jest systemem plików z dziennikiem . ext2 jest nadal preferowanym systemem plików dla nośników pamięci flash (takich jak karty SD i dyski flash USB ), ponieważ brak dziennika zwiększa wydajność i minimalizuje liczbę zapisów, a urządzenia flash mogą wytrzymać ograniczoną liczbę cykli zapisu. Od 2009 r. jądro Linuksa obsługuje tryb ext4 bez dziennika, który zapewnia korzyści niespotykane w ext2, takie jak większe rozmiary plików i woluminów.
Historia
Wczesny rozwój jądra Linuksa powstał jako cross-development pod systemem operacyjnym MINIX . System plików MINIX był używany jako pierwszy system plików Linuksa. System plików Minix był w większości wolny od błędów , ale używał wewnętrznie 16-bitowych przesunięć i dlatego miał maksymalny limit rozmiaru wynoszący tylko 64 megabajty , a także istniał limit długości nazwy pliku wynoszący 14 znaków. Z powodu tych ograniczeń rozpoczęto prace nad zastępczym macierzystym systemem plików dla systemu Linux.
Aby ułatwić dodawanie nowych systemów plików i zapewnić ogólny plik API , VFS , warstwa wirtualny system plików został dodany do jądra Linux. Rozszerzony system plików ( ext ) został wydany w kwietniu 1992 roku jako pierwszy system plików używający API VFS i został dołączony do systemu Linux w wersji 0.96c. System plików ext rozwiązał dwa główne problemy w systemie plików Minix (maksymalny rozmiar partycji i ograniczenie długości nazwy pliku do 14 znaków) i pozwolił na 2 gigabajty danych i nazwy plików o długości do 255 znaków. Ale nadal miał problemy: nie było obsługi oddzielnych znaczników czasu dla dostępu do plików, modyfikacji i- węzła i modyfikacji danych.
Jako rozwiązanie tych problemów, w styczniu 1993 roku opracowano dwa nowe systemy plików dla jądra Linuksa 0.99: xiafs i drugi rozszerzony system plików ( ext2 ), który był przeróbką rozszerzonego systemu plików, zawierającym wiele pomysłów z Berkeley Fast File System . ext2 został również zaprojektowany z myślą o rozszerzalności, pozostawiając miejsce w wielu strukturach danych na dysku do wykorzystania w przyszłych wersjach.
Od tego czasu ext2 jest platformą testową dla wielu nowych rozszerzeń API VFS. Funkcje takie jak wycofana propozycja projektu ACL POSIX i wycofana propozycja rozszerzonych atrybutów były generalnie implementowane najpierw na ext2, ponieważ było stosunkowo proste do rozszerzenia, a jego elementy wewnętrzne były dobrze zrozumiane.
W jądrach Linuksa starszych niż 2.6.17 ograniczenia w sterowniku blokowym oznaczają, że systemy plików ext2 mają maksymalny rozmiar pliku 2 TiB.
ext2 jest nadal zalecany zamiast rejestrowania systemów plików na rozruchowych dyskach flash USB i innych dyskach SSD . ext2 wykonuje mniej zapisów niż ext3, ponieważ nie ma księgowania. Ponieważ głównym czynnikiem starzenia się chipu flash jest liczba cykli kasowania, a cykle kasowania zdarzają się często podczas zapisu, zmniejszający się zapis wydłuża żywotność urządzenia półprzewodnikowego. Inną dobrą praktyką dla systemów plików na urządzeniach flash jest użycie opcji montowania bez atime , z tego samego powodu.
struktury danych ext2
Przestrzeń w ext2 jest podzielona na bloki . Bloki te są pogrupowane w grupy bloków, analogicznie do grup cylindrów w systemie plików Unix . W dużym systemie plików są zazwyczaj tysiące bloków. Tam, gdzie to możliwe, dane dla dowolnego pliku są zazwyczaj zawarte w pojedynczej grupie bloków. Ma to na celu zminimalizowanie liczby wyszukiwań dysku podczas odczytu dużych ilości ciągłych danych.
Każda grupa bloków zawiera kopię superbloku i tablicy deskryptorów grupy bloków, a wszystkie grupy bloków zawierają bitmapę bloku, bitmapę i-węzłów, tablicę i-węzłów i na koniec rzeczywiste bloki danych.
Superblok zawiera ważne informacje, które są kluczowe dla uruchomienia systemu operacyjnego . W ten sposób kopie zapasowe są tworzone w wielu grupach bloków w systemie plików. Jednak zazwyczaj podczas uruchamiania jest używana tylko pierwsza jego kopia, która znajduje się w pierwszym bloku systemu plików.
Deskryptor grupy przechowuje położenie mapy bitowej bloku, bitmapy i-węzłów oraz początek tablicy i-węzłów dla każdej grupy bloków. Te z kolei są przechowywane w tablicy deskryptorów grup.
i-węzły
Każdy plik lub katalog jest reprezentowany przez i-węzeł. Termin „i-węzeł” pochodzi od „węzła indeksu” (z czasem stał się i-węzłem, a następnie i-węzłem). I-węzeł zawiera dane dotyczące rozmiaru, uprawnień, własności i lokalizacji na dysku pliku lub katalogu.
Przykład struktury i-węzła ext2:
Cytat z dokumentacji jądra Linux dla ext2:
„Istnieją wskaźniki do pierwszych 12 bloków, które zawierają dane pliku w i-węźle. Jest wskaźnik do bloku pośredniego (zawierającego wskaźniki do następnego zestawu bloków), wskaźnik do bloku podwójnie pośredniego i wskaźnik do bloku potrójnie pośredni blok."
Tak więc istnieje struktura w ext2, która ma 15 wskaźników. Wskaźniki od 1 do 12 wskazują na bloki bezpośrednie, wskaźnik 13 wskazuje na blok pośredni, wskaźnik 14 wskazuje na blok podwójnie pośredni, a wskaźnik 15 wskazuje na blok potrójnie pośredni.
Katalogi
Każdy katalog to lista wpisów katalogu. Każdy wpis w katalogu kojarzy jedną nazwę pliku z jednym numerem i-węzła i składa się z numeru i-węzła, długości nazwy pliku oraz rzeczywistego tekstu nazwy pliku. Aby znaleźć plik, katalog jest przeszukiwany od przodu do tyłu w poszukiwaniu powiązanej nazwy pliku. W przypadku rozsądnych rozmiarów katalogów jest to w porządku. Ale w przypadku bardzo dużych katalogów jest to nieefektywne, a ext3 oferuje drugi sposób przechowywania katalogów ( HTree ), który jest bardziej wydajny niż tylko lista nazw plików.
Katalog główny jest zawsze przechowywany w i-węźle numer dwa, aby kod systemu plików mógł go znaleźć w czasie montowania. Podkatalogi są realizowane poprzez przechowywanie nazwy podkatalogu w polu name, a numeru i-węzła podkatalogu w polu i-węzła. Dowiązania twarde są implementowane przez przechowywanie tego samego numeru i-węzła z więcej niż jedną nazwą pliku. Dostęp do pliku przez dowolną nazwę skutkuje tym samym numerem i-węzła, a zatem tymi samymi danymi.
Specjalne katalogi „.” (katalog bieżący) i ".." (katalog nadrzędny) są implementowane przez przechowywanie nazw "." i ".." w katalogu oraz numer i-węzła katalogu bieżącego i nadrzędnego w polu i-węzła. Jedynym specjalnym traktowaniem, jakie otrzymują te dwa wpisy, jest to, że są one tworzone automatycznie po utworzeniu nowego katalogu i nie można ich usunąć.
Przydzielam dane
Kiedy tworzony jest nowy plik lub katalog, ext2 musi zdecydować, gdzie przechowywać dane. Jeśli dysk jest w większości pusty, dane można przechowywać prawie wszędzie. Jednak grupowanie danych z powiązanymi danymi zminimalizuje czas wyszukiwania i zmaksymalizuje wydajność.
ext2 próbuje przydzielić każdy nowy katalog w grupie zawierającej jego katalog nadrzędny, zgodnie z teorią, że dostęp do katalogów nadrzędnych i potomnych jest prawdopodobnie blisko spokrewniony. ext2 próbuje również umieścić pliki w tej samej grupie, co ich wpisy w katalogach, ponieważ dostęp do katalogów często prowadzi do dostępu do plików. Jeśli jednak grupa jest pełna, nowy plik lub nowy katalog jest umieszczany w innej niepełnej grupie.
Bloki danych potrzebne do przechowywania katalogów i plików można znaleźć, przeglądając bitmapę alokacji danych. Wszelkie potrzebne miejsce w tabeli i-węzłów można znaleźć, przeglądając bitmapę alokacji i-węzłów.
Ograniczenia systemu plików
Rozmiar bloku: | 1 KiB | 2 KiB | 4 KiB | 8 KiB |
---|---|---|---|---|
max. rozmiar pliku: | 16 GiB | 256 GiB | 2 TiB | 2 TiB |
max. rozmiar systemu plików: | 4 TiB | 8 TiB | 16 TiB | 32 TiB |
Powodem pewnych ograniczeń ext2 jest format pliku danych i jądro systemu operacyjnego. Przeważnie te czynniki zostaną określone raz podczas budowania systemu plików. Zależą od rozmiaru bloku i stosunku liczby bloków i i-węzłów. W Linuksie rozmiar bloku jest ograniczony przez rozmiar strony architektury .
Istnieją również programy działające w przestrzeni użytkownika, które nie obsługują plików większych niż 2 GiB .
Jeśli b jest rozmiarem bloku, maksymalny rozmiar pliku jest ograniczony do min( (( b /4) 3 + ( b /4) 2 + b /4 + 12) × b , (2 32 − 1) × 512 ) do struktury i_block (tablica bezpośrednich/pośrednich EXT2_N_BLOCKS) oraz i_blocks (32-bitowa wartość całkowita) reprezentująca liczbę 512-bajtowych „bloków” w pliku.
Maksymalna liczba katalogów podpoziomów to 31998, ze względu na limit liczby łączy. Indeksowanie katalogów nie jest dostępne w ext2, więc występują problemy z wydajnością dla katalogów z dużą liczbą plików (>10 000). Teoretyczny limit liczby plików w katalogu wynosi 1,3 × 10 20 , chociaż nie ma to zastosowania w praktycznych sytuacjach.
Uwaga: W systemie Linux 2.4 i wcześniejszych urządzenia blokowe były ograniczone do 2 TiB, ograniczając maksymalny rozmiar partycji, niezależnie od rozmiaru bloku.
Rozszerzenie kompresji
e2compr to modyfikacja sterownika ext2 w jądrze Linuksa do obsługi kompresji i dekompresji plików przez system plików, bez żadnej obsługi przez aplikacje użytkownika. e2compr to mała łatka przeciwko ext2.
e2compr kompresuje tylko zwykłe pliki; dane administracyjne (superblok, i-węzły, pliki katalogów itp.) nie są kompresowane (głównie ze względów bezpieczeństwa). Dostęp do skompresowanych bloków jest zapewniony dla operacji odczytu i zapisu. Algorytm kompresji i rozmiar klastra jest określony na podstawie na plik. Katalogi można również oznaczyć do kompresji, w którym to przypadku każdy nowo utworzony plik w katalogu zostanie automatycznie skompresowany z tym samym rozmiarem klastra i tym samym algorytmem, który został określony dla katalogu.
e2compr nie jest nowym systemem plików. Jest to tylko łatka do ext2 stworzona do obsługi flagi EXT2_COMPR_FL. Nie wymaga od użytkownika tworzenia nowej partycji i będzie kontynuował odczytywanie lub zapisywanie istniejących systemów plików ext2. Można to uznać po prostu za sposób, w jaki procedury odczytu i zapisu uzyskują dostęp do plików, które mogły zostać utworzone za pomocą prostego narzędzia podobnego do gzip lub kompresji. Skompresowane i nieskompresowane pliki dobrze współistnieją na partycjach ext2.
Najnowsza gałąź e2compr jest dostępna dla bieżących wersji Linuksa 2.4, 2.6 i 3.0. Najnowsza poprawka dla systemu Linux 3.0 została wydana w sierpniu 2011 r. i zapewnia obsługę wielu rdzeni i dużej ilości pamięci . Istnieją również gałęzie dla Linuksa 2.0 i 2.2.
W innych systemach operacyjnych
Dostęp do partycji ext2 w systemie Microsoft Windows jest możliwy poprzez instalowalny system plików , taki jak ext2ifs lub ext2Fsd . System plików w przestrzeni użytkownika może być używany w systemie macOS.
Zobacz też
- e2fsprogs
- StegFS – steganograficzny system plików oparty na ext2
- klops
- Lista systemów plików
- Porównanie systemów plików
- Alokator bloków Orlov , Linux Kernel - określony domyślny alokator bloków dla ext2.
Bibliografia
Uwagi
- Karta, Remy. & Ts'o, Teodor. & Tweedie, Stephen (1994). "Projekt i implementacja drugiego rozszerzonego systemu plików" . Materiały z Pierwszego Międzynarodowego Sympozjum Holenderskiego poświęconego Linuksowi . Numer ISBN 90-367-0385-9.CS1 maint: używa parametru autorów ( link )
- Projekt e2compr Sourceforge
- Dokumentacja Sourceforge e2compr
- Strona projektu Sourceforge e3compr, kompresja ext3, alfa
- Biuletyn dotyczący kompresji danych Dr. Dobb, numer 46, wrzesień 2003 r.
Dalsza lektura
-
Johna Newbigina. "Specyfikacja Johna drugiego rozszerzonego systemu plików" . Cytowanie dziennika wymaga
|journal=
( pomoc ) -
Dave Poirier (2009). „Drugi rozszerzony system plików: układ wewnętrzny” . Cytowanie dziennika wymaga
|journal=
( pomoc ) - Teodor Ts'o; Stephen Tweedie (czerwiec 2002). „Planowane rozszerzenia systemu plików Linux Ext2/Ext3” . USENIX 2002 Doroczna Konferencja Techniczna .
- Larry Ayers (czerwiec 1997). „E2compr: przezroczysta kompresja plików dla systemu Linux” . Gazeta Linuksowa (18). Zarchiwizowane z oryginału w dniu 2009-11-17.
-
Karola Konga; Jeremy H. Browna (1997-12-26). „System przejrzystej kompresji plików z buforowaniem w systemie Linux”. CiteSeerX 10.1.1.1.51.4780 . Cytowanie dziennika wymaga
|journal=
( pomoc ) -
Karola Konga; Jeremy H. Browna (1997-10-22). „Ankieta nowoczesnych technik kompresji plików”. CiteSeerX 10.1.1.50.9847 . Cytowanie dziennika wymaga
|journal=
( pomoc )
Linki zewnętrzne
- ext2fs narzędzia przestrzeni użytkownika
- Ext2Fsd GPL ext2/ext3 sterownik systemu plików dla Windows 2000/XP/2003/VISTA/2008 (opensource, obsługuje odczyt i zapis, współpracuje z FreeOTFE)