Księgowanie – sposób na zabezpieczenie danych przed błędami zapisu

Księgowanie, zwane inaczej kronikowaniem (journaling), jest funkcją systemu plików rejestrującą informacje zlecone do zapisania. Funkcja ta znajduje zastosowanie podczas odtworzenia działań, których proces zapisu nie został dokończony. Sytuacja taka ma miejsce np. podczas awarii zasilania – wszelkie operacje zapisu zostają wówczas przerwane bez względu na stopień ich ukończenia. Dzięki tej funkcji zmniejszone zostaje prawdopodobieństwo utraty danych i niespójności systemu. Jeśli awaria nastąpiła w trakcie zapisu, zostanie on dokończony po przywróceniu zasilania, jeśli przed rozpoczęciem procesu – utracone zostaną jedynie ostatnie zmiany, sam plik pozostanie w stanie nienaruszonym. Do procesu rejestracji dochodzi w specjalnym schowku nazywanym dziennikiem (journal). Przed zapisaniem jakiejkolwiek informacji na dysku, system plików dokonuje zapisu w formie metadanych wskazówek dotyczących treści i miejsca zapisu. Jeśli proces zapisu przebiegnie pomyślnie dane z dziennika zostają usunięte. Jeśli proces zapisu nie powiedzie się, dzięki wpisom znajdującym się w dzienniku sprawność systemu plików może zostać przywrócona.

Mówiąc o skutkach awarii należy pamiętać, iż system plików nie kasuje danych a jedynie informacje o nich (indeksy), pozostawiając plik fizycznie obecnym, aż do jego ewentualnego nadpisania. Awaria zasilania może mieć zatem różne skutki. - W przypadku kasowania danych system plików może nie zdążyć tego odnotować. Efektem jest wówczas zajęte miejsce na dysku, które nie może zostać w przyszłości nadpisane. - Zapis pliku zostanie dokonany ale nie będzie o tym odpowiedniej informacji. - Plik zostanie zapisany ale informacja o nim będzie niepełna – może np. zajmować więcej miejsca, co skutkować będzie w przyszłości nadpisaniem jego części i uszkodzeniem. Aby zaradzić takim problemom w systemach nie posiadających mechanizmu księgowania po restarcie uruchamiany jest specjalny program porównujący informacje o plikach z faktycznym stanem zasobów – proces ten zajmuje zwykle trochą czasu i niestety nie zawsze przynosi należyte efekty.

Aby uniknąć opisanych sytuacji opracowano właśnie mechanizm księgowania. Po awarii od razu widać, które operacje nie zostały zakończone i sprawność systemy może zostać przywrócona niemal natychmiast.

Księgowanie plików na przykładzie linuksowego systemu ext3

W systemie ext3 spotykamy trzy rodzaje kronikowania.

  • tryb journal (pełne księgowanie) – najwolniejszy z trybów, ale i najbardziej bezpieczny. Zapisuje on w dzienniku zarówno dane, jak i metadane. Minimalizuje on zagrożenie utraty danych kosztem wielu operacji. Każdy nowo powstały plik wymaga tutaj zawsze podwójnego zapisu w dzienniku.
  • tryb writeback – najszybszy tryb, wymagający rejestracji jedynie metadanych. Ostatnie dane powstałe przed awarią mogą nie zostać zapisane i w efekcie stracone, ale tryb gwarantuje spójność systemu plików. Tryb ten jest najczęściej występującym trybem w innych systemach operacyjnych realizujących mechanizm kronikowania.
  • tryb ordered – księgowane są jedynie metadane, jednak dzięki specjalnej procedurze jest on zbliżony do trybu journal. Procedura polega na połączeniu metadanych i zmodyfikowanych danych w logiczne struktury określane mianem transakcji. Tryb ten gwarantuje spójność systemu przy większej wydajności niż w przypadku pełnego księgowania.

Ext3 przeprowadza księgowanie typu ordered w następujących krokach:

  • buforowanie modyfikowanych bloków danych.
  • łączenie buforów w transakcje.
  • przejście transakcji przez punkty kontrolne.
  • zatwierdzenia zakończonej transakcji i zapisanie jej do logu, co oznacza możliwość zapisania modyfikacji na dysku.
  • zapisanie zatwierdzonej transakcji na dysku – w przypadku awarii informacje można odzyskać gdyż są wpisane do logu.
  • odnotowanie przez mechanizm księgowania fizycznego zakończenia transakcji.

Pavel Kroupka

Galeria