Journaling

Technika systemu plików polegająca na zapisywaniu planowanych zmian do dziennika przed ich wykonaniem. Zapewnia spójność danych po awarii zasilania czy systemu.

Journaling (księgowanie) to technika systemu plików, w której zanim jakakolwiek zmiana trafi na właściwe miejsce na dysku, system najpierw zapisuje opis tej zmiany do specjalnego obszaru zwanego dziennikiem (journal). Dzięki temu, jeśli w trakcie operacji zabraknie prądu albo system się zawiesi, po restarcie wiadomo, co było w trakcie wykonywania — i system może to dokończyć lub bezpiecznie wycofać, zamiast zostawić Ci uszkodzony, niespójny system plików.

Jak to działa

Bez dziennika pojedyncza operacja (np. utworzenie pliku) to kilka osobnych zapisów: metadane katalogu, mapa wolnych bloków, sam plik. Jeśli prąd padnie w połowie, część zapisów jest zrobiona, a część nie — i masz bałagan, którego naprawa wymaga długiego skanowania całego dysku. Journaling rozwiązuje to przez schemat „najpierw zapisz zamiar, potem działaj”. System najpierw spisuje planowane zmiany do dziennika i oznacza taki wpis jako kompletny (tzw. commit), a dopiero potem przenosi je w docelowe miejsce (checkpoint).

Po awarii system odtwarza tylko dziennik, a nie cały dysk. Wpisy z pełnym commitem są dograne (redo), niedokończone — ignorowane. To zamienia naprawę liczoną w minutach na operację liczoną w sekundach, niezależnie od wielkości dysku.

Przykład z praktyki

Klasyk to ext4 w Linuksie, który dziennik obsługuje przez warstwę jbd2. Masz tu trzy tryby ustawiane opcją montowania data=:

  • data=ordered (domyślny) — księgowane są metadane, ale dane realne są zapisywane na dysk przed commitem metadanych. Dobry kompromis bezpieczeństwo/wydajność.
  • data=journal — do dziennika trafiają zarówno metadane, jak i dane. Najbezpieczniej, ale wolniej (wszystko zapisujesz dwa razy).
  • data=writeback — księgowane tylko metadane, bez gwarancji kolejności danych. Najszybciej, ale po awarii w pliku mogą wylądować śmieci.

Tryb sprawdzisz prosto: tune2fs -l /dev/sda1 | grep features albo zerkając w mount. Z innych systemów: XFS i NTFS ($LogFile) też są journalowane, a APFS od Apple stosuje pokrewny mechanizm.

Częste błędy i mity

Mit numer jeden: „mam journaling, więc nie stracę danych”. Nieprawda. Dziennik chroni spójność struktury systemu plików, a nie zawartość Twoich plików. W trybie data=ordered dane zapisane w ostatniej sekundzie przed awarią nadal mogą przepaść — journaling tylko gwarantuje, że system plików nie będzie uszkodzony. To nie zastępuje backupu ani fsync().

Drugi błąd: włączanie dziennika na dyskach SSD czy kartach SD „na siłę”. Podwójne zapisy zużywają komórki pamięci szybciej, dlatego na nośnikach flash o krótkim cyklu życia czasem świadomie wybiera się systemy bez journalingu (np. ext2, F2FS).

Pojęcia powiązane: fsck, write-ahead logging (WAL), atomicity, copy-on-write (alternatywa do journalingu, np. w Btrfs i ZFS), metadane, fsync, ext4, XFS.