Journaling File System (JFS)

Journaling File System
Superblock
I-węzły
Mapa alokacji bloków
Mapa alokacji I-wezłów
Pliki
Katalogi
Dzienniki
Cechy odrozniajace JFS od innych systemów plików

Journaling File System

Dziennikowe i rejestrujace systemy plików rozwiązuja problemy spójności występujące w prostszych systemach, takich jak ext2fs, ale wprowadzają kwestie prędkośsci.
Aktualizuja system plików poprzez transakcje oraz - podobnie jak systemy zarządzania bazami danych - zapisuja w dzienniku zdarzenie aktualizacji, zanim rzeczywiście uaktualnią plik.
Gdy operacja przebiegnie pomyślnie, wpis w dzienniku jest oznaczany jako wykonany, i wlasnie ta dodatkowa czynność zmniejsza ogólna wydajność systemu plików.
Podczas startu systemu narzędzie do tworzenia systemów plików, mkfs, tworzy agregat calkowicie zawarty w każdym montowanym woluminie logicznym. Agregat jest tablicą blokow dysku alokowanych zgodnie ze specyficznym formatem. Agregat zawiera:
  - Superblok, ktory identyfikuje partycje jako agregat JFS   - Mapę alokacji, która opisuje stan alokacji każdego bloku danych w agregacie.



Superblok

Superbloki zawięrają informacje dotyczące całego agregatu, takie jak rozmiar agregatu, rozmiar grup alokacji, rozmiar bloku agregatu itd.
Wtórny superblok agregatu jest dokladną kopią podstawowego, używa się go, kiedy podstawowy superblok jest uszkodzony. Oba superbloki znajdują się w ustalonych miejscach, dzięki czemu JFS może je znależć bez korzystania z dodatkowych informacji. Struktura superbloku jest zdefiniowana w pliku linux/include/linux/JFS/JFS_superblock.h (struct JFS_superblock)



I-węzły

Dyskowy i-węzeł JFS sklada sie z 512 bajtów i zawiera cztery podstawowe zbiory informacji:

  • Pierwszy opisuje atrybuty POSIX obiektu JFS
  • Drugi opisuje dodatkowe atrybuty obietku JFS. Sa to m.in. informacje potrzebne do obsługi VFS, informacje specyficzne dla systemu operacyjnego oraz naglówek drzewa B+.
  • Trzeci zbior zawiera albo deskryptory alokacji ekstentu przechowujacego korzeń drzewa B+,albo wplecione dane.
  • Czwarty zbiór zawiera rozszerzone atrybuty, wiecej wplecionych danych albo dodatkowe deskryptory alokacji ekstentów.
Definicja dyskowej struktury i-węzła znajduje sie w pliku linux/include/linux/JFS/JFS_dinode.h (struct dinode)



Mapa alokacji bloków

Mapa alokacji bloków sluży do śledzenia przydzielanych i zwalnianych bloków dysku w całym agregacie.

Ponieważ wszystkie zestawy plików (ang. filesets) w agregacie współdzielą jedną pule bloków dysku, mapa alokacji jest używana przez wszystkie zestawy plików podczas alokowania lub zwalniania bloków.

Mapa alokacji bloków sama jest plikiem opisanym przez i-węzeł 2 agregatu. Podczas tworzenia agregatu przydzielane są bloki danych dla mapy pokrywajacej calą przestrzeń agregatu. Mapa może się dynamicznie zwiekszać lub zmniejszać w miare zmian rozmiaru agregatu.

Mapa zawiera trzy typy stron: strony kontrolne bmap, strony kontrolne dmap oraz strony dmap. Kazda strona mapy zajmuje 4KB.

Na stronie dmap każdy bit reprezentuje jeden blok agregatu. N-ty bit reprezentuje stan alokacji n-tego logicznego bloku agregatu. Definiuje to struktura dmap_t zawarta w pliku /linux/include/linux/JFS/JFS_dmap.h. Każda strona dmap opisuje 8KB bloków agregatu.

Ponieważ mapa alokacji bloków może zawierać wiele stron dmap, są one zarządzane za pomocą stron kontrolnych dmap. Strony dmap poprawiawiają wydajność wyszukiwania duzych ekstentów wolnych bloków. Rozmiar agregatu określa liczbę tych stron oraz liczbę potrzebnych poziomów.

Aby zapewnić spojność mapy alokacji bloków, JFS używa dwóch map w strukturze dmap: mapy roboczej i mapy trwałej. Mapa robocza rejestruje bieżacy stan alokacji. Mapa trwała rejestruje zatwierdzony stan alokacji, zgodny z danymi na dysku albo opisany przez rekordy w dzienniku JFS lub zatwierdzone transakcje JFS.

Gdy blok agregatu jest zwalniany, najpierw aktualizuje się mape trwała, a gdy jest alokowanany, najpierw aktualizuje sie mapę robocza.

Na początku mapy alokacji bloków znajduje się struktura kontrolna o nazwie dbmap_t. Ta struktura zawiera sumaryczne informacje przyśpieszające wyszukiwanie grup alokacji ktore mają ponad przeciętna ilość wolnego miejsca.



