将分区映像转换为带有分区表的磁盘映像

Mik*_*her 20 partition virtual-machine hard-disk virtualbox

我有一个使用dd if=/dev/sdXN of=image.bin. 现在我想使用这个镜像作为虚拟机的基础。我知道如何将图像转换为 VirtualBox 可以使用的格式。

问题是“磁盘”映像实际上只是一个分区的映像,因此不包含 MBR 或分区表。这使得启动虚拟机变得非常困难。

给定分区映像,是否有一种简单的方法来创建适当的磁盘映像,包括分区表?

mgo*_*ven 13

您可以在主机上执行此操作。大多数工具fdisk都会对文件进行操作,并kpartx允许您访问文件中的分区。

  1. 创建一个新的空 100GiB 稀疏图像(使其略大于分区图像的大小)

    dd if=/dev/zero of=myvm.img bs=1G count=0 seek=100
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将图像文件分区 fdisk

    fdisk myvm.img
    
    Run Code Online (Sandbox Code Playgroud)
  3. 使映像文件中的分区可用是单个设备

    sudo kpartx -a myvm.img
    
    Run Code Online (Sandbox Code Playgroud)
  4. 将分区镜像复制到分区中

    sudo cp image.bin /dev/mapper/loop0p1
    
    Run Code Online (Sandbox Code Playgroud)
  5. 扩展文件系统以填充整个分区

    sudo resize2fs /dev/mapper/loop0p1
    
    Run Code Online (Sandbox Code Playgroud)
  6. 关闭分区

    sudo kpartx -d myvm.img
    
    Run Code Online (Sandbox Code Playgroud)
  7. 拆除环回装置

    sudo losetup -D
    
    Run Code Online (Sandbox Code Playgroud)


小智 9

我确定最初的问题很久以前就已经解决了,但是对于任何有类似问题的人:

避免复制整个映像的一种方法是创建一个 .vmdk 格式的映像,该映像引用分区表和分区内容的单独区文件。

我在不久前进行的测试中的 .vmdk 文件中有这个片段:

RW 63 FLAT "parttable.bin" 0
RW 585937489 FLAT "partition-image.bin" 63
Run Code Online (Sandbox Code Playgroud)

这意味着从偏移量 0 开始的 63 个扇区是从原始文件“parttable.bin”读取的,但扇区 63 及以上来自原始分区转储“partition-image.bin”。(当然,用第一个分区的实际偏移量替换 63,现在通常是 2048)。

最终的结果是,从 VBox 内部,看起来您已经将分区表放在分区映像的前面,而无需进行冗长的复制操作。

从 VM 内对驱动器进行分区,如果您的偏移量正确,您应该会在新创建的分区内看到您的分区映像内容。

  • 如果 partition-image.bin 是分区映像,我认为第二行的 '63' 需要为 0。我刚刚做了这样的事情,我需要将分区映像文件中的这个偏移量设置为零。http://philatwarrimoo.blogspot.com.au/2014/01/virtualize-old-windows-xp-disk.html (2认同)