无法从失败的 RAID 中恢复

Jul*_*ien 3 linux raid lvm

我的情况和这个不一样

我有一个带有 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 个磁盘启动,或者用坏磁盘作为我的第三个驱动器,则完全相同的问题。

有了新驱动器后,我该如何修复阵列?

wom*_*ble 7

不知何故,您已经设法将阵列停止在脏状态(这意味着 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应该修复),或者一个或多个文件的内容可能损坏(如果不验证分区上所有文件的内容,您将不会知道)。