维基百科说:“RAID 2 是唯一的标准 RAID 级别,除了 RAID 6 的某些实现之外,RAID 6 可以自动从数据中的单位损坏中恢复准确的数据。”
有谁知道 Linux 中的 RAID 6 mdadm 实现是否是一种可以自动检测单位数据损坏并从中恢复的实现。如果 CentOS / Red Hat 6 与其他版本不同,则这适用于 CentOS / Red Hat 6。我尝试在线搜索,但运气不佳。
SATA 错误率为 1 分之 1E14 位,而 2TB SATA 磁盘包含 1.6E13 位,这与防止数据损坏特别相关。
编辑 2015 年 6 月 17 日
我相信这不像我最初想的那样令人担忧 - 请参阅硬盘/SSD - 错误的检测和处理 - 是否可靠地防止了静默数据损坏?更多细节
Linux 软件 RAID 不会保护您免受位损坏,静默数据损坏是它的一个众所周知的问题。事实上,如果内核能够从一个磁盘读取数据,它永远不会知道它是坏的。RAID 只有在读取数据时出现 I/O 错误时才会启动。
如果您担心数据完整性,您应该考虑使用像Btrfs或ZFS这样的文件系统,它们通过存储和验证校验和来确保数据完整性。这些文件系统还负责 RAID 功能,因此如果您采用这种方式,则不需要内核软件 raid。
如果您验证整个驱动器的奇偶校验,RAID5 和 RAID6 可以检测并通常纠正位损坏。这称为“清理”或“奇偶校验”,在大多数生产 RAID 系统上通常需要 24-48 小时。在此期间,性能可能会显着下降。(有些系统允许操作员将清理优先于读/写访问或低于它。)RAID6 有更高的机会纠正它,因为如果你有两个驱动器故障它可以纠正它,而 RAID5 只能处理 1 个驱动器故障,并且由于活动增加,在擦洗时更有可能发生驱动器故障。
以上所有关于 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 综合症错误,但从错误消息中不清楚它们是否正在更正 - 它不会停止驱动器阵列,也不会在消息中识别任何特定驱动器。
我会把它添加为评论,但我没有足够的声誉;我想澄清一下:RAID5 可以检测到位损坏,但它不知道哪个驱动器有损坏而没有读取错误。因此,如果没有读取错误,清理无法修复此问题 - 它很可能只是记录它并更新奇偶校验位以匹配。RAID6 的算法是位置相关的,因此它可以检测到哪个驱动器包含错误并纠正位损坏。