WSL安装超时:无法从raw.githubusercontent.com提取分发列表的排查与离线解决
2026/9/19 7:12:08 网站建设 项目流程

先直接说结论:这个报错只发生在 WSL 尝试下载发行版列表那一步,跟你电脑上已经装好的 WSL 内核没太大关系,遇到它不代表你系统坏了,也不代表 WSL 不能用了。真正的问题是这个安装流程需要访问 GitHub 上的一个分发列表文件,而很多网络环境下这条链路特别不稳定,于是就会看到“无法从 raw.githubusercontent.com 提取分发列表、操作超时”这类提示。

这篇文章我会把这个报错从现象到根因掰开讲一遍,然后给你几条绕过这条网络路径的实用方案。不管你是刚接触 WSL 的小白,还是已经在 WSL 里折腾 Docker、CUDA、binwalk 的老手,只要被这个超时卡住过,下面这些内容都能直接拿去抄作业。

1. 报错现场与根因拆解

1.1 这个报错长什么样

通常你输入这条命令时最容易触发:

wsl --install -d Ubuntu-22.04

或者干脆就是不带参数的:

wsl --install

命令执行后卡一会儿,然后输出类似这样的错误:

无法从 https://raw.githubusercontent.com/microsoft/wsl/master/distributions/distributions.json 提取发行版列表,操作超时 未能成功安装发行版。

有些版本还会把错误描述写成“无法提取分发列表”或者直接抛一个网络异常。别管文案差异,本质都一样:WSL 启动安装流程后,需要先从一个远程地址拉取一份发行版清单,然后再根据清单去下载你指定的那个发行版镜像。这一步卡住了,后面的安装自然就进行不下去。

还有一类变体不是超时,而是返回 403。这种 403 我在不同电脑上碰到过几次,原因是那条 raw 地址的访问行为被服务器判定为“不太正常”。不管是超时还是 403,绕法是一样的,后面会统一说。

1.2 为什么 WSL 非要去连接 raw.githubusercontent.com

很多人不理解:我用的是微软的 WSL 功能,为什么安装过程要去访问 GitHub?

这个得从 WSL 的安装机制说起。wsl --install在一开始会读取一个名叫distributions.json的文件,里面记录了当前 WSL 能安装哪些发行版、每个发行版的下载地址、默认参数等信息。这个文件由微软官方维护,但历史原因一直放在 GitHub 的microsoft/wsl仓库里,具体就是:

https://raw.githubusercontent.com/microsoft/wsl/master/distributions/distributions.json

所以整个安装链路是这样的:

  1. WSL 下载distributions.json,拿到发行版清单;
  2. 根据清单找到目标发行版的下载链接;
  3. 再从对应链接下载安装包并注册到 WSL 中。

如果你只是运行wsl --version或者wsl --status,根本不会碰这个地址。只有执行安装发行版相关操作时,才会引入这个外部依赖。这也是为什么很多人用着用着 WSL 没问题,一装新发行版就报网络错误。

1.3 为什么偏偏是“操作超时”

“操作超时”这四个字,很多人第一反应是电脑配置不够,其实不对。这一步纯粹是网络层面的问题。raw.githubusercontent.com 这个域名背后的服务器在美国,CDN 节点在海外的覆盖情况不如国内访问顺畅,加上 DNS 解析偶尔被污染,用两三百毫秒甚至更久才能建立连接,一旦超过 WSL 内部设置的等待时间,就会直接判定超时。

我在测试过程中还发现一个规律:同一个网络环境下,浏览器多刷新几次 raw 地址可能能打开,但命令行工具因为走的是系统底层网络栈,超时阈值更短,失败概率反而更高。换句话说,你的网络不是完全不能用,只是“不够稳定、不够快”,而 WSL 安装过程对这条链路的稳定性要求比较高。

明白这一点之后,解决方案的思路就很清晰了:要么优化网络链路的稳定性和响应速度,要么彻底绕开 raw.githubusercontent.com 这条路径。

2. 对症下药:先别急着重装,先排查网络链路

