我的软件 RAID5 (mdadm) 系统由五个磁盘组成。最近,我在读取某些文件时出现 I/O 错误。大多数其他文件仍可读取。
一开始我打算找出哪个磁盘坏了(使用 smartctl),然后快速替换故障磁盘,以便在其他磁盘也发生故障之前重建阵列。但是,smartctl 显示三磁盘有无法纠正的错误。
我认为,只要这三个磁盘的坏扇区不相交,mdadm 仍然应该能够重建,这样我就可以选择逐个交换和重建。
或者,我出现 I/O 错误这一事实是否已经表明奇偶校验丢失,并且多个磁盘上的同一扇区无法读取?是否有某种方法可以查明任何故障扇区是否相交,从而导致信息不可逆转地丢失?
答案1
标准程序如下:
- 始终保持良好、最新的备份(至少在不同地点、不同媒介上有两个独立的副本)
- 持续监视器RAID 出现问题。如果错误不断累积,RAID 就毫无价值。
- 擦洗每月至少检查一次磁盘。这样可以避免错误累积并阻止重建。
- 考虑RAID 6具有两个冗余磁盘。
你似乎没有认真对待这件事。尝试恢复仍然存在的内容现在。尝试重建几乎失败的阵列可能会造成比您预期的更大的损害。
如果数据足够有价值,请寻找值得信赖且有能力的数据恢复服务。留出四到五位数的现金。否则,请重复一遍 - 更换磁盘,重新格式化,重新安装并更认真地执行标准程序。
答案2
你是对的,如果不可读扇区“不相交”,即位于不同的条带中,MD RAID可能使用奇偶校验恢复数据。但是恢复过程中可能会踢出一些驱动器,然后机会将大大下降。
数据恢复有一条一般规则:总是从原始转储开始。这保证您可以无限次尝试:如果您搞砸了某件事,您可以重新开始转储。因此,一般来说,您可以将所有坏掉的磁盘克隆到一些正常工作的磁盘上,读取错误,然后使用新磁盘组装 RAID。
您可以先将每个驱动器逐个扇区地克隆到替换驱动器
ddrescue
(即不是通过使用 MD RAID 恢复程序)。除了复制错误之外,它还创建了所谓的日志档案,这实际上是坏扇区图。当您克隆所有这三个图时,您可以比较这些图并找出是否有交集。不要扔掉它们,这些图可能会在恢复过程中为您提供帮助。但是,RAID5 在这种转储方面非常糟糕。可能出什么问题?如果您的驱动器扇区根本没有读取并抛出 I/O 错误,RAID 层将从其他磁盘恢复该数据;旧磁盘就是这种情况。但是,如果它读取时没有错误,但返回错误的数据,RAID 将不会尝试从奇偶校验中恢复它,而是返回错误的数据。
ddrescue
将用零填充不可读的扇区,如果您稍后使用此克隆设备组装阵列,这些扇区将被读回,因此这将转换为读取零(损坏的数据),而有可能恢复原始数据。RAID 不保证数据正直。这是所有变体的真正问题,除了具有两个奇偶校验的 RAID6 或具有两个以上镜像的 RAID1。而且,您可能已经猜到了,这个问题在 RAID5 的情况下以最具破坏性的方式表现出来。(对此还有额外的考虑,与现代磁盘大小及其误码率有关。)在任何克隆操作过程中,磁盘可能会完全损坏。然后你就陷入困境。在此之后,有可能进行恢复,但这会花费你很多。有些服务提供“洁净室”,例如,他们可以更换硬盘内的磁头并重新尝试读取;这种方法速度很慢,容易出错,而且收费可能很高。如果您的数据非常有价值,请考虑这种方法。
因此,克隆原始磁盘是明智之举,但随后将克隆磁盘放好,从原来的磁盘并尝试从阵列本身克隆(
/dev/mdX
)。如果出现问题(磁盘坏了),请用克隆替换它,然后手动恢复损坏的条带(阅读第 4 页),查阅日志文件(第 3 页)这是相当辛苦的工作。还要注意,你需要备用两次原始空间来执行恢复。或者什么都不做,将整个工作外包给专家。这是您因阵列和数据维护不当而付出的代价。现在,您已经获得了宝贵的经验。不要责怪数组,而要责怪自己,吸取教训并正确管理它们:
- 使用 RAID5 前请三思。然后说“不”,并选择其他 RAID 级别。
- 定期清理阵列。这意味着 MD RAID 将读取和比较驱动器上的数据,如果出现问题(不匹配、无法读取的块),它会发出警报。然后,您可以在早期症状出现时更换表现不佳的驱动器。好的发行版开箱即用(至少 Debian 是这样)。
- 监控磁盘和阵列,以免错过问题的重要迹象。
- 最后,欢迎加入定期备份数据的管理员俱乐部。