Zmiany między systemami plików ext2 i ext3

System plików XFS

Opracowała:
Magdalena Włodarczyk

Spis treści:


System plików ext3

Ext3 – wprowadzenie

System plików Ext3 jak sama nazwa wskazuje wywodzi się od systemu plików Ext2. Jego twórca był Stephen Tweedie oraz jego zespół. Stephen Tweedie był jednym z twórców Ext2. Pierwszy sterownik do Ext3 pojawił się w jądrze 2.4.16 . Jego twórcom w czasie pracy nad Ext3 przyświecały dwa cele:

  1. Aby był on jak najbardziej to możliwe kompatybilny ze swoim poprzednikiem Ext2.
  2. Aby był on nowoczesnym systemem plików z kronikowaniem.

Kompatybilność

Ponieważ Ext2 był bardzo cenionym i lubianym systemem plików przez użytkowników postanowiono, że nowy system plików Ext3 będzie o ile to tylko możliwe podobny do swego poprzednika. W rzeczywistości jeśli do Ext2 dodamy moduł odpowiedzialny za kronikowanie, to system plików możemy zamontować jako Ext3. Kompatybilność ta działa w obydwie strony, czyli Ext3 także możemy zamontować jako Ext2, o ile w system został poprawnie odmontowany i nie doszło do awarii.

Ogólna idea kronikowania

Kronikowanie, inaczej nazywane księgowaniem lub dziennikowaniem (ang. journaling) jest to taka funkcja systemu plików, która zapisuje operacje zlecone systemowi plików, ale jeszcze nie dokończone w specjalnym pliku nazywanym dziennikiem (ang. journal). Dzięki dziennikowi system jest w stanie w bardzo krótkim czasie powrócić do stanu spójnego po awarii. Kronikowanie nie zapewnia jednak, że pewne dane nie zostaną utracone. Czas działania naprawy systemu po awarii w przypadku systemów z kronikowaniem nie zależy od wielkości partycji, co jest szczególnie istotne dla dużych dysków. Awaria z punktu widzenia systemu plików może się wydarzyć w dwóch momentach. System plików przechowuje nie tylko informacje o danych w zwykłych plikach, ale także informację o strukturze plików i systemu plików. Te drugie nazywamy metadanymi. Jeśli system ulegnie awarii po zapisaniu zmian do dziennika, a przed zmianami w metadanych to po ponownym uruchomieniu systemów, system w bardzo krótkim czasie (od kilku do kilkunastu sekund ) przejdzie w stan spójności, dzięki informacjom zapisanym w dzienniku.(transakcja pełna) Jeżeli natomiast do awarii dojdzie po modyfikacji danych a przed zapisaniem zmian do dziennika to zmiany te nie są brane pod uwagę przy ponownym uruchamianiu systemu.(transakcja niepełna).Transakcje pozwalają traktować operacje zapisu, tworzenia lub usuwania katalogu w sposób atomowy, które normalnie atomowe nie są. Transakcje działają w sposób analogiczny jak w systemach bazodanowych. Nanoszą one do dziennika pełne operacje.

Rozróżniamy dwa podstawowe typy kronikowania:

Inne systemy plików poza Ext3, korzystające z kronikowania to:

Co może się wydarzyć w systemie plików bez księgowania?

W przypadku systemów plików bez dziennika (przykładem jest poprzednik Ext3 -system plików Ext2)aby przywrócić spójność po nagłej awarii, trzeba uruchamiać specjalny program poprawiający błędne wpisy. W systemie Ext2 jest to automatycznie uruchamiany program fsck, który przy dużej powierzchni dysków może działać długo, ale bez niego w przypadku pozostawienia błędów w strukturze plików będą się one propagować aż cała partycja może nie nadawać się do użytku.

Najczęstsze błędy to:

Księgowanie w systemie plików ext3

