我正在尝试跟随本教程介绍如何在 WSL 2 中嵌套运行 KVM,但是按照指示编译内核并加载后,测试kvm-ok
报告不支持 KVM。
我尝试了多种选择:启用 hyper-v、禁用它、验证 BIOS/CPU 支持、启用/禁用 Device Guard,以及其他一些步骤VMware 文档(bcdedit /set hypervisorlaunchtype,gpedit/DeviceGuard 下的子选项)。
当我禁用 hyper-v、将 hypervisorlaunchtype 设置为 off 并禁用 Device Guard 时,我在系统信息中得到了以下选项,但 wsl2 根本无法启动,并显示“请启用虚拟机平台 Windows 功能并确保虚拟化已在 BIOS 中启用。”
我尝试的任何其他配置,系统信息都显示虚拟机管理程序正在运行,并且不会显示 hyper-v 值,但我最终遇到了 WSL2 不支持 KVM 的初始问题。此外,如果我尝试在 VMWare Player 中启用“虚拟化 Intel VT-x/EPT”,它也会启动失败。
退一步来说,我最终要做的是运行爆竹演示在我的 Windows 笔记本电脑上。所以如果有更简单的方法可以做到这一点,请告诉我。
更新
我注意到它在带有 Ubuntu 映像的 VMWare Player 中工作。或者至少,kvm-ok 报告它已启用,/dev/kvm 存在。我仍然宁愿使用 WSL2。但它拒绝加载。
答案1
在 WSL2(Windows 11)上,嵌套虚拟化受支持但默认未启用。要启用它,您必须:
- 将自己添加到
kvm
群组 - 更改默认组
/dev/kvm
- 启用嵌套虚拟化
/etc/wsl.conf
- 重启 WSL
1. 将自己添加至kvm
群组:
这个很简单:
sudo usermod -a -G kvm ${USER}
2. 更改默认组/dev/kvm
这也很容易,但是为了使其在重启和升级后仍然有效,请将此部分添加到您的/etc/wsl.conf
文件中:
[boot]
command = /bin/bash -c 'chown -v root:kvm /dev/kvm && chmod 660 /dev/kvm'
3. 启用嵌套虚拟化
你不需要重新编译 WSL 发行版来启用嵌套虚拟化,只需将此部分添加到你的/etc/wsl.conf
:
[wsl2]
nestedVirtualization=true
正如 @athys 提到的,如果您愿意,您还可以使用以下方法全局启用嵌套虚拟化.wlsconfig
Windows 中的文件。YMMV 取决于您的特定全局解决方案<-->本地问题困境。
4. 重启 WSL
您可以重新启动 Windows,或者关闭所有 WSL 终端窗口并在 Powershell、CMD 或 Windows 运行菜单 ( Windows+ R)中发出此命令
wsl.exe --shutdown
下次打开终端时,WSL 将使用新选项启动,并且嵌套虚拟化将起作用。有关可以在此处找到启用嵌套虚拟化的方法。
答案2
屏幕截图的顶行和链接文章的第一行。它需要 Windows 的内部开发版本。我运行的是 GA 版本。注册内部程序并下载最新版本有效。
截图里的所有设置都是正确的,应该是bcdedit /set hypervisorlaunchtype auto
。
我在不到 60 秒的时间内从笔记本电脑上的 WSL 启动了 400 个 KVM VM!(前 200 个在 15 秒内启动)。
另请注意,我让 KVM 在 VMWare Player 中运行,但 firecracker 测试从未完全成功。它启动了 VM,但它们什么也没做。显然 VMWare 是 type-2,即使它能工作,速度也会更慢,所以我放弃了这种方法。
答案3
我采取了和你一样的步骤,并得到了
[ 0.330695] kvm: no hardware support
[ 0.330696] kvm: no hardware support
在dmesg
Hyper-V 中已启用,并且在 BIOS 中已启用虚拟化技术和 VT-d 功能。
在我启用 Windows Hypervisor Platform 之后,我终于
[ 0.193019] KVM: vmx: using Hyper-V Enlightened VMCS
[ 0.195115] kvm: already loaded the other module
在很多指南中,我读到 WSL 需要虚拟机平台。但仅凭这一点对我来说还不够。出于某种原因,只有当我勾选 Hyper-V、虚拟机平台和 Windows 虚拟机管理程序平台时,它才有效。
答案4
您可以尝试以下指南在 win10 pro/enterprise 中启用 WSL2 嵌套虚拟化(请注意免责声明,您或许应该使用 wsl --export 备份您的发行版):
https://gist.github.com/xtrnc/496da9243bab29629bc0461562bff458
它在我的 win10(版本 19043.1348)上运行良好。如果您已经更新了 Windows(Linux 内核现在就是通过这种方式更新的),那么您可能不需要编译内核。
如果您可以升级操作系统,也可以尝试一下。它应该在 win11 中默认启用(与 WSLg 一起)。
注意:如果您遵循指南,则需要在每次重启时运行该脚本;还需要将您的用户添加到 kvm 组以获得权限(在 ubuntu 上usermod -a -G kvm <USER>
)