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 spaceJournal 通常是 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。