维基百科称“除了 RAID 6 的某些实现之外,RAID 2 是唯一的标准 RAID 级别,它可以自动从数据中的单比特损坏中恢复准确的数据。”
有谁知道 Linux 中的 RAID 6 mdadm 实现是否是可以自动检测和恢复单比特数据损坏的实现之一。如果 CentOS / Red Hat 6 与其他版本不同,则这适用于 CentOS / Red Hat 6。我尝试在线搜索,但运气不佳。
SATA 错误率为 1E14 位中 1 个,而 2TB SATA 磁盘包含 1.6E13 位,这对于防止数据损坏尤其重要。
编辑于 2015 年 6 月 17 日
我相信这并不像我最初想象的那么令人担忧 - 请参阅硬盘/SSD - 错误检测和处理 - 是否可靠地防止静默数据损坏?更多细节
答案1
答案2
如果您验证整个驱动器的奇偶校验,RAID5 和 RAID6 可以检测并通常纠正位损坏。这称为“清理”或“奇偶校验”,在大多数生产 RAID 系统上通常需要 24-48 小时。在此期间,性能可能会显著下降。(某些系统允许操作员优先执行清理而不是读/写访问或低于读/写访问。)RAID6 更正此问题的可能性更高,因为如果您有两个驱动器故障,它可以更正此问题,而 RAID5 只能处理 1 个驱动器故障,并且由于活动增加,清理时更容易发生驱动器故障。
答案3
以上所有关于 RAID 6 功能的回答都是错误的。RAID 6 算法与 RAID 5 一样逐字节运行,如果任何一个驱动器上的单个字节损坏,即使驱动器没有指示错误,也可以检测到并纠正。这样做的算法在
https://mirrors.edge.kernel.org/pub/linux/kernel/people/hpa/raid6.pdf
为了执行此检查,还必须读取奇偶校验 P 和 Q 驱动器以及数据驱动器。如果计算出的奇偶校验 P' 和 Q' 不同且没有驱动器错误,则分析可以查明哪个驱动器不正确,并更正数据。
此外,如果驱动器标识指向不存在的驱动器(例如,如果只有 15 个驱动器,则指向驱动器 137),则多个驱动器会为该字节提供损坏的数据,表示存在无法纠正的错误。当驱动器组中的驱动器数量远远少于 256 个时,每个字节检测到这种情况的概率很高,而且由于块中有许多字节,因此每个块检测到这种情况的概率极高。如果驱动器标识与 RAID 块内的所有字节不一致,则同样,多个驱动器会提供损坏的数据,通常可能会拒绝这种情况,但只要所有驱动器标识都有效,就不一定拒绝该块。
执行此校正所需的时间比通常的验证时间要长,但只需在综合征(P 和 Q)计算显示错误时执行即可。
尽管如此,我还没有检查 mdadm 代码来确定是否处理了单字节损坏。我知道 mdadm 在每月扫描时会报告 RAID6 综合症错误,但从错误消息中无法确定这些错误是否正在得到纠正 - 它不会停止驱动器阵列,也不会在消息中识别任何特定驱动器。
答案4
我本想将此添加为评论,但我的声誉不够;我想澄清一下:RAID5 可以检测位损坏,但它不知道哪个驱动器在没有读取错误的情况下出现损坏。因此,清理无法在没有读取错误的情况下修复此问题 - 它很可能只是记录它并更新奇偶校验位以匹配。RAID6 的算法依赖于位置,因此它可以检测哪个驱动器包含错误并纠正位损坏。