tbol Asked: 2016-07-30 04:36:06 +0800 CST2016-07-30 04:36:06 +0800 CST 2016-07-30 04:36:06 +0800 CST ZFS :: bitrot(校验和) 772 据我所知,zfs 使用校验和来防止由 bitrot 引起的数据丢失。 但是如果 bitrot 影响校验和的数据会发生什么。那么,zfs 是认为数据已损坏还是认为校验和已损坏? Thx 4任何答案, tbol zfs data-loss 2 个回答 Voted John Mahowald 2016-07-30T04:44:28+08:002016-07-30T04:44:28+08:00 ZFS 通过将每个块的校验和存储在其父块指针中而不是块本身中来提供数据和校验和之间的故障隔离。树中的每个块都包含其所有子块的校验和,因此整个池都是自我验证的。 ZFS 端到端数据完整性 编辑:因为您询问了父母: 观察 1:ZFS 检测到由于使用校验和而导致的所有 [磁盘上] 损坏。在我们对所有元数据和数据的故障注入实验中,我们发现错误数据从未返回给用户,因为 ZFS 能够检测到由于在块指针中使用校验和而导致的所有损坏。ZFS 中使用父校验和来验证所有访问的磁盘块的完整性。唯一的例外是超级块,它没有父块指针。通过使用超级块本身内部的校验和来检测超级块的损坏。 文件系统的端到端数据完整性:ZFS 案例研究 你可以自己测试一下。在 ZFS 设备中间插入一个随机块,看看它是否保持完整性。 请注意,在该论文的下一部分中,他们表明内存损坏未被检测到。 Best Answer tbol 2016-07-30T04:59:40+08:002016-07-30T04:59:40+08:00 我找到了正确的解释: ZFS 存储池实际上只是一个块树。ZFS 通过将每个块的校验和存储在其父块指针中而不是块本身中来提供数据和校验和之间的故障隔离。树中的每个块都包含其所有子块的校验和,因此整个池都是自我验证的。[ uberblock(树的根)是一个特例,因为它没有父节点;更多关于我们如何在另一篇文章中处理的信息。] 当数据和校验和不一致时,ZFS 知道校验和是可以信任的,因为校验和本身是树中更高级别的某个其他块的一部分,并且该块已经过验证。 只有一个单点故障:如果树中的根节点损坏,但应该有解决方案 阅读@https ://blogs.oracle.com/bonwick/entry/zfs_end_to_end_data
ZFS 端到端数据完整性
编辑:因为您询问了父母:
文件系统的端到端数据完整性:ZFS 案例研究
你可以自己测试一下。在 ZFS 设备中间插入一个随机块,看看它是否保持完整性。
请注意,在该论文的下一部分中,他们表明内存损坏未被检测到。
我找到了正确的解释:
只有一个单点故障:如果树中的根节点损坏,但应该有解决方案
阅读@https ://blogs.oracle.com/bonwick/entry/zfs_end_to_end_data