让我首先承认我犯了错误,并且对这个RAID上的大部分数据都有一个备份。 我仍然希望恢复其余的数据。 我没有那种把钱带到恢复专家公司的钱。
错误#0,没有100%的备份。 我知道。
我有一个4x3TB的mdadm RAID5系统。 驱动器/ dev / sd [be],全部使用一个分区/dev/sd[be]1 。 我意识到非常大的驱动器上的RAID5是有风险的,但我仍然做到了。
双驱动器故障后,RAID会降级。 一个驱动器[/ dev / sdc]确实没有了,另外一个[/ dev / sde]在重新上电后恢复,但不会自动重新添加到RAID中。 所以我剩下的只有2个活动驱动器[/ dev / sdb和/ dev / sdd]的4个设备RAID。
错误#1,不使用驱动器的dd副本来恢复RAID。 我没有驱动器或时间。 错误#2,没有备份其他驱动器的超级块和mdadm -E 。
我重新组装了降级模式下的RAID
mdadm --assemble --force /dev/md0, using /dev/sd[bde]1.
我可以访问我的数据。 我用备件replace了/dev/sdc ; 空; 相同的驱动。
我从RAID中删除了旧的/dev/sdc1
mdadm --fail /dev/md0 /dev/sdc1
错误#3, 在更换驱动器之前不要这样做
然后,我将新的/dev/sdc分区并将其添加到RAID。
mdadm --add /dev/md0 /dev/sdc1
然后开始恢复RAID。 ETA 300分钟 我通过/proc/mdstat到2%,然后去做其他的东西。
几个小时(但less于300分钟)后,我检查了过程。 由于/dev/sde1上的读取错误,它已经停止。
然后我从RAID中删除/dev/sde1并重新添加它。 我不记得我为什么这样做, 天色已晚。
mdadm --manage /dev/md0 --remove /dev/sde1 mdadm --manage /dev/md0 --add /dev/sde1
但是, /dev/sde1现在被标记为备用。 所以我决定使用–assume-clean重新创build整个数组,使用我认为是正确的顺序,并用/dev/sdc1丢失。
mdadm --create /dev/md0 --assume-clean -l5 -n4 /dev/sdb1 missing /dev/sdd1 /dev/sde1
这工作,但文件系统无法识别,而试图安装。 (应该是EXT4)。
然后,我检查了最近的备份/proc/mdstat ,并find了驱动器的顺序。
md0 : active raid5 sdb1[0] sde1[4] sdd1[2] sdc1[1] 8790402048 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/4] [UUUU]
然后我想起了这个RAID在一年前遭受了驱动器的损失,并且通过用一个备用的驱动器replace出现故障的驱动器而恢复了它。 这可能已经扰乱了设备顺序了一点…所以没有驱动器[3],但只有[0],[1],[2]和[4]。
我试图find与Permute_array脚本的驱动器顺序: https ://raid.wiki.kernel.org/index.php/Permute_array.pl,但没有find正确的顺序。
我现在有两个主要问题:
我搞砸了驱动器上的所有超级块,但只给了:
mdadm --create --assume-clean
命令(所以我不应该在/dev/sd[bde]1上覆盖数据本身)我是对的, 理论上 RAID可以恢复[假设/dev/sde1是好的],如果我find正确的设备顺序?
在RAID中给/dev/sde1赋予设备号[4]很重要吗? 当我创build它
mdadm --create /dev/md0 --assume-clean -l5 -n4 \ /dev/sdb1 missing /dev/sdd1 /dev/sde1
它被分配了数字[3]。 我想知道这是否与计算平价块有关。 如果事实certificate是重要的,我怎么能重新创build数组/dev/sdb1[0]缺less[1] /dev/sdd1[2] /dev/sde1[4] ? 如果我能得到这个工作,我可以在降级模式下启动它,并添加新的驱动器/dev/sdc1并让它再次同步。
如果你想指出,这可能不是最好的行动方式,但你会发现我意识到这一点。 如果有人有任何的build议,这将是很好的。
要回答你的问题,
可以恢复吗?
由于sdc是新的,我会继续尝试和通过缺失的子句手动组装,是的,sde必须按正确的顺序组装在降级模式。 一旦你find正确的布局 – 从数组中复制所有的数据,并重新开始,logging布局(所以你不要再次遇到这个问题)。
祝你好运
在你做任何其他事情之前,为你的数组中的每个驱动器捕获一个'mdadm –examine / dev / sdX1',并从中得到'mdadm –detail / dev / md0',你应该能够确定确切的布局。
我只需要自己做一个单独的问题来恢复Synologyarrays:
如何在驱动器处于“E”状态的情况下恢复Synology NAS上的mdadmarrays?
编辑:对不起,只是看到你说你失去了所有的驱动器上的超级块。
你以后的命令看起来是正确的。 最简单的select可能是运行创build与每个可能的顺序,然后看看你是否可以挂载和访问它们的文件系统只读。
这个问题已经很老了,我相信现在没有人能够帮助你,但是对于其他人来说:
你犯的最危险的错误不是你编号的那个,
mdadm --create ...
在原始磁盘上,在准备好之前知道该怎么做。 这已经覆盖了元数据,所以您没有驱动器顺序,数据偏移量,块大小等的logging。
要从中恢复,需要使用正确的值重新覆盖这些值。 知道这个最简单的方法是看元数据,但是你已经销毁了。 接下来的方法是猜测。 猜测这样的命令的不同组合,除了你所知的任何选项(4个设备,5级)以及不同的磁盘顺序之外,还有不同的值:
mdadm --create /dev/md0 --assume-clean --metadata=1.2 --raid-devices=4 --level=5 --layout=... --chunk=512 --data-offset=128M /dev/sdb1 missing /dev/sdd1 /dev/sde1
但是,既然你不知道正确的结果,你不应该在旧的磁盘上进一步摧毁它们,造成同样的致命错误。 相反,使用覆盖; 比如这个程序应该能够保证原件的安全。
一旦你find了一些产生工作数组的参数,你可以进行fsck或者mount和validation(例如,检查足够大的文件的校验和以跨越所有的raid成员,比如你应该用校验和/ pgp存储的iso签名或unzip -t或gunzip -ta大档案)