WSL 2 无法运行 Ubuntu - 错误 0x80370102

WSL 2 无法运行 Ubuntu - 错误 0x80370102

今天,我决定从 WSL 1 升级到 WSL 2。在 WSL 1 上,我让 Kali Linux 或 Ubuntu 在 WSL 1 上运行没有遇到任何问题。升级到 WSL 2 时,Kali 和 Ubuntu 都无法升级到版本 2。我读到卸载并重新安装它们可以解决这个问题。然而,在重新安装它们之后,我的系统现在无法检测到任何已安装的发行版,尽管发行版已经安装。启动 Kali 或 Ubuntu 都会出现同样的错误。

Installing, this may take a few minutes...
WslRegisterDistribution failed with error: 0x80370102
Error: 0x80370102 The virtual machine could not be started because a required feature is not installed.

在研究这个错误时,通过阅读微软官方 WSL 2 安装指南,错误似乎总是因为系统未在 BIOS 中启用虚拟化。这确实令人困惑,因为我已经检查了 4 次以上,不知道 BIOS 中是否遗漏了任何虚拟化设置,并且已确认已全部启用。我还确认我也启用了 NX 功能。甚至 HWiNFO 也检测到我已启用虚拟化:

HWiNFO 结果截图

我还确保虚拟机平台适用于 Linux 的 Windows 子系统Windows 虚拟机管理程序平台所有功能均已启用。不仅如此,我还可以从 VirtualBox 创建和运行任意数量的虚拟机,而不会出现任何错误或问题。

我经历过的其他故障排除步骤是重置 WSL 服务、重置我的机器(多次)、更新 WSL 内核、验证我的 Win 版本是否在 19041 或更高版本,并在启动后等待 20 分钟以查看我是否只是不耐烦。

系统信息:

  • 运行 Windows 10 版本 10.0.19041.388(也称为 SDK 版本 2004)
  • Ryzen 3900x CPU
  • 32GB DDR4 内存
  • Asus Tuf Gaming X570-Plus 主板,BIOS 版本 1407

答案1

首先,您需要确保已在 BIOS 中启用 CPU 虚拟化。 这些说明取决于您的硬件。

对于 AMD CPU,您将寻找一个名为的功能: “AMD(AMD 安全虚拟机,AMD SVM)”

对于英特尔 CPU,您将寻找一个名为的功能: “英特尔(英特尔虚拟化技术、英特尔 VT-x)”

以下是在我的计算机上设置 SVM 的说明。注意:这是针对 MSI 主板的。

  1. 进入高级设置。

  2. 进入超频部分。

  3. 进入 CPU 功能部分

  4. 切换 CPU 功能“SVM 模式”这使得 CPU 虚拟化成为可能。

其次,您必须启用 Hyper-V Windows 功能。

以下是我的说明(请注意,请随意使用 duckduckgo/google 单独搜索):

  1. 搜索“Windows功能”在你的任务栏中。

  2. 然后寻找“Hyper-V”.然后启用它。

此时您应该已经完成​​并且不再收到此错误。

答案2

我通过在主机上运行下面的代码并重新启动系统解决了这个问题。

bcdedit /set hypervisorlaunchtype auto

您可能还需要为虚拟机启用嵌套虚拟化。从主机运行此 PowerShell 脚本。

$VM = "Windows 11 dev environment"

# Shut down VM
Get-VM $VM | Stop-VM

# Set VM Memory to Static, Hyper-V inside the VM will not be able to adjust memory dynamically
Set-VMMemory -VMName $VM -DynamicMemoryEnabled $false

# Set VM Processor
Set-VMProcessor -VMName $VM -ExposeVirtualizationExtensions $true

# Enable MAC address spoofing. This allows the use of NAT switches
# and in the case of containerization, transparent networking
Get-VMNetworkAdapter -VMName $VM | Set-VMNetworkAdapter -MacAddressSpoofing on

#Start VM
Get-VM $VM | Start-VM

来源:https://youtu.be/SQAY4kDShhg

答案3

我这样做之后它对我有用:

  • 禁用“虚拟机平台”功能
  • 重新启动 Windows
  • 重新启用“虚拟机平台”功能
  • 再次重启 Windows

以下是 2020 年 5 月的发行说明:

我们意识到使用 DISM(部署映像服务和管理)工具修复运行 2020 年 5 月更新的系统上的损坏并不总是报告正确的状态的问题。此问题将在即将发布的服务版本中修复。

Dism 似乎很难确定某个功能是否真正启用,因此您可能需要尝试几次才能起作用。

我发现GitHub 上的解决方案,本回答中的部分信息取自那里。对我来说,找到解决方案是一项挑战,因此我在此添加此信息,以便其他可能遇到相同问题的人参考。

答案4

我已经尝试了几个月让 WSL 2 正常工作。从 WSL 1 升级我现有的“Ubuntu”安装从未成功过。

  1. 最后,我卸载了现有的“Ubuntu”(如下不是我使用的是 Ubuntu 18.04(英语:Ubuntu 20.04)安装,它是我通过微软商店安装的。
  2. 我从微软商店
  3. 确认的所有 4 个 Hyper-V 要求都回答是。
  4. 我确认我的(ASRock)BIOS 已启用“英特尔虚拟化技术”和“不执行内存保护”=已启用。
  5. 在 Windows > 控制面板 > 程序 > “打开或关闭 Windows 功能”中,我确认我已经选中(启用)“Hyper-V”和“Windows 虚拟机管理程序平台”和“适用于 Linux 的 Windows 子系统”。
  6. 对我来说,关键是取消选中“虚拟机平台”,我尝试是因为这个答案。因为这个答案,我规划重新启动后重新启用它(我会已经尝试过但未成功个月前),但幸运的是,我受到启发,尝试打开 Ubuntu 20.04 应用程序,并且它成功了!(“虚拟机平台”仍然被禁用。)
  7. 更新:哎呀,我过早地宣布成功了。我遇到的下一个问题是我无法从 WSL 2 Ubuntu 20.04 中连接到互联网。所以我做过需要重新启用“虚拟机平台”。然后需要更多步骤:(sudo rm /etc/resolv.conf && sudo bash -c 'echo "nameserver 8.8.8.8" > /etc/resolv.conf' && sudo chattr +i /etc/resolv.conf来自https://github.com/microsoft/WSL/issues/4844#issuecomment-765248581)非常有帮助(因为https://github.com/microsoft/WSL/issues/5336#issuecomment-653881695无法正常工作,并且该文件不断被覆盖)。

Bryan 的回答类似,但需要卸载/取消选中。

相关内容