Cp
ZFS 寫入時複製如何處理大文件
假設我有一個
example.log
在 ZFS 上呼叫的大文件 (8GB)。我要做cp example.log example.bak
一個副本。然後我在原始文件中添加或修改幾個字節。會發生什麼?ZFS 將複製整個 8GB 文件還是僅複製更改的塊(以及從文件描述符指向該塊的所有 inode 鏈)?
據我所知,FreeBSD ZFS 不支持使用 cp 進行寫時複製。本機 cp 似乎沒有此類輕量級副本的選項,並且嘗試
--reflink
在 ZFS 系統上出現錯誤的 GNU cp 我嘗試使用錯誤消息“cp: failed to clone ’example.bak’ from ’example.log’: Operation不支持”。一位評論者提到 Solaris cp 具有
-z
執行此類複製的開關。但是,我希望這能回答您的基本問題,寫入時複製用於文件系統快照:假設您在 1000GB 可用空間中使用了 900GB,沒有什麼能阻止您製作該文件系統的快照,快照不會佔用 900GB ; 事實上,它最初根本不會佔用任何新的數據塊。
在創建包含 的原始文件系統的快照後
example.log
,您最終會得到兩個“副本”:快照中的只讀版本,以及原始位置中的實時版本。當副本被修改時會發生什麼,無論是通過附加還是通過就地更改?這就是魔法發生的地方:只有那些被改變的塊被複製並開始佔用空間。並非整個文件一被更改就被複製。