如何在 WSL2(或 vmware)中运行嵌套的 KVM?

如何在 WSL2(或 vmware)中运行嵌套的 KVM?

我正在尝试跟随本教程介绍如何在 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)上,嵌套虚拟化受支持但默认未启用。要启用它,您必须:

  1. 将自己添加到kvm群组
  2. 更改默认组/dev/kvm
  3. 启用嵌套虚拟化/etc/wsl.conf
  4. 重启 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 提到的,如果您愿意,您还可以使用以下方法全局启用嵌套虚拟化.wlsconfigWindows 中的文件。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>

相关内容