Copy-on-Write File System
Copy-on-write(COW)file system 不在原地覆寫舊 blocks。更新時把新 data / metadata 寫到 free blocks,最後 atomic switch root pointer。
old tree remains valid
write new blocks elsewhere
atomic root switchUpdate Model
修改 file block 時:
- 新 data 寫到 new block。
- 指向它的 metadata block 也寫成 new block。
- 改變一路 propagate 到 root metadata。
- Atomic update root pointer / uberblock / root inode。
Crash 在 switch 前:舊版本仍有效。Crash 在 switch 後:新版本成為正式狀態。
Snapshots
保留舊 root pointer 就得到 snapshot。之後 writes 都寫到新 blocks;snapshot 仍指向舊 blocks。
Snapshot 初始成本低;真正佔空間的是 snapshot 後被修改、但舊版本仍需保留的 blocks。
Tradeoff
- 優點:atomic update、snapshot-friendly、recovery clean,可搭配 checksum 偵測 silent corruption。
- 代價:write amplification、free-space accounting 複雜、可能 fragmentation、需要 ordered writes / atomic root update。
ZFS、Btrfs、APFS、WAFL 類設計都大量使用 COW / write-anywhere 思想;WAFL 見 D-OS-Ch14h-WAFL_File_System。