Mapa alokacji i-węzłów

Mapa alokacji i-węzłów rozwiązuje problem wyszukiwania zwykłego.
Agregat i każdy zestaw plików utrzymuje mapę alokacji i-węzłów, będącą dynamiczną tablicą grup alokacji i-węzłów (ang. Inode Allocation Groups, IAG). W przypadku agregatu i-węzły odwzorowane przez mapę alokacji i-węzlów są rownież nazywane tablicą i-wezlów agregatu, a w przypadku zestawu plików - tablica i-węzlów zestawu plików.

Każda grupa IAG ma rozmiar 4KB i opisuje 128 ekstentów i-wezlów na dysku. Ponieważ każdy ekstent i-wezlów zawiera 32 i-wezły każda grupa IAG opisuje 4096 i-wezlów.
Pierwsza 4-kilobajtowa strona mapy alokacji i-wezlów jest strona kontrolna zawierająca sumaryczne informacje o mapie.
Mapa alokacji i-wezłów zestawu plików jest opisana przez i-węzęł zestawu plików. Jest strony są alokowane i zwalniane w miare potrzeby zgodnie ze standardowym indeksowaniem drzewa B+. Kluczem drzewa B+ jest przesunięcie bajtowe strony IAG.



Pliki

Plik jest reprezentowany przez i-węzęł zawierający korzeń drzewa B+, ktory opisuje ekstenty z danymi użytkownika.
Drzewo B+ jest indeksowane według przesunięcia ekstentów.



Katalogi

Katalogi JFS to plik metadanych podlegający rejestrowaniu w dzienniku.
Katalog linuksowy, tak jak każdy katalog uniksowy, jest związkiem między nazwami plików a numerami i-wezłów.
Katalog sklada się z wpisów katalogowych, ktore wskazują obiekty zawarte w katalogu. Wpis katalogowy wiaże nazwe z numerem i-węzła. Określony i-węzeł opisuje obiekt o określonej nazwie. Aby ułatwić wyszukiwanie konkretnego wpisu katalogowego, używa sie drzewa B+ posortowanego według nazwy.

I-węzeł katalogu zawiera korzeń drzewa B+, indeksowany według nazwy.



Dzienniki

Dzienniki JFS są prowadzone w każdym agregacie i slużą do rejestrowania operacji na metadanych. Jeden dziennik może być jednoczesnie używany przez wiele zamontowanych zestawów plików w danym agregacie.

JFS rejestruje wyłącznie operacje na metadanych, więc wykonanie operacji zapisanych w dzienniku odtwarza tylko spojność strukturalną oraz stany alokacji zasobów w systemie plików. System nie rejestruje danych ani nie przywraca ich do spójnego stanu. Po naprawie systemu plików dane bywają niepełne lub nieaktualne, więc użytkownicy szczególnie zainteresowani integralnością danych powinni uzywać synchronicznych operacji wejscia-wyjscia.

Semantyka rejestrowania JFS jest taka, ze kiedy operacja na systemie plików związana ze zmianą metadanych (np. unlink()) zwróci pomyślny kod powrotny, jej efekt jest zatwierdzony w systemie plików i bedzie widoczny nawet w wypadku załamania systemu.

Ten styl rejestrowania wiaże się z synchronicznym zapisem na dysku podczas każdej operacji na i-wezle lub VFS, ktora modyfikuje dane. Jeśli chodzi o wydajność, dorównuje on wielu niedziennikowym systemom plików, ktore zapewniają spojność przez synchroniczny zapis metadanych.



Cechy odrózniające JFS od innych systemów plików

JFS od początku zaprojektowano tak, aby dziennik operacji byl jego integralną częścią, a nie dodatkiem do juz istniejącego systemu plików.
- Wewnętrzne (potencjalne) limity JFS
  JFS to w pelni 64-bitowy system plików.Wszystkie wlaściwe pola struktur systemu plików są 64-bitowe. Dzieki temu JFS może obsługiwać zarówno duże pliki, jak i duże partycje.
- Nośniki wymienne
  JFS nie pozwala uzywać dyskietek jako bazowego urządzenia systemu plików
- Rozmiar systemu plików
  Minimalny rozmiar systemu plików JFS to 16 MB. Maksymalny rozmiar systemu plików JFS wynosi od 512TB (wielkość bloku równa 512 bajtom) do 4PB(petabajtow - wielkość bloku równa 4KB)
- Rozmiar pliku
  Maksymalny rozmiar pliku jest ograniczony przez VFS, jeśli np VFS ma budowę 32-bitową właśnie to ogranicza jego rozmiar
- JFS wykorzystuje drzewa B+ jako struktury adresowania opartego na ekstentach, między innymi do alokowania ekstentów. Plik jest reprezentowany przez i-węzęł zawierający korzeń drzewa B+, które opisuje ekstenty z danymi użytkownika. Ekstent to sekwencja ciągłych bloków agregatu przydzielanych przez JFS jako jednostka. Każdy ekstent jest całkowicie zawarty w jednym agregacie.