2.1 第一轮排查:测通不通、看看 DNS

在决定用离线方案之前,我建议你先花两分钟做一次基础排查。知道自己卡在哪一层,后面才会更从容。打开 PowerShell,依次敲这几条命令:

Test-NetConnection raw.githubusercontent.com -Port 443

如果返回TcpTestSucceeded : True,说明 TCP 层能连通,问题大概率出在传输速度或 TLS 握手环节。如果返回False,那说明当前网络到这台服务器的链路基本是堵死的,靠重试很难解决。

接着查 DNS 解析结果:

Resolve-DnsName raw.githubusercontent.com

留意返回的 IP 地址是不是离你特别远。正常情况下,这个域名在不同地区会解析到不同 CDN 节点,但如果解析出的地址响应很慢,或者与你本地网络明显不匹配,就说明 DNS 这一层已经不太健康了。

2.2 清洁工模式:清空 DNS 缓存并更换公共解析

如果 DNS 解析速度不稳定,可以先清掉本机缓存,再把 DNS 临时切到公共解析服务。Windows 下清 DNS 缓存很简单:

ipconfig /flushdns

然后进入网络适配器的 IPv4 属性,把首选 DNS 改成223.5.5.5,备用 DNS 改成119.29.29.29。这两个分别是阿里和腾讯的公共 DNS,国内访问速度通常比运营商默认 DNS 更好。改完之后再跑一次Test-NetConnection,看延迟和连通性有没有改善。

这一步不会影响任何已有系统配置,网络恢复正常后你可以随时改回去。大部分临时性超时问题,在换公共 DNS 之后就能缓解。但我要提前打个预防针:如果问题出在链路本身的稳定性上,只改 DNS 不一定能根治,它只是排查流程里成本最低的一步。

2.3 换一个网络环境,成功率翻倍

还有一个老生常谈但确实有效的招:换个网络环境。比如从公司内网切到手机热点,或者从 Wi-Fi 切到有线宽带。我实测过很多次,同一个报错在移动网络下重试装 WSL,成功率明显比某些固定宽带更高。

原理不复杂:不同运营商到海外服务器的路由质量差异很大,有些线路存在绕路和拥堵,TLS 握手长时间没有响应,自然就超时。换一个网络环境相当于换了一条路径,很多时候不需要做任何额外配置就直接成功了。

如果你不方便换网络,还可以试试在 PowerShell 里执行:

wsl --update --web-download

这一步会单独更新 WSL 组件,把内核相关文件从微软自家服务器拉下来。虽然它不解决distributions.json的下载问题,但能保证 WSL 本体是最新状态,避免后面因为版本太旧又冒出一堆新问题。

2.4 绕开 raw.githubusercontent.com:从微软官方渠道装

如果以上网络手段都试过没用,那就别死磕 raw 地址了。WSL 安装发行版并不只有wsl --install这一条路。微软提供了好几条发行版分发渠道,比如 Microsoft Store 里的 WSL 发行版页面,再比如微软官方维护的 rootfs 压缩包。这些资源的服务器都在微软自己的 CDN 上,跟 raw.githubusercontent.com 完全是两套基础设施,绕过去之后,很多网络问题自然就消失了。

你可以先试:

wsl --install --no-distribution

这句话的意思是先把 WSL 本体组件装好,不安装任何发行版。等这一步成功,再用下面的离线方案单独添加一个 Ubuntu。

3. 最稳方案:离线安装 Ubuntu 到 WSL

3.1 方案 A:用 Microsoft Store 安装发行版

这是最接近“一键安装”的替代方案。打开 Microsoft Store,搜索“Ubuntu”,你会看到 Ubuntu、Ubuntu 20.04、Ubuntu 22.04 等多个版本。

选择其中一个,点击安装,剩下的都是由 Store 下载并处理。Store 走的是微软自己的分发通道,通常比 raw.githubusercontent.com 稳定得多。

安装完成后,从开始菜单启动 Ubuntu 终端,第一次启动会让你创建用户名和密码。创建完成之后,你可以在 PowerShell 里输入wsl -l -v,应该能看到已经注册的发行版信息。

