恢复Linux软RAID 6与不匹配的超级块?

我家的实验室服务器在RAID5到RAID6的转换操作过程中,当我的一张SAS卡在半夜决定抛出硬盘并导致2个硬盘被标记为不可用时。

今天早上醒来,看到发生了什么事,我立即重新启动服务器,驱动器回来,但数组将不再组装或启动。

首先,我检查了6个驱动器上的事件计数:

~# mdadm --examine /dev/sd[bcdfgi] | egrep 'Event|/dev/sd' /dev/sdb: Events : 2691764 /dev/sdc: Events : 2691764 /dev/sdd: Events : 2691764 /dev/sdf: Events : 2691764 /dev/sdg: Events : 2679506 /dev/sdi: Events : 2679506 

在看到4个驱动器有一个匹配的更高的事件计数,并且其中没有一个是在RAID5到RAID6转换(/ dev / sdg)中添加的驱动器之后,我想我应该可以做一个部队与4个好驱动assembly:

 ~# mdadm --assemble --force /dev/md127 /dev/sdb /dev/sdc /dev/sdd /dev/sdf mdadm: Failed to restore critical section for reshape, sorry. Possibly you needed to specify the --backup-file 

幸运的是,在重塑的开始,我创build了一个备份文件,所以:

 ~# mdadm --assemble --backup-file=/root/raid5backup --force /dev/md127 /dev/sdb /dev/sdc /dev/sdd /dev/sdf mdadm: restoring critical section mdadm: failed to RUN_ARRAY /dev/md127: Input/output error 

查看dmesg输出并没有多大帮助:

 [ 1194.472447] md: bind<sdf> [ 1194.473147] md: bind<sdc> [ 1194.473274] md: bind<sdb> [ 1194.503167] md: bind<sdd> [ 1194.504763] md/raid:md127: reshape will continue [ 1194.504780] md/raid:md127: device sdd operational as raid disk 0 [ 1194.504781] md/raid:md127: device sdc operational as raid disk 4 [ 1194.504781] md/raid:md127: device sdf operational as raid disk 2 [ 1194.505026] md/raid:md127: allocated 6490kB [ 1194.505136] md/raid:md127: not enough operational devices (3/6 failed) [ 1194.505914] RAID conf printout: [ 1194.505915] --- level:6 rd:6 wd:3 [ 1194.505916] disk 0, o:1, dev:sdd [ 1194.505917] disk 2, o:1, dev:sdf [ 1194.505918] disk 4, o:1, dev:sdc [ 1194.505918] disk 5, o:1, dev:sdb [ 1194.506113] md/raid:md127: failed to run raid set. [ 1194.507014] md: pers->run() failed ... [ 1194.507762] md: md127 stopped. [ 1194.507766] md: unbind<sdd> [ 1194.530614] md: export_rdev(sdd) [ 1194.530653] md: unbind<sdb> [ 1194.546595] md: export_rdev(sdb) [ 1194.546637] md: unbind<sdc> [ 1194.562584] md: export_rdev(sdc) [ 1194.562625] md: unbind<sdf> [ 1194.574586] md: export_rdev(sdf) 

我想也许它会工作,如果我试图组装它,包括两个驱动器的事件数较less:

 ~# mdadm --assemble --backup-file=/root/raid5backup --force /dev/md127 /dev/sdb /dev/sdc /dev/sdd /dev/sdf /dev/sdi /dev/sdg mdadm: restoring critical section mdadm: failed to RUN_ARRAY /dev/md127: Input/output error 

快速浏览一下dmesg的输出结果,结果并不是这样的:

 [ 1435.180559] md: bind<sdi> [ 1435.199716] md: bind<sdf> [ 1435.200403] md: bind<sdg> [ 1435.200531] md: bind<sdc> [ 1435.200660] md: bind<sdb> [ 1435.200918] sdi: [ 1435.229950] md: bind<sdd> [ 1435.230299] md: kicking non-fresh sdg from array! [ 1435.230302] md: unbind<sdg> [ 1435.251031] md: export_rdev(sdg) [ 1435.251074] md: kicking non-fresh sdi from array! [ 1435.251079] md: unbind<sdi> [ 1435.267034] md: export_rdev(sdi) 

在我进一步讨论之前,我把磁盘快速扫描到一个文件中,以备日后需要的细节:

 ~# mdadm --examine /dev/sd[bcdfig] >> /root/raid.status 

这让我觉得我完全搞砸了,我试着用4个好的驱动器创build一个全新的arrays,希望能够再次看到数据:

 ~# mdadm --create --assume-clean --level=6 --raid-devices=6 --chunk=128K /dev/md127 /dev/sdb /dev/sdc /dev/sdd /dev/sdf missing missing 

但是,这样做后,一个pvscan / vgscan等没有产生任何东西,快速dd的数组的开始显示我是空的:

 ~# dd if=/dev/md127 bs=512 count=255 skip=1 of=/tmp/md2-raw-start 

在这一点上,我再次停止arrays,在任何损坏完成之前,没有数据应该写入arrays。 不幸的是,这确实改变了这四个驱动器的RAID UUID,所以现在与不同步的两个不同步。

我现在已经停止在服务器上做任何事情,希望在这里一些好人可以给我一些指导如何进行。

这个系统没有备份,因为它是我的家庭实验室服务器,但是我仍然希望尝试保留而不是将所有的数据都抓起来,然后重新开始。