Suzu macOS Playground

M11 · CTF

容器、volume role 與 copy-on-write snapshot

在 APFS 結構視圖裡找出哪個 volume 是唯讀且被封印的 System、哪個是可寫的 Data, 並用共享 extent + refcount 模型解釋:為什麼 clone/snapshot「幾乎不佔空間」、 以及為什麼刪了大檔卻沒釋放空間(某個 snapshot 仍釘住那些 extent)。

← 先讀 M11 章節

APFS clone / COW

檔案 A
共享 extentCOW 私有 extent邏輯大小 6 塊 · 實體佔用 6 塊(共享只算一次)

clonefile 複製=兩檔共享同一批 extent,不佔額外空間;改寫某塊才 copy-on-write 出新 extent(只有那塊變私有)。snapshot 同理:對「當下狀態」釘一份共享參照,之後的改動才分裂——M05 的 SSV seal 就是蓋在這種 snapshot 上。教學抽象,非真實 APFS 結構。

過關目標

解答是「操作模擬器到對的狀態 + 能說出原理」,非提交 flag 字串。互動式自動評分為 roadmap 項目;目前以自我檢核完成。

提示

卡住時

System 卷唯讀且 Sealed: Yes;Data 卷可寫,掛在 /System/Volumes/Data。兩者靠 firmlink 融合成單一 /。

走錯方向時

snapshot 不複製資料,只把當時的 extent 用 refcount 釘住;之後 volume 寫入走 copy-on-write,新舊各指各的 extent。

想更深入

refcount 不歸零就不回收——刪了檔但 snapshot 還指著那些 extent,空間就不會釋放。這正是 M14 取證能挖出被刪檔的原因。

相關指令

diskutills
← 回 CTF 場