先交代一下我的实际情况。我在一台Windows 11机器和一台Windows 10机器上分别装过WSL2,两台都不是一帆风顺。尤其Win10那台,运行wsl --install -d ubuntu-24.04时报了一串“WSL2 无法启动,因为此计算机上未启用虚拟化”的错误,回头检查BIOS、检查Windows功能,折腾了一晚上也没个像样的说法。后来我把思路从“追最新版”转向“用稳定MSI包”,改用wsl.2.6.1.0.x64.msi之后,安装过程突然就顺了。这篇文章就是把我这段时间踩过的坑、试过的解决方案、以及为什么这个特定版本能救场,一次性讲清楚。
1. 先搞清楚:为什么wsl --install安装会失败成这样
1.1 “自动安装”并没有想象中那么自动
很多教程会让你直接打开PowerShell输入wsl --install,好像一条命令就能搞定。但这句话只说对了一半。
wsl --install这条默认命令,实际做的是两件事:把WSL运行时以应用商店应用(MSIX包)的形式安装,然后帮你下载并设置默认的Linux发行版。问题就出在这里——它依赖微软商店的封装和分发包。
- 如果你用的是Windows Server、LTSC、教育版、或者公司电脑做了商店和应用白名单限制,商店组件可能根本不存在或者不完整,
wsl --install执行到一半就静默失败。 - 如果你用了代理或网络环境受限,应用商店下载极其缓慢,或者直接卡在进度条,这种情况我在社区里见过不少,热门词“wsl2下载慢”基本都是从这里来的。
- 最新版WSL对Windows版本的要求也会悄悄抬升,老一点的Windows 10版本跑最新WSL,还没开始装就提示“功能不受支持”。
而这些坑,恰恰都不是硬件问题,是安装方式选错了。当时我反复看到“wsl2 尚未准备就绪”“此计算机上未启用虚拟化”这类报错,被绕得晕头转向。后来才明白,报错信息往往只是表象,真正的根源是安装链路本身不稳定。
1.2 最新版不等于最适合你的版本
我承认,WSL最新版确实加入了很多好东西,比如mirrored网络模式、更快的文件访问、内置的wsl --manage命令、更好的systemd支持。但“最新”经常意味着两种代价:第一,可能是预览版特性,需要在特定Windows预览通道上才能完整运行;第二,它往往要求更高的系统基线,如果系统版本不够,就会用各种奇怪的报错来回绝你。
所以“别装最新版”这句话,并不是否定新版,而是建议在安装阶段先把稳定性放在第一位。官方仓库的Release页面上,每个WSL版本都有对应的MSI安装文件,wsl.2.6.1.0.x64.msi就是其中之一。它的特征是:不依赖商店、独立安装、功能完整,而且对应WSL 2的成熟内核和稳定运行时。
提示:如果你当前已经因为最新版或者商店版陷入安装僵局,不要急着反复卸载重试,先把商店路径停掉,换成MSI离线安装包,往往能一步到位。
2. 前置条件检查:虚拟化、系统版本、Windows功能一个都不能少
2.1 虚拟化到底开没开,不是看一眼就行
运行wsl --install -d ubuntu-24.04报“WSL2无法启动,因为此计算机上未启用虚拟化”,这是热词里最典型的问题。但“未启用虚拟化”背后有两层含义:
- BIOS/UEFI层面的CPU虚拟化开关没开。Intel平台叫
Intel Virtualization Technology(VT-x),AMD平台叫SVM Mode。进BIOS后找到这个选项设为Enabled并保存重启。 - Windows功能层面缺少“虚拟机平台”(Virtual Machine Platform)。WSL2本质上是运行在轻量级虚拟机里的,如果没有“虚拟机平台”这个功能,即使CPU支持虚拟化,系统也不知道该用什么方式承载WSL2。
最快的检查方法是:打开“任务管理器” -> “性能” -> “CPU”,看虚拟化是否显示“已启用”。如果这里显示“已禁用”,先去BIOS处理;如果显示“已启用”,但WSL还是提示虚拟化问题,那就重点检查Windows功能里“虚拟机平台”和“Windows虚拟机监控程序平台”是否勾选。
2.2 系统版本的硬性底线
Win11和Win10的WSL2安装要求其实是不同的。微软官方的基线是:
- Windows 10版本2004(build 19041)及以上
- Windows 11所有版本均支持
但这不是说符合基线就万事大吉。我实测下来,Windows 10低版本build运行WSL 2.6.x会遇到内核模块加载失败的问题,现象就是安装完成后启动Ubuntu,闪一下终端就退出,后台日志里没有任何有效输出。所以如果你还在老版本Windows 10上折腾,我建议先把系统补丁更新到最新,再安装MSI包。热词里的“win10离线安装wsl2”其实正好命中这个场景:离线环境和老版本系统,商店版是最不可靠的,MSI包才是正解。
2.3 功能组件怎么勾选才算标准
以管理员身份打开PowerShell,用下面两条命令确认必要功能是否启用:
Get-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux Get-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform后者的State必须是Enabled。如果没有启用,执行:
Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform -All然后重启机器。这是WSL2能否启动的最核心条件。很多人顺序失调,先把发行版装上再重启,或者干脆没勾选“虚拟机平台”,最后全卡在“WSL2尚未准备就绪”的循环里。正确顺序一定是:功能开启 -> 重启 -> 再装运行时和发行版。
3. 核心实操:用wsl.2.6.1.0.x64.msi完成全新安装
3.1 下载MSI安装包的正确路径
这个文件来自微软官方WSL仓库的Release页面,不要从第三方论坛或网盘下载。在GitHub的microsoft/WSL仓库Releases中找到WSL 2.6.1版本,下载wsl.2.6.1.0.x64.msi。
核对文件名和版本号是必要的防坑动作。有相当一部分安装失败案例,是因为下载到了预览渠道的WSL_xxx.msi,或者文件名一致但哈希不对。下载后可以校验一下文件哈希,确保和Release页面上的校验值一致,再开始安装。
3.2 静默安装与手动安装两种方式
如果你习惯图形界面,双击MSI一路Next即可。这个MSI包本身自带依赖检查逻辑,比你用wsl --install自动排除故障更直观。如果机器环境是干净状态,下一步再补一个wsl --update动作并不会有冲突。
我推荐用命令行安装,方便观察完整输出。管理员PowerShell中执行:
msiexec /i wsl.2.6.1.0.x64.msi /qn /norestart/qn是静默模式,配合批处理在企业环境里部署很方便。装完无需立刻重启,稍后统一重启即可。如果你需要指定安装目录,可以使用:
msiexec /i wsl.2.6.1.0.x64.msi /qn MSIINSTALLDIR="D:\WSL"把WSL运行时本体放到D盘,可以缓解C盘空间压力,这也是热词“wsl2如何安装配置到d盘”涉及的一个层面。
3.3 确认运行时版本,别再让旧版干扰
安装MSI后,打开新的PowerShell或Windows Terminal,执行:
wsl --version输出结果里应当能看到WSL版本:信息,而不是显示“未安装”。如果这里仍然显示旧版本,说明系统里还残留着商店版或旧内核,执行wsl --update让运行时对齐到MSI包版本,再执行wsl --shutdown重启WSL服务。
注意:
wsl --version是WSL 2.0以上的命令。如果你的环境里这条命令本身都提示无效,多半是运行时太老,直接装MSI包是更快的出路。
3.4 安装发行版:从Ubuntu到第三方发行版
运行时装好后,安装发行版有两个路径。
路径一:在线安装。执行:
wsl --install -d Ubuntu-22.04或者换成你需要的版本,比如Ubuntu-24.04。热词里有“wsl2安装ubuntu22.04”和“wsl2安装ubuntu24.04”,说明这是大多数人的刚需。老一些的Ubuntu版本在WSL2里跑得更省内存,新版本则软件源更新更快。我的建议是日常开发用Ubuntu 22.04,稳定、资料多、兼容性最好;需要较新工具链再上24.04。
路径二:离线安装。Windows 10离线安装WSL2或者网络受限时,两种办法都可用:
- 从微软商店的官方页面手动下载
.appx或.msixbundle离线包,再用Add-AppxPackage命令安装。 - 下载指定发行版的rootfs tar包(通常在WSL发行版的官方发布页可以找到),然后执行:
wsl --import MyUbuntu D:\wsl\distros\Ubuntu22.04 D:\downloads\ubuntu22.04.tar路径二的好处是发行版直接落在D盘,不占C盘空间,整个过程完全离线。热词里“wsl2如何安装配置到d盘”的另一种含义,就是指这种wsl --import到指定目录的方式。这种方式我实际用过很多次,尤其适合快速复制一个开发环境给不同机器。
对于热词里提到的“wsl2安装kaki linux”这一类小众发行版,原理一样:只要发布方提供了rootfs tar包,wsl --import就能把它当作WSL发行版注册进来。你不需要让它在商店上架,也不需要等待商店更新,这种自由度正是WSL2被很多开发者喜欢的原因。
4. 装完后反复出现的三个问题,直接对号入座
4.1 “WSL2 尚未准备就绪”:别再反复重启了,看这三处
这个报错在Win10机器上尤其常见。按顺序排查:
- 确认“虚拟机平台”已经启用并且机器重启过。这是最容易被忽略的:很多人开了功能但没重启,就急着重试。
- 确认没有第三方虚拟机软件与WSL2的Hyper-V底层冲突。老版本VirtualBox或VMware可能与WSL2共存时互相干扰,出现“WSL2无法启动,因为此计算机上未启用虚拟化”这种误导性报错。升级这些软件,或者卸载后重试。
- 确认Windows版本补丁打全。尤其是Win10,部分累计更新没有安装时,
VirtualMachinePlatform功能虽然显示已启用,底层虚拟化层却无法正常工作。
如果你用了MSI包后仍然报这个错,最可能是上面第二第三条。Windows功能层和系统补丁层的隐性依赖,比WSL自身的问题更加隐蔽。
4.2 “wsl2下载慢”:从源头绕开封堵
下载慢通常发生在商店版安装发行版阶段。解决方案是绕开商店下载链路:
- 使用
wsl --import方式载入发行版tar包,不经过商店。 - 给发行版配置国内软件源,比如Ubuntu发行后把
/etc/apt/sources.list换成国内镜像,这样后续apt update和软件安装就不会继续慢下去。 - WSL商店版更新也可以直接换成MSI包更新,避免每次微软商店网络抽风导致更新失败。
这里要特别说明一个现象:很多同学以为“WSL2下载慢”是微软服务器的单一原因,但实际上慢的环节往往是三个叠加——商店CDN慢、DNS解析慢、以及发行版内部源慢。MSI包只能解决第一个环节,发行版内部源需要你自己换。
4.3 发行版闪退/无法启动的真相
安装发行版后,点击Launch或者执行wsl -d Ubuntu-22.04,窗口闪一下就没。遇到这种问题先不要重装发行版,先看两件事:
- 运行
wsl --list --verbose查看发行版状态。如果状态是Stopped,执行wsl --set-default <发行版名>后再启动。 - 查看
C:\Users\<你的用户名>\AppData\Local\Temp里有没有WSL的日志。很多护眼教程不会提这个位置,但在排错时这是最宝贵的线索。日志里如果出现Failed to attach to console或者Invalid argument,大多是运行时版本与发行版引导文件不匹配。解决办法是wsl --update,让运行时和内核对齐到2.6.1。
5. 进阶配置:D盘搬家、CUDA能力、多发行版共存的实用方案
5.1 发行版搬到D盘,不只是省C盘空间
前面提过,用wsl --import可以从一开始就把发行版装到D盘。但如果你已经装好了不想重来,WSL 2.6.1支持在线迁移:
wsl --manage <发行版名> --move D:\wsl\distros\<发行版名>这条命令会把该发行版的虚拟磁盘搬运到D盘,迁移期间发行版必须处于停止状态。迁移完成后原位置空间释放,所有开发文件仍然在原路径下,无需重新配置环境变量。实测下来,这种迁移方式比重置再导入要省心得多,适合已经配置过大量开发工具的用户。
5.2 多发行版共存与切换
同一台机器上装Ubuntu 22.04、24.04甚至第三方发行版都是允许的。管理要点:
wsl --set-default <发行版名>用来设定默认发行版。- 登录某个发行版时用
wsl -d <发行版名>。 - 注销某个发行版时用
wsl --unregister <发行版名>,它会连带删除虚拟磁盘,操作前务必先备份。
我在同一台Win11机器上同时保留了Ubuntu 22.04用于日常Python开发、Ubuntu 24.04用于测试新工具链,两个环境互不干扰,网络配置又共享同一套WSL2网络栈。这种多发行版模式对开发环境的隔离很有价值,不用再单独开虚拟机。
5.3 WSL2跑CUDA:两个容易忽略的前置
热词里的“wsl2安装cuda”是很多做深度学习的人关心的。WSL2本身支持GPU直通,这意味着你可以在Windows下跑Linux版CUDA程序,而不必装双系统。
但要跑通CUDA,有几个前置条件容易被忽略:
- Windows侧需要安装对应的显卡驱动,并且该驱动必须支持WSL2的GPU直通。NVIDIA专门发布过支持WSL的Windows驱动分支,直接去NVIDIA官网下载对应驱动即可。不要只在Linux容器里装CUDA toolkit,驱动这层必须Windows驱动来完成。
- WSL发行版内部需要重新安装CUDA Toolkit for WSL版本,且内核模块和运行时版本要与驱动匹配。
- 验证GPU时使用:
nvidia-smi如果在WSL2里能正常看到GPU信息,说明直通成功。有一个常被误解的点:nvidia-smi在WSL里的输出和Windows下不完全一样,显示的驱动版本是Windows侧驱动,CUDA版本才是Linux侧toolkit版本,这并不表示配置冲突。
5.4 Win11下的WSL2使用体验与系统差异
Win11相比Win10对WSL2的集成度更高,wsl --install的成功率也明显更好。但这不代表Win11就不会踩坑。我遇到过两种情况:
- 开启“Windows虚拟机监控程序平台”后,某些旧游戏的反作弊系统会拒绝运行,这与WSL2的Hyper-V底层直接相关。
- 使用
mirrored网络模式时,如果公司网络有严格策略,DNS解析会出现反复抖动,表现为WSL2里能ping通IP但解析不了域名。解决办法是在/etc/resolv.conf里手动指定可用的DNS服务器。
如果你同时有开发、游戏、多网络环境的需求,建议给WSL2配置不同的.wslconfig参数,按需切换网络模式和内存上限,而不是长期保留同一个全局配置。
6. 最后的经验和忠告:不要被“最新版”绑架
安装WSL2这件事,本质上是给Windows套一层Linux开发环境的外壳。很多安装失败的折腾,不是因为你不会用,而是版本和分发通道不匹配。我现在给自己装的每台机器,都默认走“MSI稳定版+离线rootfs导入”这个套路,不再依赖商店自动安装链路。
如果你现在还卡在“WSL2 无法启动”“wsl2尚未准备就绪”或者“运行wsl --install -d ubuntu-24.04时报错”这类问题上,我建议你按这个顺序做一遍:先检查BIOS虚拟化,再启用“虚拟机平台”并重启,然后下载wsl.2.6.1.0.x64.msi安装,最后用wsl --import的方式装发行版到D盘。
这一套走完,我手上几台机器的WSL2基本都能稳定运行,没有再出现过升级或重启后失效的情况。多年前我装WSL2失败时,也遇到过反复尝试新版本包、电脑越装越乱的死循环,后来才明白“成熟版本足够好”这个朴素道理。这也是我把这条经验整理出来的原因。如果你也在安装中折腾了很久,换个思路,试试这个版本,大概率能在十分钟内走出困境。