MD RAID 扇区修复

Hal*_*aar 5 raid mdadm md

本文指出 RAID 控制器对不可恢复的读取错误很聪明,并尝试使用组件驱动器的冗余来重写此类扇区。如果扇区坏了,磁盘的固件会透明地重新分配扇区。

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

sho*_*hok 2

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

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

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

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

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

注意:理论上,与 RAID5 和 2 路 RAID1 相比,RAID6 或 3 路 RAID1 布局可以通过使用某种形式的“多数投票”来提供一些额外的防比特腐烂保护。然而,由于它会对性能造成巨大影响,所以我在常见实现中从未见过这种行为。请参阅此处了解更多详细信息。