是否可以恢复/转换/挂载 fakeraid 映像文件?(TL;DR - 有 fakeraid 映像,想将它们转换为 mdadm 映像)

是否可以恢复/转换/挂载 fakeraid 映像文件?(TL;DR - 有 fakeraid 映像,想将它们转换为 mdadm 映像)

我的 Promise NAS NS4300N 最近坏了(电源或主板故障,可能是前者,因为它无法启动磁盘)。

我已经设法将驱动器(RAID5 配置中的 4 个 500GB 驱动器)作为图像 dd(1) 到新服务器上,即使其中一个驱动器出现了一些读取错误(conv=noerror ftw...)。

但是,由于 Promise NAS 不使用 mdadm(8) 来实现 RAID,而是使用“硬件”RAID(又名 FakeRAID),因此生成的图像如下所示:

$ fdisk -l /local/media/promise.dd.1
Disk /local/media/promise.dd.1: 465.8 GiB, 500106174464 bytes, 976769872 sectors 
Units: sectors of 1 * 512 = 512 bytes 
Sector size (logical/physical): 512 bytes / 512 bytes 
I/O size (minimum/optimal): 512 bytes / 512 bytes 
Disklabel type: dos 
Disk identifier: 0xb95a0900

Device                      Boot Start        End    Sectors  Size Id Type 
/local/media/promise.dd.1p1         63 2929918634 2929918572  1.4T 83 Linux

$ fdisk -l /local/media/promise.dd.2 
Disk /local/media/promise.dd.2: 465.8 GiB, 500107862016 bytes, 976773168 sectors 
Units: sectors of 1 * 512 = 512 bytes 
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

$ fdisk -l /local/media/promise.dd.3 
Disk /local/media/promise.dd.3: 465.8 GiB, 500107862016 bytes, 976773168 sectors 
Units: sectors of 1 * 512 = 512 bytes 
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

$ fdisk -l /local/media/promise.dd.4 
Disk /local/media/promise.dd.4: 465.8 GiB, 500107862016 bytes, 976773168 sectors 
Units: sectors of 1 * 512 = 512 bytes 
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes 
Disklabel type: dos
Disk identifier: 0xb95a0900

Device                      Boot Start        End    Sectors  Size Id Type 
/local/media/promise.dd.4p1         63 2929918634 2929918572  1.4T 83 Linux

当作为 loop(4) 设备安装时,图像如下所示:

$ sudo lsblk -io NAME,FSTYPE,SIZE,MOUNTPOINT,LABEL 
NAME               FSTYPE                            SIZE    MOUNTPOINT     LABEL 
..     
loop0              promise_fasttrack_raid_member     465.8G
loop1              promise_fasttrack_raid_member     465.8G
loop2              promise_fasttrack_raid_member     465.8G
loop3              promise_fasttrack_raid_member     465.8G

毫不奇怪,mdadm(8) 无法读取这些内容,因为它无法找到可用的超级块:

$ sudo mdadm --verbose --examine /dev/loop0
/dev/loop0:
   MBR Magic : aa55
Partition[0] :   2929918572 sectors at           63 (type 83)
$ sudo mdadm --verbose --examine /dev/loop1
mdadm: No md superblock detected on /dev/loop1.

而且当然:

$ sudo mdadm --verbose -A /dev/md127 --readonly --run /dev/loop1 /dev/loop2 /dev/loop3 /dev/loop4
mdadm: looking for devices for /dev/md127
mdadm: no recogniseable superblock on /dev/loop1
mdadm: /dev/loop1 has no superblock - assembly aborted

我认为我可以尝试使用 dmraid(8) 来读取/检查这些内容,因为据宣传,这是一款“发现、配置和激活软件 (ATA)RAID”但据我所知,这个说法只有当驱动器通过 BIOS 公开时才成立,而这些显然不是,因为它们是 loop(4) 设备:

$ sudo dmraid -ay
no raid disks

我有机会通过软件恢复数据吗?或者我唯一的选择是找到可以读取包含数据的物理驱动器的硬件(例如 Promise PCI 卡)吗?

谢谢阅读。

答案1

我也遇到了同样的情况。我能够使用 R-Studio 的演示版本恢复数据,以重建虚拟 RAID 阵列,主要如下所述:

https://www.r-studio.com/automatic-raid-detection.html

在“驱动器”菜单下,选择“打开图像”并导入之前使用创建的驱动器图像dd

在“创建虚拟 RAID”下拉菜单中选择“创建虚拟 RAID 和自动检测”,然后将打开的驱动器映像文件从树视图(左侧)拖放到虚拟 RAID 设备列表面板(右上角)。

单击“自动检测”。该过程应在几秒钟内完成。就我而言,它检测到 32k 块大小、RAID5、左异步(连续),置信度为 50.2%。它还显示了 RAID 5 阵列的教科书图表。单击“应用”。

返回“设备视图”树,现在应该有一个分区和卷组(例如:“vg002-lv001”),文件系统为 ext3。选择此条目并单击“创建映像”按钮。

在出现的对话框中,选择“字节到字节映像”,选择合适的路径和文件名。单击“确定”,然后等待一夜以完成该过程。确保您有足够的空间来存储生成的映像。(对于 RAID5 中的 4 x 500 GB 驱动器,大约为 1.5 TB。)

生成的图像文件可以循环安装以访问数据。例如

# mkdir /mnt/promise
# mount -o loop vg002-lv001.img /mnt/promise/

我还发现在运行 rsync 复制数据之前重新映射 UID 和 GID 很方便:

# mkdir /mnt/promise-bindfs
# bindfs --map=1001/1000:@499/@100 /mnt/promise /mnt/promise-bindfs

相关内容