我一直试图将在 VirtualBox 上创建的 VHD 文件导入 Hyper V,但没有成功。详情:
VirtualBox 版本 4.3,运行于 Mac OS X Mavericks
Hyper V 版本 6.2.92,运行于 Windows 8
通过从 CentOS 7 最小安装安装,创建了 CentOS 7 映像。创建 VirtualBox VM 时,我选择了 VHD 作为磁盘格式。我选择了自动分区配置。
为了导出 VHD,我克隆了 VirtualBox VM,并将克隆的 VHD 复制到 Windows 机器。
在 Hyper V 上加载时,当 Linux VM 启动时,它会进入紧急模式,抱怨它找不到各种目录/分区,例如交换。
知道发生了什么事吗,或者我可以尝试什么?
答案1
当您在 VirtualBox 下克隆虚拟机时,它会为虚拟硬盘生成一个新的 uuid。您可以使用“vboxmanage showhdinfo”命令查看原始 vhd uuid 是什么以及新 vhd uuid 是什么。有了它,您将必须编辑引导加载程序(通常是 Linux 的 grub),将旧的 vhd uuid 替换为新的(克隆的)vhd uuid,或者编辑 grub 以使用 vhd 的名称进行引导 - 无论哪种方式,您可能都必须使用虚拟机中的救援 CD 进行引导
答案2
虚拟机实际启动并进入紧急模式意味着磁盘格式基本兼容。
您的问题不是 VHD 兼容性问题;而是模拟的虚拟硬件存在差异。可能是磁盘设备名称发生了变化,您需要使用 rescuecd 映像进行修复或/etc/fstab
其他操作。
答案3
您可以尝试将 VDI 文件克隆到 VHD 文件,而不是直接导出 VHD 文件。您是否尝试过使用 vboxmanage 命令克隆 HDD?
vboxmanage clonehd D:\VMachines\CentOS.vdi D:\VMachines\CentOS.vhd –format VHD
另外,在为 Hyper-V 设置磁盘控制器时,选择 IDE 作为首选格式,它就可以工作了。
答案4
有一种更简单的方法来复制 vdi/vhd 映像并保留相同的 uuid 号码:
使用虚拟媒体管理器复制硬盘文件后,选择原始虚拟磁盘并单击下面的信息选项卡并复制 uuid 编号。进入命令提示符并将目录路径更改为您的 virtualbox 文件夹,例如:cd“c:\Program Files\Oracle”,然后输入:VBoxManage internalcommands sethduuid {虚拟映像文件的路径} {在此处粘贴您的 uuid}。以下是我的设置中的示例命令:VBoxManage internalcommands sethduuid G:\Centos\Centos-disk1_copy.vhd {f46a35d1-1c3f-44ac-bee1-8dac7d72db1d}
您将收到类似这样的提示:UUID 更改为:f46a35d1-1c3f-44ac-bee1-8dac7d72db1d
现在您可以在 hyper-v 上使用该 VHD 映像