Answers:
是的,没有。
您可以使用VBoxManage工具将VDI转换为磁盘映像。此命令将注册的虚拟磁盘映像克隆到另一个映像文件。如果要将虚拟磁盘转换为其他格式,这是要使用的正式VirtualBox工具[*]。
VBoxManage clonehd file.vdi output.img --format RAW
VBoxManage internalcommands converttoraw file.vdi output.img
但是 ...输出的IMG文件不是ISO映像,并且安装的OS不会配置为从可引导CD / DVD运行。您可以将IMG“刻录”(写入)到硬盘驱动器上,并且它可能在裸机上启动(例如,不在虚拟机中)。但这可能不是,因为安装在该IMG上的操作系统期望看到VirtualBox提供的虚拟硬件,并且您正在不期望的真实硬件上启动它。
某些版本的Windows无法很好地处理这种情况;一些Linux发行版可以做到。有时可以像这样配置OS(之前或之后)以将其从一种环境迁移到另一种环境,但是具体步骤完全取决于要迁移的OS。
在Windows上,您可能需要指定程序的完整路径:
"C:\Program Files\Sun\VirtualBox\VBoxManage.exe" [...]
将C:\ Program Files \ Sun \ VirtualBox添加到您的PATH中以使用简短版本。
[*]我假设“ --format RAW”选项将转换为标准磁盘映像,就像您在物理硬盘驱动器上使用dd命令一样。但坦率地说,我还没有找到任何支持此目的的文档,因此请注意,这可能是不正确的。
[+]我刚刚在VirtualBox 3.1.2下测试了这两个命令。根据md5sum,两个输出文件是相同的,但是我还没有完全测试输出文件。
另请参阅VirtualBox论坛上的“关于VDI的全部”教程。
sysprep /generalize
虚拟安装该怎么办?这肯定会准备将安装安装在新硬件(在这种情况下为物理硬件)上
如果您的vdi文件包含分区,并且您只想提取其中一个分区,请使用以下命令:
首先,就像魁北克吉ote德之前所说的那样,将vdi文件转换为原始图像文件:
# VBoxManage clonehd file.vdi file.raw --format RAW
然后为图像设置循环设备:
# loopdev=$(losetup --show -r -f file.raw)
使用kpartx为原始文件中的每个分区创建设备:
# apt-get install kpartx
# kpartx -a $loopdev
查看我们现在拥有哪些设备。在此示例中,只有一台设备,因为原始映像中只有一个分区:
# ls /dev/mapper/loop*
/dev/mapper/loop0p1
现在挂载它,以验证所有文件都可以正常工作:
# mkdir /mnt/part1
# mount /dev/mapper/loop0p1 /mnt/part1
# ls /mnt/part1
# umount /mnt/part1
使用dd将分区内容复制到另一个目标分区:
# dd if=/dev/mapper/loop0p1 of=/dev/sda2 bs=1M
完成后,再次删除设备映射:
# kpartx -d file.raw
我试图VBoxManage clonehd file.vdi output.img --format RAW
从接受的答案,但没有成功。
Windows 7主机上的Windows 8.1虚拟机对我有用的是:
VBoxManage clonehd source.vdi target.vhd --format vhd
我在Linux中只需两行命令即可非常快速地完成此过程:
#
VBoxManage内部命令converttoraw your_disk_virtual.vmdk your_disk_virtual.img
要么
#
VBoxManage内部命令converttoraw your_disk_virtual.vdi your_disk_virtual.img
#
mv your_disk_virtual.img your_disk_virtual.iso