自从 btrfs 开发开始以来,各个社区似乎都将其和 ZFS 吹捧为本质上更先进的文件系统,可以防止损坏、位腐烂等。
btrfs 或 ZFS 的哪些特性使得它们如此适合检测和维修会出现“比特腐烂”的情况吗?
btrfs 能否仅使用单个物理硬盘检测和修复位衰减,还是需要多个硬盘来实现冗余?如果是后者,为什么不在常规 RAID 配置上使用更稳定、更原始的文件系统(如 ext4 等)?
答案1
ZFS 除了存储原始数据外,还将存储该数据的每个块的哈希值。然后根据哈希值检查数据每次访问。这意味着,如果某个位被宇宙辐射翻转,文件系统就会知道该块的数据不完整。
损坏的数据将通过已知完好的数据副本进行修复,例如您建议的另一个物理 RAIDZ 磁盘。ZFS 数据集还具有一个copies
属性,可以配置该属性以使 ZFS 在单个磁盘上保留相同数据的多个副本。因此,实际上,即使在仅涉及一个物理磁盘的配置中,ZFS 也具有恢复损坏数据的机制。
btrfs 不像 ZFS 那样成熟和功能齐全,但遵循与 ZFS 相同的许多原则。
ext4 和 RAID 均不提供上述任何保证。RAID 仅设计用于从整个磁盘故障中顺利恢复,并且没有检测数据损坏的机制。