别再被过时教程坑了: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、建库、跑通了 Djangomigrate和runserver——实证。 - 当时这个安装对话没直接操作,是因为该会话没接通本机执行通道,不是"能力不够"。
所以准确说法是: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 --update 再 wsl --install -d Ubuntu-22.04,别迷信"离线更稳"的旧经验。遇到教程和你的系统对不上——以官方文档和你自己系统的报错为准,不要强行兼容。
如果这篇对你有帮助,欢迎转发给需要的朋友。