Linux mdadm 软件 RAID 6 - 它是否支持位损坏恢复?

Linux mdadm 软件 RAID 6 - 它是否支持位损坏恢复?

维基百科称“除了 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

Linux 软件 RAID 不会保护您免受位损坏和静默数据损坏的困扰。事实上,如果内核能够从一个磁盘读取数据,它永远不会知道它是坏的。只有在读取数据时出现 I/O 错误时,RAID 才会启动。

如果你担心数据完整性,你应该考虑使用如下文件系统文件系统或者虚拟文件系统通过存储和验证校验和来确保数据完整性。这些文件系统还负责 RAID 功能,因此如果您采用这种方式,则不需要内核软件 raid。

答案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 的算法依赖于位置,因此它可以检测哪个驱动器包含错误并纠正位损坏。

相关内容