![从 RAID 驱动器的驱动器映像访问数据](https://linux22.com/image/790818/%E4%BB%8E%20RAID%20%E9%A9%B1%E5%8A%A8%E5%99%A8%E7%9A%84%E9%A9%B1%E5%8A%A8%E5%99%A8%E6%98%A0%E5%83%8F%E8%AE%BF%E9%97%AE%E6%95%B0%E6%8D%AE.png)
运行 RAID5 的 perc h700 控制器上的驱动器出现错误,因此我使用 将内容复制到映像中ddrescue
。所有驱动器都有一些坏块,但大多数 (>99.98%) 位都已成功读取,现在我有了一个硬盘驱动器,其中包含 raid 阵列中每个驱动器的映像文件。
现在我已经拥有 RAID 阵列中所有驱动器的映像,是否有某种方法可以使用软件(也许mdadm
?)访问存储在阵列中的文件?或者只能使用创建阵列的控制器来访问该数据吗?
答案1
是的,使用 Linux MD RAID 及其mdadm
用户空间接口工具,您甚至可以从 PERC(更名为 LSI/Avago/Broadcom MegaRAID)组装 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 次,每次都排除下一个驱动器。以这种方式提取所有损坏的条带后,您可以按常规方式组装阵列,并将恢复的条带重新放入组装的阵列中,用正确的数据替换全零块。