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

Dax*_*ohl 8 hyper-v kvm-virtualization windows-subsystem-for-linux

我尝试按照本教程运行嵌套在 WSL 2 中的 KVM,但是在按照说明编译内核并加载内核后,测试kvm-ok报告不支持 KVM。

我尝试了多个选项:启用 hyper-v、禁用它、验证 BIOS/CPU 支持、启用/禁用 Device Guard、某些vmware 文档中的其他步骤(bcdedit /set hypervisorlaunchtype、gpedit/DeviceGuard 下的子选项)。

当我禁用 hyper-v、将 hypervisorlaunchtype 设置为关闭并禁用 Device Guard 时,我会在系统信息中看到以下选项,但随后 wsl2 根本无法启动,并显示“请启用虚拟机平台 Windows 功能并确保虚拟化已启用”在 BIOS 中启用。”

系统信息 在此输入图像描述 我尝试的任何其他配置,sys info 都会显示虚拟机管理程序正在运行并且不会显示 hyper-v 值,但我最终遇到了 WSL2 不支持 KVM 的初始问题。此外,如果我尝试在 VMWare Player 中启用“虚拟化 Intel VT-x/EPT”,也无法启动。

退一步来说,最终我想做的是在我的 Windows 笔记本电脑上运行firecracker 演示。因此,如果有更简单的方法可以做到这一点,那么 lmk 。

更新

我注意到它可以在带有 Ubuntu 映像的 VMWare Player 中运行。或者至少,kvm-ok 报告它已启用,/dev/kvm 存在。我还是宁愿使用 WSL2。但它拒绝加载。

ixe*_*013 9

在 WSL2 (Windows 11) 上,支持嵌套虚拟化,但默认情况下不启用。要启用它,您必须:

\n
    \n
  1. 将您自己添加到kvm群组中
  2. \n
  3. 更改默认组/dev/kvm
  4. \n
  5. 启用嵌套虚拟化/etc/wsl.conf
  6. \n
  7. 重新启动 WSL
  8. \n
\n

1. 将自己添加到群组kvm

\n

这个很简单:

\n
sudo usermod -a -G kvm ${USER}\n
Run Code Online (Sandbox Code Playgroud)\n

2. 更改默认组/dev/kvm

\n

这也很简单,但要使其在重新启动和升级后保持不变,请将此部分添加到您的/etc/wsl.conf文件中:

\n
[boot]\ncommand = /bin/bash -c \'chown -v root:kvm /dev/kvm && chmod 660 /dev/kvm\'\n
Run Code Online (Sandbox Code Playgroud)\n

3.启用嵌套虚拟化

\n

您不需要重新编译 WSL 发行版来启用嵌套虚拟化,只需将此部分添加到您的/etc/wsl.conf

\n
[wsl2]\nnestedVirtualization=true\n
Run Code Online (Sandbox Code Playgroud)\n

正如 @athys 提到的,如果您愿意,还可以使用.wlsconfigWindows 中的文件全局启用嵌套虚拟化。YMMV 取决于您特定的全局解决方案 <--> 局部问题困境。

\n

4. 重新启动 WSL

\n

您可以重新启动 Windows,或关闭所有 WSL 终端窗口并在 Powershell、CMD 或 Windows 运行菜单 ( Windows+ R)中发出此命令

\n
wsl.exe --shutdown\n
Run Code Online (Sandbox Code Playgroud)\n

下次打开终端时,WSL 将使用新选项启动,并且嵌套虚拟化将起作用。\n可以在此处找到有关启用嵌套虚拟化的更多详细信息。

\n


Dax*_*ohl 2

屏幕截图的顶行和链接文章的第一行。它需要 Windows 的内部开发版本。我的运行的是 GA 版本。注册内部计划并下载最新作品。

屏幕截图中的所有设置都是正确的,而且应该是bcdedit /set hypervisorlaunchtype auto

在不到 60 秒的时间里,我在我的笔记本电脑上从 WSL 启动了 400 个 KVM 虚拟机!(15 岁以下前 200 名)。

另请注意,我让 KVM 在 VMWare Player 中工作,但鞭炮测试从未完全有效。它启动了虚拟机,但他们没有做任何事情。显然 VMWare 是 type-2,即使它能工作也会更慢,所以我放弃了这种方法。