在过去的 3 天里,我一直在查看 Raid 级别。并且一直在权衡突袭控制器硬件/软件的利弊。我知道 RAID 不是一种备份解决方案,我对此非常满意,尽管仍然存在一个问题。
RAID 控制器,甚至是 Raid 1 到 Raid 6 是如何实际检测到硬盘驱动器发生故障的。我所做的研究表明,大多数常见的硬盘驱动器制造商在其硬盘驱动器设计中使用 ECC,以防止 3 位范围内的 1 位故障。
尽管在考虑这一点时,假设您有 Raid (1) 和两个相同的硬盘驱动器。假设从驱动器 0 读取数据,同时从驱动器 1 读取数据。虽然驱动器 1 向 Raid 控制器报告 ECC 读取失败。
现在这是一个大问题,对于硬件raid,Raid 控制器会做什么?它从硬盘收到读取失败的信号。它可以报告硬盘驱动器故障并需要更换。
Raid 控制器是否会寻找不同的硬盘驱动器获取数据,直到从驱动器成功读取。(是的,驱动器可以报告读取正确并且数据仍然可能损坏,并且 RAID 不会在读取时检查极性或 ECC)
我问过一位正在给我们演讲的 NetApp 工程师这个问题。他的回答或多或少是:
这个问题的答案很大程度上取决于 RAID 控制器制造商以及他们如何实现错误/故障驱动器检测。
RAID 实现可以通过多种方法评估磁盘的“健康状况”(SMART、SCSI“检查条件”和“Sense Key”消息),但我不知道任何已发布的关于 RAID 实现方式的“标准”应该对这些方法采取行动。每个制造商和型号的 RAID 控制器固件(或就此而言,操作系统中的软件 RAID 实现)使用的具体步骤将根据制造商的设计而有所不同。
如今,所有硬盘驱动器都使用纠错码 (ECC)。在数据密度上,我们处理误码只是生活中的事实。不可恢复的读取错误对 RAID 控制器很重要。在您感兴趣的级别上,您必须了解 RAID 控制器和驱动器固件的设计规范,才能真正了解如何将设备堆栈上的媒体错误报告给操作系统,并最终报告给用户。
实施完全取决于制造商。他们可以使用任何工具组合......计算写入驱动器时的数据奇偶校验,如果它是错误的,它会标记一个可能的问题,如果有板载 SMART 状态,它可以观察硬盘状态,直接从驱动器读取错误,查看特定驱动器是否存在多个错误等问题...
我有一个不知道驱动器存在问题的控制器。我们有一个三驱动器 RAID 5,其中一个磁盘完全失败。安装了一个新驱动器,并且在重建其中一个好磁盘的过程中出现了一个不可恢复的读取错误,随着驱动器变得越来越大并且制造商在制造过程中允许一定数量的这些驱动器,这个问题越来越多。最终结果?从裸机备份重建。因此,当您询问控制器如何“知道”驱动器坏了时,它不一定知道。
换句话说,RAID 控制器尽其所能。他们仍然失败。
最终结果是 RAID 控制器通常通过从软件中提取工作来简化您的设置,它们将处理能力卸载到专用硬件,并且它们(通常)添加了一些更好的支持来告诉最终用户哪个驱动器是坏的(通过软件工具和/或闪烁的灯光),因此您不必猜测哪个是坏的。
软件 RAID 与操作系统集成,它便宜得多,而且现在几乎一样可靠(如果您特别是在谈论 Linux)并且几乎一样快速(在某些情况下,速度更快)。与许多控制器不同,它也不需要特殊的驱动程序。如果您使用高端卡,它的性能可能会更好,但对于大多数家庭级 RAID,它们的速度往往相当。
如果您谈论的是主板 RAID,它并不是真正的 RAID。这是一个糟糕的软件 RAID 版本,如果你的主板出现问题,它几乎不可能恢复数据,因为它们通常是特定于供应商的,它们如何处理驱动器上的数据。我曾经遇到过系统出现故障并且您无法将驱动器从阵列转移到另一个系统以从中恢复数据的情况。
总体而言,除非您正在谈论企业中的服务器 RAID 或有真正的特殊需求,否则软件 RAID 可能与硬件 RAID 相当,90% 的家庭用户会使用它。