W weiserv
← 返回博客

别再被过时教程坑了:Windows 11 安装 WSL2 + Ubuntu 22.04 完整踩坑实录

一份真实安装经历的复盘。从照着网上教程步步踩坑,到回归官方在线安装一气呵成——希望帮你少走弯路。

0. 写在前面

最近在本机搭 Linux 开发环境,第一反应就是装 WSL2。为求"稳妥",我从网上找了一份安装说明——核心思路是:别用官方一键安装(怕微软下载慢),改成"开功能 + 手动下离线包 + 本地装"

听起来没问题,毕竟国内访问微软 CDN 确实偶尔抽风。于是我老老实实下了两个离线包:wsl_update_x64.msi(内核更新包)和 Ubuntu2204-221101.AppxBundle(Ubuntu 离线包)。

结果呢?从第二步开始,每一步都在踩坑。最后真正跑通的,反而是教程一开始就劝你别用的官方在线安装

这篇文章复盘全过程,既为自己留档,也帮后来人省点时间。


1. 第一个坑:离线内核包根本装不上

双击 wsl_update_x64.msi,安装向导跑了几秒就退出:

Windows Subsystem for Linux Update Setup Wizard ended prematurely because of an error.

权限不够?不对,我就是本地管理员。

查了一圈才明白:这个 wsl_update_x64.msi 是 2021 年微软给 Windows 10 出的 WSL2 内核补丁包。Windows 11 出厂已内置 WSL2 内核,wsl.exe 检测到系统内核比这个老包新,直接拒绝重复安装。

结论:Windows 11 上这个离线内核包不仅不需要,而且必然失败。

2. 第二个坑:wsl.exe 占位程序必须先更新

放弃 MSI 后,我试着 wsl --version 看内核版本:

适用于 Linux 的 Windows 子系统必须更新到最新版本才能继续。可通过运行 "wsl.exe --update" 进行更新。

原来 Windows 11 上的 wsl.exe 初始是旧版占位程序,必须先 wsl --update 升级(实测升级到 2.7.10,内核 6.18)才能正常工作。

而那篇教程从头到尾假设"用离线 MSI 装内核",完全没提 wsl --update 这个前置步骤——它的知识还停在离线包时代。

⚠️ 新手小坑:验证版本用 wsl --version(双横线),敲成 wsl -version(单横线)会被回"无效的命令行参数"。

3. 第三个坑:AppxBundle 不能喂给 --from-file

我想用微软官方离线命令 wsl --install --from-file 装那个 AppxBundle:

导入的文件不是有效的 Linux 分发。错误代码: Wsl/Service/RegisterDistro/WSL_E_NOT_A_LINUX_DISTRO

--from-file 只接受 tar 格式的 rootfs,根本不认 .AppxBundle。拿 Windows 应用包喂一个只吃 tar 的命令,当然报错。

而且教程里文件名也对不上——它写"双击 Ubuntu_2204.0.10.0_x64.appx",实际文件是 Ubuntu2204-221101.AppxBundle,里面是 Ubuntu_2204.1.7.0_x64.appx,版本号、格式全不一样。照抄必翻车。

AppxBundle 正确装法是用 Add-AppxPackage 或资源管理器双击——但到这一步,我已经对离线包失去耐心了。

4. 柳暗花明:回归官方在线安装

折腾一圈,我决定走教程开头那句"不要走"的路:

wsl --update
wsl --set-default-version 2
wsl --install -d Ubuntu-22.04

就这三行。自动下载、注册 Ubuntu 22.04,弹出终端设用户名密码,一气呵成。

最讽刺的是:在线安装的下载速度完全可接受,甚至比我提前下那个 1GB 离线包还快。教程整套"离线降维打击",在本机能连微软 CDN 的前提下,纯属过度设计,反而引入了一堆兼容性坑。

💡 客观说一句:如果你处在完全无法访问微软 CDN 的纯内网环境,离线包仍有价值。但请务必用新版离线包(如 Microsoft.WSL_x64.msixbundle + AppxBundle 里的 install.tar.gz),别碰 2021 那套老东西。

5. 第四个坑:换源也要看 Ubuntu 版本

