在 Ubuntu 上,如何从另一台设备恢复 RAID 阵列的单个磁盘中的数据

在 Ubuntu 上,如何从另一台设备恢复 RAID 阵列的单个磁盘中的数据

我有一个使用 RAID 1 镜像的 2 磁盘 NAS 设备。当磁盘开始出现故障时,我想购买更大的磁盘以升级卷大小。但是,该设备无法处理将原始数据从较小的硬盘驱动器镜像到较大的驱动器。所以我的计划是在 Ubuntu 机器上安装一个旧的 RAID 磁盘(保留另一个作为紧急备份),然后将数据复制到我的 NAS 设备中新的、更大的 RAID 阵列中。

如何在 Ubuntu 计算机上安装 raid 阵列中的单个磁盘以从中检索数据?

--- 不同的问题,相同的答案 ---

我有一台使用 RAID 1 镜像的 2 磁盘 NAS 设备。我有三个磁盘。我定期将磁盘从 NAS 设备中换出,以将其保存在安全的地方作为备份。然后 NAS 设备会自动将现有数据镜像到新磁盘。

如果我的房子被烧毁了,我该如何在 Ubuntu 机器上安装来自 raid 阵列的备份磁盘以从中检索数据?

- - 更多信息 - -

在我的 Ubuntu 机器上安装单个硬盘后,fdisk -l报告:

Disk /dev/sdb: 1.8 TiB, 2000398934016 bytes, 3907029168 sectors
    Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: D1C4E003-11FD-4223-AA98-61CB9C6322BD

Device          Start        End    Sectors  Size Type
/dev/sdb1        2048    1050623    1048576  512M Linux swap
/dev/sdb2     3147776 3904929899 3901782124  1.8T Microsoft basic data
/dev/sdb3  3904931840 3907029134    2097295    1G Microsoft basic data
/dev/sdb4     1050624    3147775    2097152    1G Microsoft basic data

我尝试了此网站上类似问题的步骤:

root@host:/mnt# mount /dev/sdb2 /mnt/old_nas/
mount: /mnt/old_nas: unknown filesystem type 'linux_raid_member'.

root@host:/mnt# mdadm --assemble --run /dev/md0 /dev/sdb2
mdadm: failed to RUN_ARRAY /dev/md0: Invalid argument
mdadm: Not enough devices to start the array.

这一定是一件很常见的事情所以我很惊讶还没有找到一个完全可行的答案。

答案1

假设 /deb/sdb2 是您想要恢复的旧 raid 1 成员。

第一个选项:尝试使用旧磁盘重新组装 RAID 1:

您需要在新机器中组装降级的 RAID 阵列,使用如下方法:

mdadm --force --assemble --run /dev/md0 /dev/sdb2

当然,如果 md0 已被使用,则选择一个除 md0 之外的数字。然后您可以将 /dev/md0 挂载到您想要的任何位置。

另外一个选择:

mdadm --force --run --assemble --scan

你会得到类似这样的结果:

mdadm: /dev/md/0 has been started with 1 drive (out of 2)

然后挂载并查看您的文件:

cd /mnt && mkdir md0 && mount /dev/md0 md0
ls -la md0

最后,您可以向阵列添加第二个驱动器:

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

第二种选择:使用只读循环设备

获取旧磁盘的数据偏移量:

mdadm --examine /dev/sdb2 | grep -i offset

创建循环设备(假设数据偏移量为 2048):

losetup --find --show --read-only --offset $((2048*512)) /dev/sdb2

挂载上一条命令打印出的循环设备

mount -o ro /dev/loo1 /mnt/

Mount 可能能够直接使用 -o ro,loop,offset= 选项执行此操作:

mount -o ro,loop,offset=$((2048*512)) /dev/sdb2 /mnt

就我而言,您遇到的问题可能是由于 mdadm 认为您的 RAID 1 阵列是“干净的”,但事实并非如此。在从阵列中移除磁盘之前,您应该明确告诉 mdadm 您的第二个 (sdb2) 磁盘已发生故障:

mdadm --manage /dev/md0 --fail /dev/sdb2
mdadm --manage /dev/md0 --remove /dev/sdb2

相关内容