Kronikowanie w systemie plików Ext3, nie jest bezpośrednio zaimplementowane. Wykorzystane jest specjalne API nazywane warstwą Journaling Block Device (JBD). JBD zostało napisane aby w prosty sposób dołączać dziennikowanie do dowolnego urządzenia blokowego.

Komunikacja między Ext3 a JBD bazuje na 3 głównych modułach:

Dziennik dla systemu plików Ext3 może być umieszczony wewnątrz samego systemu (jako zwykły plik), lub na innej partycji. Najczęściej jest on przechowywany w pliku o nazwie .journal w katalogu roota systemu . W nowszych wersjach ext3 umożliwia trzymanie dziennika na dowolnym innym urządzeniu blokowym. Można także trzymać dziennik na partycji na innym dysku. To rozwiązanie zwiększa znacznie wydajność systemu plików. Dzięki niemu zachowana jest także kompatybilność Ext3 z Ext2. Jednakże jeśli w dzienniku są jakieś niezakończone transakcje to ustawiana jest flaga RECOVER, czego nie zrozumie system plików Ext2. Dzięki temu nie da się rozspójnić dziennika poprzez zamontowanie partycji bez odtworzenia informacji z niego. Do dziennika zapisywane są kompletne zmienione bloki, które maja być w przyszłości zapisane na dysk. Rozwiązanie to ma zarówno wady i zalety. Zaletami są łatwość implementacji, oraz mniejsze obciążenie procesora niż przy zapisywaniu fragmentów zmienionych bloków. Wadą jest dość duży rozmiar dziennika.

Inne systemy plików stosują najczęściej tak zwane dziennikowanie logiczne. Polega ono na tym, że do dziennika są zapisywane tylko zmiany między blokami do zapisania i tymi które są już na dysku. Różnica ta jest pamiętana jako lista bajtów do zmiany. Przy dokonywaniu transakcji istotną kwestią jest przewidywanie ile bloków może zostać zmodyfikowanych. Jeśli miejsce w dzienniku się kończy transakcje zostają wstrzymane. Dlatego przy każdym rozpoczęciu transakcji, Ext3 musi określić ile maksymalnie bloków może zostać zmodyfikowanych.

Tryby księgowania w ext3

W systemie plików ext3 są dostępne trzy tryby kronikowania. Ich angielskie nazwy to:

Tryb journal

Jest to najbezpieczniejszy i zarazem najwolniejszy tryb księgowania, który kronikuje zarówno dane jak i metadane. Ten sposób księgowania minimalizuje szanse strat modyfikowanych danych w plikach, ale wymaga wielu operacji dyskowych np. kiedy nowy plik jest tworzony, wszystkie jego bloki z danymi muszą być podwójnie zapisane w dzienniku.

Tryb writeback

Jest to tryb najczęściej występujący w innych systemach plików. Jest także najczęściej stosowanym trybem w systemie plików Ext3. Księgowane są tu jedynie zmiany w metadanych. Choć gwarantuje to spójność systemu plików, na końcu plików zapisywanych przed awarią mogą pojawić się niepoprawne dane. Jest to najszybszy tryb księgowania w systemie Ext3.

Tryb ordered

Tryb ten jest trybem domyślnym. Do dziennika są zapisywane jedynie metadane. Operacje zapisu danych i metadanych układane są w transakcje, kiedy przyjdzie czas na zapisanie nowych metadanych, najpierw zapisywane są dane, a później metadane. Dzięki temu, że metadane są zapisywane na dysk dopiero po zakończeniu operacji zapisu danych, nie jest możliwe by metadane wskazywały na niezapisane jeszcze na dysku dane. Jest to tryb szybszy niż pełne kronikowanie.

Aby nie dochodziło do błędów tryb ordered musi korzystać z następujących technik:

Indeksowanie katalogów

