尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

WSL2安装卡在网络超时?手把手教你离线安装并迁移到D盘

发布时间:2026/9/20 6:17:10

资讯中心
01
ARTICLE

WSL2安装卡在网络超时?手把手教你离线安装并迁移到D盘

WSL2安装卡在网络超时?手把手教你离线安装并迁移到D盘
在Windows上做开发绕不开WSL2但WSL2的安装又往往是劝退新人的第一道坎。我见过太多人在群里问wsl --install 卡在正在下载 WSL 内核一个多小时怎么办微软商店里的 Ubuntu 22.04 下载到 99% 直接报错怎么办好不容易装好了转眼 C 盘又红了。这些问题我不是第一次遇到甚至可以说为了搞明白它们我在同一条路上反复踩坑踩到怀疑人生。这篇就把我这些年整理出来的完整处理思路写清楚从分析网络超时到底卡在哪到绕开商店手动下载 WSL2 内核和 Ubuntu 22.04 发行包再到把整套发行版搬到 D 盘最后是一些装完必做的初始化和排错经验。无论你是 Windows 11 还是 Windows 10都能照着走一遍。1. 动手之前先搞懂这三件事1.1 WSL2到底是什么为什么值得用它WSL2 的全称是 Windows Subsystem for Linux 2本质上是在 Windows 里跑一个轻量级、高集成度的 Linux 虚拟机。它和传统 VM 最大的区别在于内核由 Windows 直接管理文件系统无缝互访网络也是共享宿主机的你不需要像维护 VMware 那样去单独维护一套虚拟网卡、共享文件夹和安全策略。很多人会纠结既然已经是虚拟机了为什么不干脆用 VirtualBox 或者 VMware我的看法是如果目标是在 Windows 上写代码、跑脚本、跑 DockerWSL2 的体验是最顺滑的。你在 Windows 侧用 VSCode 打开 \wsl$\ 路径下的代码修改内容保存到 Linux 文件系统终端里执行 npm、pip、docker 命令整个过程没有明显割裂感。而且 Windows 11 对 WSL2 的集成做得更彻底右键菜单可以直接在终端中打开文件资源管理器左侧也能直接看到发行版的根目录这些都不是传统虚拟机可以替代的。当然WSL2 也有自己的脾气。它依赖 Hyper-V 虚拟化平台对操作系统的版本和虚拟化开关很敏感安装过程中任何一个环节掉链子表现为各种玄学错误。所以动手之前先理解它的底层依赖会非常重要。1.2 网络超时的根源你的请求走了一条不太稳定的路关于 WSL2 安装时最常见的网络超时首先得弄明白超时发生在哪一步。以 Windows 11 上的 wsl --install 为例这条命令背后其实串联了四件事启用适用于 Linux 的 Windows 子系统可选功能、启用虚拟机平台可选功能、下载并安装 WSL2 内核更新包、从微软商店拉取并注册你选择的 Linux 发行版。这四个环节里前两个是本地操作通常在几秒内完成第三个环节需要访问微软的下载服务器第四个环节则走的是微软商店的分发链路。问题恰恰出在后两个环节——微软全球 CDN 在不同网络环境下的连接质量差异非常大下载内核更新包可能只有几十 KB/s商店下载发行版也可能在最后阶段突然断开。更麻烦的是很多报错并不会明确告诉你下载失败而是表现为正在下载... 请稍候永远卡住或者直接返回 0x80070003、0x80072ee7 这类看起来有点吓人的错误码。理解这一点之后解决方案也就清晰了既然 wsl --install 的自动链路不稳那就不用依赖它把手动安装需要的内核包和发行版安装包提前放到本地再手动执行注册流程。这是绕过超时问题最干净、最可控的办法。1.3 C盘危机WSL2的系统盘究竟放了些什么还有一个经常被忽略的问题不管你是用商店自动安装还是用 wsl --install 装完默认情况下整个 Linux 发行版都会作为一个虚拟磁盘文件放到 C 盘。这个虚拟磁盘文件名固定叫 ext4.vhdx默认保存在 %LOCALAPPDATA%\Packages\ 目录下某个具体发行版对应的子目录里。不要小看这个文件刚装完的 Ubuntu 22.04 大约是 2GB 到 3GB但你一旦在 WSL 里安装 Python 环境、Node 依赖、Docker 镜像、CUDA 工具包虚拟磁盘会膨胀得非常快。我在测试环境里跑过几个大型模型推理项目ext4.vhdx 一度涨到 40 多 GB。等你发现 C 盘红了再想去清理往往已经晚了。所以正确做法是在安装阶段就规划好存储位置。后面的手动安装方案会把发行版直接放到 D 盘省去后面搬家的麻烦如果已经装完的我也会给出 export/import 的完整搬迁流程两种方案都是实测可用的。2. 网络超时实战三步绕开自动安装链路2.1 先把Windows功能打开确认虚拟化可用不管采用什么方式安装 WSL2Windows 上的两个可选功能必须提前开启适用于 Linux 的 Windows 子系统 和 虚拟机平台。如果用 wsl --install 去自动启用存在功能启用到一半然后卡住的风险所以我们先手动确认。在管理员身份的 PowerShell 或 CMD 里依次执行dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestartdism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart如果 DISM 返回操作成功完成说明功能启用没问题。之后重启电脑。注意这两条命令尽量不要省略很多时候 WSL 报 0x80370114 这种错误就是因为 VirtualMachinePlatform 没有真正开启。重启后还要确认 CPU 虚拟化已经在 BIOS/固件中打开。最简单的检查方法是在命令行执行systeminfo输出结果末尾的Hyper-V 要求部分如果显示已检测到虚拟机监控程序。将不显示 Hyper-V 所需的功能说明 Hyper-V 已经可用如果显示虚拟化已启用也正常。但如果是虚拟化固件中已禁用说明 BIOS 里虚拟机开关被关闭了需要进 BIOS 找 Intel Virtualization Technology 或 AMD SVM 打开。2.2 手动安装WSL2内核更新包Windows 功能启用后WSL2 还需要内核更新包才能把发行版跑起来。新版本 WSL 可以通过 wsl --update 直接更新但这一步同样可能是网络超时的重灾区。如果你执行 wsl --update 一直卡住可以直接去微软官方文档的手动安装页面下载内核包。内核更新包的文件名是 wsl_update_x64.msi在官方旧版 WSL 手动安装步骤页面里能找到直链。我这个环境下直接给出的是微软官方 CDN 地址https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi下载完成后双击运行一路下一步装完即可。这一步不需要依赖 wsl --install也不依赖商店只要浏览器能下载文件就能完成。装完内核包后打开一个普通 PowerShell 窗口执行 wsl --version如果能看到版本号比如 1.2.5 或更高说明内核部分已经没问题了。如果报无法识别 wsl 命令说明系统版本太老建议先升级到 Windows 10 21H2 或 Windows 11 之后再继续。2.3 直接下载Ubuntu 22.04的发行包文件商店自动下载容易失败另一个突破口是直接获取 Ubuntu 22.04 的离线安装包。这个安装包本质是一个 .appx 文件直接由微软官方 CDN 分发不经过商店下载器。你可以在微软官方文档的下载发行版部分找到各发行版的直链Ubuntu 22.04 对应的短链接是https://aka.ms/wslubuntu2204用浏览器打开这个地址会自动下载一个类似 Ubuntu2204-2204.x.x.appx 的文件。下载完成后先把文件放到一个稳定的目录建议直接在 D 盘新建一个目录专门存放比如 D:\downloads。这个 appx 文件本身是一个 zip 压缩包如果你只是想拿到 Linux 根文件系统可以把它改名为 .zip 然后解压。解压后里面会有一个 install.tar.gz 文件这个 tar 包就是完整的 Ubuntu 22.04 根文件系统。后面导入 D 盘时会用到。如果你不想手动解压也可以保留 .appx 文件用 PowerShell 的 Add-AppxPackage 命令安装Add-AppxPackage -Path D:\downloads\Ubuntu2204-2204.x.x.appx但这条路安装完后数据仍会写入 C 盘所以如果目标是完整装到 D 盘建议直接走 3.2 节的解包导入方案。2.4 网络排查的顺序与心态手动下载方案能解决大多数超时问题但如果连浏览器下载微软 CDN 都慢那就要先排查网络链路本身了。我的经验是先确认 DNS 解析正常再确认防火墙或公司网络出口策略没有拦截下载相关的域名尽量不要开着各种下载工具去抢带宽把这些因素排掉CDN 下载速度普遍能接受。还有一个非常实用的心态不要和无响应较劲。wsl --install 一旦卡住超过 10 分钟果断按 CtrlC 终止立刻换手动路线。很多时候你在自动安装上耗一小时不如手动下载加导入十分钟解决。这不是技术能力的问题而是自动安装链路在网络状况不稳定时根本没有良好的重试机制与其反复试探不如直接绕开。3. 把Ubuntu 22.04装到D盘两种实测可用的方案3.1 方案一商店装好后用export/import搬家如果你网络运气不错已经通过商店或者 wsl --install 把 Ubuntu 22.04 装好了这个方案能把它干净地搬到 D 盘。总体思路是先导出整个发行版为 tar 包注销掉旧的然后用 import 从 D 盘目录重新导入。第一步进入 WSL完成初始化有用户名密码的就先创建好然后退出并彻底关闭 WSLwsl --shutdown第二步导出当前发行版。假设发行版名字是 Ubuntu-22.04目标导出的 tar 包放在 D:\wsl-backupwsl --export Ubuntu-22.04 D:\wsl-backup\ubuntu2204.tar这一步可能需要几分钟取决于当前虚拟磁盘里已经装了多少东西。导出完成后注销旧发行版注意这个操作会删除它在 C 盘的数据如果你确认已经导出成功就可以放心执行wsl --unregister Ubuntu-22.04第三步在 D 盘创建目标目录例如 D:\WSL\Ubuntu2204然后重新导入wsl --import Ubuntu-2204 D:\WSL\Ubuntu2204 D:\wsl-backup\ubuntu2204.tar --version 2--version 2 表示使用 WSL2 模式必须显式指定否则老版本默认可能会以 WSL1 方式导入。到这里Ubuntu 2204 这个发行版的虚拟磁盘已经落在 D:\WSL\Ubuntu2204\ext4.vhdx 了。导入成功后默认用户会变成 root因为 import 方式不会读取商店初始化时写入的用户信息。所以下一步要重新设置默认用户具体方法见 3.3 节。3.2 方案二离线appx直接解包导入网络超时首选如果你的网络在商店环节就撑不住那方案一根本不适用。这时直接走离线 appx 解包导入路线全程只在本地操作。第一步从 2.3 节的链接下载 Ubuntu 22.04 的 appx 文件放到 D:\downloads 目录。第二步把 appx 文件复制一份扩展名改成 .zip然后解压到 D:\wsl-ubuntu2204 目录Copy-Item D:\downloads\Ubuntu2204-2204.x.x.appx D:\wsl-ubuntu2204\ubuntu2204.zip Expand-Archive D:\wsl-ubuntu2204\ubuntu2204.zip -DestinationPath D:\wsl-ubuntu2204\extracted解压后在 extracted 目录里找到 install.tar.gz。有的版本文件名可能是 rootfs.tar.gz认识一个就够了它就是要导入的根文件系统。第三步在 D 盘创建目标虚拟磁盘目录比如 D:\WSL\Ubuntu2204然后导入wsl --import Ubuntu-2204 D:\WSL\Ubuntu2204 D:\wsl-ubuntu2204\extracted\install.tar.gz --version 2这条命令执行完Ubuntu 22.04 就已经完整装在 D 盘了整个过程中没有依赖商店也没有访问微软商店接口网络超时几乎没有发挥空间。最后验证一下磁盘位置。进入 WSLwsl -d Ubuntu-2204然后在 WSL 内部查看根文件系统挂载情况df -h /正常会显示 ext4 文件系统容量大小取决于你的 D 盘空间。再到 Windows 侧确认 ext4.vhdx 的位置Get-ChildItem D:\WSL\Ubuntu2204能看到一个几 GB 的 ext4.vhdx就说明安装成功了。3.3 导入之后设置默认用户和基础环境用 import 方式导入的发行版默认登录用户是 root。长期用 root 做日常开发我并不推荐所以第一件事是创建一个普通用户并把它设为默认登录用户。进入 WSL 后先以 root 身份操作useradd -m -s /bin/bash yourname passwd yourname usermod -aG sudo yourname注意把 yourname 换成你自己的用户名。然后编辑 WSL 的全局配置文件 /etc/wsl.confsudo nano /etc/wsl.conf写入以下内容[user] defaultyourname保存后在 Windows 侧重启 WSLwsl --shutdown wsl -d Ubuntu-2204再执行 whoami如果输出的是你的普通用户名说明默认用户已经设置成功。以前官方文档会推荐用特定发行版 exe 文件执行 ubuntu2204.exe config --default-user但在手动 import 的发行版上并不总能找到这个 exe而 /etc/wsl.conf 的 [user] 配置是通用方案实测最稳。3.4 检查安装位置和磁盘占用搬完家最关心的就是空间有没有真的释放。在 Windows 侧检查 C 盘原来的发行版目录应该已经被 unregister 删掉了不放心可以再看一眼Get-ChildItem $env:LOCALAPPDATA\Packages | Where-Object { $_.Name -like *Ubuntu* }如果没有任何 Ubuntu 相关目录说明旧文件已经清理干净。同时D:\WSL\Ubuntu2204 下的 ext4.vhdx 文件就是整个发行版的真实占用后面你哪怕在 WSL 里装再多软件C 盘也不会再动一分。小提示如果 D 盘空间紧张建议单独给 WSL 目录预留至少 30GB 可用空间模型、虚拟环境、Docker 镜像都会藏在那个 vhdx 里面别等撑满再后悔。4. 装完之后必须做的小事4.1 先换掉Ubuntu 22.04的默认apt源Ubuntu 官方源在部分网络环境下更新速度很慢第一步就是替换成国内可用的镜像源这里我以阿里云源为例。进入 WSL 后先备份原始源文件sudo cp /etc/apt/sources.list /etc/apt/sources.list.bakUbuntu 22.04 的 sources.list 还是老的单行格式直接用 sed 替换域名即可sudo sed -i s//.*archive.ubuntu.com//mirrors.aliyun.comg /etc/apt/sources.list sudo sed -i s//security.ubuntu.com//mirrors.aliyun.comg /etc/apt/sources.list执行完检查一下文件内容cat /etc/apt/sources.list如果所有 http 地址都变成了 mirrors.aliyun.com说明替换成功。然后更新软件包索引sudo apt update这一步速度应该会明显比官方源快如果还是慢也可以换清华源把命令里的 mirrors.aliyun.com 替换成 mirrors.tuna.tsinghua.edu.cn 即可。4.2 开启Systemd让Docker等工具用起来更省心老版本 WSL 默认不启动 systemd导致 service 命令不可用很多教程会教你用 service docker start 去绕但如果你要跑 Docker 容器、管理多个服务直接用 systemctl 会顺手很多。在 /etc/wsl.conf 里追加[boot] systemdtrue然后回到 Windows 侧重启 WSLwsl --shutdown wsl -d Ubuntu-2204进入后执行systemctl list-units --typeservice --staterunning如果能看到一堆 service说明 systemd 已经正常工作。之后安装 Docker 就可以直接sudo apt install docker.io sudo systemctl enable docker sudo systemctl start docker这样 Docker 不会被当作手动维护的进程重启 WSL 后 docker 也会在系统服务里自动运行。4.3 让WSL2识别独立显卡如果你打算在 WSL2 里做 AI 或 CUDA 相关开发而不是只用纯 CPU 任务这一步就非常关键。WSL2 对 NVIDIA GPU 的支持逻辑是Linux 侧不需要单独装 NVIDIA 显卡驱动GPU 通过虚拟化层透传给 Windows 侧的驱动来处理所以只要你的 Windows 端显卡驱动版本够新WSL 里就能直接调用 GPU。先在 Windows 侧确保已经安装最新版 NVIDIA 驱动然后进入 WSL执行nvidia-smi如果能正常输出显卡信息说明底层 GPU 通路已经通了。接下来装 CUDA 工具包推荐使用 NVIDIA 的 WSL-Ubuntu 专用仓库wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-keyring_1.1-1_all.deb sudo dpkg -i cuda-keyring_1.1-1_all.deb sudo apt update sudo apt install cuda装完后新开终端执行 nvcc --version 确认 CUDA 编译器可用。注意不要试着在 WSL 里安装 NVIDIA Linux 驱动那反而会和 Windows 侧驱动冲突。5. 常见问题与排查技巧实录5.1 错误码与问题对应速查表这些年我遇到过几次典型报错整理成表方便你遇到时快速对照。错误信息 / 现象可能原因处理方式0x80370114虚拟机平台未启用或 BIOS 虚拟化关闭执行 DISM 命令启用 VirtualMachinePlatform重启检查 BIOS0x80070003安装路径异常常见于商店安装或 export 路径不存在检查目标目录是否存在避免中文路径尽量用纯英文路径0x80072ee7 或下载超时网络无法正常访问微软 CDN切换手动下载内核包与发行版方案WslRegisterDistribution failed with error 0x8007019eWindows 版本过旧缺少 WSL 服务组件升级到 Windows 10 21H2 或 Windows 11import 后无法执行 exe 进入系统手动导入的发行版没有应用商店版 exe 启动器用 wsl -d 发行版名 进入即可启动后默认 root 登录import 方式不会保留原默认用户修改 /etc/wsl.conf 的 [user] 配置5.2 几个值得收藏的实用命令日常维护 WSL2下面几条命令我经常用也建议你存下来。列出当前所有发行版及运行状态wsl --list --verbose彻底关闭 WSL 后台虚拟机和所有发行版进程wsl --shutdown查看某个发行版的挂载目录和磁盘占用。进入 WSL 后df -h du -sh --max-depth1 /home压缩 WSL 虚拟磁盘把删掉的文件空间真正释放回 Windows。这一步很实用WSL 里删了文件ext4.vhdx 不会自动缩小这时可以退出 WSL 并在管理员 CMD 里执行diskpart select vdisk fileD:\WSL\Ubuntu2204\ext4.vhdx attach vdisk readonly compact vdisk detach vdisk exit实测能回收不少空间尤其适合删过大模型或 Docker 镜像之后。5.3 几条从坑里总结出来的经验不要轻易从网上下载来路不明的一键 WSL 安装脚本。WSL 本身结构不复杂手动下载加 import 完全可以搞定反而某些脚本会偷偷修改 Windows 功能设置出问题后你根本不知道它改了什么。配置 D 盘路径时尽量不用中文目录和空格。WSL 的注册机制对路径空格处理得不算友好D:\WSL\Ubuntu2204 这种纯 ASCII 路径是最稳的。WSL2 的网络模式默认是 NAT如果你跑的服务需要宿主机或局域网访问要注意端口转发和防火墙规则。但如果是自己测试用通过 localhost 直接访问 WSL 内端口通常没问题。保活这块如果你希望 WSL 里的服务长时间运行比如跑 Docker 或 Jupyter不要只开一个终端放着那样容易被 Windows 回收。建议在 WSL 里用 systemd 管理服务并允许后台服务常驻配合 Windows 计划任务开机启动一个 wsl -d 命令实践下来稳定得多。最后再分享一个小技巧用 WSL 时代码文件尽量放在 WSL 内部文件系统也就是 /home 目录下而不是通过 /mnt/d 去访问 Windows 文件。虽然两者都能用但 /mnt/d 是跨文件系统访问IO 性能和文件锁表现都比较差。把工程文件放到 WSL 内部再配合 VSCode Remote-WSL 打开才是 WSL2 最舒服的用法。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。