Ubuntu 默认源 archive.ubuntu.com 在国内慢得离谱,必须换国内镜像。教程给的 sed 替换,改的是:

/etc/apt/sources.list

Ubuntu 22.04 起,apt 源已改为 DEB822 新格式,路径是 /etc/apt/sources.list.d/ubuntu.sources。老教程那段 sed 改的是个已经不用的文件,改了也不生效。

正确写法(以中科大源为例):

sudo cp /etc/apt/sources.list.d/ubuntu.sources /etc/apt/sources.list.d/ubuntu.sources.bak
sudo sed -i 's#http://archive.ubuntu.com/ubuntu#https://mirrors.ustc.edu.cn/ubuntu#g; s#http://security.ubuntu.com/ubuntu#https://mirrors.ustc.edu.cn/ubuntu#g' /etc/apt/sources.list.d/ubuntu.sources
sudo apt update

清华源换 mirrors.tuna.tsinghua.edu.cn,阿里源换 mirrors.aliyun.com 即可。

6. 意外收获:AI 编程助手能替你操作本机吗?

整个过程中我还配合 AI 编程助手一起折腾——它把方案、命令、排错都规划好了。那它能不能直接登进本机 WSL 替我敲命令?

结论取决于执行通道是否接通,不能一刀切:

  • 能。 另一个开发任务中,AI 助手直接在 WSL2 Ubuntu 里 apt 装了 MySQL 8.0 + Redis、建库、跑通了 Django migraterunserver——实证。
  • 当时这个安装对话没直接操作,是因为该会话没接通本机执行通道,不是"能力不够"。

所以准确说法是:AI 能否操作本机,取决于当前会话有没有接通执行通道。边界在"通道",不在"AI 天生碰不了你电脑"。那些"AI 全自动配环境"的说法,本质是"接通了就能,没接通就给你命令自己跑"。

7. 最终可行方案(精简版)

填平所有坑后,Windows 11 装 WSL2 + Ubuntu 22.04 就是这几步:

# 0. 管理员 PowerShell:虚拟化预检(三项必须全 True)
Get-ComputerInfo | Select-Object HyperVRequirementVirtualizationFirmwareEnabled, `
  HyperVRequirementSecondLevelAddressTranslation, HyperVRequirementVmMonitorModeExtensions

# 1. 开功能 → 重启
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

# 2. 升级 WSL(替代老 MSI)→ 设默认版本 2
wsl --update
wsl --set-default-version 2

# 3. 在线装 Ubuntu 22.04(设用户名/密码)
wsl --install -d Ubuntu-22.04
# 4. Ubuntu 终端内:换国内源(22.04 新格式)
sudo cp /etc/apt/sources.list.d/ubuntu.sources /etc/apt/sources.list.d/ubuntu.sources.bak
sudo sed -i 's#http://archive.ubuntu.com/ubuntu#https://mirrors.ustc.edu.cn/ubuntu#g; s#http://security.ubuntu.com/ubuntu#https://mirrors.ustc.edu.cn/ubuntu#g' /etc/apt/sources.list.d/ubuntu.sources
sudo apt update
# 5. 验证
wsl -l -v   # 看到 Ubuntu-22.04  VERSION 2 即成功

8. 小结:怎么判断一篇教程是不是过时了?

这次踩的坑几乎全来自一份过时教程:

根因 教训
离线内核包装不上 2021 年的包喂给 Windows 11 看教程发布日期,超过 2 年要警惕
漏了 wsl --update 教程假设离线装内核,没提在线升级 系统工具链先升级,再干活
AppxBundle 喂给 --from-file 文件名、格式全对不上 命令和文件类型必须匹配,别硬塞
换源改错文件 Ubuntu 22.04 换了 DEB822 新格式 先确认系统版本,再查对应配置路径

核心经验:装 WSL2,先 wsl --updatewsl --install -d Ubuntu-22.04,别迷信"离线更稳"的旧经验。遇到教程和你的系统对不上——以官方文档和你自己系统的报错为准,不要强行兼容


如果这篇对你有帮助,欢迎转发给需要的朋友。

广告位占位 · post-inline