ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

WSL安装卡在下载环节?离线导入与加速配置全指南

WSL安装卡在下载环节?离线导入与加速配置全指南 1. 为什么 wsl --install 会卡在下载环节很多人第一次接触 WSL 的时候都是照着官方文档敲下wsl --install这一行命令然后就开始等。等五分钟等十分钟进度条一动不动最后弹出一个超时错误。这个场景我见过太多次了身边同事、论坛帖子、群里提问几乎每周都有人问同样的问题。先说清楚wsl --install到底干了什么。这条命令本质上做了三件事第一通过 Windows 的组件服务启用虚拟机平台和 Linux 子系统相关功能第二从微软的服务器拉取 WSL 内核更新包第三从微软的在线分发源下载你指定的 Linux 发行版镜像默认是 Ubuntu。前两步走的是 Windows Update 通道第三步走的是微软的 CDN 分发节点。慢通常慢在第三步。因为发行版镜像动辄几百 MB 到 1GB 以上而微软的分发节点在国内的访问质量参差不齐。有时候能跑满带宽有时候几十 KB 每秒甚至直接断流。这不是你的网络坏了是分发链路的问题。还有一个容易被忽略的点wsl --install默认会去拉取最新的发行版版本。比如 Ubuntu 现在默认拉的是 24.04 或者 22.04 的最新构建这个镜像本身就不小。如果你只是想要一个能跑的基础环境完全没必要每次都拉最新最大的那个。注意wsl --install的下载进度显示非常简陋很多时候它其实在下载只是进度条不刷新让你误以为卡死了。判断是否真的卡住可以打开任务管理器看网络占用或者用资源监视器观察wsl.exe或curl相关的网络活动。我自己的经验是如果你在公司网络、校园网或者某些对国际出口有限制的宽带环境下wsl --install的成功率会明显下降。这时候硬等不是办法得换思路。2. 先判断你卡在哪一步三种典型症状的区分在动手解决之前得先搞清楚你到底是卡在哪一步。不同阶段的慢解法完全不一样。盲目操作只会浪费时间。2.1 症状一命令执行后长时间无任何输出敲下wsl --install之后光标一直闪没有任何文字输出也没有进度提示。这种情况大概率是卡在启用 Windows 功能组件这一步或者卡在检查更新上。你可以另开一个 PowerShell 窗口执行Get-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux看看功能是否已经启用。如果状态是 Enabled说明组件这步过了问题在后面。2.2 症状二能看到下载进度但速度极慢命令行里出现了下载百分比但数字半天不动或者每秒只走零点几个百分点。这就是典型的镜像下载慢问题出在分发节点上。这种情况下网络占用是有的只是带宽被限得很死。你可以用wsl --install -d Ubuntu-22.04指定一个具体版本试试有时候换版本能换到不同的分发节点速度会有差异。2.3 症状三下载到一半报错中断进度走到百分之六七十突然报错提示网络错误或者哈希校验失败。这种最让人崩溃因为前面的时间全白费了。这种中断通常是因为连接不稳定或者分发节点在传输过程中断开了。重试往往还是同样的结果因为你会被分配到同一个或者相近的节点。把这三类症状分清楚之后下面就可以对症下药了。我的建议是不管你是哪种症状最终都走离线安装这条路一劳永逸。3. 离线安装把镜像先拿到本地再装离线安装的核心思路很简单不让wsl --install自己去下载而是我们手动把发行版镜像包下载好然后用命令直接导入。这样下载可以用任何你顺手的工具断点续传、多线程、换源都随你。3.1 获取发行版镜像包的几种途径微软官方其实提供了发行版的离线包下载。你可以访问微软的 WSL 发行版发布页面找到对应的.AppxBundle或者.tar.gz格式的包。Ubuntu、Debian、Kali 这些都有。具体来说Ubuntu 的 WSL 镜像可以从 Ubuntu 官方的 cloud-images 页面找到文件名类似ubuntu-22.04-server-cloudimg-amd64-wsl.rootfs.tar.gz。这个就是纯净的 rootfs 包导入之后直接就是一个可用的 Ubuntu 环境。如果你想要微软商店里那个带一些预配置的版本也可以从微软的分发地址直接拉.AppxBundle文件。把地址复制到下载工具里多线程下载速度比命令行里快得多。提示下载.AppxBundle之后它本质上是个 zip 包你可以把后缀改成.zip解压里面会有install.tar.gz这个就是可以直接导入的 rootfs。我一般推荐直接用 Ubuntu 官方 cloud-images 的 rootfs 包干净、体积可控、版本明确。22.04 的包大概 300MB 左右比商店版小不少。3.2 用 wsl --import 导入本地镜像拿到 tar.gz 包之后导入命令是这样的wsl --import Ubuntu-22.04 D:\wsl\Ubuntu-22.04 D:\downloads\ubuntu-22.04-server-cloudimg-amd64-wsl.rootfs.tar.gz --version 2这里几个参数解释一下。第一个参数Ubuntu-22.04是你给这个发行版起的名字随便起但后面要用到。第二个参数是安装目录建议放在非系统盘比如 D 盘避免占用 C 盘空间。第三个参数是刚才下载的 tar.gz 文件路径。--version 2指定使用 WSL2如果你还在用 WSL1 可以不加但强烈建议用 WSL2。导入过程就是解压和注册本地操作速度取决于你的硬盘一般几十秒到一两分钟就完成了。导入完成之后用wsl -d Ubuntu-22.04就能进去了。第一次进去是 root 用户你需要自己创建一个普通用户useradd -m -s /bin/bash yourname passwd yourname usermod -aG sudo yourname然后把默认用户改一下。在/etc/wsl.conf里加上[user] defaultyourname保存后退出 WSL执行wsl --terminate Ubuntu-22.04再重新进入默认用户就生效了。3.3 导入方式的几个实操细节导入的目录不要放在已经有 WSL 发行版的同一个文件夹下容易混淆。我习惯在 D 盘建一个wsl文件夹每个发行版一个子目录清清楚楚。另外导入的 rootfs 包如果是 gzip 压缩的 tarWSL 能直接识别。但如果是 xz 或者 zstd 压缩的得先解压成 tar 再导入。Ubuntu cloud-images 提供的 wsl.rootfs.tar.gz 是 gzip 的直接用没问题。还有一个坑如果你之前已经用wsl --install装了一半失败了的残留最好先清理掉。用wsl --list --all看看有没有半成品有的话wsl --unregister掉再重新导入。4. 已经装了一半或者装好了怎么补救和加速不是所有人都是从零开始。很多人是已经装了 WSL但每次更新或者装新发行版的时候还是慢。这部分说说已经有一个可用 WSL 环境的情况下怎么优化后续操作。4.1 关闭自动更新检查减少不必要的网络请求WSL 有个内核自动更新的机制有时候会在你不知情的时候去拉更新包拖慢整体体验。你可以通过配置来管理这个行为。在.wslconfig文件里位于用户目录下比如C:\Users\你的用户名\.wslconfig可以设置[wsl2] kernelCommandLine 更直接的办法是如果你不需要自动更新内核可以手动管理。用wsl --update的时候如果慢同样可以用离线方式去微软的 WSL 内核发布页面下载wsl_update_x64.msi本地安装。4.2 换用国内镜像源加速 apt 和 pipWSL 里的 Ubuntu 装好之后第一件事应该是换 apt 源。默认的 archive.ubuntu.com 在国内访问很慢。换成清华、阿里或者中科大的源速度立刻起飞。以 Ubuntu 22.04 为例编辑/etc/apt/sources.list把archive.ubuntu.com和security.ubuntu.com替换成mirrors.tuna.tsinghua.edu.cn或者mirrors.aliyun.com。改完之后apt update的速度能从几分钟变成几秒。pip 也一样创建~/.pip/pip.conf[global] index-url https://pypi.tuna.tsinghua.edu.cn/simple这些操作虽然不直接解决wsl --install的慢但能让你装好之后的体验顺畅很多。毕竟装 WSL 只是第一步后面还要装一堆开发工具。4.3 用 wsl --export 和 --import 做环境迁移和备份这个技巧很多人不知道但特别实用。如果你在一台机器上已经配好了一个完美的 WSL 环境想搬到另一台机器或者想做个备份可以用导出导入。wsl --export Ubuntu-22.04 D:\backup\ubuntu-backup.tar导出的是一个 tar 文件包含了整个文件系统。在另一台机器上wsl --import Ubuntu-22.04 D:\wsl\Ubuntu-22.04 D:\backup\ubuntu-backup.tar --version 2这样迁移过来的环境所有配置、安装的软件、用户都在。比重新装一遍再配一遍快太多了。而且导出导入都是本地操作不受网络影响。我自己的做法是配好一个基础开发环境之后立刻导出一份备份。以后不管换电脑还是环境搞坏了几分钟就能恢复。5. 那些年我踩过的 WSL 安装坑这部分说几个实际踩过的坑都是文档里不会写但真实会遇到的问题。5.1 虚拟化功能没开装完了也跑不起来有一次帮同事装 WSLwsl --install跑完了重启之后发现 WSL 起不来报错说需要虚拟化支持。进 BIOS 一看Intel VT-x 或者 AMD-V 是关着的。这个坑在于wsl --install不会检查你的 BIOS 虚拟化设置。它只管装装完了能不能跑是另一回事。所以装之前最好先确认一下任务管理器 - 性能 - CPU看看虚拟化那一项是不是已启用。如果是已禁用先去 BIOS 里打开。5.2 系统版本不够命令根本不存在wsl --install这个命令是 Windows 10 2004 版本之后才有的。如果你还在用更老的 Windows 10敲这个命令会提示找不到。这种情况下要么升级系统要么走手动启用组件的老路。手动启用的步骤是控制面板 - 程序和功能 - 启用或关闭 Windows 功能勾选适用于 Linux 的 Windows 子系统和虚拟机平台然后重启。重启之后再去装发行版。5.3 杀毒软件拦截导致下载中断有些安全软件会对 WSL 的下载行为进行拦截尤其是从命令行发起的网络请求。表现就是下载到一半突然断了或者速度被压得很低。如果你怀疑是这个问题可以临时关闭安全软件的实时防护试试。如果速度立刻上来了那就是它的问题。后续可以把 WSL 相关的进程加入白名单。5.4 磁盘空间不足导致导入失败离线导入的时候tar 包解压需要额外的磁盘空间。如果你把安装目录设在 C 盘而 C 盘剩余空间不够导入会失败报错信息还不一定明确说是空间问题。建议安装目录放在空间充裕的盘至少预留 20GB 以上。WSL2 用的是虚拟磁盘会随着使用逐渐增大空间给足一点省心。6. 装好之后让 WSL 真正好用的几个配置WSL 装好了只是开始默认配置有不少可以优化的地方。这部分分享几个我每次装完都会做的配置。6.1 限制 WSL2 的内存和 CPU 占用WSL2 默认会占用大量内存有时候能吃到你物理内存的一半以上。对于内存不大的机器这会导致 Windows 本身变卡。在.wslconfig里可以限制[wsl2] memory4GB processors4 swap2GB这个文件放在C:\Users\你的用户名\.wslconfig。改完之后wsl --shutdown再重启生效。根据你机器的实际配置调整一般给 4GB 到 8GB 内存就够了。6.2 配置 Windows 和 WSL 之间的文件互访WSL 里访问 Windows 文件是通过/mnt/c/这样的路径。反过来Windows 里访问 WSL 文件可以通过\\wsl$\Ubuntu-22.04\这样的网络路径。但跨文件系统操作性能很差尤其是大量小文件的时候。所以项目代码最好放在 WSL 自己的文件系统里比如~/projects/而不是放在/mnt/c/下面。用 VS Code 的 Remote-WSL 插件打开 WSL 里的项目体验和本地几乎一样。6.3 开机自启和后台常驻的取舍WSL2 的发行版默认不会开机自启你第一次打开终端的时候它才启动。如果你有一些服务需要在 WSL 里常驻比如数据库、Redis 之类的可以配置开机自启。方法是在 Windows 的任务计划程序里创建一个任务触发条件设为登录时操作设为运行wsl -d Ubuntu-22.04 -u root service redis-server start这样的命令。不过要注意WSL 实例在没有活动会话的时候可能会被挂起所以常驻服务不一定稳定。对于开发环境我一般还是手动启动需要的时候再开。7. 关于 wsl --install 慢这件事的最终建议绕了一圈回到最初的问题。wsl --install慢本质上是网络分发的问题不是命令本身的问题。你没法改变微软的分发节点质量但你可以改变获取镜像的方式。我的建议很直接不要跟wsl --install死磕。第一次装的时候直接用离线导入的方式把 rootfs 包用下载工具拉下来然后wsl --import。整个过程可控速度快而且失败了也好重试。装好之后把 apt 源、pip 源都换成国内的后续装软件就顺畅了。再配一个.wslconfig限制资源占用基本就是一个很舒服的开发环境了。最后分享一个小习惯每次配好一个新环境我都会wsl --export导出一份备份放在移动硬盘里。这样不管换电脑还是系统崩了十分钟就能恢复一个完整的工作环境。这个习惯帮我省过好几次重装的时间比任何加速技巧都实在。
返回列表