RAID如何检测有故障的HD?

过去3天里我一直在关注Raid级别。 而且一直在权衡RAID /硬件/软件的利弊。 我明白,RAID不是一个备份解决scheme,我完全没有问题,但仍然有一个问题。

一个RAID控制器,甚至Raid 1到Raid 6如何检测到硬盘驱动器发生故障。 我所做的研究表明,大多数常见的硬盘驱动器制造商在他们的硬盘驱动器devise中使用ECC,假设在一定程度上防止1位故障达到3位。

虽然在想这个时,可以说你有Raid(1)和两个相同的硬盘驱动器。 比方说,从驱动器0读取数据,同时从驱动器1读取数据。尽pipe驱动器1向RAID控制器报告了ECC读取失败。

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

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

我问了一个正在给我们讲这个问题的NetApp工程师。 他的答案或多或less是:

没有人读取校验和。 毫无意义。 读取校验和意味着您必须读取整个片加校验和,然后计算校验和以validation您是否具有正确的数据。 加上正交校验和,如果你正在运行RAID-6或其他。 这是一个全面的性能杀手,因为它打破了同时在不同磁盘上随机寻找完全不同扇区的能力。 同样,几乎没有人会用RAID-1读取镜像的两面,因为如果只读取一面,则可以replace读取的镜像的哪一面,以便获得更快的吞吐量,而且如果突然出现不匹配,你采取的是正确的,你认为哪个是坏的? 所有的现代RAID系统都依靠磁盘控制器向RAID控制器发出信号(通过SMART或类似的方式),此时磁盘几乎总是被踢出arrays。 校验和用于重build数组,而不用于读取validation。

问题的答案将取决于RAID控制器制造商,以及他们如何实施错误/失败的驱动器检测。

RAID实现可以通过多种方法来评估磁盘的“健康状况”(SMART,SCSI“Check Condition”和“Sense Key”消息),但是我不知道任何已发布的“标准”应该采取这些方法。 每个RAID控制器固件(或者,在操作系统中的软件RAID实现)使用的具体步骤将根据制造商的devise而变化。

所有硬盘驱动器今天使用纠错码(ECC)。 在数据密度方面,我们正在努力解决误码问题,这只是一个事实。 不可恢复的读取错误对RAID控制器而言是重要的。 在您感兴趣的级别,您必须拥有RAID控制器和驱动器固件上的devise规格,才能真正了解如何将媒体错误报告给设备堆栈,最终向操作系统以及最终用户报告。

实施完全取决于制造商。 他们可以使用任何工具组合…计算数据在写入驱动器时的奇偶校验,如果数据是错误的,则会标记出可能的问题,如果有SMART状态,则可以观察硬盘状态,直接从驱动器读取错误,看看是否有问题通过多个错误到一个特定的驱动器等…

我有一个控制器,不知道有一个驱动器的问题。 我们有一个三个驱动器的RAID 5,其中一个磁盘完全失败。 安装了一个新的驱动器,并在重build过程中的一个好的磁盘上挂起一个不可恢复的读取错误,这是一个越来越多的问题,因为驱动器变得越来越大,制造商允许在制造过程中的一定数量的这些问题。 最终结果? 从裸机备份重build。 所以当你问控制器如何“知道”这个驱动器是坏的,它不一定知道。

换句话说,RAID控制器只是尽其所能。 他们仍然失败。

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

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

如果你在谈论主板RAID,那不是真的RAID。 这是一个糟糕的软件RAID版本,如果你的主板是南下的话,它几乎不可能恢复数据,因为它们通常是厂商特有的,如何混淆驱动器上的数据。 我遇到了系统发生故障的情况,您无法将arrays中的驱动器从另一个系统中恢复数据。

总的来说,除非你正在谈论业务中的服务器的RAID,或者有真正专门的需求,否则软件RAID可能与家庭用户使用它的硬件RAID相当。