这个方法唯一的缺点是 Store 在某些精简版 Windows 系统里被移除了,或者登录 Store 需要一点时间。碰到这种情况,直接看方案 B。

3.2 方案 B:手动下载 .appx 包再安装

微软官方除了 Store 之外,还提供一个网页端分发页面,地址格式是https://aka.ms/wslubuntu2204这类短链。用浏览器打开这个地址,可以直接下载到一个.appx.appxbundle格式的安装包。

拿到安装包后,在 PowerShell 里执行:

Add-AppxPackage .\Ubuntu2204.appx

如果系统提示需要安装证书或依赖,通常是因为缺少 VCLibs 组件。报错时它会明确告诉你缺什么东西,你到微软官网下载对应的 VC++ 运行库装上,再重新执行上面的命令就行。

安装完成后,同样从开始菜单启动一次 Ubuntu,完成初始化用户配置。这个方法的好处是不需要 Store 客户端,只要浏览器能打开aka.ms短链就能搞定。

如果连aka.ms都打不开,那还有更底层的办法,往下看。

3.3 方案 C:用 rootfs 镜像导入(wsl --import)

最后这个方法最“硬核”,但也最可靠,因为 rootfs 压缩包可以从多个渠道获取,只要能下载到文件就万事大吉。它的核心是借助wsl --import命令,把一个完整的根文件系统镜像导入 WSL。

步骤是这样的:

  1. 先准备好一个 Ubuntu rootfs,通常是.tar.gz格式。你可以从 Ubuntu 官方云镜像地址下载,也可以从微软文档里提供的链接下载,注意选择 WSL 专用版本。

  2. 解压或直接保留压缩包,记住它在磁盘上的位置。

  3. 在 PowerShell 里创建一个目录,用来存放 WSL 的虚拟磁盘文件。

mkdir D:\WSL\Ubuntu2204
  1. 执行导入命令:
wsl --import Ubuntu2204 D:\WSL\Ubuntu2204 D:\downloads\ubuntu2204.tar.gz --version 2

参数从左到右分别是:发行版名称、安装目录、rootfs 文件路径、WSL 版本(这里建议用 2,性能和完整度都更好)。

导入成功后。用wsl -d Ubuntu2204进入系统。这种情况下默认用户是 root,如果你更习惯用普通用户,可以手动创建一个用户并设置默认用户。

这个方案最大的优点是完全不依赖微软的发行版分发服务,只要能手动搞到 rootfs 文件,剩下的都在本地完成,非常适合网络受限环境。

3.4 装完以后必做的三件事

离线装好 Ubuntu 只是第一步,有几个收尾工作我强烈建议你立刻做,否则后面还会踩坑。

第一件事,设置默认发行版和默认用户。在 PowerShell 里执行:

wsl -s Ubuntu2204 wsl -d Ubuntu2204

然后用adduser创建日常使用的账号,再编辑/etc/wsl.conf

[user] default=你的用户名

保存后退出 WSL,运行wsl --terminate Ubuntu2204再重新进入,默认用户就生效了。

第二件事,立刻更新软件源。新装的 Ubuntu 默认源在海外,速度可能很慢。编辑/etc/apt/sources.list,把archive.ubuntu.comsecurity.ubuntu.com替换成国内镜像域名,例如阿里云镜像源或清华镜像源。

第三件事,升级一次系统:

sudo apt update sudo apt upgrade -y

这一步能解决大部分软件包版本过旧的问题,后续安装 Docker、CUDA、编译工具链时会更顺畅。

4. 高频后续问题与避坑记录

4.1 “你的 WSL 版本太旧”与内核更新

离线安装完 Ubuntu 后,如果你用wsl --version发现版本很老,或者系统提示 “your version of windows subsystem for linux (wsl) is too old”,不要慌。

先执行:

wsl --update

如果这条路也不通,就手动下载 WSL 的更新安装包,微软官方提供 MSI 文件。下载后双击安装即可。装完重启终端再运行wsl --version,应该能看到版本号更新到最新。

