Ł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:
|
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:
|
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.
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.
writeback
– kronikowane 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).
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 |
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ć:
|
Grupa
alokacji
to autonomiczna
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.
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.
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.
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.
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:
|
Rezygnacja
z kosztownych bitmap zajętości
bloków |
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.
Indeksowane
katalogi.
Podobnie jak ext3 JFS wykorzystuje B-drzewa do
indeksowania katalogów, co znacznie przyspiesza
przeszukiwanie katalogów z dużą liczbą plików.
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.
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.