1. 前言

之前重装系统后,在新的Windows 10系统里开启了Hyper-v的支持。Hyper-v的虚拟机和主机的交互体验还不错。

但是开启Hyper-v的代价是,VMware Workstation的效果变差了。虽然VMware Workstation比较新的版本已经可以兼容Hyper-v,但是实际体验还是不如VMware Workstation运行在没有Hyper-v系统上的效果。

我的宿主机开启了Hyper-v。经过测试发现,同一台Windows 10虚拟机(正常开机后的状态,不运行任务),虚拟机安装了VMware Tools后,宿主机的内存开销至少增加了3GB。虽然不安装VMware Tools就可以避免宿主机内存吃紧的情况,但是不安装VMware Tools的话,交互体验又有些差。

所以我有了把VMware虚拟机迁移到Hyper-v的想法。

2. 工具选择

我尝试了2种工具:

  • StarWind V2V Converter,官网链接在这里。官网会把下载链接发送到填写的邮箱里,实际的下载链接是这个
  • Disk2vhd,微软官方提供的工具,官网链接在这里

我尝试了StarWind V2V Converter,想把VMware的虚拟磁盘直接转换成Hyper-v支持导入的格式。但是尝试失败,遇到了下面的报错(应该没记错。软件已经卸了,相关日志也删除了,反正有报错)。

Error opening file (2) [0] Disk encoding error

折腾许久解决不了,于是放弃StarWind V2V Converter。

选择使用微软的Disk2vhd。

还有一种工具:QEMU。官网可能这个。因为不确定官网、怕下载到奇怪的软件、Disk2vhd已经能解决需求,就没有尝试这个工具。

3. Disk2vhd注意事项

3.1 选择程序

从官网链接里下载压缩包,解压。文件夹里有3个程序:

  • disk2vhd.exe,推测是适配32位系统的。
  • disk2vhd64.exe,推测是适配64位系统的,也是我运行的程序。
  • disk2vhd64a.exe,推测是适配64位ARM架构系统的。

如果不确定,可以3个都双击打开,有2个会报错。

3.2 复选框

运行程序,右上角可以看到3个复选框:

  • Prepare for use in Virtual PC
  • Use Vhdx
  • Use Volume Shadow Copy

我第一次运行时,保持了默认的选项,只勾选了第二个。后来迁移到Hyper-v,虚拟机蓝屏无法修复。

第二次运行时学乖了,把3个选项都勾选了。后续成功迁移导入Hyper-v。

3.3 保存位置

导出的虚拟磁盘文件不能保存在将要被导出的虚拟磁盘分区里。

比如我想导出虚拟机的C盘分区,那导出的文件就不能保存在虚拟机的C盘里。但是我的虚拟机只有一个C盘(或者其它盘空间不够),这种情况下导出的文件就只能存放在外部。这里提供2种选择:

  • 外接设备,如U盘、移动硬盘
  • 宿主机的共享文件夹(我使用的方法)

我在宿主机上创建一个共享文件夹,通过宿主机和VMware虚拟机通信的VMnet8网络(NAT网络模式),让VMware虚拟机把导出的文件保存到这个共享文件夹里。想要实现文件夹共享,需要在宿主机里开启SMB功能,具体可以参考这篇博客

4. 工作完成

在Hyper-v管理平台里创建一个新的虚拟机,把Disk2vhd导出的虚拟磁盘文件、当作新的虚拟磁盘导入。

其它的没什么需要注意的了。