mdadm raid5恢复双磁盘故障-扭曲(驱动器顺序)


14

首先,我要承认自己犯了错误,并且为该RAID上的大部分但不是全部数据提供了备份。我仍然希望恢复其余数据。我没有钱将驱动器带到恢复专家公司。

错误#0,没有100%的备份。我知道。

我有一个mdadm4x3TB 的RAID5系统。驱动器/ dev / sd [be]都具有一个分区/dev/sd[b-e]1。我知道非常大的驱动器上的RAID5很有风险,但是我还是这么做了。

最近发生的事件

两个驱动器发生故障后,RAID降级。一个驱动器[/ dev / sdc]确实没了,而另一个[/ dev / sde]重启后又恢复了,但没有自动重新添加到RAID中。因此,我只剩下4个RAID设备,只有2个活动驱动器[/ dev / sdb和/ dev / sdd]。

错误#1,未使用驱动器的dd副本还原RAID。我没有驱动器或时间。错误#2,不备份超级块和mdadm -E其余驱动器。

恢复尝试

我以降级模式重新组装了RAID

mdadm --assemble --force /dev/md0, using /dev/sd[bde]1.

然后,我可以访问我的数据。我换/dev/sdc了一个备用的;空 相同的驱动器。

/dev/sdc1从RAID中删除了旧的

mdadm --fail /dev/md0 /dev/sdc1

错误3,更换驱动器之前不要这样做

然后,我对新分区进行了分区/dev/sdc,并将其添加到RAID。

mdadm --add /dev/md0 /dev/sdc1

然后,它开始还原RAID。预计时间:300分钟。我按照流程进行/proc/mdstat到2%,然后去做其他事情。

检查结果

几个小时(但不到300分钟)后,我检查了该过程。由于出现读取错误,它已停止/dev/sde1

真正的麻烦就在这里

然后/dev/sde1,我从RAID中删除并重新添加了它。我不记得为什么要这么做了。太晚了。

mdadm --manage /dev/md0 --remove /dev/sde1
mdadm --manage /dev/md0 --add /dev/sde1

但是,/dev/sde1现在被标记为备用。因此,我决定使用--assume-clean重新创建整个数组,并使用我认为正确的顺序,但/dev/sdc1缺少该顺序。

mdadm --create /dev/md0 --assume-clean -l5 -n4 /dev/sdb1 missing /dev/sdd1 /dev/sde1

那行得通,但是尝试挂载时无法识别文件系统。(应该是EXT4)。

设备订单

然后,我检查了最近的备份/proc/mdstat,找到了驱动器顺序。

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大约一年前遭受了驱动器丢失,并通过用备用驱动器替换有故障的驱动器使其恢复。这可能使设备的顺序有些混乱……因此没有驱动器[3],只有[0],[1],[2]和[4]。

我试图用Permute_array脚本找到驱动器顺序:https ://raid.wiki.kernel.org/index.php/Permute_array.pl,但是找不到正确的顺序。

问题

