十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

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

WSL 2 安装全指南:从原理、安装到开发环境配置一次搞定

WSL 2 安装全指南:从原理、安装到开发环境配置一次搞定 去年年底帮几个同事配置开发环境一台老笔记本装 Win10 21H2一台新买的 Win11 笔记本还有一台是公司域控环境下的台式机。三台机器折腾下来我发现 WSL 2 的安装早就不只是“开个功能、装个发行版”那么简单了。系统版本不同命令不一样网络环境不同走的路径也不一样后续开发和 Docker 的衔接方式更是有讲究。这篇是“玩转 WSL 2”系列的第一篇先聚焦在介绍和安装上把 WSL 2 是什么、怎么选、怎么装、装完怎么验证说清楚。网上关于 WSL 的教程很多但大多是零散的知识点要么只讲一个命令要么直接给一堆配置。我这篇想把整个安装链路打通从架构原理讲到系统要求再讲标准安装和离线安装两种方式最后把安装完之后的初始化配置和常见问题一并收拾干净。无论你是刚接触 WSL 的纯新手还是已经装过但想彻底搞明白原理的老手这篇都能给你一个完整的视角。1. 先搞清楚 WSL 2 到底解决了什么问题聊 WSL 2 之前得先理解一个背景为什么微软要费劲把 Linux 内核搬进 Windows答案其实很朴素——开发者不想再用虚拟机或者双系统了。我见过太多人因为要在 Windows 上跑 Linux 工具链要么开 VirtualBox 虚拟机要么直接装双系统来回重启。前者资源占用大、启动慢后者切换麻烦、磁盘分区脆。WSL 的出现就是想把“在 Windows 里原生跑 Linux 程序”这件事变成现实。1.1 我不是虚拟机我是轻量级内核WSL 这个缩写全程是 Windows Subsystem for Linux意思是“用于 Linux 的 Windows 子系统”。它不是虚拟机不搞硬件模拟这一套而是微软在 Windows 内核里实现了一个兼容层WSL 1或者直接运行一个轻量级 Linux 内核WSL 2。你的 Windows 文件系统和 Linux 文件系统可以在同一个视图中工作互不干扰但又可以互访。WSL 1 的思路是把 Linux 的系统调用翻译成 Windows 的系统调用好处是资源占用极小坏处是兼容性不完整——有些程序对内核行为很敏感翻译层撑不住。WSL 2 的思路换成了真正的 Linux 内核跑在一个轻量级虚拟机里兼容性大幅提升docker、systemd、GPU 直通这些以前搞不定的现在都没问题。1.2 一句话看懂 WSL 2 和虚拟机的区别很多初学者会问既然 WSL 2 也是跑虚拟机那和 VMware 有什么区别我用一个比喻来解释。传统虚拟机就像一套完整的精装房地板、墙壁、水电都是独立的住在里面完全隔离代价是煤气水电全都要单独算——启动慢、内存吃得多。WSL 2 则像是公寓里的一个房间用开发商统一的水电管线前厅后厅共享——Linux 通过一个轻量级虚拟机Utility VM跑在 Windows 的 Hyper-V 平台上复用 Windows 的系统资源调度所以启动时间只要几秒内存占用按需分配。这个差别在实战里非常明显。你要是开一个 VMware 虚拟机等着 Linux 桌面加载完至少得一两分钟而且内存占用少说 2GB 起步。WSL 2 呢我在一台只有 8GB 内存的旧笔记本上跑 WSL 2启动 Ubuntu 只需要 2 到 3 秒平时内存占用基本在几百 MB 到 1GB 左右波动。对于想快速跑命令、测试脚本、写代码的人来说这种体验是质变。1.3 谁更适合用 WSL 2谁不太适合WSL 2 不是万能的。根据我自己用下来的经验适合的人大概是这几类用 Windows 做日常桌面但需要 Linux 工具链的开发者Node.js、Python、Go、Rust 等需要调用 Docker 容器但不想装 Docker Desktop 的开发者WSL 2 backend 就是为此设计的在 Windows 环境下做数据科学、机器学习实验需要用到 Linux 下 CUDA 环境的用户平时跑运维脚本、写 shell、测试部署流程的人不太适合的人也有。比如你需要跑带图形界面的完整桌面应用或者需要频繁读写 Windows 磁盘上的大型文件——WSL 2 在跨文件系统访问时性能确实会打折。另外如果你的工作流要求严格的 Linux 内核版本控制或者要测试不同内核版本下的行为那还是老老实实用虚拟机吧。2. 安装前先做自我排查系统版本与硬件虚拟化我见过不少人一上来就执行wsl --install结果弹出各种报错。与其到时候抓瞎不如先花五分钟把这几个前提条件搞清楚。这一节说的全是实打实的经验照着做能规避掉绝大多数安装问题。2.1 你的 Windows 版本到底够不够格WSL 2 对 Windows 版本有硬性要求查不对版本会浪费大量时间。Windows 11所有版本都支持直接wsl --install就行。Windows 102004 版本Build 19041及以上支持 WSL 21903/1909 及以下只支持 WSL 1需要先升级系统。Windows Server 2019/2022支持但需要手动启用 Hyper-V 功能。查看系统版本的方法很简单打开“运行”框Win R输入winver回车弹出的窗口里会显示完整的版本号和内部版本号。我的那台旧笔记本当时是 Windows 10 21H2Build 19044完全支持。还有个细节 Windows 10 家庭版 虽然也支持 WSL 2但如果你需要同时使用 Hyper-V 管理器或者 Windows 沙盒家庭版是没有的。不过单就 WSL 2 来说家庭版和专业版没有差别不用担心。2.2 BIOS 里的虚拟化开关这一步别跳过WSL 2 本质上依赖虚拟化技术Virtual Machine PlatformCPU 的虚拟化功能如果没有在 BIOS 里打开后续会直接报Please enable the Virtual Machine Platform的错。检查方式有两种任务管理器 → 性能选项卡 → CPU看右下角的“虚拟化”状态是否为“已启用”。命令行执行systeminfo输出信息里找“Hyper-V 要求”部分看虚拟化固件是否开启。如果显示未启用需要去 BIOS 设置里找叫法不同的选项常见的是Intel Virtualization Technology (VT-x)、AMD SVM Mode、或者Virtualization Extensions。改完保存重启就行。如果你用的 CPU 比较老不支持虚拟化那 WSL 2 就用不了只能退回 WSL 1——不过从我的实测看老 CPU 跑 WSL 1 也能完成基本工作只是 Docker 和内核模块基本别想了。2.3 提前想好C 盘空间够不够安装 WSL 2 和 Ubuntu 发行版需要的磁盘空间不只是“安装包大小”。Ubuntu 22.04 的根文件系统 vhdx 文件初始就有 1.5GB 左右装完基础工具链之后可能膨胀到 4GB 以上。加上 WSL 2 的虚拟磁盘默认还会自动增长最大到 256GB 虚拟大小如果 C 盘空间吃紧会非常尴尬。我建议动手之前先看一下 C 盘剩余空间预算至少腾出10GB 到 20GB。这个数字很多人会低估——你后面装 Docker 镜像、拉依赖包、存数据很快就用掉了。如果 C 盘确实紧张可以考虑后续把发行版迁移到 D 盘这个我后面会专门写。当时同事的 C 盘只剩 3GB装完 WSL 之后直接红条警告。后来我帮他迁到 D 盘才解决问题。建议一开始就规划好路径。3. 标准安装流程一条命令装好 Ubuntu 和 WSL 2前提条件都确认没问题之后正式的安装就轻松多了。这里分两种情况讲一种是 Windows 11 和较新版本 Windows 10 支持的一条命令安装另一种是老版本 Windows 10 需要手动开启功能。3.1 用管理员 PowerShell 跑 wsl --install在 Windows 11 或者已经满足条件的 Windows 10 系统中安装 WSL 2 的过程已经被微软简化到极致了。以管理员身份打开 PowerShell 或 Windows Terminal输入wsl --install这条命令会自动做几件事启用 WSL 和“虚拟机平台”功能、下载并安装最新 WSL 内核、安装默认发行版 Ubuntu。如果只执行wsl --install时不加参数默认装的是 Ubuntu。想装其他发行版可以先看看支持哪些wsl --list --online输出的列表里能看到 Ubuntu、Debian、kali-linux、openSUSE、Alpine 等。我一般推荐直接选 Ubuntu 22.04 LTS因为用户量最大、资料最多、以后遇到问题容易查。指定发行版安装的命令是wsl --install -d Ubuntu-22.04安装完成后系统会提示重启。重启后第一次启动 Ubuntu 会让你设置 Linux 用户名和密码。这里有个细节这个用户名不需要和 Windows 当前的用户名一致是 Linux 系统内的独立账户。设置后进去就是 root 权限的基本 shell但日常工作建议用普通用户。3.2 老版本 Windows 10 的手动开启方式如果你的系统是 2004 以下版本、或者wsl --install命令不可用需要手动开启功能。按Win R输入optionalfeatures打开“Windows 功能”窗口勾选上以下这几项适用于 Linux 的 Windows 子系统虚拟机平台Hyper-V如果系统版本支持的话勾完点确定重启系统。之后再用管理员 PowerShell 安装发行版wsl --set-default-version 2 wsl --install -d Ubuntu-22.043.3 验证安装结果几行命令看全部状态装都装了怎么确认版本和状态是否正确我自己习惯用下面这几条命令建议收藏wsl --version # 查看 WSL 本身版本 wsl -l -v # 列出所有发行版和对应 WSL 版本 wsl --status # 查看默认发行版、默认版本等状态wsl -l -v的输出里如果你看到某一行的VERSION列是2说明这个发行版已经是 WSL 2 模式。如果显示1可以用wsl --set-version Ubuntu-22.04 2手动切换。我在实际中见过很多朋友卡在这一步装完了也显示 VERSION 为 1一直不理解为什么。原因大概率是安装时默认版本没设置成 2或者系统开启了 WSL 1 模式。处理方法很简单就是执行上面那条切换命令。4. 安装慢、卡住、403完整排查链路分享前面讲了顺利的路径但我良心建议大家把这一节也看完因为“顺利”在现实中是可遇不可求的。我自己的经历是帮助同事那三台机器配置时几乎没有一台是一遍过的。要么下载慢得离谱要么 WSL 功能已经启用了却在下载内核时卡住要么执行命令直接报错。4.1 “wsl --install 太慢”到底慢在哪先说结论慢基本都慢在“从 GitHub 下载 WSL 内核安装包”和“从微软商店下载发行版镜像”这两个环节。wsl --install的执行过程不是本地就能完成的它需要联网把几样东西拉到本地Linux 内核更新包、发行版的 rootfs、WSL 本身的运行组件。如果网络到这些完全没有问题这套流程流畅得要命几分钟搞定。但一旦某些下载节点网络不佳整个安装过程就会卡在某个百分比半天不动甚至直接报超时。解决办法也很直白多试几次。因为断点续传偶尔会失效卡住的时候用Ctrl C中断重来往往第二次、第三次资源就下载完了。这不是玄学是节点回源和 CDN 命中率的问题。4.2 装到一半报 0x8007019e 或者类似错误码怎么办这是我在网上看到问得最多的一类问题。0x8007019e、0x80070003、0x80070005——看到这些先别急着找神药大概率是以下原因没有重启系统。开启 Windows 功能之后如果不重启WSL 无法加载内核所有操作都会报错。BIOS 虚拟化没开。参考前面 2.2 节。如果确认都做了还是报错可以考虑在 PowerShell 里更新一下 WSLwsl --update这个命令会强制刷新 WSL 组件。4.3 下载发行版时显示 403 或连接超时这里我得说一个反直觉的经验403 错误不一定是网络问题很多时候是本地安全软件或者防火墙把微软下载域名给拦了。我同事那台域控环境下ESET 杀毒软件会把store.rg-adguard.net之类的下载路径拦掉导致 WSL 在安装发行版时反复失败错误日志里直接出现 403。方法是在安装 WSL 期间把相关的下载域名临时加白名单装完再放回来。如果网络环境比较苛刻或者公司出口有流量审计那 403 和超时就更是常事儿了。这种情况建议别纠结了直接看第 5 节的离线安装方案。还有个小技巧执行wsl --list --online时如果说连接超时可以先试试wsl --update把 WSL 本体升到最新再去拉发行版列表。旧版 WSL 组件访问在线源的兼容性确实差一些。4.4 “your version of WSL is too old” 的完整修复路径如果执行任何 WSL 命令都提示your version of Windows Subsystem for Linux (WSL) is too old. run the wsl --update command to update to the latest version这个报错很明确地告诉你本机的 WSL 太老了需要更新。但问题来了既然命令本身都跑不动了wsl --update还能执行吗实测可以因为wsl --update是 Microsoft Store 版本的 WSL 提供的更新入口。先执行wsl --update等它下载完新版 WSL 组件再重新开一个 PowerShell 窗口执行wsl -l -v验证版本号。如果连wsl --update都跑不通比如网络受限那就需要手动下载最新的 WSL 安装包.msi地址在微软官方文档里能找到。下载完双击装一遍重启 PowerShell 再执行wsl --version确认 WSL 主版本号已经更新到 1.x 以上。5. 离线安装方案没有外网也能装 WSL我有一个性化极强的建议如果网络稳定看第 3 节就够了如果网络总出问题或者你想在公司内网、隔离环境批量给多台机器部署 WSL那离线安装是一条非常可靠的路。我亲测过整个过程不依赖微软商店也不依赖 GitHub 下载唯一的前提是你能拿到这几个安装包。5.1 你需要准备哪些文件离线安装 WSL 2 通常需要三个东西WSL 内核更新包wsl_update_x64.msi适用于 Linux 的 Windows 子系统功能发行版 rootfs比如 Ubuntu 的.appx或.tar.gzWSL 内核更新包可以从微软官网下载关键字搜“WSL 2 Linux kernel update package”。发行版 rootfs 的获取稍微麻烦一些常见方式是在一台已经联网的机器上用wsl --export导出一个发行版镜像或者从微软商店的官方页面里找到下载链接有些下载工具可以直接抓到 .appx 链接。5.2 手动注册发行版wsl --import 的正确用法在目标机器上先把 WSL 内核更新包装好双击 msi默认路径安装再用管理员 PowerShell 手动导入 rootfswsl --import Ubuntu-D:/wsl/Ubuntu D:\wsl\images\ubuntu-22.04.tar.gz命令参数解释一下第一个参数Ubuntu是你要在 WSL 里显示的发行版名称可以自定义比如Ubuntu-2204。第二个参数D:\wsl\Ubuntu是发行版的安装目录。第三个参数是 rootfs 的 tar 包路径。导入完成后用wsl -l -v就能看到这个发行版。默认用户的登录方式可能不是普通用户而是 root需要手动配置一下默认用户。在发行版终端里执行echo -e [user]\ndefault你的用户名 /etc/wsl.conf然后在 Windows 侧执行wsl --shutdown重新进入发行版配置就生效了。5.3 离线环境替代方案先装再导如果你手上没有现成的 rootfs 包但有一台能联网、已经装好 WSL 的机器可以先在那台机器上装好所有需要的工具链、配置好环境然后导出wsl --export Ubuntu D:\backup\ubuntu-tsinghua-config.tar再把导出的 tar 包拷贝到离线机器上用wsl --import导入即可。这样连换软件源、装依赖这些事情都一起打包了离线机器导入后就是现成的开发环境。我帮同事迁移开发环境时就是这么干的把已经配置好 Python 环境和 Docker 的 Ubuntu 导出到新机器上导入完直接开跑省掉了大量重复配置时间。5.4 离线安装后 Docker Desktop 的注意事项离线安装好 WSL 后如果再打算装 Docker Desktop需要额外注意Docker Desktop 的 WSL 2 backend 依赖 WSL 功能和一个内置发行版docker-desktop。离线环境下Docker Desktop 安装包需要单独下载它内部的 WSL 集成组件也会尝试联机更新如果这步失败可能会导致 Docker 引擎无法启动。一个务实的替代方案是不装 Docker Desktop直接在 WSL 发行版里安装 Docker Engine。这样 Docker 运行在 Linux 环境内不需要 Windows 侧的任何组件离线安装也更容易控制。具体安装方式以后可以单独写一篇这里先提个方向。6. 安装完成后的第一件事换源、配置开发环境安装结束只是开始。我第一次用 WSL 的时候装完 Ubuntu 进去就傻眼了——下载软件包的速度慢得一批而且终端里默认的字体和配色也谈不上顺手。这一节分享几个装完必做的优化项让 WSL 2 真正能用、好用。6.1 apt 换源把软件包下载提速十倍Ubuntu 默认的软件源在国外网络状况不理想的话apt update都能卡半天。把源换成国内镜像之后速度提升肉眼可见。我以 Ubuntu 22.04 为例操作如下先备份原源文件sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak然后编辑/etc/apt/sources.list把http://archive.ubuntu.com/ubuntu/替换成你所在的地区镜像。比如用清华镜像源sudo sed -i s/archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g /etc/apt/sources.list sudo apt update如果是新版 Ubuntu24.04 开始用的是.sources文件路径在/etc/apt/sources.list.d/ubuntu.sources操作方法类似把文件里的 URL 替换成镜像地址再 update 就行。6.2 在 VS Code 和 PyCharm 里无缝使用 WSL装完 WSL 的第一件事我强烈建议装上 VS Code 的 WSL 扩展。缩写在扩展市场里搜WSL就能找到是微软官方出的 Remote Development 系列之一。装好之后在 Ubuntu 终端里进入项目目录输入code .VS Code 会直接启动并且已经连接到了 WSL 里的文件系统和环境。你不用配置 SSH 也不用设置远程它就是那么简单。这个体验最大的价值在于代码运行在 Linux 上但写代码在你熟悉的 Windows 图形界面上调试、终端、文件树、插件全部干净地在 WSL 环境中工作。PyCharm 用户也不用担心。PyCharm Professional 在 2019.3 之后原生支持 WSL 解释器在 Python Interpreter 配置里选 WSL 路径下的 Python 解释器就行。免费的 Community 版不支持但你可以绕过去先在 WSL 里用 VSCode 或者 Vim 写测试跑通了再同步到 PyCharm 看业务代码。或者干脆直接用命令行开发很多人就是这么干的。6.3 文件互访与路径转换两个系统来回穿梭WSL 和 Windows 之间的文件互访是它最让我起飞的特性之一。从 WSL 里访问 Windows 文件路径是把 D 盘写成/mnt/d/C 盘写成/mnt/c/以此类推。比如你要打开 D 盘下的project目录cd /mnt/d/project反过来从 Windows 访问 WSL 里的文件在资源管理器地址栏里输入\\wsl$\Ubuntu-22.04\home\你的用户名就能进去。这个特性在把下载的文件传递给 WSL、或者在两者之间拷贝数据时特别方便。不过要注意一个性能问题跨文件系统读写性能有损耗。如果你在 Linux 环境下跑构建工具比如 npm install、编译 C项目目录最好放在 WSL 的文件系统内比如/home/用户名/而不要放在/mnt/d/下面。放在 Windows 盘符上会让 IO 变慢很多这不是玄学是因为 WSL 2 对跨系统的文件访问走的是 9P 协议开销明显比原生 Linux 文件系统大。我实测过同一个前端项目npm install 在 WSL 内目录用时 20 秒放到/mnt/d/下要 40 秒甚至更多。6.4 DNS 和网络问题常用设置建议WSL 2 的 NAT 特性偶尔会让 DNS 解析出问题。症状是apt update时域名解析失败但 ping 通 IP。最常见的处理方式是在/etc/resolv.conf里手动指定一个公共 DNS比如 223.5.5.5 或 119.29.29.29但这只是临时方案因为重启后会覆盖。更稳的办法是在 Windows 侧写.wslconfig文件把 DNS 设置固化下来。在 Windows 用户目录如C:\Users\你的用户名\下新建一个名为.wslconfig的文件写入[wsl2] memory8GB dns223.5.5.5然后重启 WSLwsl --shutdown再进 WSL 时配置就生效了。.wslconfig还能设置内存上限、处理器数量、交换空间等我一般会限制内存防止 WSL 在后台吃资源。上面示例里设了 8GB你可以根据机器实际内存调整。7. 安装问题排查速查表以及下一期预告写到这整个 WSL 2 的介绍和安装链路算是基本通了。最后给一张速查表帮你把常见问题的排查步骤浓缩成可操作的动作。这个表是我在帮助同事配置过程中总结出来的希望能让你少走弯路。问题现象可能原因排查/解决步骤wsl --install命令不存在Windows 版本太老更新系统到 Windows 10 2004或手动开启“适用于 Linux 的 Windows 子系统”功能安装到一半卡住或速度慢WSL 内核/rootfs 下载源网络不佳中断重试改用离线安装方案用手机热点试一次这招有时候很灵执行 wsl 命令报 “WSL too old”WSL 组件版本过低执行wsl --update或手动下载安装新版 WSL msi提示需要开启虚拟化BIOS 虚拟化未开启进 BIOS 打开 VT-x/SVM重启确认wsl -l -v显示 VERSION 为 1默认版本未设置wsl --set-version 发行版名 2DNS 解析失败网络环境限制写.wslconfig固定 DNS 后wsl --shutdown重启跨系统操作特别慢文件放在了/mnt/*下项目迁移到 WSL 内目录避免 9P 协议瓶颈这期的内容是“WSL 的介绍和安装”把地基打牢。下一期我准备写WSL 里的开发环境搭建包括 Zsh Oh My Zsh 的美化、Python/Node.js 环境和版本管理、还有 systemd 支持开启之后怎么舒服地跑后台服务。再往后可能还会聊 WSL 2 的性能优化和 Docker 集成——如果你有特别想了解的也可以在评论区告诉我我会顺着大家的需求来安排后续的内容。在 WSL 上折腾 Linux 这件事最大的乐趣就是自由度极高——装错了可以删掉重来配置乱了可以恢复快照而且不会影响 Windows 本体。放开了玩就行。
返回列表