Journaling File System

Journaling file system 用 transaction log 保護 metadata updates。Crash 後只檢查 journal,而不是掃描整個 volume。

注意:journaling 是 recovery log;log-structured file system 是把整體 write layout 設成 append-only log,目的不完全相同。


Transaction Flow

一個 transaction 包含完成某 operation 需要的 metadata changes,例如 allocate inode、update directory、update free-space metadata。

1. write transaction records to journal
2. mark transaction committed
3. later apply updates to real metadata locations
4. mark transaction completed / free journal space

Journal 通常是 circular buffer;completed records 可覆寫。


Crash Recovery

  • committed but not applied:replay。
  • not committed:ignore 或 undo partial changes。
  • completed:不處理。

Recovery time 取決於 journal 中未完成 transactions,而不是 file-system size。


Tradeoff

Journaling 把 HDD 上昂貴的 random synchronous metadata writes 先變成 sequential journal writes,常同時改善 reliability 與 metadata-heavy performance。

代價是額外 space / bandwidth。Metadata-only journaling 快,但 crash 後 user data 可能不是預期內容;data journaling 較安全但 write overhead 高。Journaling 不是 backup