我的情况和这个不一样。
我有一个带有 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)
Run Code Online (Sandbox Code Playgroud)
我的第三个驱动器失败了。一开始,没什么大不了的,阵列还在工作。但是 1 天后,当我准备交换坏磁盘时,系统无法再使用新磁盘启动:
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
Run Code Online (Sandbox Code Playgroud)
它停在那里。我没有壳。我试图但在救援磁盘上,但我不知道如何从那里开始:我的阵列没有被看到,所以我无法重建它们。如果我用 2 个磁盘启动,或者用坏磁盘作为我的第三个驱动器,则完全相同的问题。
有了新驱动器后,我该如何修复阵列?
不知何故,您已经设法将阵列停止在脏状态(这意味着 RAID 系统无法确定所有磁盘上的奇偶校验都正常)。如果机器突然断电或其他一些引起写入空洞的事件,就会发生这种情况。
我怀疑从救援 CD 手动重新组装阵列,使用 --force 选项可能会起作用,如下所示:
mdadm --assemble --force /dev/md2 /dev/sda2 /dev/sdb2 missing
Run Code Online (Sandbox Code Playgroud)
(用构成 RAID-5 阵列的现有设备替换 /dev/sd... )。假设可行并且 /proc/mdstat 显示组装的阵列(处于降级状态),那么您可以添加新分区,如下所示:
mdadm /dev/md2 --add /dev/sdc2
Run Code Online (Sandbox Code Playgroud)
如果最初的强制组装没有奏效,那么你就深陷小溪了。与谷歌的几分钟发现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应该修复),或者一个或多个文件的内容可能损坏(如果不验证分区上所有文件的内容,您将不会知道)。