一些背景信息只是为了提供帮助(希望如此)... 周末,我正在从 Synology 盒子中进行备份,一切都进行得很顺利,直到周日早上,我试图重新连接我的备份服务器,通过我的 10Gb 网络复制一些数据。出于某种原因,它只能在 1Gb 速度下工作,所以我想重启我的设备,看看是否可行。这让情况变得更糟。从那时起,它会在 Windows 中抛出一个错误,说我无法访问共享文件夹(我仍然可以看到它们),但我无法获取任何数据。
快进一点,然后我开始了一些研究,发现安装 Ubuntu 可以读取数据,我希望可以开始恢复它。
再快进一点,它确实运行良好。但随后灾难降临,出于某种原因,它停止复制并显示出现错误,阵列消失了。RAID 阵列是 RAID 10,由 8 x 8TB 驱动器组成。
慌乱中,我移除了驱动器,好像我记得没错的话,列表中有几个驱动器不见了。检查完每一个驱动器后,我发现主板上有一个我认为无法正常工作的 SATA 端口。结果发现,这没什么好担心的。真令人沮丧。
再次快进。我回头看我的屏幕截图时发现,设备编号的顺序全都错了。它们应该是 -
SDF3 0 SDD3 7 SDE3 6 SDC3 5 SDB3 4 SDI3 3 SDH3 2 SDG3 1
目前他们是 -
SDE3 6 SDD3 7 SDI3 2 SDH3 3 SDG3 5 SDF3 4 SDB3 1 SDC3 0
现在我尝试移动数据线,看看是否会改变列表,但正如我所想,除非它按照上述安排,否则它不会起作用?
我已经设法使用 mdadm --examine 执行了一些命令,并且我认为在阅读了 ServerFault 的另一篇文章后,我已经从每个驱动器中获取了信息数据。
当我尝试重新组装阵列时,它会出错,提示“无法在 /dev/sdb 上组装 MBR 元数据(我假设它需要是 SDF3??)
当我在 Synology 框中再次尝试这些驱动器时,它仍然出现相同的错误,所以我希望驱动器上的数据仍然完好无损。
如果您还需要我提供任何其他帮助,请随时告诉我。我会尽我所能,并且正在努力学习 Ubuntu,所以如果我愚蠢又慢了,请原谅!我确实保存了终端文本,但我看不到添加文件的方法,有人可以建议怎么做吗?在此先谢谢了。
编辑-驱动器阵列详细信息
据我所知,SDD3 和 SDE3 驱动器有 603 个错误。其余的是 SDB3。SDC3、SDF3、SDG3、SDH3 和 SDI3 有 607 个错误。每个驱动器都显示阵列仍然存在,此时我感到充满希望……
先生们还有什么需要吗?
编辑更多团体截图 -
很抱歉 Brian 没有及时收到此信息。我相信我已经按预期使用了命令?
mdadm --assemble --readonly /dev/[md2] [dev/md2 /dev/sdb3 /dev/sdc3 /dev/sdd3 /dev/sde3 /dev/sdf3 /dev/sdg3 /dev/sdh3 /dev/sdi3] dd if=/dev/[所有驱动器] skip=1000000000000 bs=1M count=10 | sha256sum
在屏幕截图中提到
dadm: 无法打开设备 [dev/md2: 没有此文件或目录 mdadm: [dev/md2 没有超级块 - 程序集中止
但详细说明说,超级块是持久的。我有点困惑...
另一个更新是 Brian....
衷心感谢 Brian……
如果没有 Brian 的帮助,这绝不可能实现。再次非常感谢!!先生,我向您致以崇高的敬意和知识 +100!!
答案1
备份 RAW 磁盘
在尝试修复损坏的阵列之前mdadm
,强烈建议您先对受影响的磁盘进行映像处理。如果在尝试修复阵列时出现问题,您可以随时恢复映像并重新开始。基本上,如果您尝试的修复出现问题,就不会出现任何问题。
或者,如果您不进行磁盘映像处理,则应做好万一出现问题时无法恢复数据的准备。所有mdadm
修复都是独一无二的,没有万无一失的解决方案。
磁盘映像制作方法
- 在完全相同大小的备份磁盘上:
dd if=/dev/[source disk] of=/dev/[backup disk] bs=512K status=progress
- 在大于源磁盘的备份磁盘上:
dd if=/dev/[source disk] of=/[path to backup location]/[backup file].dd bs=512K status=progress
如果需要恢复映像磁盘
- 在完全相同大小的备份磁盘上:
dd if=/dev/[backup disk] of=/dev/[source disk] bs=512K status=progress
- 在大于源磁盘的备份磁盘上:
dd if=/[path to backup location]/[backup file].dd of=/dev/[source disk] bs=512K status=progress
恢复失败的 RAID 10 阵列
在这个特定案例中,八个发生故障的驱动器中的两个不是彼此的镜像。相反,它们是阵列中另外两个报告正常的磁盘的镜像磁盘。这就是我们确定这一点的方法
确定底层阵列是否仍然健康
为了确定两个发生故障(或者说被移除)的驱动器所起的作用,需要对所有驱动器的有效负载数据进行采样,并尝试使用它们的校验和哈希值进行匹配。这是通过对阵列中的每个磁盘执行以下命令来完成的。
dd if=/dev/[source disk] bs=1M count=10 skip=1000000 | sha256sum
此命令在驱动器的 1TB 位置获取 10MB 样本,并生成数据的校验和值。然后,我们比较校验和以匹配所有驱动器(即源驱动器与镜像驱动器)。在这种情况下,我们可以得出结论,两个移除的磁盘不是彼此的镜像,因此 RAID 10 实际上仍然完好无损。
修复 Raid 10 阵列
组装现有的“健康”阵列成员(即尚未被删除的成员)。
mdadm --assemble /dev/[mdadm array] /dev/[disk 1] /dev/[disk 2] ... /dev/[disk N]
重新添加缺失的磁盘
mdadm --re-add /dev/[mdadm array] /dev/[missing disk 1]
mdadm --re-add /dev/[mdadm array] /dev/[missing disk 2]
重新启动并重新同步阵列
mdadm --assemble --run --force --update=resync /dev/[mdadm array] /dev/[disk 1] /dev/[disk 2] ... /dev/[re-added disk 1] /dev/[re-added disk 2]
检查 Raid 是否正在重建
现在要检查 RAID 是否正在重建。为此,请检查以下两件事。
- 运行
cat /proc/mdstat
以查看是否表明 RAID 正在重建。 - 运行
mdadm --detail /dev/[mdadm array]
以查看所有成员是否都是阵列的一部分并且正在重建。
如果无法正确重新组装和重建,则需要额外的故障排除支持来修复故障阵列。请记住,所有故障都不一样。