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,想把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导出的虚拟磁盘文件、当作新的虚拟磁盘导入。
其它的没什么需要注意的了。