如何将平面原始磁盘映像转换为虚拟机或vmplayer的vmdk?

oku*_*ane 61 virtualization vmware image qemu virtual-machine

我有一些平面文件格式的旧Linux文件系统的旧图像.它们可以被Bochs使用,但我需要使用Virtual Box运行它们.Virtual Box无法使用此格式的图像,因此我需要将这些图像从平面文件转换为.vmdk文件格式.有没有办法做到这一点?

kro*_*old 84

apt-get install qemu (在debian/ubuntu上安装QEMU)

然后运行以下命令: qemu-img convert -O vmdk imagefile.dd vmdkname.vmdk

我假设平盘图像是dd风格的图像.转换操作还处理许多其他格式.

  • 安装qemu-utils(apt-get install qemu-utils)就足够了.这个解决方案很好用(尽管有点慢......) (6认同)
  • 它应该是磁盘映像还是分区映像? (4认同)

Llo*_*eki 81

由于问题提到VirtualBox,这个目前工作:

VBoxManage convertfromraw imagefile.dd vmdkname.vmdk --format VMDK
Run Code Online (Sandbox Code Playgroud)

为了一些有趣的细节(特别是--variant标志),不带参数运行它:

VBoxManage convertfromraw
Run Code Online (Sandbox Code Playgroud)

  • +1和VBoxManage也可用于转换其他方式(虚拟映像到原始)`VBoxManage clonehd --format raw vmdiskimage.vmdk imagefile.dd` (5认同)
  • 恕我直言,这是一个更干净的解决方案,因为它只需要Vbox的工具,而vbox应该已经存在. (4认同)
  • 但是,如果不复制整个文件,是否也可以这样做?因此,只是以某种方式创建一个额外的vmdk-metafile,它引用原始dd-image. (3认同)
  • 该解决方案是跨平台的 - win/osx/linux。 (2认同)

xha*_*fan 6

在Windows上,使用https://github.com/Zapotek/raw2vmdk将dd或winhex创建的原始文件转换为vmdk.raw2vmdk v0.1.3.2有一个错误 - 一旦创建了vmdk文件,编辑vmdk文件并修复原始文件的路径(在我的情况下代替D:\ Temp\flash_16gb.raw(由winhex创建)生成的路径是D:Tempflash_16gb.raw).然后,在6.5-7的vmware虚拟机中打开它(5.1拒绝连接vmdk硬盘).howgh!


小智 5

回答TJJ:但是在不复制整个文件的情况下是否也可以这样做?因此,以某种方式创建了一个额外的vmdk-metafile,该文件引用了原始的dd-image。

是的,有可能。这是在VirtualBox中使用磁盘映像的方法:

首先,您以通常的方式使用dd创建映像:

dd bs=512 count=60000 if=/dev/zero of=usbdrv.img
Run Code Online (Sandbox Code Playgroud)

然后,您可以为VirtualBox创建一个引用此图像的文件:

VBoxManage internalcommands createrawvmdk -filename "usbdrv.vmdk" -rawdisk "usbdrv.img"
Run Code Online (Sandbox Code Playgroud)

您可以按原样在VirtualBox中使用此映像,但是根据来宾操作系统,它可能不会立即显示。例如,我尝试在Windows guest虚拟机操作系统上使用此方法,并且必须执行以下操作以为其提供驱动器号:

  • 转到控制面板。
  • 转到管理工具。
  • 转到计算机管理。
  • 转到左侧面板中的“存储\磁盘管理”。
  • 您会在这里看到磁盘。在其上创建一个分区并对其进行格式化。对于小卷使用FAT,对于大卷使用FAT32或NTFS。

您可能要在Linux上访问文件。首先确定要从来宾OS卸载它,然后再将其从虚拟机中删除。现在,我们需要创建一个引用分区的虚拟设备。

sfdisk -d usbdrv.img
Run Code Online (Sandbox Code Playgroud)

响应:

label: dos
label-id: 0xd367a714
device: usbdrv.img
unit: sectors

usbdrv.img1 : start=          63, size=       48132, type=4
Run Code Online (Sandbox Code Playgroud)

注意分区的开始位置:63.在下面的命令中,我使用loop4,因为它是我的情况下第一个可用的循环设备。

sudo losetup -o $((63*512)) loop4 usbdrv.img
mkdir usbdrv
sudo mount /dev/loop4 usbdrv
ls usbdrv -l
Run Code Online (Sandbox Code Playgroud)

响应:

total 0
-rwxr-xr-x. 1 root root 0 Apr  5 17:13 'Test file.txt'
Run Code Online (Sandbox Code Playgroud)

好极了!