我现在有两个主要问题:

  1. 我拧紧了驱动器上的所有超级块,但只给出了:

    mdadm --create --assume-clean
    

    命令(因此我本不应该覆盖数据本身/dev/sd[bde]1。如果在理论上可以/dev/sde1找到正确的设备顺序,那么理论上可以恢复RAID [假设片刻还可以]是对的吗?

  2. /dev/sde1在RAID中指定设备号[4] 是否重要?当我用

    mdadm --create /dev/md0 --assume-clean -l5 -n4 \
      /dev/sdb1 missing /dev/sdd1 /dev/sde1
    

    它被分配了数字[3]。我想知道这是否与奇偶校验块的计算有关。如果结果很重要,如何重新创建/dev/sdb1[0]缺少失踪的数组[1] /dev/sdd1[2] /dev/sde1[4]?如果可以正常运行,则可以降级模式启动它并添加新驱动器,/dev/sdc1然后使其重新同步。

如果您想向我指出这可能不是最佳的做法,那没关系,但是您会发现我意识到了这一点。如果有人有任何建议,那就太好了。


1
+1这是一个经过深思熟虑并记录在案的问题。希望我能为您解答。
Grant

谢谢您的评论,我想这很艰难。
彼得·博斯

您是否已放弃,还是仍在努力?如果您正在处理它,我的建议是,精简放置的所有驱动器,并在可以创建DD映像的另一台计算机上创建JBOD,这样更好地进行处理,因为您可以不断尝试。 。(使用LVM,然后在完成后使用快照,因此您可以继续删除快照,而不必重新复制整个内容)。我曾经在类似的船上工作过,我设法恢复了具有完整数据的阵列。
里根

感谢您的反应。一段时间后,我放弃了,用新的驱动器替换了两个驱动器,从备份中恢复了98%,接受了2%的数据丢失并继续使用。我现在正在使用RAID-Z,并更新了我的备份策略。到目前为止,一切都很好。
彼得·博斯

Answers:


3

为了回答您的问题,

  1. 可以恢复吗?

    • 首先是第一件事-停下来,坐下来,想一想。是的,算法,块大小和磁盘顺序对于获取任何存在的文件系统,正确重新组装至关重要。但是,既然您已经覆盖了超级块,那么现在您将面临反复试验的麻烦。
    • 其次,有什么方法可以检索以前的磁盘布局?我总是做一个mdadm --detail> backupfile,只是为了确保磁盘布局安全。检查dmesg,/ var / log,以获取有关如何在RAID中配置磁盘的任何证据。
    • 最后,如果您匹配以前的块大小和磁盘顺序,则可能是损坏了ext4超级块-有一些方法可以方便地扫描其他超级块(还有一个名为TestDisk的漂亮程序,可以扫描现有文件系统的超级块并尝试浏览它们手动:http : //www.cgsecurity.org/wiki/Main_Page
  2. 由于sdc是新的,因此我将继续尝试通过missing子句手动进行组装,是的,sde必须以正确的顺序进行组装才能以降级模式进行组装。找到正确的布局后,请从阵列中复制所有数据,然后重新开始,记录下布局(这样就不会再遇到此问题了)。

祝好运


1
ext3 / 4写入冗余超级块。您可以将超级块偏移量作为参数传递给mount或fsck来使用备份超级块。尽管如此,在RAID 5 =游戏结束时有两个驱动器掉下来。
dmourati

1

在进行其他操作之前,请为阵列中的每个驱动器捕获一个'mdadm --examine / dev / sdX1',并从中捕获一个'mdadm --detail / dev / md0',您应该能够确定确切的布局。

我只需要自己做一次即可在另一个问题中恢复Synology阵列:

如何在驱动器处于“ E”状态的Synology NAS上恢复mdadm阵列?

编辑:对不起,刚刚看到您说您丢失了所有驱动器上的超级块。

您以后的命令看起来正确。最简单的选择可能是使用每种可能的顺序运行create,然后查看是否可以只读方式挂载和访问文件系统。


1

这个问题很旧,我相信现在没有人可以为您提供帮助,但对于其他人,请阅读:

您犯的最危险的错误不是您编号的错误,而是要运行的错误:

mdadm --create ...

在准备知道要做什么之前,先将其放在原始磁盘上。这已覆盖了元数据,因此您没有驱动器顺序,数据偏移,块大小等记录。

要从中恢复,您需要使用正确的值再次覆盖它们。知道这一点的最简单方法是查看元数据,但是您已经破坏了它。下一步是猜测。猜测这样一个命令的不同组合,除了您所知道的(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

但是,由于您不知道正确的结果,因此,也不要在旧磁盘上运行该结果,从而进一步破坏它们,从而导致同样的致命错误。而是使用覆盖图;例如,此过程应可确保原稿安全。

一旦找到了可以产生可工作数组的参数,您可以对其进行fsck或装入并验证(例如,检查文件的校验和,该文件应足以覆盖所有raid成员,例如iso,您应该将其与校验和/ pgp一起存储签名,或解压缩-t或gunzip -ta大档案)


谢谢。同时,我继续使用ZFS(RAIDZ2)。但是,阅读笔记非常有趣。现在,我意识到create命令确实会覆盖元数据,而当时我以为不会。另外,我不知道覆盖文件。真是整洁!谢谢!
彼得·博斯2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.