RAID 如何检测有故障的 HD?

RAID 如何检测有故障的 HD?

过去 3 天,我一直在查看 Raid 级别。并且一直在权衡 RAID 控制器硬件/软件的利弊。我知道 RAID 不是备份解决方案,我完全可以接受,但还有一个问题。

RAID 控制器(甚至 Raid 1 到 Raid 6)如何真正检测到硬盘驱动器发生故障。我所做的研究表明,大多数常见硬盘驱动器制造商在其硬盘驱动器设计中使用 ECC,该设计旨在防止 1 位故障到 3 位故障。

但是,考虑一下这个问题,假设您有 Raid (1) 和两个相同的硬盘驱动器。假设从驱动器 0 读取数据,同时从驱动器 1 读取数据。但是驱动器 1 向 Raid 控制器报告 ECC 读取失败。

现在,这是一个大问题,有了硬件 RAID,RAID 控制器会做什么?它收到硬盘发出的读取失败信号。它可以报告硬盘驱动器有故障,需要更换。

Raid 控制器是否会在其他硬盘驱动器上寻找数据,直到成功从该驱动器读取数据。(是的,驱动器可以报告读取正确,但数据仍然可能损坏,并且 RAID 不会在读取时检查极性或 ECC)

答案1

我向正在给我们做演讲的一位 NetApp 工程师询问了这个问题。他的回答大致如下:

没有人会在读取时读取校验和。这毫无意义。读取校验和意味着您必须读取整个切片加上校验和,然后计算校验和以验证您是否拥有正确的数据。如果您运行的是 RAID-6 或其他系统,则还要加上正交校验和。这完全会降低性能,因为它会破坏同时随机搜索不同磁盘上完全不同扇区的能力。同样,几乎没有人会读取 RAID-1 中镜像的两侧,因为如果您只读取一侧,则可以交替读取镜像的哪一侧,从而获得更快的吞吐量,并且如果突然出现不匹配,您会认为哪个磁盘正确,哪个磁盘损坏?所有现代 RAID 系统都依赖于磁盘控制器向 RAID 控制器发出信号,告知它们处于故障状态(通过 SMART 或类似方式),此时该磁盘几乎总是被踢出阵列。校验和用于重建阵列,而不是用于读取验证。

答案2

这个问题的答案在很大程度上取决于 RAID 控制器制造商以及他们如何实施错误/故障驱动器检测。

答案3

RAID 实现可以使用多种方法来评估磁盘的“健康状况”(SMART、SCSI“检查条件”和“感知密钥”消息),但我不知道有任何已发布的“标准”规定 RAID 实现应如何根据这些方法采取行动。每个品牌和型号的 RAID 控制器固件(或者,就此而言,操作系统中的软件 RAID 实现)使用的具体步骤将因制造商的设计而异。

如今,所有硬盘驱动器都使用纠错码 (ECC)。在我们工作的数据密度下,位错误是不可避免的事实。不可恢复的读取错误对 RAID 控制器来说很重要。在您感兴趣的层面上,您必须拥有 RAID 控制器和驱动器固件的设计规格,才能真正理解介质错误如何通过设备堆栈向上报告给操作系统,并最终报告给用户。

答案4

实施完全由制造商决定。他们可以使用任何工具组合...在将数据写入驱动器时计算奇偶校验,如果数据错误,它会标记可能存在的问题,如果有板载 SMART 状态,它可以监视硬盘状态,直接从驱动器读取错误,通过特定驱动器的多个错误查看是否存在问题,等等...

我曾经有一个控制器,它不知道驱动器有问题。我们有一个三驱动器 RAID 5,其中一个磁盘完全失效。安装了一个新驱动器,在重建其中一个好磁盘的过程中,出现了不可恢复的读取错误,随着驱动器越来越大,制造商在制造过程中允许一定数量的此类错误,这个问题越来越严重。最终结果?从裸机备份重建。因此,当您问控制器如何“知道”驱动器坏了时,它不一定知道。

换句话说,RAID 控制器只是尽了最大努力。但它们仍然会失败。

最终结果是,RAID 控制器通常通过从软件中抽象工作来简化您的设置,它们将处理能力卸载到专用硬件,并且它们(通常)添加一些更好的支持来告诉最终用户哪个驱动器是坏的(通过软件工具和/或闪烁的灯光),所以您不必猜测哪一个是坏的。

软件 RAID 与操作系统集成,价格便宜得多,而且现在几乎一样可靠(特别是如果您谈论的是 Linux)并且速度也几乎一样快(在某些情况下更快)。与许多控制器不同,它不需要特殊驱动程序。如果您使用高端卡,它的性能可能会更好,但对于大多数家用级 RAID 来说,它们的速度往往相当。

如果您说的是主板 RAID,那它实际上并不是 RAID。它是软件 RAID 的劣质版本,如果您的主板出现问题,它几乎无法恢复数据,因为它们通常会根据供应商的不同而改变驱动器上的数据。我遇到过系统出现故障而您无法将驱动器从阵列移到另一个系统来恢复数据的情况。

总体而言,除非您谈论的是企业服务器的 RAID 或者有真正特殊的需求,否则软件 RAID 可能与硬件 RAID 相当,占家庭用户使用功能的 90%。

相关内容