Łukasz Puławski


Lokalne Systemy Plików
JFS XFS Ext3


Dziennik tranzakcyjny.


Dla zwiększenia funkcjonalności i bezpieczeństwa operacje zapisu często grupuje się w niepodzielne grupy, stanowiące logiczną całość. Rozwiązanie to stosowane od dawna w

BDMS - ach pojawiają się w nowoczesnych systemach plików nazywanych systemami z kronikowaniem (ang Journalised File Systems). Struktura, która przechowuje opis wykonywanych operacji składających się na jedną całość nazywa się dziennikiem lub kroniką (ang. Journal). Dane w niej zapisywane to wpisy lub logi. Zwykle scenariusz zapisu danych (metadanych) na dysku wygląda tak:


  1. Wpisujemy do dziennika jakie dane zmienimy i w jaki sposób tego dokonamy
    (chodzi o to by niezakończone zmiany można było wycofać).

  2. Dokonujemy fizycznej zmiany danych na dysku

  3. Usuwamy wpis z dziennika (opcjonalnie).








Ext3

Dobrym przykładem systemu z kronikowaniem jest ext3, opracowany w firmie Red Hat w 1999 roku następca popularnego ext2. W stosunku do poprzednika wprowadzono w nim trzy podstawowe zmiany:

  1. Dziennik, który dramatycznie skraca czas wstawania systemu po awarii.

  2. Indeksowane katalogi, zdecydowanie zwiększające szybkość dostępu do plików.

  3. Fragmentacja bloków, oszczędzająca zajmowany obszar.


Co godne podkreślenia, zmiany te są na tyle niezależne od “rdzenia” z ext2, że ext3 można bez przeszkód montować jako ex2 i używać znanych programów jak np. fsck.


  1. Dziennik.
    W ext3 dziennik jest w dużej mierze niezależny od systemu plików, co odróżnia go od innych systemów plików z kronikowaniem.. Do obsługi księgowania służy interfejs JBD, niezależny od ext3, który teoretycznie może być użyty z innymi systemami plików do realizacji księgowania.
    JBD przechowuje w dzienniku całe zmieniane bloki a nie pojedyncze bajty, co oczywiście ma swoje wady jak i zalety. Do tych pierwszych należy potencjalnie duża nadmiarowość danych i czas ich zapisu w dzienniku. Jako główną zaletę należy podać wielką prostotę systemu.
    JBD może kronikować zarówno dane jak i metadane co pozwala odtworzyć po awarii zarówno strukturę systemu plików jak i zawartość samych plików. To co będzie wpisywane do dziennika a co nie, zależy od trybu działania JBD.
    writebackkronikowane są zarówno dane jak i metadane,
    journal – kronikowane są wyłącznie metadane.
    ordered – kronikowane są metadane, ale w sprytny sposób (najpierw nowe dane lądują na dysku, a dopiero potem zmieniane są metadane przy użyciu dziennika).

  2. Indeksowane katalogi.
    Do przechowywania zbioru plików w katalogu zastąpiono reprezentację listową na indeksowaną. Drzewiasta struktura obsługująca haszowanie znajduje się w pierwszych 512 blokach katalogu. Pierwszy z nich zawiera korzeń oraz nagłówek charakteryzujący całą strukturę. Kolejne bloki zawierają pary (klucz, adres-bloku). Adres ten wskazywać blok z danymi pliku, lub blok z kolejnego poziomu struktury.
    Zastosowanie funkcji haszującej oraz B-drzewa drastycznie zwiększyło wydajność systemu, co pokazuje poniższa tabela:

liczba plików w katalogu (tys)

10

20

30

40

50

60

70

80

90

multiplikatwyny wzrost szybkości w stosunku do ext2

17

30

43

60

80

109

124

132

149


  1. 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.

    XFS

