最近想在 Windows 平台上搭建一个 QEMU/KVM 实验环境,简单考虑了下有以下几种可能的方案:

  • 使用 VirtualBox/VMware 创建一个 Linux 的虚拟机,然后在 Linux 里运行 KVM,需要开启嵌套虚拟化(在 VB 里是“启用嵌套 VT-x/AMD-v”,在 VMware 里是虚拟化 Intel VT-x/EPT 或 AMD-V/RVI);
  • 使用 Windows 自带的 WSL2,然后在 WSL2 里运行 KVM;
  • 使用 Windows 虚拟化平台 Hyper-v 创建一个 Linux 的虚拟机,然后开启嵌套虚拟化并运行 KVM。

第一种实验方案目前在 AMD 平台上貌似是不可行的,因为如果要兼顾 WSL2 与虚拟机,那么就必须要开启 Hyper-v(WSL2 是基于 Hyper-v 的),但是 Hyper-v 开启后其他的虚拟化软件就不能够再开启嵌套虚拟化,结果就是系统能装上,但是 KVM 无法使用;个人并不想为了 KVM 实验关闭 WSL2,毕竟 Docker for Windows 是基于 WSL2 的,关闭了之后 docker 就没法用了。

第二种实验方案应该是可行的,但是需要一些繁杂的配置,不能够使用微软商店自带的 WSL,而是要重新编译内核,具体操作请移步

我比较懒,喜欢现成的东西,而且担心重新编译内核这种方式可移植性不高(总不能在我的每一台 Windows 机器上都重新编译一下 WSL,而且 WSL 是很热门的项目,变化很快,考虑到后向兼容性,因此不采用这种方式)

第三种方式是可行的,也是最终采用的方式。首先开启 Hyper-v 功能,然后在 Hyper-v 当中导入需要的镜像,在 powershell 中执行以下命令查看所有虚拟机:

Get-VM

可以看到我们创建的虚拟机名称,保持虚拟机关闭状态,然后

Get-VMProcessor -VMName YourVMName | fl

查看详细设置。如果 ExposeVirtualizationExtensions 为 false,通过以下命令开启:

Set-VMProcessor -ExposeVirtualizationExtensions $true -VMName YourVMName

然后就可以在虚拟机当中使用 KVM 了。

Troubleshooting

使用 Hyper-v 创建虚拟交换机后,主机和虚拟机的网络都很慢,怎么解决?

首先,桥接网络以及虚拟交换机的设置请参考这篇博客:

Win10下给Hyper-V配置网络——Bridging 和 Nat 模式 - 简书

可以查看控制面板:网络连接。发现 Hyper-v 创建了一个网桥,将主机上的无线网卡与虚拟交换机桥接了起来。参考以下设置可以提升网络速度:

[Window]Hyper-v本地网络桥接后网速很慢 - 【李】 - 博客园

我是设置到了 2.4GHz 的频率,如果还没解决,这里还有一些备用方法(未试验):