Halfgaar Asked: 2014-07-25 23:12:30 +0800 CST2014-07-25 23:12:30 +0800 CST 2014-07-25 23:12:30 +0800 CST MD RAID扇区修复 772 本文指出 RAID 控制器对不可恢复的读取错误很聪明,并尝试使用组件驱动器的冗余重写此类扇区。如果扇区坏了,磁盘的固件会透明地重新分配扇区。 Linux MD RAID 做类似的事情吗?也许我的 Google-Fu 不好,但我找不到任何关于它的信息。 raid 2 个回答 Voted Best Answer shodanshok 2020-03-23T06:11:58+08:002020-03-23T06:11:58+08:00 简短回答:镜像和基于奇偶校验的 RAID 布局支持在正常读取和擦除期间使用所谓的良好数据修复坏扇区。然而,经典的 RAID(基于硬件和软件)对无声数据损坏无能为力,这需要以数据校验和的形式提供更强的保护(例如,由 BTRFS 和 ZFS 提供)。 长答案:问题和提供的答案混淆了关于磁盘、MDRAID 和校验和文件系统如何工作的不同概念。让他们一一解释;无论如何,请考虑确切的行为在某种程度上取决于固件和实现: 第一道防线是磁盘自身的内部 ECC:当某些位变坏时,嵌入式 ECC 恢复启动,实时纠正受影响的错误。低 ECC 读取率通常不会导致自动扇区修复/重新分配;但是,如果 ECC 错误累积并增加,磁盘的固件最终会在受影响的扇区变得不可读之前重新分配它(这将被 SMART 属性计为“重新分配的偶数计数”)。有的企业盘会定期读取所有扇区,及时发现有问题的扇区(见SAS/SATA表面扫描)。 如果该扇区很少被读取并且磁盘没有“看到”逐渐损坏的扇区数据,则读取可能会突然失败(“待定扇区”SMART属性)并且受影响的数据会丢失。磁盘将向操作系统报告 SATA READ ERROR 并继续运行。如果使用 RAID 1/5/6 方案,系统有足够的冗余来重建丢失的数据,覆盖失败的扇区,并根据磁盘固件强制重新分配扇区。传统上,硬件 RAID 卡和 MDRAID(Linux 软件 RAID)以这种方式工作,依靠 HDD 自己的重新映射功能。较新的硬件 RAID 卡和 MDADM 版本进一步提供了一个内部重新映射列表,如果/当 HDD 无法重新映射受影响的扇区时(即:因为没有可用的备用扇区),该列表就会启动;您可以在md手册页中阅读更多内容,尤其是“恢复”部分。这显然意味着应该立即更换磁盘。为了避免太晚发现太多不可读扇区,所有 RAID 实现都支持“scrub”或“patrol read”操作,其中定期读取整个阵列以测试底层磁盘。 上述保护方案仅在向 RAID 卡和/或操作系统明确报告读/写错误时才有效。在静默数据损坏的情况下(即:磁盘返回错误数据而不是明确错误),这种方法是无用的。为了保护自己免受无声数据损坏(根据定义,任何 SMART 属性都不会报告),您需要一个额外的校验和来验证返回数据的正确性。这种额外的保护可以基于硬件(即:SAS T10 扩展)、基于块设备软件(即:dm-integrity)或完全集成的校验和文件系统(BTRFS 和 ZFS)。谈到 ZFS 和 BTRFS,它们支持与它们的 RAID 对象类似但不相同的“清理”操作(即:仅扫描实际分配的空间/数据)。 注意:与 RAID5 和 2 路 RAID1 相比,RAID6 或 3 路 RAID1 布局理论上可以通过使用某种形式的“多数投票”来提供一些额外的保护,以防止比特腐烂。但是,由于它会对性能造成巨大影响,因此我从未在常见的实现中看到过这种行为。有关更多详细信息,请参见此处。 peterh 2014-07-26T00:30:03+08:002014-07-26T00:30:03+08:00 严格意义上的 linux md raid 无法做到这一点,但 dmraid(设备映射器,lvm 的内核端)有一个坏块重映射器模块。 当然 dm 和 md 可以并行使用。在其最流行的配置中,raid 阵列上有一个 lvm 卷组。这也可以使用 badblock 映射器进行扩展。 我必须注意:当前的硬盘控制器在其固件中具有这样的坏块映射器功能。 大多数专业的系统管理员不会使用带有坏块的磁盘,但他们会在第一个问题后将其丢弃。他们通过成本风险计算解释了这一点,但事实并非如此。事实是,他们只是懒惰。大多数操作系统(尤其是linux)都有很好的坏块处理,你可以毫无顾忌地使用这样的硬盘。
简短回答:镜像和基于奇偶校验的 RAID 布局支持在正常读取和擦除期间使用所谓的良好数据修复坏扇区。然而,经典的 RAID(基于硬件和软件)对无声数据损坏无能为力,这需要以数据校验和的形式提供更强的保护(例如,由 BTRFS 和 ZFS 提供)。
长答案:问题和提供的答案混淆了关于磁盘、MDRAID 和校验和文件系统如何工作的不同概念。让他们一一解释;无论如何,请考虑确切的行为在某种程度上取决于固件和实现:
第一道防线是磁盘自身的内部 ECC:当某些位变坏时,嵌入式 ECC 恢复启动,实时纠正受影响的错误。低 ECC 读取率通常不会导致自动扇区修复/重新分配;但是,如果 ECC 错误累积并增加,磁盘的固件最终会在受影响的扇区变得不可读之前重新分配它(这将被 SMART 属性计为“重新分配的偶数计数”)。有的企业盘会定期读取所有扇区,及时发现有问题的扇区(见SAS/SATA表面扫描)。
如果该扇区很少被读取并且磁盘没有“看到”逐渐损坏的扇区数据,则读取可能会突然失败(“待定扇区”SMART属性)并且受影响的数据会丢失。磁盘将向操作系统报告 SATA READ ERROR 并继续运行。如果使用 RAID 1/5/6 方案,系统有足够的冗余来重建丢失的数据,覆盖失败的扇区,并根据磁盘固件强制重新分配扇区。传统上,硬件 RAID 卡和 MDRAID(Linux 软件 RAID)以这种方式工作,依靠 HDD 自己的重新映射功能。较新的硬件 RAID 卡和 MDADM 版本进一步提供了一个内部重新映射列表,如果/当 HDD 无法重新映射受影响的扇区时(即:因为没有可用的备用扇区),该列表就会启动;您可以在
md
手册页中阅读更多内容,尤其是“恢复”部分。这显然意味着应该立即更换磁盘。为了避免太晚发现太多不可读扇区,所有 RAID 实现都支持“scrub”或“patrol read”操作,其中定期读取整个阵列以测试底层磁盘。上述保护方案仅在向 RAID 卡和/或操作系统明确报告读/写错误时才有效。在静默数据损坏的情况下(即:磁盘返回错误数据而不是明确错误),这种方法是无用的。为了保护自己免受无声数据损坏(根据定义,任何 SMART 属性都不会报告),您需要一个额外的校验和来验证返回数据的正确性。这种额外的保护可以基于硬件(即:SAS T10 扩展)、基于块设备软件(即:dm-integrity)或完全集成的校验和文件系统(BTRFS 和 ZFS)。谈到 ZFS 和 BTRFS,它们支持与它们的 RAID 对象类似但不相同的“清理”操作(即:仅扫描实际分配的空间/数据)。
注意:与 RAID5 和 2 路 RAID1 相比,RAID6 或 3 路 RAID1 布局理论上可以通过使用某种形式的“多数投票”来提供一些额外的保护,以防止比特腐烂。但是,由于它会对性能造成巨大影响,因此我从未在常见的实现中看到过这种行为。有关更多详细信息,请参见此处。
严格意义上的 linux md raid 无法做到这一点,但 dmraid(设备映射器,lvm 的内核端)有一个坏块重映射器模块。
当然 dm 和 md 可以并行使用。在其最流行的配置中,raid 阵列上有一个 lvm 卷组。这也可以使用 badblock 映射器进行扩展。
我必须注意:当前的硬盘控制器在其固件中具有这样的坏块映射器功能。
大多数专业的系统管理员不会使用带有坏块的磁盘,但他们会在第一个问题后将其丢弃。他们通过成本风险计算解释了这一点,但事实并非如此。事实是,他们只是懒惰。大多数操作系统(尤其是linux)都有很好的坏块处理,你可以毫无顾忌地使用这样的硬盘。