Copy-on-Write
BasicBasic

Copy-on-Write

Keywords

copy-on-writeCOWsnapshotatomic pointer updateBtrfsZFSchecksumdata integrityAsk ChatGPT

Prerequisites

Progress

Sign in to track your progress.

Copy-on-write(CoW)是一種優雅的 crash consistency 解法:當我們要修改一個 block 時,不直接覆寫原本的位置,而是把新版本寫到一個全新的位置,再更新 pointer 使其指向新資料。因為舊資料在 pointer 切換前始終保持完整,所以任何時刻發生 crash 都不會破壞既有的一致性。這個特性也讓 snapshot 的實現變得非常自然,我們只需要保留舊版本的 pointer tree,就能以近乎零成本建立檔案系統的 snapshot;搭配 reference count 做 bookkeeping,多份 snapshot 共用 block 的釋放問題就有了乾淨的解法。Btrfs 與 ZFS 這兩個現代檔案系統都以 CoW 作為核心設計,藉此同時實現資料完整性、snapshot、以及高效的 checksum 驗證。

貢獻 HackMD 共筆 💲大抄

Key Concepts

我理解 copy-on-write 的寫入策略:將新資料寫到新位置,再透過 atomic pointer update 切換指向新資料

我理解 COW 如何透過 atomic pointer switch 實現 crash consistency,確保任何時刻 crash 都不會破壞既有資料的一致性

我理解 COW 如何實現近乎零成本的 snapshot,透過保留舊版本的 pointer tree 來建立檔案系統的時間點快照

我知道 Btrfs 與 ZFS 都以 COW 作為核心設計,並利用此特性實現 data integrity 驗證與 checksum 機制

我能說出 CoW 的代價:每改一個 leaf 就要沿 path 重寫到 root(wandering tree problem),以及這對 fragmentation 的影響為什麼比 in-place 嚴重

我理解 reference count 在 CoW snapshot/clone 機制裡的角色:拍 snapshot 時 +1,刪 snapshot 時 -1,到 0 才釋放,是「snapshot 不佔額外空間」的具體 bookkeeping

我能比較 CoW 與 journaling 兩種 crash consistency 方法的差異(atomicity boundary、write amplification、snapshot 支援、fragmentation),以及各自的優缺點與適合的 workload

我能說出檔案系統 CoW 與 OS 課學過的 VM CoW(fork、page fault 觸發複製)有什麼不同:lazy vs. eager、活在 RAM vs. 活在 disk

Recommended Resources

Test Your Understanding