无法从故障的 RAID 中恢复

无法从故障的 RAID 中恢复

我的情况不同于这个

我有一台带有 3 个硬盘的 CentOS 系统,以及以下软件 RAID 阵列:

/boot on RAID 1 over 2 disks
/ on RAID 5 over 3 disks
swap on RAID 0 over 2 disks (I believe)

我的第三个驱动器坏了。一开始没什么大不了的,阵列仍在工作。但过了一天,当我准备更换坏磁盘时,系统无法再使用新磁盘启动:

md: md2: raid array is not clean -- starting background reconstruction
raid5: cannot start dirty degraded array for md2
raid5: failed to run raid set md2
[...]
Kernel panic

就此停止。我没有 shell。我尝试过使用救援磁盘,但我不知道如何从那里开始:看不到我的阵列,因此我无法重建它们。如果我使用 2 个磁盘启动,或者使用坏磁盘作为我的第 3 个驱动器,也会出现完全相同的问题。

现在我有了新的驱动器,如何修复阵列?

答案1

您以某种方式设法将阵列停止在脏状态(这意味着 RAID 系统无法确定所有磁盘上的奇偶校验是否正常)。如果机器突然断电或发生其他导致写入漏洞的事件,则可能会发生这种情况。

我怀疑使用救援 CD 手动重新组装阵列可能会起作用,如下所示:

mdadm --assemble --force /dev/md2 /dev/sda2 /dev/sdb2 missing

(将 /dev/sd... 替换为现存的组成 RAID-5 阵列的设备)。假设此方法有效,并且 /proc/mdstat 显示阵列已组装(处于降级状态),那么您可以添加新分区,如下所示:

mdadm /dev/md2 --add /dev/sdc2

如果最初的强制组装没有成功了,那么你就陷入困境了。用谷歌搜索了几分钟后,我发现http://www.linuxforums.org/forum/servers/77867-eeek-cant-assemble-degraded-dirty-raid6-array.html这似乎处理了类似的问题,因此可能值得尝试其中描述的工作(echo "clean" > /sys/block/md0/md/array_state),但这是一种稍微丑陋的做事方式。

不管你如何设法将 RAID 恢复到原来的状态,它变脏和退化的事实意味着内容真的不再可信。文件系统可能有元数据损坏(fsck应该修复),或者一个或多个文件的内容可能已损坏(如果不验证分区上所有文件的内容,您将不会知道这一点)。

答案2

系统救援光盘有 mdadm 工具,所以如果你知道如何使用它们,它应该对你有用。

相关内容