如何使用 DD 从磁盘映像克隆分区?

如何使用 DD 从磁盘映像克隆分区?

我有一个磁盘映像,它是一个“整个”磁盘映像,例如包含多个分区,我想克隆其中(不是第一个..)到外部驱动器上的一个分区上,上面有多个分区(我也没有将其克隆到磁盘的第一个分区上...)

对图像进行 FDisk 可以得到以下结果:

# fdisk -l 2013-02-09-wheezy-raspbian.img

磁盘 2013-02-09-wheezy-raspbian.img:1939 MB,1939865600 字节
255个磁头,63个扇区/磁道,235个柱面,总共3788800个扇区
单位 = 1 * 512 = 512 字节的扇区
扇区大小(逻辑/物理):512 字节/512 字节
I/O 大小(最小/最佳):512 字节/512 字节
磁盘标识符:0x00014d34

                         设备引导开始结束块 ID 系统
2013-02-09-wheezy-raspbian.img1 8192 122879 57344 c W95 FAT32 (LBA)
2013-02-09-wheezy-raspbian.img2 122880 3788799 1832960 83 Linux
#

块设备如下所示:

# fdisk -l /dev/sdc

磁盘 /dev/sdc:8014 MB,8014266368 字节
247个磁头,62个扇区/磁道,1022个柱面,总共15652864个扇区
单位 = 1 * 512 = 512 字节的扇区
扇区大小(逻辑/物理):512 字节/512 字节
I/O 大小(最小/最佳):512 字节/512 字节
磁盘标识符:0x00000000

   设备引导开始结束块 ID 系统
/dev/sdc1 2048 131071 64512 e W95 FAT16 (LBA)
/dev/sdc2 131072 15652863 7760896 83 Linux
#

我希望图像的第二个分区替换块设备的第二个分区。不用担心尾部损坏的可用空间,我将使用 GParted 来清理它,而且无论如何我都需要它来做其他事情。

答案1

# losetup --find --show --partscan --read-only 2013-02-09-wheezy-raspbian.img
/dev/loop7
# dd if=/dev/loop7p2 of=/dev/narnia bs=1M

如果--partscan不起作用,您还可以使用以下方法之一:

# partx -a /dev/loop7
# kpartx /dev/loop7

或类似的分区映射解决方案。

您可能应该先安装它,看看它是否正确或是什么。

当然,您也可以读取 fdisk 输出并直接给出或dd其他skip=131072内容,即使其跳过许多输入块,以便它开始读取分区所在的位置;但使用循环设备查看实际分区会更好。

答案2

像这样的东西应该有效:

dd if=/path/to/2013-02-09-wheezy-raspbian.img2 of=/dev/sdc2 bs=4096 conv=notrunc,noerror

如果= 设置您要克隆的图像

= 设置要克隆映像的目标分区

答案3

  1. 将镜像挂载为环回设备:losetup -fP yourImage.img
  2. 您现在可以直接访问映像的每个分区。如果你必须使用dd,你可以这样做dd if=/dev/loop0p1 of=image.img,但我认为你会cat更喜欢。在 root shell 中,只需执行cat /dev/loop0p1 > image.img.这两个示例都假设您需要第一个分区,并且分配给您的环回设备是/dev/loop0
  3. 使用完环回设备后,您可以使用 分离它losetup -d /dev/loop0。再次假设这/dev/loop0是您的环回设备。

答案4

您可以使用此命令仅将第二个分区复制到单独的映像

dd if=2013-02-09-wheezy-raspbian.img of=second.img bs=512 skip=122880

然后您可以将其复制到磁盘上的分区的位置

dd if=second.img of=/dev/sdc2 bs=512

或者你甚至可以用一个命令来完成

dd if=2013-02-09-wheezy-raspbian.img of=/dev/sdc2 bs=512 skip=122880

只需确保在写入之前卸载 /dev/sdc2 即可。

相关内容