ZFS :: bitrot(校驗和)
據我所知,zfs 使用校驗和來防止由 bitrot 引起的數據失去。
但是如果 bitrot 影響校驗和的數據會發生什麼。那麼,zfs 是認為數據已損壞還是認為校驗和已損壞?
Thx 4任何答案,
tbol
我找到了正確的解釋:
ZFS 儲存池實際上只是一個塊樹。ZFS 通過將每個塊的校驗和儲存在其父塊指針中而不是塊本身中來提供數據和校驗和之間的故障隔離。樹中的每個塊都包含其所有子塊的校驗和,因此整個池都是自我驗證的。
$$ The uberblock (the root of the tree) is a special case because it has no parent; more on how we handle that in another post. $$ 當數據和校驗和不一致時,ZFS 知道校驗和是可以信任的,因為校驗和本身是樹中更高級別的某個其他塊的一部分,並且該塊已經過驗證。
只有一個單點故障:如果樹中的根節點損壞,但應該有解決方案
閱讀@https ://blogs.oracle.com/bonwick/entry/zfs_end_to_end_data
ZFS 通過將每個塊的校驗和儲存在其父塊指針中而不是塊本身中來提供數據和校驗和之間的故障隔離。樹中的每個塊都包含其所有子塊的校驗和,因此整個池都是自我驗證的。
編輯:因為您詢問了父母:
觀察 1:ZFS 檢測到所有
$$ on disk $$由於使用校驗和而導致的損壞。在我們對所有元數據和數據的故障注入實驗中,我們發現錯誤數據從未返回給使用者,因為 ZFS 能夠檢測到由於在塊指針中使用校驗和而導致的所有損壞。ZFS 中使用父校驗和來驗證所有訪問的磁碟塊的完整性。唯一的例外是超級塊,它沒有父塊指針。通過使用超級塊本身內部的校驗和來檢測超級塊的損壞。
你可以自己測試一下。在 ZFS 設備中間插入一個隨機塊,看看它是否保持完整性。
請注意,在該論文的下一部分中,他們表明記憶體損壞未被檢測到。