如何将 WSL2 内核中的内核更新到最新版本?

sjr*_*jrm 35 linux kernel wsl2

我的 WSL2 子系统中当前的内核版本是:

5.10.60.1-microsoft-standard-WSL2
Run Code Online (Sandbox Code Playgroud)

但是,我在官方 Microsoft WSL GitHub 存储库中看到有更新版本的内核:

linux-msft-wsl-5.10.102.1
Run Code Online (Sandbox Code Playgroud)

如何更新已安装的 WSL 设置中的内核?我试过这个:

wsl --update
Run Code Online (Sandbox Code Playgroud)

但它不会更新内核版本。

Not*_*1ds 41

目前至少有三种方法可以升级 WSL2 内核:

  1. 对于最新的 Windows 版本(Windows 10 21H2 和 Windows 11),wsl --update通常是最佳选择,但要意识到 Microsoft 在 Github 上发布内核的时间与可用于自动更新的时间之间存在轻微的滞后。

    写这个问题的时候:

    • 5.10.60.1 是 Windows 11 上自动更新的最新可用版本
    • 5.10.16 是 Windows 10 的最新版本。
    • 5.10.102.1 是 Github 存储库中可用的 WSL2 内核的最新版本。几天前,即 3 月 8 日,它刚刚发布。这就是为什么wsl --update(当时)没有将其引入 OP——它根本还无法用于wsl --update(或 Windows 自动更新)。

    然而,现在,截至本次编辑时:

    • 5.10.102.1 是通过(和自动 Windows 更新)适用于 Windows 10 和 11 系统的最新稳定wsl --update内核。
    • 5.15.57.1​​ 刚刚作为最新预览版发布(在 Windows 11 Insider 版本上)。

    请注意,您可能需要wsl --update在管理会话中运行才能更新。

    如果需要,您可以使用以下命令恢复到以前的内核版本:

    wsl --update --rollback
    
    Run Code Online (Sandbox Code Playgroud)

    无论如何,我建议在更新之前重命名(或移动到另一个位置)以前的内核,以便您可以根据需要使用该.wslconfig文件在各种内核之间切换。

    注意:目前 Microsoft Store 中还为 Windows 11 用户提供了 WSL 的“预览”版本。如果您使用的是这个 Store 版本,那么wsl --update不仅会更新内核本身,还会更新 WSL Store 包为最新版本。由于它是用户级应用程序,因此您不再需要wsl --update在管理会话中运行。 在这些版本中wsl --update --rollback不再可用。

  2. 对于不支持的旧版本 Windows 10 wsl --update,请参阅@harrymc 的回答。您仍然可以选择自动更新,并且(如果可用)新内核将通过正常的 Windows 更新机制进行升级。

  3. 最后,您当然可以编译自己的 WSL2 内核。最好从 Microsoft 源开始,因为它为内核提供了正确的配置选项选择,以便在 Windows/WSL2 中最佳运行。

    .wslconfig编译或获取自定义内核后,您可以通过创建具有适当部分和内核配置的文件来指定将其用于所有 WSL2 实例。


har*_*ymc 33

为了确保获得 WSL2 内核的更新:

  • Windows 10:打开 设置 > 更新和安全 > Windows 更新
    Windows 11:打开设置 > Windows 更新
  • 点击“高级选项”
  • 启用“更新 Windows 时接收其他 Microsoft 产品的更新”
  • 返回“设置”中的上一页,单击“检查更新”。

这将允许 Windows 为 WSL 2 安装最新的 Linux 2 内核。

Github 上存在更高版本并不意味着它尚未合并到稳定版本中。


Jur*_*ber 18

wsl --update对于那些由于公司严格的用户更新政策而无法更新 WSL 内核的人,他们可以手动安装 WSL 内核。读这个

cd C:\Users\your_username\Desktop\
wsl --shutdown
wsl_update_x64.msi
wsl
uname -r
Run Code Online (Sandbox Code Playgroud)

这应该会更新内核并显示最新的运行版本。