是否可以将虚拟机转换为物理环境?


Answers:


64

是的,没有。

可以使用VBoxManage工具将VDI转换为磁盘映像。此命令将注册的虚拟磁盘映像克隆到另一个映像文件。如果要将虚拟磁盘转换为其他格式,这是要使用的正式VirtualBox工具[*]。

VBoxManage clonehd file.vdi output.img --format RAW
  • 如果您使用的是动态VDI,并且具有较旧的VirtualBox版本,则clonehd可能无法正常运行。VBoxManage的internalcommands工具包括converttoraw,可以将动态VDI转换为原始磁盘映像()[+]。

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的全部”教程


3
VDI的大小如何?有关系吗 假设VDI大小为20GB,而实际的HDD大小为200GB ...会发生什么?
Pwnna

第一种方法“ clonehd”似乎非常慢。但是第二个工作了。
马特H

1
另请注意,如果您设法使Windows操作系统启动,则在大多数情况下必须重新激活它。
Kimmax

如果您首先进行sysprep /generalize虚拟安装该怎么办?这肯定会准备将安装安装在新硬件(在这种情况下为物理硬件)上
Robula

1
@Pwnna您正在复制硬盘的img(不仅仅是一个分区,而是整个带有分区的分区图)。我已经在过去做到了这一点,并记住看到的这个答案说明,未使用/未分区的空间到底:serverfault.com/questions/268889/...
须藤

21

如果您的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

Windows可以吗?
Ehsan


5

我试图VBoxManage clonehd file.vdi output.img --format RAW接受的答案,但没有成功。

Windows 7主机上的Windows 8.1虚拟机对我有用的是:

  1. 在VirtualBox中制作Windows 8.1计算机,安装和使用方法与使用VM通常相同。
  2. 转换的虚拟框.vdi硬盘到Windows VHDVBoxManage clonehd source.vdi target.vhd --format vhd
  3. 将VHD作为驱动器安装在Windows主计算机上(可以在“计算机管理”中的磁盘管理器中安装VHD。
  4. 将VHD(作为驱动器安装)克隆到另一个新硬盘(本例中为USB连接的笔记本电脑HD)DriveImage XML或类似的磁盘克隆工具。现在,您基本上已经将虚拟硬盘.vdi克隆到裸机上了。
  5. 在计算机上安装新硬盘。(就我而言,换用笔记本硬盘)
  6. 插入Windows 8.1安装USB / CD,从中启动,选择“高级选项”和“自动修复”。自动修复将使新硬盘可启动。
  7. 使用克隆的Windows 8.1从新硬盘启动,然后运行Windows Update。这将下载您在VirtualBox中运行Windows时不知道的计算机硬件驱动程序。您将必须手动安装缺少的驱动程序(如果有)。
  8. 卸载VirtualBox Guest Additions。(可选)安装VirtualBox,以便您的裸机Windows 8.1可以成为VirtualBox主机。

1
来自@sum:您可以尝试使用BootICE替换第六步,并确保安装正确的MBR。
fixer1234

谢谢。BootICE在某些方面是否比Windows 8.1安装更可靠?我描述的第6步可能会使MBR混乱吗?
1

1
这是新用户发布的答案(我相信superuser.com/users/523958/sum)。由于它不符合答案的资格,因此将其删除,因此我复制了该帖子并将其保存为评论,以免丢失。我个人并不熟悉。
fixer1234

3

我在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

我的完整文章:http : //www.previsioni.com.br/jailsonjan/?p=389


.img在这种情况下是否可启动?
Pumphouse

我觉得不行。我从0重复用户那里看到了类似的答案,但这似乎很简单,但是却没用。
T.Todua

0

使用以下命令进行转换:

VBoxManage clonehd CactiEZ-disk1.vmdk output.iso --format VMDK

这是输出:

0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone hard disk created in format 'VMDK'. UUID: 7f297ac6-95eb-4814-9237-1acfd6be976c
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.