Sporą różnicą między Ext2 a Ext3 jest możliwość indeksowania katalogów. W Ext2 wpisy w katalogu są przechowywane na liście liniowej. W Ext3 natomiast po włączeniu funkcji hashed trees katalogi mają postać drzewa. Funkcja ta jest bardzo użyteczna, gdy w katalogach jest dużo plików. Zapewnia to niezwykle szybki dostęp do szukanego w katalogu pliku. W Ext3 zaimplementowane jest indeksowanie jednopoziomowe co pozwala na utrzymanie około 90000 wpisów. Do odnajdywania pliku w katalogu służy specjalna funkcja haszująca. Po jej wyliczeniu łatwo już odnajdujemy szukany blok w czasie logarytmicznym co do wielkości drzewa katalogu. Przy dodawaniu nowej pozycji (przepełnienie bloku z wpisami) stosuje się sortowanie wpisów i podział na dwa bloki. Następnie poprawiane są wpisy w indeksach.

Zerowanie wskaźników

W przeciwieństwie do Ext2, Ext3 zeruje wskaźniki do węzłów usuniętych plików. Konsekwencją tego jest to, iż bardzo trudno odnaleźć usunięte pliki.

Fragmentacja bloków.

System ext3 może podzielić jeden blok na kawałki o tym samym rozmiarze i w każdym z nich przechowywać małe pliki. Pozwala to znacznie zmniejszyć obszar zajmowany przez dane, gdy w systemie jest wiele małych plików.

Inne informacje:


System plików XFS

(część pierwsza)

Wsparcie dla dużych plików

XFS zawiera w pełni zintegrowanego menadżera dysków, XLV, który może łączyć, duplikować lub rozrzucać dane po maksymalnie 128 dyskach. Każdy dysk może się składać z maksymalnie 100 partycji lub macierzy RAID, zatem pojedyncze dyski mogą osiągać setki terabajtów.

XFS jest w pełni 64-bitowym systemem plików. Wszystkie globalne liczniki w systemie mają 64 bity, podobnie jak adresy wszystkich bloków dyskowych i unikalne numerki przypisywane każdemu plikowi (nr i-węzła). Pojedynczy system plików może mieć teoretycznie 18 milionów terabajtów.

Aby zapobiec temu, by wszystkie struktury danych w systemie plików miały długość 64 bitów, system jest podzielony na regiony zwane grupy alokacji (allocation groups, AG). Każda grupa alokacji zarządza swoim wolnym miejscem i i-węzłami. Głównym zadaniem grup alokacji jest zapewnienie skalowalności i równoległości w systemie plików. Taki podział ogranicza również rozmiar struktur potrzebnych do przechowywania tych informacji i pozwala na to, by wewnętrzne wskaźniki były 32 bitowe. Typowe grupy alokacji mają rozmiar od 0.5 do 4 GB. Pliki i katalogi nie muszą całe mieścić się w jednej grupie alokacji.

W każdej grupie alokacji wolne miejsce i i-węzły są zarządzane niezależnie i równolegle, co pozwala na alokowanie wolnej przestrzeni w systemie plików wielu procesom naraz. To bardzo duży kontrast w porównaniu z innymi systemami plików, które są jednowątkowe i pozwalają na alokację miejsca i i-węzłów tylko 1 procesowi naraz, co staje się wąskim gardłem w dużych systemach plików. Wsparcie dla dużych plików było jednym z głównych założeń przy projektowaniu XFS, mając na uwadze żądanie skalowalności. XFS jest w pełni 64 bitowy. Wszystkie struktury danych są dostosowane do tego, by móc utrzymywać pliki wielkości nawet 2^64 – 1 bajtów (9 exabajtów).

XFS używa alokacji zmiennej długości „ekstentów” (extent = ciąg kolejnych bloków na dysku) by pozwolić plikom na zaalokowanie jak największych fragmentów ciągłej przestrzeni. Każdy ekstent jest opisany przez adres bloku wewnątrz pliku, długość w blokach i adres bloku w systemie plików. Pojedynczy ekstent może składać się z maksymalnie 2 milionów kolejnych bloków lub 4 GB przestrzeni. (Ten limit zależy od rozmiaru logicznego bloku.)

Alokacja ekstentów

