W weiserv
← 返回博客

WSL2 安装失败排查:ended prematurely、WslRegisterDistribution 与「装太慢」的成因和对策

WSL2 安装失败排查:三个报错的成因与对策

装 WSL2 的报错看起来千奇百怪,实际上高频的就那么几种,而且每一种都有明确的判定方法——
不需要猜,也不需要重装系统。

本文只写我本机实际复现过的报错:给出原始输出、真实成因、可复制的修复命令,以及"怎么确认真的修好了"。
没有在本机复现的错误码,我不给似是而非的解法,只指路官方文档。


一、结论先行:三个报错,三张卡

你看到的 真正的原因 一句话对策
SetupWizard ended prematurely 你在装一个比你系统还旧的内核包 别装它,改用 wsl --update
WslRegisterDistribution failed / wslregisterdistri 系统功能没开,或开了没重启 开功能 → 重启 → 再装
wsl --install 长时间不动 / 很慢 下载源慢,不是命令错了 错峰重试,或直接用官方 rootfs 离线导入
WSL_E_NOT_A_LINUX_DISTRO 你喂给 --import 的文件不是 Linux 归档 看文件头,换真正的 rootfs

二、报错 1:SetupWizard ended prematurely

现象

双击 wsl_update_x64.msi,安装向导跑几秒就自己退出,提示:

Windows Subsystem for Linux Update SetupWizard ended prematurely

根因(不是故障,是拒绝)

wsl_update_x64.msi 是微软 2021 年为 Windows 10 提供的 WSL2 内核补丁包
Windows 11(以及较新的 Win10)出厂已自带更新的 WSL2 内核
安装程序检测到系统内核比它新,就主动拒绝重复安装

所以这个报错的正确读法是:"你不需要这个文件",而不是"安装失败"。

对策

wsl --update
wsl --status

wsl --update 走官方在线通道,拿到的永远是匹配你系统的当前版本。
这一步是老教程里普遍缺失的——它们的知识还停在"必须手动下 MSI 装内核"的时代。

怎么确认修好了

wsl --version

能正常输出 WSL 版本信息即说明内核通道正常;此时再装发行版:

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

更完整的版本对照(哪些 msi / msixbundle / Appx 该不该下)见
《wsl_update_x64.msi 装不上、要不要下?》


三、报错 2:WslRegisterDistribution failed / wslregisterdistri

现象

发行版下载完了,注册阶段失败,常见形态:

WslRegisterDistribution failed with error: 0x8007019e
Error code: Wsl/Service/RegisterDistro/CreateVm

或者搜 win11 wslregisterdistri 时看到的同类报错。

根因

两个必须的系统功能没开,或者开了但没有重启就急着装:

  1. Microsoft-Windows-Subsystem-Linux
  2. VirtualMachinePlatform

对策

管理员 PowerShell:

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

然后必须重启机器,再执行安装。

怎么确认修好了

wsl -l -v

能看到发行版且 STATERunning/Stopped(不是报错)即正常。

如果 VERSION 列显示 1,说明跑在 WSL1 上,转一下:

wsl --set-version Ubuntu-22.04 2

别忘了还有一个前提

# 确认系统版本支持
winver

以及 BIOS/UEFI 里的虚拟化要开着——任务管理器 → 性能 → CPU,右下角显示"虚拟化: 已启用"才行。
这一项没开,前面两行 dism 命令照样跑不通。


四、报错 3:wsl --install 太慢 / 长时间不动

现象

wsl --install -d Ubuntu-22.04
正在安装: 虚拟机平台
…

进度条长时间不动,或者报下载超时。搜索词里 wsl --install 太慢wsl --install -d Ubuntu-22.04 安装太慢
都是同一类问题。

根因

不是命令错,是下载链路慢:安装程序要从微软 CDN 拉发行版包(商店包 1 GB 量级)。

三种对策

对策一:错峰重试(成本最低)

换个时间段再跑一次。很多"卡住"只是当时链路拥塞。

对策二:先只装内核,发行版后装

wsl --update          # 只更新内核,体积小、快
wsl --install -d Ubuntu-22.04 --web-download   # 走 Web 下载而非商店通道

对策三:完全绕开——用官方 rootfs 离线导入

Ubuntu 官方在 cloud-images 提供 WSL 专用 rootfs,只有约 325 MB(不是 1 GB 量级):

