据我所知,zfs使用校验和来防止比特造成的数据丢失。
但是,如果一个位数影响校验和的数据会发生什么。那么,zfs是否认为数据已损坏,还是认为校验和已损坏?
任何答案,
泰波
发布于 2016-07-29 12:59:40
我找到了正确的解释:
ZFS存储池实际上只是一棵块树。ZFS通过将每个块的校验和存储在其父块指针中--而不是在块本身中,从而在数据和校验和之间提供故障隔离。树中的每个块都包含其所有子块的校验和,因此整个池是自验证的。uberblock (树的根)是一个特例,因为它没有父块;更多关于我们如何在另一篇文章中处理它.当数据和校验和不一致时,ZFS知道校验和是可以信任的,因为校验和本身是树中更高级别的其他块的一部分,并且该块已经过验证。
只有一个故障点:如果树中的根节点被清理,但是应该有一个解决方案
发布于 2016-07-29 12:44:28
ZFS通过将每个块的校验和存储在其父块指针中--而不是在块本身中,从而在数据和校验和之间提供故障隔离。树中的每个块都包含其所有子块的校验和,因此整个池是自验证的。
编辑:因为您询问了父母的情况:
观察1: ZFS检测由于使用校验和而导致的所有盘上损坏。在我们对所有元数据和数据进行的错误注入实验中,我们发现坏数据从未返回给用户,因为ZFS能够检测由于在块指针中使用校验和而导致的所有损坏。在ZFS中使用父母校验和来验证所访问的所有磁盘上块的完整性。唯一的例外是uberblock,它没有父块指针。通过在uberblock内部使用校验和来检测对uberblock的损坏。
你可以自己测试一下。在ZFS设备中间插入一个随机块,看看它是否保持完整性。
注意,在这篇论文的下一节中,他们表明在内存中没有发现腐败现象。
https://serverfault.com/questions/792700
复制相似问题