我有一个磁盘映像,它是一个“整个”磁盘映像,例如包含多个分区,我想克隆一其中(不是第一个..)到外部驱动器上的一个分区上,上面有多个分区(我也没有将其克隆到磁盘的第一个分区上...)
对图像进行 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
- 将镜像挂载为环回设备:
losetup -fP yourImage.img
- 您现在可以直接访问映像的每个分区。如果你必须使用
dd
,你可以这样做dd if=/dev/loop0p1 of=image.img
,但我认为你会cat
更喜欢。在 root shell 中,只需执行cat /dev/loop0p1 > image.img
.这两个示例都假设您需要第一个分区,并且分配给您的环回设备是/dev/loop0
- 使用完环回设备后,您可以使用 分离它
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 即可。