# 下载后导入(实测 8 秒完成)
wsl --import Ubuntu-Offline D:\WSL\Ubuntu-Offline .\ubuntu-jammy-wsl-amd64-ubuntu22.04lts.rootfs.tar.gz --version 2

一笔真实的时间账

我为了搞清楚"离线到底值不值",完整走过一遍:

# 动作 结果
1 按老教程下 Ubuntu2204-221101.AppxBundle(1.1 GB) ❌ 安装出错
2 又下一个"自称 rootfs"的文件(1.1 GB) ❌ 导入报 WSL_E_NOT_A_LINUX_DISTRO
3 改用 wsl --install -d Ubuntu-22.04 ✅ 几分钟,一次成功
4 从官方 cloud-images 下真 rootfs(325 MB) ✅ 导入 8 秒

结论:"离线"本身不慢,慢的是下错了东西。真需要离线时,请走官方 rootfs 这条路。


五、报错 4:WSL_E_NOT_A_LINUX_DISTRO(最会骗人的一个)

现象

wsl --import Ubuntu-Test D:\WSL\Ubuntu-Test .\ubuntu-22.04-rootfs.tar.gz --version 2
导入的文件不是有效的 Linux 分发。
错误代码: Wsl/Service/RegisterDistro/WSL_E_NOT_A_LINUX_DISTRO

根因

你手里的 .tar.gz 根本不是 tar 归档——它多半是 AppxBundle(MSIX 容器)被改名冒充的。
我就踩过:本地一个名为 ubuntu-22.04-rootfs.tar.gz 的文件,
实测 SHA256 与 Ubuntu2204-221101.AppxBundle 完全一致,说明它在下载或整理时被覆盖成了应用包。

10 秒判定法:看文件头,别看后缀

$b = [System.IO.File]::ReadAllBytes(".\ubuntu-22.04-rootfs.tar.gz")[0..3]
($b | ForEach-Object { $_.ToString("X2") }) -join " "
输出 真实格式 能否 --import
1F 8B 08 … gzip → tar 归档 ✅ 可以
50 4B 03 04 ZIP / MSIX(AppxBundle) ❌ 必然失败

后缀可以随便改,文件头改不了。下完先看这一眼,能省掉几小时排查。

怎么确认修好了

导入成功后验证:

wsl -d Ubuntu-Offline -- cat /etc/os-release | head -3
PRETTY_NAME="Ubuntu 22.04.5 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"

六、安装前 30 秒自检清单

按顺序过一遍,能避开上面全部四个报错:

  • [ ] 虚拟化已开:任务管理器 → 性能 → CPU → "虚拟化: 已启用"
  • [ ] 系统版本:Windows 11 或较新 Win10(winver 看)
  • [ ] 两个功能已开:WSL + 虚拟机平台(dism 两行)
  • [ ] 开完功能已重启(最容易漏的一步)
  • [ ] 不下 wsl_update_x64.msi(新版系统用 wsl --update
  • [ ] 下载的文件先看文件头1F 8B 才是真归档)
  • [ ] 校验哈希Get-FileHash .\xxx -Algorithm SHA256

七、其他错误码

上面四个是我本机复现并记录过完整过程的。WSL 还有其他错误码
(例如与网络、代理、磁盘权限相关的),我没有在本机复现过,
不给没有验证过的解法——遇到请以微软官方 WSL 排错文档为准,
或把 wsl --version 与完整报错一起贴出来查。


小结

报错 判定要点 修复
ended prematurely 老内核包被拒绝 wsl --update,别装 msi
WslRegisterDistribution failed 功能未开 / 未重启 开功能 → 重启
--install 太慢 下载链路慢 错峰 / --web-download / 官方 rootfs
WSL_E_NOT_A_LINUX_DISTRO 文件不是 tar 归档 看文件头 1F 8B,换真 rootfs

四个报错里,有三个的根因都是"照着过时教程做了多余的动作"
装 WSL2 真正需要的命令只有三行,其余都是补丁时代的历史包袱。

本文环境:Windows 11 / WSL2 / Ubuntu 22.04
文中报错原文、命令输出与体积数据均来自本机实测;WSL 安装方式与错误码以微软官方文档为准。


系列阅读

广告位占位 · post-inline