我已将整个分区磁盘复制到另一个磁盘的分区中。我如何访问数据?

我已将整个分区磁盘复制到另一个磁盘的分区中。我如何访问数据?

具有多个分区的硬盘驱动器被dd添加到第二个硬盘驱动器的分区上(分区足够大以完全包含第一个硬盘驱动器)。是否可以访问第二个驱动器上的数据 - 如果可以,如何访问?

编辑:为了澄清 - 我想这个问题的更好术语是“嵌套分区”: 在此输入图像描述 这也让我得到了这个答案:有没有办法允许嵌套分区表?- 我的用例与上一段类似,可能的解决方案是使用设备映射器。但似乎没有“更简单”的方法来访问数据。

答案1

有点惊讶的是,它还没有被提及,但有两个工具可以在 Linux 上本地执行此操作。

第一个称为partx,是util-linux软件包的一部分,该软件包是(几乎)现有的每个 Linux 安装的一部分。partx -s - /path/to/disk将列出内核可以识别该磁盘上的所有分区。类似的语法与-a选项将告诉内核为这些分区创建设备节点,而等效的与-d将删除所述设备节点(如果存在)。需要使用lone-来强制它将路径视为磁盘而不是分区。

另一个受 启发的工具partxkpartx。这是可用于 Linux 的块设备多路径工具的一部分(通常不是默认安装,但由所有主要发行版打包,包名称如multipath-tools)。与此相反partx,它只是探讨内核如何处理分区表,kpartx读取分区表本身,然后为每个分区创建设备映射器目标。这使得它可以在比partx平常更多的情况下工作。这里的语法是kpartx -l /path/to/device列出分区,-a而不是-l添加分区和-d删除分区。

这通常比使用图像文件和/或循环设备更有效。

答案2

我从未见过嵌套分区,但为什么不直接使用映像文件并安装它呢?

dd if=/dev/disk of=/big/disk/disk.img 

然后您可以使用环回来安装它:

losetup /dev/loop0 /big/disk/disk.img
mount /dev/loop0p1 /mnt/disk_partition1
mount /dev/loop0p2 /mnt/disk_partition2

如图所示,您可以挂载磁盘映像的各个分区。

答案3

首先用于losetup -f确定自由循环设备(它将输出类似的内容/dev/loop0)。我们就这样称呼吧/dev/loopN

然后使用losetup -P /dev/loopN /dev/<partition_1_device>.

现在,嵌套分区表指定的分区将可以通过 等方式访问/dev/loopNp1/dev/loopNp2您可以使用这些设备名称来挂载它们。

要撤消设置(无需重新启动),请卸载嵌套分区并运行losetup -d /dev/loopN.

答案4

根据我的经验,答案是是的

我已经使用 dd 将磁盘从一台计算机迁移到另一台计算机多次,无论分区/卷运行 Windows 还是 Linux,它的工作原理都是相同的。

只要复制整个磁盘(包括文件分配表),我就可以启动磁盘并访问卷。

我还使用了 clonezilla 来使该过程比直接 dd 更便携、更快,因此如果您处理的是物理机而不是虚拟机,您可能需要检查一下。

这在磁盘更换场景中对我有用(只要 BIOS 配置为从新磁盘启动),但是您没有理由不能将磁盘插入另一台计算机/VM 并像其他任何计算机一样安装卷磁盘。

如果我不想重新启动系统,并且系统通常能够注意到这些更改,那么每当我对磁盘进行更改时,我都会使用此命令。如果没有,那么重新启动总是有效的。

for disk in /sys/class/scsi_disk/*; 
 do echo '1' > $disk/device/rescan; 
done

一旦新的磁盘和卷可以运行(即被操作系统看到),您就可以使用其他实用程序来扩展底层分区以填充剩余的磁盘空间或根据需要创建其他分区/卷。

如果您正在使用 LVM 卷,则需要将它们导入系统中。这些链接可能会提供其他有用的信息:

相关内容