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.