最近有很多文章都提到 RAID5 很危险,因为重新同步时间很长,尤其是在重新同步过程中遇到 URE 的可能性增加。显然这是一个值得关注的问题。然而,似乎在许多情况下(只要你密切关注你的磁盘),当需要重建阵列时,我更换的磁盘仍然大多可读。
如果您尝试向普通外行解释这种困境,他们通常会非常困惑,为什么您有两个几乎完全正常工作的磁盘,却无法生成一个工作阵列。在我看来,应该有某种方法可以利用这一点,使重建更安全,只要我愿意在 RAID5 重建期间将其设置为只读几天即可。从概念上讲,我的想法是这样的:
- 当磁盘发生故障时,立即使 RAID5 脱机或以只读方式挂载
- 连接一个新磁盘(无论是在备用托架中,还是通过 eSATA 连接外部磁盘)并开始重建它以替换发生故障的磁盘。如果已知,也许可以从发生故障的条带开始,以尽量减少在另一个磁盘发生故障时丢失这些条带的可能性。
- 如果重建期间第二个磁盘出现 URE 或其他故障,请尝试从被替换的磁盘获取该数据。如果发生这种情况,则可能需要进行更多重建。
- 完成后,关闭服务器,将替换驱动器换入原始托架,然后重新启动阵列。
显然,这样的过程不适合正常运行时间至关重要或不能容忍数据丢失的应用程序,但在我看来,这可以大大有助于提高 RAID5 的可靠性。
我认为目前还没有很好的方法来实现这样的恢复,因为我还没有看到任何专门用于实现这种恢复的工具,而且手动操作似乎相当困难。是否还存在我没有想到的技术问题(我对 RAID 还不太熟悉)?您认为实现这样的恢复有多难(例如在 linux md raid 中)?
编辑:万一其他人在寻找与我相同的东西时发现了这一点,那么这已经是 md 较新版本中的一对功能。坏块列表(如果启用)允许 md 使单个块(而不是整个磁盘)发生故障,而热替换允许新磁盘主要从即将替换的磁盘构建,但在需要时从阵列中的其他磁盘中提取。最新 mdadm 的手册页有更多关于如何执行这些操作的说明。