运行 RAID5 的 perc h700 控制器上的驱动器遇到错误,因此我使用ddrescue
. 所有驱动器都有一些坏块,但大多数(> 99.98%)位都已成功读取,并且我现在拥有一个硬盘驱动器,其中包含属于 raid 阵列的每个驱动器的映像文件。
现在我有了 raid 阵列中所有驱动器的映像,是否有某种方法可以使用软件(也许mdadm
?)来访问存储在阵列中的文件?或者只能使用创建数组的控制器来访问该数据?
运行 RAID5 的 perc h700 控制器上的驱动器遇到错误,因此我使用ddrescue
. 所有驱动器都有一些坏块,但大多数(> 99.98%)位都已成功读取,并且我现在拥有一个硬盘驱动器,其中包含属于 raid 阵列的每个驱动器的映像文件。
现在我有了 raid 阵列中所有驱动器的映像,是否有某种方法可以使用软件(也许mdadm
?)来访问存储在阵列中的文件?或者只能使用创建数组的控制器来访问该数据?
是的,使用 Linux MD RAID 及其
mdadm
用户空间接口工具,您甚至应该能够从更名为 LSI/Avago/Broadcom MegaRAID 的 PERC 组装 RAID。它使用 SNIA DDF 磁盘格式,mdadm 将其称为User-Space Managed External Metadata Format
.您已采取正确的方法来制作所有驱动器的原始图像。我强烈建议的第二步是设置覆盖,以便不向图像本身写入任何更改,而是覆盖文件;这将使您进行无限次尝试。它在 Linux RAID wiki 页面中进行了描述,该页面方便地命名为“恢复损坏的 RAID”。或者,您可以使用 Qemu 的 qcow2 映像并
qemu-nbd
实现与我在此处描述的相同的基本结果。设置覆盖后,您将拥有一堆
/dev/mapper/xxxY
或/dev/nbdY
虚拟块设备。现在尝试从这些设备组装 RAID:从mdadm --examine --scan
. 不要犹豫去尝试;如果出现问题,您始终可以重新创建叠加层(或创建另一组叠加层)并重新开始;这正是他们的目的。不要丢弃 的
ddresque
日志文件。它们包含有关物理驱动器的哪些块损坏(并由 ddrescue 填充零)的重要信息。您需要找出它们在组装数组中映射到哪些条带。所有这些条纹都需要检查。即使只有一个块错误,这些条带中至少有一个数据块很可能会被损坏,除非该块碰巧包含奇偶校验数据。这是因为所有块都可以从图像中读取;奇偶校验现在只是不匹配,并且将从其他块(其中一个是错误的)重新计算,而不是使用奇偶校验来重新计算错误的块。当所有块都可读但存在不匹配(部分降级的 RAID6 除外)时,传统 RAID 无法确定其中哪一个块是错误的,因此奇偶校验被视为有问题的块。现在,要恢复这些块,您可能会走上漫长而艰难的道路,部分组装阵列,不包括该块出现故障的驱动器(当然还有一组新的覆盖!);那么md将正确使用(希望正确)其他块和奇偶校验来恢复条带数据,而不会损坏块。由于所有驱动器都显示坏块,因此您可能需要执行此操作 N 次,每次都不包括下一个驱动器。以这种方式提取所有损坏的条带后,您可以按照通常的方式组装阵列,并将恢复的条带添加回组装的阵列中,用正确的数据替换全零块。