最近不少朋友问我同一个问题:Win11 上怎么装最新的 Ubuntu 24.04 LTS。问的人多了我大概能猜出两类需求,一种是打算装双系统或者虚拟机折腾桌面环境,另一种就是想在本机搞一套干净的 Linux 开发环境,跑跑代码、脚本、工具链。如果你属于后者,我个人觉得 WSL 就是当下最省心的路径,没有双系统重启的麻烦,也比虚拟机轻量得多。
标题里那句“最新版”其实藏着不少坑。微软商店里的 WSL 本体在持续更新,Ubuntu 官方也在不断修正 24.04 的点版本,很多人照着老教程装完后会碰到wsl --install卡住、内核版本过旧、甚至离线环境完全装不上等问题。这篇文章我直接把从零安装到日常维护的完整链路写清楚,重点覆盖安装卡顿的排查、too old 报错修复、离线安装方案,以及装完之后的换源、VSCode、Docker、Miniconda 这些落地操作,希望能帮你一次走通。
1. 安装前先搞清楚这三件事,省下一整晚排查时间
1.1 WSL2 不是虚拟机也不是双系统,理解它的边界
很多教程上来就让你敲命令,但我觉得还是先花两分钟搞清楚 WSL2 到底是什么,后面遇到问题排查起来会更有方向。WSL2 的本质是一台轻量级虚拟机,底层走的是微软的虚拟化平台,但它和 Windows 的集成度远高于传统虚拟机:你可以直接在 Windows 里用wsl命令进入 Linux,在 Linux 里用explorer.exe .打开 Windows 资源管理器,也可以把 Linux 的目录直接映射成\\wsl$\Ubuntu-24.04这样的网络路径,两边文件互通非常顺。
适合 WSL 的场景很明确:写代码、跑脚本、装开发工具、跑 Docker、做固件分析、用 binwalk 这类安全工具,这些都是命令行干活的事。不适合的场景也有,比如你想跑完整桌面环境做主力机、需要直连某些 USB 硬件做嵌入式烧录、或者对底层硬件资源控制有强需求,那还是老老实实用 VMware 或者双系统更靠谱。想清楚这个边界,你就不会在 WSL 里纠结“为什么我的中文输入法这么难配”这类桌面版问题。
Ubuntu 24.04 是 LTS 版本,LTS 的意思是 Long Term Support,官方提供长达 5 年的安全和维护更新。对开发机来说这一点非常重要,你不会像用普通版本那样过个一年半载就面临升级压力,软件源里的包也会长期保持可用和稳定。
1.2 确认 Windows 11 版本和 CPU 虚拟化开关
开始之前,先花十秒钟确认系统状态。WSL 在 Win11 上基本是完整支持的,但建议你的系统保持在 22H2 或更高版本。Windows 版本怎么看:Win + R输入winver回车,弹窗里会显示系统版本号。
第二个必须确认的是虚拟化是否开启。WSL2 依赖 CPU 的虚拟化能力,如果你的电脑 BIOS 里关了虚拟化,后面安装多半会失败。最简单的检查方式:打开任务管理器,切到“性能”选项卡,点击“CPU”,右下角能看到“虚拟化”状态,显示“已启用”就说明没问题。如果显示“已禁用”,你需要重启电脑进 BIOS(一般是按 F2、Del 或者 F12,具体看主板品牌),在 CPU 配置里找 SVM(AMD)或 VT-x(Intel)开关,开启后保存退出再进系统。
还有一个经常被忽略的细节:执行wsl --install等命令时,务必用管理员身份打开 PowerShell 或 Windows Terminal。很多“权限不足”导致的奇怪报错,根源就是这一步没用管理员。Windows Terminal 上右键标题栏,选择“以管理员身份运行”即可。
1.3 判断当前 WSL 是没装、太旧还是被占用
装之前先看看系统现在的 WSL 状态,避免重复操作浪费时间。打开终端,依次敲这三个命令:
wsl --status wsl --version wsl -l -vwsl --status会显示默认分发版和默认版本;wsl --version显示 WSL 本体版本号,比如2.0.x或2.1.x,如果是老版本 Windows 自带的内核版本,可能没有这个命令;wsl -l -v列出当前安装的 Linux 分发版及各自对应的 WSL 版本(1 或 2)。
如果你看到版本号非常老,比如1.x时代的内核版本,建议先跑一次wsl --update把 WSL 本体更新到最新。这一步非常重要,我在后面 will 详细说 too old 报错,就是因为 WSL 内核版本太旧导致装不上新版 Ubuntu 发行版。
2. 标准安装全流程,以及“wsl --install 太慢”的真实排查链路
2.1 单命令安装的正常姿势与执行细节
在管理员身份的 PowerShell 或 Windows Terminal 里,标准安装其实就一条命令:
wsl --install这条命令会一次性完成三件事:启用必要的 Windows 可选功能(包括“适用于 Linux 的 Windows 子系统”和“虚拟机平台”)、下载并安装 WSL 本体、安装默认的 Linux 发行版(通常是 Ubuntu)。如果系统提示需要重启,重启后继续往下执行即可。
如果你想明确安装 Ubuntu 24.04,不想要默认版本,可以指定发行版名称:
wsl --install -d Ubuntu-24.04执行过程中你会看到一系列进度输出。有一步可能会让你误以为“卡死”了:它会提示你输入新 Linux 系统的用户名(注意不是 Windows 用户名),输入后提示创建密码,然后要求确认密码。输密码的时候屏幕上不会显示任何东西——没有星号也没有光标,这是 Linux 终端的正常表现,不是键盘坏了。我第一次带团队新人装的时候,几乎每个人都在这儿干等或者连续输错,所以看到密码输入界面没有任何反应,反而说明程序正在等你输入。
2.2 卡在 “Installing...” 的排查顺序
打开热搜榜动不动就能看到 “wsl --install 太慢” 这类词,这个问题我踩过太多次了。其实很多“卡住”不是真的死机,而是下载流程慢或者等待某个操作完成,建议按这个顺序排查。
第一步,区分是“真卡住”还是“在等你”。观察终端左下角有没有持续的光标闪烁,或者任务管理器里网络带宽是否有波动。如果完全没有网络流量、CPU 也几乎不动,那才叫真的卡住。
第二步,检查网络链路。wsl --install安装发行版时需要去微软的服务器拉取 rootfs 文件,而微软 CDN 在国内不同运营商、不同地区的链路波动非常大,这是“太慢”最主要的来源。可以尝试把 DNS 切换到公共 DNS 再重试,比如223.5.5.5(阿里)或119.29.29.29(腾讯),在 Windows 的“网络适配器选项”里修改 IPv4 DNS,或者在管理员 PowerShell 里设置:
netsh interface ip set dns "以太网" static 223.5.5.5第三步,确认 Windows 功能组件是否已启用。安装过程中如果因为某种原因没有完成功能启用,后续发行版下载也会表现异常。你还是可以在“控制面板 → 程序 → 启用或关闭 Windows 功能”里,手动勾选“适用于 Linux 的 Windows 子系统”和“虚拟机平台”,勾完重启再跑安装命令。
第四步,如果以上都不行,不要死磕在线安装。直接关掉终端,跳到后面第 4 章的离线安装方案,那是一条基本不受网络波动影响的路径,我用它救活了不止一台装不上的机器。
2.3 装到一半要求重启,重启后怎么接续
wsl --install装完后,系统大概率会提示“重启后才能使用”。重启回来之后,先确认 Windows 功能是否已经生效:
wsl --set-default-version 2这个命令的目的是确保后续新装的发行版默认使用 WSL2。然后继续安装发行版:
wsl --install -d Ubuntu-24.04如果提示已经安装过,你直接输入wsl --list --online看看可用发行版列表,或者直接启动已安装的发行版。启动方式有两种,一种是输入wsl进入默认发行版,另一种是输入wsl -d Ubuntu-24.04进入指定发行版。
3. “Your version of WSL is too old”:这个报错其实很好修
3.1 报错的典型场景
很多人在装完 Ubuntu 24.04 后,第一次启动或者执行某些命令时会看到一段英文提示:
Your version of Windows Subsystem for Linux is too old. Run the command wsl --update.这个报错的高频出现场景是:你在商店或通过离线方式装了一个较新的 Ubuntu 发行版,但系统里的 WSL 内核还是 Windows 内置的老版本。Windows 可选功能里的“适用于 Linux 的 Windows 子系统”组件和 Microsoft Store 分发的 WSL 本体是两套东西,前者往往停留在很旧的版本,这就导致新旧不匹配。说白了,你手里拿着新系统的钥匙,锁却是几年前的,肯定打不开。
3.2 修复步骤:wsl --update 的前后细节
修复思路就是让 WSL 内核追上发行版的“要求线”。打开管理员 PowerShell:
wsl --update命令会从微软服务器拉取最新 WSL 包并安装。如果这一步也提示“无法更新”或者特别慢,属于网络链路问题,处理方式参考第 2.2 节的 DNS 操作,或者在微软商店搜索 “Windows Subsystem for Linux” 这个应用手动安装,安装完商店应用同样能达到更新效果。
更新完成后,用wsl --version确认 WSL 本体版本号和 Linux 内核版本号已经变成较新的状态。如果之前遇到的 too old 报错是运行某个发行版时弹出来的,此时大概率已经消失;如果仍然存在,用wsl --shutdown彻底关掉 WSL 进程,再重新打开终端启动发行版。
3.3 注意别被系统自动更新“回退”坑到
处理完这个报错后,如果你用了一些社区里的“Win11 关闭自动更新”之类的操作,把 Windows 更新暂停了,你可能会发现 WSL 内核版本在一个很旧的状态上一直无法被自动更新。WSL 的内核更新很多时候是跟着 Windows 补丁走,暂停更新太久会让这类组件缓存一直不刷新。
我的建议是:开发机尽量不要长期暂停系统更新,如果实在需要控制更新时机,可以选择“暂停更新 1 周”,但要定期手动执行wsl --update来保持 WSL 内核不落后。别等到新发行版装不上的时候才想起来这件事,耽误的是自己的时间。
4. 离线安装 Ubuntu 24.04:网络受限环境的完整方案
4.1 什么时候需要离线安装
离线安装不是冷门需求,它适用于两类人:一是内网开发机或网络策略受限的机器,二是反复尝试wsl --install都因为网络波动失败的人。对后者来说,离线安装反而是更可靠的“攻坚手段”。
常见的离线安装有两种做法:一种是“导出/导入”自己手上已经装好的 WSL 发行版,另一种是直接获取官方 rootfs 压缩包再导入。两条路都需要一台能正常访问外网的机器作为中转,如果完全没有外网,那就得借助已有的离线安装包。
4.2 方案 A:从现有机器导出再导入
假设你有一台机器 A 已经装好了可用的 Ubuntu 24.04,可以把它整体打包成 tar 文件,然后用 U 盘或局域网传给机器 B。
在机器 A 上先执行wsl --shutdown确保系统处于干净状态,然后查看发行版注册名:
wsl -l -v假设注册名是Ubuntu-24.04,导出到这个目录:
wsl --export Ubuntu-24.04 D:\wsl-backup\ubuntu2404.tar把ubuntu2404.tar拷到目标机器 B,放到比如 D 盘wsl目录下,执行导入:
wsl --import Ubuntu-24.04 D:\wsl\Ubuntu2404 D:\wsl-backup\ubuntu2404.tar这里的参数依次是:新发行版名称、虚拟磁盘存放目录、tar 包路径。导入成功后启动:
wsl -d Ubuntu-24.04需要注意,通过wsl --import导入的发行版默认以 root 用户登录,且不会保留机器 A 上的 Windows 文件互操作配置。你需要在 Ubuntu 里编辑/etc/wsl.conf,写入一段内容来指定默认用户:
[user] default=你的用户名保存后回到 Windows 执行wsl --shutdown,再重新启动发行版,就会以指定用户登录了。
4.3 方案 B:直接下载官方 rootfs 再导入
如果你手上没有现成的 WSL 环境,可以找一台能上网的机器,从 Ubuntu 官方渠道获取 WSL 专用的 rootfs 压缩包,注意别下载成云镜像或者 Docker 镜像,格式不一样。下载完成后,同样用wsl --import命令导入。
导入后因为是纯净 rootfs,没有创建过用户,所以第一件要做的事就是用 root 登录并创建一个普通用户。我建议的步骤是:
wsl -d Ubuntu-24.04 adduser 你的用户名 usermod -aG sudo 你的用户名之后同样在/etc/wsl.conf里指定默认用户,然后wsl --shutdown重进。这个流程看起来比在线安装多几步,但好处是整个过程完全不依赖你的当前网络状况,只要包拿到了,百分之百能装上。
4.4 离线安装后别忘的三件事
导入的发行版不会自带 24.04 最新点版本的状态,装完之后我建议按这个顺序收尾:先运行sudo apt update && sudo apt upgrade -y,把软件源和系统包补到当前版本;然后确认一下系统版本号,运行lsb_release -a应该能看到Ubuntu 24.04.x LTS的字样;最后如果有开发需求,往下接着看第 5 章的配置。
5. 首次启动 Ubuntu 24.04 后的必经操作:换源、开发环境与顺手配置
5.1 用户与密码的细节,以及忘记密码的救法
首次启动在线安装的 Ubuntu 24.04 时,系统会要求你创建一个 UNIX 用户名和密码。这里有几个容易踩的点:用户名要求小写字母开头,不能包含大写字母和特殊字符,比如jack或dev都行,Jack就不行;密码输入时不回显是正常的。如果你第一次随便输了一个密码然后忘了,可以在 Windows PowerShell 里用管理员身份进入默认 root:
wsl -u root然后用passwd 你的用户名重置密码。这个操作能救急,但不希望你真的用上。
5.2 换源操作,24.04 的文件格式和旧教程不一样
Ubuntu 24.04 的 apt 源配置方式和 20.04、22.04 不一样。以前是改/etc/apt/sources.list单一文件,24.04 换成了 deb822 格式,默认源文件在/etc/apt/sources.list.d/ubuntu.sources。如果你照着老教程去找/etc/apt/sources.list,会发现里面内容很少甚至只有注释,然后在网上到处问“为什么我的 sources.list 改了半天没效果”。
正确做法是编辑ubuntu.sources这个文件,把其中的URIs那一行替换成你喜欢的国内镜像源地址即可:
sudo sed -i 's|http://archive.ubuntu.com/ubuntu|https://mirrors.aliyun.com/ubuntu|g' /etc/apt/sources.list.d/ubuntu.sources如果你习惯用清华源,把mirrors.aliyun.com换成mirrors.tuna.tsinghua.edu.cn即可。改完后执行:
sudo apt update看到更新索引正常拉到最新,就说明换源生效了。国内网络环境下这个操作基本是必做的,不换源的话 apt 下载速度可能会让你怀疑人生。
关于 deb-src 这一项,如果你是普通开发用,没必要开启源码源,保持注释状态即可,开启只会拖慢apt update的速度。
5.3 开发环境落位:VSCode、Docker、Miniconda 和常用工具
装好系统、换好源,接下来就是正式投入使用。
VSCode 集成是 WSL 最舒服的体验之一。在 Windows 侧安装好 VSCode 后,再装一个微软官方的扩展 “WSL”(Remote - WSL)。之后在 WSL 的终端里,随便进到某个项目目录,运行:
code .VSCode 就会自动以“WSL 模式”打开当前目录,左下角显示类似于WSL: Ubuntu-24.04的字样。这个模式下所有终端操作、调试、代码补全都发生在 Linux 环境内,比在 Windows 里跨文件系统编辑 Linux 文件顺畅得多。
Docker 有两条路线。如果你喜欢图形化管理,可以装 Docker Desktop,然后在设置里把资源 → WSL 集成,选中 Ubuntu-24.04,之后你在 WSL 里直接敲docker命令就能用。如果你更喜欢纯净体验,可以在 WSL 内部装 Docker Engine,Ubuntu 24.04 默认开启 Systemd(较新的 WSL 版本默认支持),所以sudo systemctl enable docker这类操作是可以正常工作的。个人观点:开发机用 Docker Desktop 更省心,服务器上用 Engine 更干净。
Miniconda 的安装没有太多坑,但有一个最常见的错误:在 Windows 上下了 Windows 版的 Miniconda 安装包,然后在 WSL 里运行,导致后续路径错乱。正确的操作是在 WSL 终端里进入 Linux 下载页,拿 Linux x86_64 版的.sh安装包,运行bash Miniconda3-latest-Linux-x86_64.sh,安装路径默认放在用户目录下,最后把~/miniconda3/bin加到 PATH。之后创建虚拟环境、装 Python 包,都在 Linux 语境内完成。
还有一类工具是 WSL 用户的隐形福利,比如固件分析常用的 binwalk,在 WSL 里直接:
sudo apt install binwalk就能跑起来,省掉了以前开虚拟机的成本。我用 WSL 跑 binwalk 和各类命令行安全工具已经很多年了,日常开发真的没有必要为了这些工具专门开一台虚拟机。
如果你需要在 WSL 里做 GPU 相关的开发,比如 CUDA,前提是 Windows 侧已经安装了支持 WSL 的 NVIDIA 驱动,然后在 WSL 里按照 CUDA Toolkit 官方文档的 WSL 版本安装向导走即可。注意不要重复安装 Windows 侧驱动,WSL 里只需要装 CUDA Toolkit 本身,GPU 驱动是通过 Windows 侧透传过来的。
6. 升级、迁移与日常维护的坑位清单
6.1 从旧版 Ubuntu 升级到 24.04
有些朋友电脑上已经装了 Ubuntu 20.04 或 22.04,想升到 24.04。理论上可以用官方升级命令:
sudo do-release-upgrade但 LTS 版本升级原则是逐级升,20.04 → 22.04 → 24.04,不能跨大版本直接跳。整个升级过程耗时较长,而且一旦软件源有问题容易中断。对于开发机,我个人的建议是:如果项目代码都提交到了远端仓库,本地开发环境是可以随时重建的,那不如直接重装 24.04,把home目录下的配置和密钥备份出去就行。升级比重装更容易踩到残留依赖的坑,尤其是你装过很多第三方软件源包的情况下。
6.2 磁盘 vhdx 膨胀与迁移系统目录
WSL 的整个文件系统放在一个 vhdx 虚拟磁盘文件里,默认位置在 Windows 用户目录下:C:\Users\你的用户名\AppData\Local\Packages\...。这个虚拟磁盘的坑在于:你在 WSL 里删除大量文件后,磁盘空间不会自动回收,vhdx 文件只会不断膨胀,导致 C 盘空间越来越少。
解决办法是先彻底关闭 WSL:
wsl --shutdown然后打开管理员 PowerShell,用diskpart挂载并压缩 vhdx。步骤是:diskpart进入交互模式,执行select vdisk file="C:\Users\你的用户名\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu24.04LTS_*\LocalState\ext4.vhdx",路径里的具体包名可能略有差异,可以用dir定位,然后执行attach vdisk readonly,再执行compact vdisk,最后detach vdisk。压缩完 C 盘空间会明显回来一部分。
如果你想把整个 WSL 系统迁移到 D 盘,方法其实和第 4 章的导出导入完全一致:wsl --export导出,wsl --import到 D 盘指定目录。迁移完毕后,旧的C:\Users\...\LocalState目录需要手动删除,注意删除前确认新的发行版能正常启动。
6.3 网络与文件互通中的几个真实场景
WSL2 的网络模式是 NAT 转发,所以从 Windows 访问 WSL 里的服务(比如localhost:8080的 Web 服务)通常是通的,但如果是局域网其他电脑想访问 WSL 里的服务,情况会复杂一些,需要处理端口转发和 Windows 防火墙规则。日常开发如果只是本机调试,绝大多数场景不用管。
文件访问方面要记住一个性能原则:跨系统文件访问是慢的。比如你把项目代码放在C:\project,然后在 WSL 里用 Linux 工具链去编译,性能是明显打折扣的,因为你实际上走的是 9P 协议跨系统读写。正确做法是项目代码放在 WSL 的 Linux 文件系统里面,比如/home/用户名/project,在 Windows 侧通过\\wsl$\Ubuntu-24.04\home\用户名\project去访问。这样两边看文件都很方便,编译性能也不会受拖累。
还有一个常见问题是公司网络或路由器环境变了之后,WSL 里的 DNS 有时会异常,表现是apt update报域名无法解析。可以先重启 WSL(wsl --shutdown再启动)看是否恢复,通常都能解决。
最后分享一个我个人的维护习惯:每次装完 WSL 环境,我会第一时间把~/.bashrc里加两行捷径,一行是切换目录用的,另一行是在 Windows 当前目录直接打开 WSL。这个习惯未必适合所有人,但如果你经常在 Windows 和 WSL 之间来回切换,会发现这种“顺手配置”积累得越多,后面的操作越丝滑。希望大家都能顺利跑起自己的 Ubuntu 24.04,少踩几个坑。