硬盘 / SSD - 检测和处理错误 - 是否可靠地防止了静默数据损坏?

sa2*_*289 1 linux raid hard-drive ssd mdadm

当驱动器发生错误时,假设它总是会被检测到并将其报告给操作系统(如果是软件 RAID,例如 mdadm)或 RAID 控制器(如果是硬件 RAID)作为读取失败(即不会静默返回损坏的数据),然后 RAID 软件/控制器将采用该事实并使用 RAID 中的其他驱动器来读取数据(假设它是具有冗余的 RAID 类型)?

据我了解,现代企业级驱动器具有到位的错误检测方案,所以我假设情况确实如此,但很难在网上找到任何结论。我想这个答案在一定程度上取决于驱动器内置的错误检测的质量,所以如果重要的话,我对英特尔 DC S3500 系列固态硬盘最感兴趣。

编辑 5-Jun-2015 - 澄清:

具体来说,我想知道今天用于检测错误的算法是否防弹。在一个简单的例子中,如果错误检测只是对扇区中的所有位进行异或,那么如果两个位被翻转,则不会检测到错误。我想它们比这更先进,但我想知道错误未被发现的几率是多少,如果它低到我们甚至不必担心它,以及是否有一些权威来源或值得信赖的文章可以在某个地方被引用。

编辑 2015 年 6 月 10 日

更新了问题标题和问题正文,使其更符合磁盘错误的概念(不像原来那样以 mdadm 为中心)。

Lar*_*ars 6

硬盘驱动器确实有多种纠错方法来防止数据损坏。硬盘驱动器分为扇区,其中一些可能会变得完全不可写/无法读取或通过数据损坏返回错误数据 - 我们称之为第一个坏扇区损坏和后者无声数据损坏

坏部门腐败

驱动器本身已经通过多种方式处理了第一个损坏。在工厂,每个制造的驱动器都经过了坏扇区测试,这些坏扇区被放入主要缺陷列表 (p-list) 中。在驱动器的正常使用过程中,内部系统可能会通过正常磨损发现更多的坏道——这些坏道被放入Grown Defect List (g-list) 中。有些驱动器有更多的列表,但这两个是最常见的。

驱动器本身通过将硬盘驱动器扇区的访问重新映射到备用扇区而不通知操作系统来应对这些错误。但是,每次重新映射发生时,硬盘驱动器 SMART 系统中的相应值都会增加,从而表明硬盘驱动器的磨损越来越大。要寻找的指标是 SMART 5 - 重新分配的扇区数,而其他重要的指标是 187(报告的不可纠正错误)、197(当前未决扇区数)和 198(离线不可纠正)。

为了查找坏扇区,硬盘驱动器使用内部纠错码 (ECC),可用于确定特定扇区中数据的完整性。这样,它可以检查扇区中的写入和读取错误,并在必要时更新 g-list。

来源

静默数据损坏

由于我们确实有相当多的内部数据完整性检查,静默数据损坏应该非常罕见——毕竟,由于硬盘驱动器具有可靠地持久保存数据的任务,它们应该正确地完成这项工作。

为了将用户请求的读取或写入之外的静默数据损坏量保持在最低限度,RAID 系统会定期检查整个驱动器的 ECC 以更新 g-list(数据清理)。如果发生错误,则在检查扇区 ECC 后从另一个 RAID 成员重建数据。

然而,所有的数据校正和完整性检查都必须在某个地方完成——固件。这些低级程序中的错误可能仍会导致问题,机械问题和误报 ECC 总和也可能会导致问题。一个例子是未经检查的写入,固件错误地报告写入成功,而实际的硬盘写入没有发生或有故障(身份差异)。

有一些关于这些故障的统计发生率的研究,其中文件系统数据完整性检查确实报告了故障,而底层驱动器没有报告问题,因此显示了静默数据损坏。

TLDR:在 17 个月的时间跨度内,消费者磁盘中平均少于 0.3% 和企业磁盘中少于 0.02% 包含此类身份差异,检查了 150 万个磁盘(总共 365 个磁盘具有身份差异) - 参见表 10 和第 5 节在本出版物中

来源