Innym, przykładem systemu plików z z księgowaniem jest XFS (XFS File System). Powstał on w ok. 1994r i był dołączany jako standardowy system plików do IRIX'a. Do jego najbardziej wyróżniających się cech należy zaliczyć:


  1. Podział na autonomiczne grupy alokacji.

  2. Opóźniony zapis wykorzystywany min. do redukcji fragmentacji danych

  3. Listy uprawnień – znacznie wygodniejsze od POSIX-owej 9-bitowej maski.

  4. Zapis małych plików w i-węźle

  5. dziennik.


  1. Grupa alokacji
    to a
    utonomiczna jednostka systemu plików XFS. Każda z nich zawiera oddzielne struktury używane do zarządzania jej zawartością. Schemat grupy alokacji przedstawia poniższy diagram:

    superblok

    B+drzewo z wolnymi obszarami

    i-węzły

    dziennik

    obszar danych

    superblok


    superblok zawiera podstawowe informacje o całej strukturze grupy alokacji. min. wersję XFS, rozmiar bloku, rozmiar poszczególnych części grupy alokacji oraz wskaźnik na drzewo katalogów.
    Zastąpienie mapy bitowej wolnych obszarów parą B+drzew powoduje, znaczący wzrost wydajności. Czas znalezienia bloku B+drzewie jest O(lgn) podczas gdy w bitmapie O(n). W XFS ciągły obszar wolnych bloków to ekstent. Wspomniane wcześniej B+drzewa przechowują właśnie zbiór ekstentów - pierwsze drzewo pamięta ich adresy, drugie – rozmiary.
    i-węzły w XFS nie różnią się znacząco od tych znanych choćby z ext2. Główna różnica polega na przechowywaniu ich w B+drzewie oraz liście.

  2. Opóźniony zapis danych
    Zapis danych w systemie XFS jest dwuetapowy. Po otrzymaniu danych do zapamiętania system plików nie umieszcza ich na dysku, lecz trzyma w specjalnym buforze opóźniając możliwie umieszczenie ich w docelowych blokach. Strategia taka przynosi kilka korzyści. Dane mogą być umieszczone na dysku w sposób bardziej “przemyślany”, czyli np. bez zbędnej fragmentacji. Ponadto można znacznie ograniczyć liczbę operacji na metadanych. W skrajnym przypadku mały plik tymczasowy nie musi się wcale znaleźć na nośniku.

  3. Listy uprawnień
    są bardzo wygodnym narzędziem pozwalającym określić uprawnienia do każdego z plików dla każdego z użytkowników lub grupy użytkowników osobno.

  4. Zapis małych plików w i-węźle.
    XFS pozwala zapisać całą zawartość małego pliku lub katalogu w i-węźle opisującym ten plik, co pozwala zmniejszyć liczbę odwołań do pamięci dyskowej.

  5. Dziennik
    XFS odnotowuje w dzienniku wszystkie zmiany dokonywane na metadanych, tzn. w superblokach, nagłówkach grup alokacji, drzewach wolnych obszarów, drzewach i-węzłów, w samych i-węzłach oraz zawartości katalogów. Operacje tego typu są opakowywane w transakcje, będące spójnym i niepodzielnym logicznie ciągiem zmian w blokach systemu plików. Dzięki temu późniejsza naprawa uszkodzonego systemu plików nie polega na naprawie poszczególnych, złożonych struktur, lecz na dokończeniu ostatnio zaplanowanych i przerwanych transakcji.

    XFS umożliwia tworzenie logów na innym urządzeniu , co zwłaszcza przy synchronicznym trybie pracy może istotnie zwiększyć wydajność (synchroniczny tryb jest wymuszany np. przez NFS).

    JFS

JFS jak sama nazwa wskazuje jest systemem plików z dziennikiem (ang. Journaled File System). Został on opracowany w 1990r. przez IBM jako podstawowy system plików AIX 3.1. Później powstały wersje dla OS/2 i Linuxa. Jego najważniejsze cechy to:

  1. Rezygnacja z kosztownych bitmap zajętości bloków na rzecz mapy alokacji.

  2. Stosowanie ekstentów i związanej z nimi polityki grupowania danych.
    (w tym dynamiczne przydzielanie i-węzłów)

  3. Indeksowane katalogi.

  4. Zapis małych plików w i-węźle

  5. Dziennik




  1. Rezygnacja z kosztownych bitmap zajętości bloków
    W systemie ext2 w pesymistycznym przypadku trzeba przeszukać dziesiątki megabajtów bitmap, aby znaleźć wolny blok. W JFS zarządzanie wolnymi obszarami wygląda nieco inaczej.
    Zbiór każdych 8192 bloków pamiętany jest w B+ drzewie, którego liście odpowiadają kolejnym 32- blokom. W liściach tych znajduje się długość maksymalnego spójnego wolnego obszaru. W węzłach pośrednich znajduje się informacja, jaki maksymalny spójny obszar znajduje się w poddrzewie. Tylko z liściem związana jest mapa bitowa zajętości bloków.
    Opisane powyżej drzewa są liśćmi B-drzewa przechowującego wszystkie bloki . Ideę tę pokazuje poniższy rysunek:

  2. Stosowanie ekstentów
    JFS przechowuje informacje o ekstentach, czyli spójnych obszarach wolnych bloków. W odróżnieniu od ext2 nie ma stałej liczby i-węzłów, tylko alokuje je w miarę potrzeby. Dzięki tym dwóm cechom może prowadzić mądrą politykę alokacji i-węzłów, starając się utrzymać powiązane dane w spójnym obszarze, a niezależne rozrzucać daleko unikając fragmentacji.

  3. Indeksowane katalogi.
    Podobnie jak ext3 JFS wykorzystuje B-drzewa do indeksowania katalogów, co znacznie przyspiesza przeszukiwanie katalogów z dużą liczbą plików.

  4. Zapis małych plików w i-węźle.
    Podobnie jak XFS, JFS pozwala zapisać całą zawartość małego pliku lub katalogu w i-węźle opisującym ten plik, co pozwala zmniejszyć liczbę odwołań do pamięci dyskowej.


  5. Dziennik.
    JFS stosuje synchroniczny dziennik, do zapisu metadanych. Oznacza to, że dane zapisane do dziennika naprzód lądują na dysku a dopiero potem wykonuje się w nim zmiany. Ponieważ taki tryb może być mało wydajny możliwa jest również praca w trybie asynchronicznym , w którym to dane pozostają przez jakiś czas w buforze dziennika, zanim zostaną zrzucone na dysk. Oczywiście w tym przypadku odpowiednie mechanizmy zapewniają trwały zapis logu w dzienniku przed zmianą struktury dysku.