要特别提醒:老版本 WSL 和新版本内核之间有一些行为差异,尤其是 GPU 直通、systemd 支持这些功能。如果你后面要用 WSL 跑 CUDA 或者通过 systemd 管理服务,一定要先把内核和用户态组件更新到较新版本。

4.2 wsl --install 太慢、卡在下载阶段怎么办

除了distributions.json超时之外,还有人会遇到wsl --install执行后长时间卡住不动,网速显示只有几 KB/s。这种情况多半是正在下载发行版镜像,而这个镜像地址同样有不稳定的问题。

我的建议是,不要跟它硬耗。直接 Ctrl+C 中断,换用前面提到的 Store 或离线包方案。微软官方确实有一个aka.ms的下载链接,如果你发现下载速度很慢,可以换个时间再试,或者借用能正常访问的下载工具先拉下来,再拷贝到目标机器上安装。

另外注意,wsl --install默认会先安装 WSL 虚拟化平台组件,这一步需要开启 Windows 功能并重启电脑。如果你发现命令卡在“正在启用功能”阶段,先去“启用或关闭 Windows 功能”里确认“适用于 Linux 的 Windows 子系统”是否已经勾选,没勾选就先打勾,重启后再继续。

4.3 在 VSCode 里使用 WSL 时常见的连接问题

很多人折腾 WSL 的目的是为了在 VSCode 里写代码。VSCode 连接 WSL 靠的是 “WSL” 扩展和codeCLI 工具。正常情况下,你在 VSCode 里按Ctrl+Shift+P,输入 “WSL”,选择 “Connect to WSL” 就能连上。

但是如果你的 WSL 发行版是手动通过wsl --import导入的,默认用户是 root,VSCode 连接后可能会提示没有安装服务器依赖,或者权限不对。解决办法就是前面讲的,配置好wsl.conf里的默认用户,然后重新启动发行版。

还有一类问题是 VSCode 找不到 WSL 路径。这通常是因为你装的是早期版本的 WSL,或者系统里残留了旧版本命令行工具。重装最新 WSL 后,重启 VSCode,一般就正常了。

4.4 apt 源太慢:换国内镜像源

新装 WSL 之后,如果sudo apt update时速度很慢,八成是软件源默认指向了海外服务器。换国内镜像源是最有效的优化手段。

以 Ubuntu 22.04 为例,把/etc/apt/sources.list里的域名改成镜像站地址,再执行:

sudo apt update sudo apt upgrade -y

实测换完之后速度提升非常明显。如果你用的是 Ubuntu 24.04 或更新版本,软件源配置可能移到了/etc/apt/sources.list.d/ubuntu.sources,修改原理一样,找到带URIs:的那行替换即可。

换完源之后,还有一个容易被忽略的小坑:证书问题。如果apt update报错说无法验证镜像站签名,先确认系统时间对不对,时间偏差大了会出现证书校验失败。用sudo ntpdate ntp.ubuntu.com同步一下时间,再执行更新就正常了。

5. 我个人踩坑后的一些体会

写到这里,回顾一下整个过程,我最想说的一句话是:遇到 “raw.githubusercontent.com操作超时” 这类报错,心态不要崩,也不要去反复wsl --install硬试,不会有用的。重点是怎么换一条更稳的路径把发行版装进来。

在我实际维护 WSL 环境的经验里,最省心的组合其实是“Store 安装发行版 +wsl --update更新内核 + 换国内 apt 源”。这套流程几乎不依赖海外链路,安装速度快,后续维护也省事。

另外一个小技巧:如果你经常在多台电脑上配置 WSL,弄完一台之后,把关键的离线包、配置文件(比如.wslconfig)备份到自己的云盘里,下次遇到同样问题时直接拷贝过去,能省下很多重复折腾的时间。

最后,如果这篇文章里的方案帮你解决了问题,欢迎转发给同样被 WSL 报错折磨的朋友。折腾环境本来就是一件需要耐心的事,把经验沉淀下来,就能少走很多弯路。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询