MD RAID 扇区修复

MD RAID 扇区修复

本文指出 RAID 控制器能够智能处理不可恢复的读取错误,并尝试使用组件驱动器的冗余来重写这些扇区。如果扇区损坏,磁盘的固件将透明地重新分配该扇区。

Linux MD RAID 是否做了类似的事情?也许我的 Google-Fu 不好,但我找不到任何相关信息。

答案1

简短回答:镜像和基于奇偶校验的 RAID 布局支持在正常读取和清理期间用本应为良好的数据修复坏扇区。然而,传统 RAID(基于硬件和软件)无法防止静默数据损坏,这需要以数据校验和的形式提供更强大的保护(例如,由 BTRFS 和 ZFS 提供)。

长答案:问题和提供的答案混淆了关于磁盘、MDRAID 和校验和文件系统如何工作的不同概念。让我们逐一解释它们;无论如何,请考虑确切的行为在某种程度上取决于固件和实现:

  • 第一道防线是磁盘自身的内部 ECC:当某个位出现问题时,嵌入式 ECC 恢复功能就会启动,实时纠正受影响的错误。较低的 ECC 读取率通常不会导致自动扇区修复/重新分配;但是,如果 ECC 错误不断积累并不断增大,磁盘的固件最终将重新分配受影响的扇区它将变得不可读(这将被 SMART 属性算作“重新分配偶数计数”)。一些企业磁盘会定期读取所有扇区,以便及时发现问题扇区(请参阅 SAS/SATA 表面扫描)。

  • 如果扇区很少被读取,并且磁盘没有“看到”逐渐损坏的扇区数据,则读取可能会突然失败(“待处理扇区”SMART 属性),受影响的数据会丢失。磁盘将向操作系统报告 SATA 读取错误并继续运行。如果使用 RAID 1/5/6 方案,系统具有足够的冗余度来重建缺失的数据覆盖故障扇区,并根据磁盘固件强制扇区重新分配。传统上,硬件 RAID 卡和 MDRAID(Linux 软件 RAID)以这种方式工作,依赖于 HDD 自己的重新映射功能。较新的 HW RAID 卡和 MDADM 版本进一步提供了内部重新映射列表,当 HDD 无法重新映射受影响的扇区时(即:因为没有可用的备用扇区),该列表将启动;您可以在md手册页,尤其是“恢复”部分。这显然意味着磁盘应该立即更换。为了避免太晚发现太多不可读扇区,所有 RAID 实现都支持“清理”或“巡逻读取”操作,其中定期读取整个阵列以测试底层磁盘。

  • 上述保护方案仅在读/写错误明确报告给 RAID 卡和/或操作系统时才有效。在静默数据损坏的情况下(即:磁盘返回坏数据而不是明显的错误),这种方法是无用的。为了保护自己免受静默数据损坏(根据定义,任何 SMART 属性都不会报告),您需要一个额外的校验和来验证返回数据的正确性。这种额外的保护可以是基于硬件的(即:SAS T10 扩展)、基于块设备软件的(即:dm-integrity)或完全集成的校验和文件系统(BTRFS 和 ZFS)。说到 ZFS 和 BTRFS,它们支持与 RAID 对应方类似但不完全相同的“清理”操作(即:仅扫描实际分配的空间/数据)。

注:RAID6 或 3 路 RAID1 布局可以理论上与 RAID5 和双向 RAID1 相比,它通过使用某种形式的“多数表决”提供了一些额外的保护,以防止数据腐烂。然而,由于它需要大量的性能影响,我从未在常见实现中看到过此类行为。请参阅这里更多细节。

答案2

严格意义上的 linux md raid 无法做到这一点,但 dmraid(设备映射器,lvm 的内核端)有一个坏块重新映射器模块。

当然,dm 和 md 可以并行使用。在最流行的配置中,raid 阵列上有一个 lvm 卷组。这也可以通过 badblock mapper 进行扩展。

我必须注意:当前的硬盘控制器在其固件中具有这样的坏块映射器功能。

大多数专业系统管理员不会处理有坏块的磁盘,但他们在第一次出现问题后就将其丢弃。他们解释说这是出于成本风险的考虑,但事实并非如此。事实是,他们只是懒惰。大多数操作系统(尤其是 Linux)都有非常好的坏块处理功能,您可以毫无顾忌地使用这样的硬盘。

相关内容