你是否有过这样的经历:一台 win11 电脑上,WSL 里装了一个 Ubuntu 24.04,刚开始觉得挺干净,用着用着就变成大杂烩。A 项目要 Python 3.12,B 项目要老版本内核,C 项目又要装一堆系统级依赖,全挤在一个实例里,装一个包前先要想半天会不会把别人顶掉。
其实 WSL 完全可以在同一台 win11 上同时跑多个 Ubuntu 24.04 实例,一个当主力开发环境,一个当测试沙盒,互不打扰。再加上“改个舒服的名字”这个操作,日常用起来会顺手很多。今天我就把“安装第二个 Ubuntu 实例”和“重命名已有实例”这两件事从头到尾盘一遍,顺便把过程中踩过的坑、排查过的报错一并列出来,争取让你看完就能直接照着做。
1. 开工前先摸清家底:WSL 版本与系统检查
1.1 先确认 Windows 11 本身支持 WSL 2
如果你还在纠结“win11 能不能用 WSL”,答案是肯定的,而且 win11 对 WSL 2 的支持比 win10 更丝滑。但“能用”不代表“默认开好”,很多机器买回来,虚拟化相关的功能压根没启用。
先在开始菜单里搜“启用或关闭 Windows 功能”,勾选这三项:
- 适用于 Linux 的 Windows 子系统
- 虚拟机平台
- Hyper-V(如果只想用 WSL,不装 Hyper-V 管理器也可以,但建议勾上,后面出问题好排查)
勾完系统一般会要求重启。这一步虽然基础,但我见过太多人跳过它,结果后面 wsl --install 各种报错,其实根子就在虚拟化没开。
另外,开机进 BIOS 确认一下 CPU 虚拟化技术(Intel VT-x 或 AMD SVM)是否开启。现在的 win11 电脑默认大多开了,但一些 DIY 机器、老型号笔记本可能还是关着的,不开的话 WSL 2 永远起不来。
1.2 用 wsl --version 判断命令能力
WSL 这玩意儿从 win10 时代一路升级到现在,命令行参数变了好几次。老版本的 wsl.exe 只支持 --install、--set-version 这类基础命令,新版才支持 --name、--clone、--manage 这些高级功能。
想在 WSL 里装多个 Ubuntu 24.04 并重命名,最好先把 WSL 本身升级到比较新的版本。检查方法很简单,打开 CMD 或 PowerShell 输入:
bash复制wsl --version
如果输出的是下面这种带 WSL 版本号的格式,说明命令是新的:
text复制WSL 版本: 2.x.x.x
内核版本: 5.15.x.x
WSLg 版本: 1.0.x
如果提示“参数无效”或者只显示一堆安装信息,说明你的 wsl.exe 还停留在旧版,建议先更新。
1.3 让 WSL 保持在最新版
升级 WSL 最快的办法,在管理员 PowerShell 里执行:
bash复制wsl --update
它会从微软的更新通道拉取新版内核和 WSL 组件。如果这条命令卡住不动,或者提示服务不能启动,先别急着重装系统,多半是本地的“适用于 Linux 的 Windows 子系统”服务被禁用了,或者 Windows Update 服务停了。后面第 5 节我会专门讲这个问题。
另外一个思路是下载 WSL 的离线安装包手动升级。微软提供 .msi 格式的 WSL 安装包,下载后双击安装就行,不依赖在线更新通道。实测下来,在内网环境或更新服务异常时,这个办法最省心。
更新完记得再跑一遍 wsl --version,确认版本号到位再开始下一步。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 安装第一个 Ubuntu 24.04:先把地基打稳
2.1 最简单的安装姿势
如果你从头开始,还没有任何发行版,直接管理员 PowerShell 跑:
bash复制wsl --install -d Ubuntu-24.04
它会自动完成启用组件、下载内核、安装发行版这几件事。第一次安装会让你设置 Linux 用户名和密码,注意用户名别用大写,也别跟 Windows 用户名混淆,密码输入时屏幕不显示,这是正常现象。
装完默认是 WSL 2 模式,发行版名字就叫 Ubuntu-24.04。这一步没什么花活,但有几个细节值得留意:
- 装的时候不要开代理类的工具,WSL 安装走的是系统网络栈,挂了反而容易出现下载中断。
- 安装目录默认在 C 盘,如果 C 盘空间紧张,建议先看第 5.3 节,把实例迁移到大分区,不然装到一半爆盘,全白干。
2.2 安装太慢、更新拉不动怎么办
热搜词里“wsl --install 太慢”一直居高不下。我自己也遇到过,装一个 Ubuntu 24.04 卡在下载阶段十几分钟没反应,后来发现不完全是网速问题,而是这个命令要从微软商店拉取应用包,商店服务偶尔会抽风。
应对办法有这么几个,按推荐顺序来:
- 先重启 Windows Update 服务。在管理员 PowerShell 里执行:
bash复制Stop-Service wuauserv -Force
Start-Service wuauserv
-
如果还慢,去微软商店手动搜索“Ubuntu 24.04”,在商店页面直接点获取。商店下载通常比命令行更直观,进度、报错都看得清清楚楚。
-
再不行,下载离线 rootfs。Ubuntu 官方提供 WSL 专用的 rootfs 镜像,拿到 tar 包后用 wsl --import 注册到系统里,完全不依赖商店。这个办法后面讲第二个实例时也要用到,建议提前学会。
2.3 进系统后第一时间要做的三件事
第一个 Ubuntu 24.04 装好,别急着装环境,先把基础盘面收拾干净:
- 更新 apt 源:Ubuntu 24.04 默认源在国外,国内网络下 update 会很痛苦。把 /etc/apt/sources.list.d/ubuntu.sources 里的源换成可用的镜像源,比如清华、中科大、阿里云这些,选一个离你近的。这是合规镜像,放心用。
- 安装基础工具链:build-essential、curl、git 这几个装好,后面省很多事。
bash复制sudo apt update
sudo apt upgrade -y
sudo apt install -y build-essential curl git
- 确认 WSLg 图形界面正常。Ubuntu 24.04 在 WSL 里跑图形程序靠 WSLg,你在 win11 上要是能直接打开终端里的 GUI 应用,说明 WSLg 工作正常。后面如果遇到微信界面模糊这类问题,也跟这块有关。
3. 在同一个 WSL 里跑起第二个 Ubuntu 24.04
这是全文的核心安排。先说结论:WSL 支持装多个 Linux 发行版,而且不是必须用不同发行版,同一个 Ubuntu 24.04 也可以装第二、第三份。方式有三种,看你想要“全新的”还是“复刻的”环境。
3.1 方案一:安装时直接用 --name 指定新实例
如果你要的是第二个“干净”的 Ubuntu 24.04,跟第一个完全没有关系,推荐这个方式。WSL 新版本支持在安装时指定名称,命令长这样:
bash复制wsl --install -d Ubuntu-24.04 --name Ubuntu-Build
这样系统里就会出现一个名为 Ubuntu-Build 的全新实例,和默认的 Ubuntu-24.04 并存。要注意的是,这个参数需要较新的 WSL 版本支持,老版本会提示未知参数,所以开工前先按第 1.2 节检查版本。
这个方案的好处是干净,两个实例的文件系统完全独立,互不污染。坏处是要重新下载一份 rootfs 并重新设置用户,耗时更长,而且如果网络不好,下载第二个实例同样会卡。
如果你已经装过第一个 Ubuntu-24.04,再跑这个命令时有些版本会提示“分发版已安装”之类的话。这时候我建议直接看方案二或方案三,别在一个命令上死磕。
3.2 方案二:从已有实例导出再导入,想要什么数据自己定
这个方式是我日常用得最多的。它能把一个实例完整打包成 tar 文件,再以新的名字导入系统,相当于“复制粘贴”一份环境。
以把当前 Ubuntu-24.04 复制成 Ubuntu-Test 为例,完整步骤:
第一步,关闭要复制的实例,确保文件一致性:
bash复制wsl --terminate Ubuntu-24.04
第二步,创建导出目录,执行导出:
bash复制mkdir D:\wsl\backup
wsl --export Ubuntu-24.04 D:\wsl\backup\ubuntu24.tar
第三步,创建新实例的目录,并导入:
bash复制mkdir D:\wsl\Ubuntu-Test
dism.exe /online /Disable-Feature /FeatureName:Microsoft-Windows-Subsystem-Linux /NoRestart
不好意思,上面那条 dism 命令是错的,那条是关闭功能,千万别跑!第三步入口是:
bash复制wsl --import Ubuntu-Test D:\wsl\Ubuntu-Test D:\wsl\backup\ubuntu24.tar --version 2
这里 --version 2 表示新实例用 WSL 2 模式。导入完成后,可以用下面命令进入新实例:
bash复制wsl -d Ubuntu-Test
有一个坑必须提前告诉你:这样导出来的新实例,文件系统内容和原实例一模一样,包括你所有的用户名、软件、配置。如果只是想把当前环境完整复制一份来做测试,那没问题;如果你想借这个办法顺便得到一份“干净”Ubuntu,那不行。
另外,导入后的实例默认登录用户是 root,而不是你原来设置的用户。如果想切回普通用户,可以编辑 /etc/wsl.conf:
ini复制[user]
default=你的用户名
改完执行 wsl --terminate Ubuntu-Test 再进入即可生效。
3.3 方案三:用 wsl --clone 快速克隆
如果你的 WSL 版本足够新,还有个更爽的命令:克隆。一条命令直接把一个实例连名字带数据复制一份。
bash复制wsl --clone Ubuntu-24.04 --name Ubuntu-Clone
执行完直接生成 Ubuntu-Clone 实例,不需要导出 tar,也不需要手动建目录,速度比 export/import 快不少。
但 clone 对磁盘空间要求更高,因为它是复制整个文件系统,如果原实例已经有几十 GB,那就要准备双份空间。这个方案最适合的场景是:你想在现有环境上做一次大改动,又怕改坏了,先克隆一个出来当“安全网”。
3.4 两个实例如何区分和管理
系统里有了两个 Ubuntu,接着就涉及日常管理。最常用的几条命令:
bash复制wsl -l -v # 列出所有实例及 WSL 版本
wsl -d Ubuntu-Build # 进入指定实例
wsl --terminate Ubuntu-Build # 停止指定实例
wsl --shutdown # 停止所有实例
wsl --set-default Ubuntu-Dev # 设置默认实例
名字起得好不好,这时候就看出来了。如果两个实例都叫 Ubuntu 开头的默认名,时间一长自己都会搞混。建议用后缀区分用途,比如 Ubuntu-Dev、Ubuntu-Test、Ubuntu-Build、Ubuntu-Default,比 Ubuntu-24.04 和 Ubuntu-24.04 (2) 直观多了。
还有个小技巧:在 Windows Terminal 里给每个 Ubuntu 实例单独建一个配置文件,显示名写成“主力开发”“测试环境”这种中文名,配色也区分开,一眼就能认出当前进的是哪个环境,不用每次敲 wsl -l -v 确认。
4. 重命名已有 Ubuntu 实例:别去动注册表
4.1 先搞明白“名字”到底存在哪
很多朋友在第一次装 WSL 的时候没想好名字,等到项目多了才发现名字没起好,于是顺手去注册表里改。这里我劝你打住。
WSL 的发行版名称存在这里:
text复制HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss
下面每个子键对应一个发行版,键名 BasePath 指向实例目录,DistributionName 就是指发行版名称。看起来直接改 DistributionName 就能改名,但实测会带来一堆连锁问题:
- 目录路径里包含旧名称,改完注册表后实例可能找不到文件。
- WSL 服务有自己的一套缓存和状态文件,光改注册表,不更新这些内部索引,容易导致实例启动失败。
- 如果是通过商店安装的发行版,商店里的应用记录和注册表不一致,后续更新时会报错。
所以正经做法是用“导出再导入”的方式完成改名,安全且可控。
4.2 用导出/导入完成改名的完整流程
以把当前默认实例 Ubuntu-24.04 改名为 Ubuntu-Dev 为例。这个例子我实际操作过不下十次,流程稳定可靠。
第一步,终止实例:
bash复制wsl --terminate Ubuntu-24.04
第二步,导出:
bash复制wsl --export Ubuntu-24.04 D:\wsl\ubuntu24-old.tar
第三步,导入成新名字:
bash复制mkdir D:\wsl\Ubuntu-Dev
wsl --import Ubuntu-Dev D:\wsl\Ubuntu-Dev D:\wsl\ubuntu24-old.tar --version 2
第四步,验证新实例能正常进入:
bash复制wsl -d Ubuntu-Dev
确认里面所有软件和数据都在之后,再注销旧实例:
bash复制wsl --unregister Ubuntu-24.04
注销后原实例目录会被删除,但注意 D:\wsl\ubuntu24-old.tar 这个导出文件不会自动删,确认新实例没问题后可以手动删除,释放硬盘空间。
有两个细节值得说明。第一,导出的 tar 文件会非常大,如果实例里装过 CUDA、Anaconda、ROS 这类重件,动辄几个 GB 甚至十几 GB,导出前确认目标盘有足够空间。第二,改名后的实例登录用户名默认是 root,需要按第 3.2 节说的改 /etc/wsl.conf 恢复默认用户,不然每次进去都要 sudo。
4.3 只改 Windows Terminal 显示名够不够
有时候你其实不关心底层的发行版名,只是想在终端标签页里看起来顺眼一点,那就不用大动干戈。
Windows Terminal 的配置里,每个 Ubuntu 实例对应一个配置文件,路径一般在:
text复制设置 -> 打开 JSON 文件
找到 name 字段,把默认的“Ubuntu-24.04”改成“主力开发”“测试沙盒”之类的自定义名称,标签页就会显示新名字。这个操作只是改显示名,不改底层发行版名,wsl -d 仍然要用原来的名字。
如果你确实想彻底重命名,好让 wsl -d 后面跟的新名字短一点、好记一点,那就老老实实走 4.2 的导出导入流程。我自己的经验是:显示名归显示名,发行版名归发行版名,桌面日常使用靠显示名区分,脚本和自动化命令里用发行版名,两套并行不冲突。
5. 常见问题与排查心得
5.1 wsl --update 报“无法启动服务”
这是热搜词里出现频率最高的问题。wsl --update 时提示“无法启动服务,原因可能是已被禁用或与其相关联的设备没有启动”,基本可以锁定是 Windows 服务层面的问题。
首先打开服务管理器(Win+R 输 services.msc),找到“适用于 Linux 的 Windows 子系统”服务,把启动类型改成“自动”,然后手动启动它。如果服务列表里压根看不到这个服务,说明 WSL 组件根本没启用,回去第 1.1 节检查 Windows 功能。
还有可能是企业版、教育版系统里策略禁用了部分服务,这时候用管理员 PowerShell 执行:
bash复制Get-Service wslservice
Get-Service WSLService
看看服务状态是不是 Running。如果服务是禁用状态,可以用:
bash复制Set-Service wslservice -StartupType Automatic
Start-Service wslservice
这一套下来基本能解决。
5.2 虚拟化开关导致的 WSL2 启动失败
WSL 2 依赖 Hyper-V 虚拟化,如果启动时报错说“请启用虚拟机平台”,或者干脆提示虚拟化未开启,按顺序排查:
- BIOS 里确认 CPU 虚拟化打开(Intel VT-x / AMD SVM)。
- Windows 功能里“虚拟机平台”是否勾选。
- win11 自带的内核隔离、内存完整性功能偶尔会干扰 WSL 2,如果启动异常,可以临时关闭测试。
还可以在 CMD 里执行:
bash复制systeminfo
看输出里“Hyper-V 要求”一项,四个项目如果都是“是”,那虚拟化层是没问题的;如果有“否”,问题大概率出在 BIOS 或 Windows 功能。
5.3 磁盘空间与实例目录迁移
装第二个实例前,先看磁盘空间。WSL 的虚拟磁盘文件(.vhdx)默认放在:
text复制%LOCALAPPDATA%\Packages\CanonicalGroupLimited...\LocalState\ext4.vhdx
C 盘空间紧张的话,迁移实例到 D 盘是刚需。新版 WSL 提供了一条迁移命令:
bash复制wsl --manage Ubuntu-Dev --move D:\wsl\Ubuntu-Dev
执行后实例的虚拟磁盘会被移动到新目录,原位置文件清理掉,不影响使用。旧版本不支持 --manage 的,只能用 export+unregister+import 三板斧迁移,逻辑跟改名一样。
5.4 apt 源慢、软件安装卡住
第二个实例装好后,第一件事就是换 apt 源。Ubuntu 24.04 的源配置文件和以前不太一样,路径是:
text复制/etc/apt/sources.list.d/ubuntu.sources
把里面的源地址改成国内镜像站地址,再执行:
bash复制sudo apt update
实测换源后 apt update 基本几秒完成,比默认源快一个量级。这里提醒一句,别只改一个实例,其他实例的源也要挨个换,不然每个实例安装软件时都会卡在 update 这一步。
另外,Ubuntu 24.04 在 WSLg 下跑微信 Linux 版 4.1.11 这类 GUI 程序时,中文界面出现虚化模糊,这跟 WSLg 的字体缩放和 HiDPI 处理有关,可以在 Windows Terminal 里调低字体缩放,或者在 Linux 侧安装合适的字体并开启 GTK 的缩放参数。这个问题属于图形环境范畴,跟多实例无关,但只要你装了微信就大概率会遇到,顺手提一句。
最后再聊几句实际的
装了这么多次 WSL,我个人的体会是:多实例管理的关键不是“会不会装”,而是“愿不愿意花时间规划名字和目录”。第一次装两个 Ubuntu 时,我也用过 Ubuntu-24.04、Ubuntu-24.04-2 这种名字,结果两个月后自己都分不清哪个是什么环境。后来统一改成 Ubuntu-Dev、Ubuntu-Test、Ubuntu-Sandbox 这类带用途的名字,配合 Windows Terminal 的颜色区分,效率和幸福感都上来了。
还有一个建议:把常用的命令收进一个 PowerShell 脚本或 alias 里,比如快速进入开发环境的命令写成 wsl -d Ubuntu-Dev,别每次都敲全称。多个实例并存后,环境隔离带来的收益会远超你一开始配置的那点成本。如果你在操作中遇到跟上面不一样的报错,也欢迎把具体提示发出来一起研究,毕竟 WSL 版本差异导致的怪问题太多了。