Pomimo swej zdolności do alokowania bardzo dużych ekstentów, pliki w XFS mogą składać się z dużej liczby ekstentów różnej długości, zależnie od sposobu w jaki plik rośnie w czasie. I-węzły w XFS zawierają 9 lub więcej pozycji które wskazują na ekstenty. (Rozmiar i-węzła w XFS można ustawić. Domyślny rozmiar 256 bajtów pozwala na przechowanie 9 pozycji bezpośrednio. Są jeszcze pośrednie, podwójnie pośrednie... jak w ext2.

W XFS wolnym miejscem zarządza się osobno dla każdej grupy alokacji. Każda grupa alokacji utrzymuje 2 B-drzewa które opisują wolne ekstenty. Jedno opisuje blok początkowy, a drugie długość ekstentu. Zależnie od typu alokacji, system plików może szybko zlokalizować albo ekstent najbliższy danej lokalizacji, albo o jak największym rozmiarze. XFS pozwala także na ustawienie rozmiaru logicznego bloku od 512 bajtów do 64 kilobajtów dla każdego systemu plików.

Pliki rozrzedzone

XFS zapewnia 64 bitową, „rozrzedzoną” przestrzeń adresową dla każdego pliku. Wsparcie dla rozrzedzonych plików pozwala plikom na posiadanie dziur, które nie zajmują miejsca na fizycznym dysku. Wsparcie dla 64 bitowych plików oznacza, że potencjalnie może być bardzo dużo bloków zaindeksowanych dla każdego pliku. Metody, których używa XFS do alokacji i zarządzania ekstentami dobrze sobie radzą w takich sytuacjach, ponieważ XFS przechowuje adres bloku w pliku jako część deskryptora ekstentu. Zatem ekstenty mogą być (!) nieciągłe.

Alokacja dziurawych plików

Duże katalogi

XFS używa B+ drzewa (przechowywanego na dysku) dla swoich katalogów. Nazwy plików w katalogu są najpierw przekształcane na czterobajtową wartość haszującą, która jest używana do zaindeksowania B+ drzewa. B+ drzewo powoduje, że operacje wyszukania, utworzenia i usunięcia w katalogach nawet z milionami plików są praktyczne. Mimo wszystko, nawet wypisanie katalogu z milionem plików jest niepraktyczne, nawet ze względu na rozmiar wyniku.

Duża liczba plików

Liczba plików w XFS jest ograniczona jedynie przez ilość miejsca potrzebną do ich przechowywania. XFS alokuje dynamicznie i-węzły w razie potrzeby. Każda grupa alokacji zarządza swoimi własnymi i-węzłami. I-węzły są alokowane po 64 naraz, a B+ drzewo w każdej grupie alokacji pamięta położenie każdej grupy i-węzłów i zapamiętuje, które i-węzły są w użyciu. XFS pozwala każdej grupie alokacji funkcjonować równolegle, pozwalając na większą liczbę jednoczesnych operacji. XFS został zaprojektowany z myślą o dużych i niedrogich nośnikach danych. Tym niemniej, bardzo małe pliki, takie jak dowiązania symboliczne czy katalogi są przechowywane bezpośrednio w i-węzłach, aby oszczędzić miejsce. Takie rozwiązanie poprawia również czas dostępu do tych plików, ponieważ nie musimy odwoływać się do dysku gdy już przeczytamy i-węzeł. Domyślny rozmiar i-węzła to 256 bajtów, ale może być zwiększony podczas tworzenia systemu plików, dzięki czemu w i-węzłach można przechowywać więcej małych plików. XFS pozwala również na ustawienie rozmiaru logicznego bloku osobno dla każdego systemu plików. Minimalny rozmiar bloku to 512 bajtów, a maksymalny 64 KB. Mniejsze rozmiary są idealne dla systemów plików używanych przez aplikacje takie jak „wiadomości” czy jakieś pocztowe, które zazwyczaj przechowują dużą liczbę małych plików.