Osx
如何判斷文件的哪些副本是 COW 副本?
我有一個通過 NFS 連接到 macintosh 的 ZFS 系統。系統快滿了,但我發現了大量的重複文件
jdupes
。我不知道這些副本是如何製作的,有可能是從網際網路上重新下載的,也有可能是用
cp
. 如果它們是在本地複制的,它們不應該使用任何額外的空間,因為 ZFS 是一個寫時復製文件系統,但如果它們被重新下載,它們應該使用相同的空間兩次。我的 NFS 伺服器沒有足夠的 RAM 用於 ZFS 重複數據刪除。我想用寫時複製副本替換任何物理上複製的副本。
如何判斷哪些文件重複項是彼此的寫時複製副本?
您似乎在這裡混淆了 ZFS 的兩個屬性:
- **Copy-on-Write (CoW)**是對文件系統在修改文件時如何工作的描述。傳統(非 CoW)文件系統有一個讀-修改-寫循環,其中對文件的更新是就地完成的,這意味著文件的唯一副本被直接修改(將更新的字節寫入文件內的指定位置)。如果斷電,可能會造成損壞。在像 ZFS 這樣的 CoW 文件系統上情況並非如此,對文件的任何修改都不會觸及文件:更改的字節只是簡單地附加,如果成功,舊的部分將被標記為可刪除。這可以防止以更多碎片為代價而喪失完整性(因為每次更改都需要新的不同空間)。
- 重複數據刪除是可在 ZFS 文件系統上啟用的可選功能(預設為禁用)。如果啟用,將首先在重複數據刪除表 (DDT) 上查找要寫入的任何數據。如果已經存在,則不再寫入,僅連結。這適用於傳輸(讀取和寫入),但不適用於已複製儲存的“舊”數據。它也有一些缺點,你可以在整個網際網路上閱讀,所以我不會在這裡概述它們。
如果您從未在文件系統上啟用重複數據刪除,則任何副本(
cp
、Finder 中的副本等)都會創建新數據並減少您的可用空間。沒有內置的預設重複數據刪除(甚至預設禁用推薦的壓縮!)。您可以通過將 1 MB 的文件複製 1000 次來自行檢查,您將失去 1000 MB 的空間而不是 1 MB。如何判斷哪些文件重複項是彼此的寫時複製副本?
你不能,但你可以使用重複檢查器來查找精確的重複項(就像在任何其他文件系統上一樣)。您還可以使用
zdb -b poolname
來估計重複數據刪除的好處,以查看 RAM 增加是否適合您的情況。此外,啟用壓縮在任何情況下都會有所幫助,因此如果您還沒有使用它,請啟用它。