ARTICLE DETAIL

资讯详情

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

WSL安装全攻略:在线离线双方案与常见报错排查详解

WSL安装全攻略:在线离线双方案与常见报错排查详解 今天聊WSL安装。干了很多年开发我见过太多人因为装WSL这件事卡住有人卡在Windows功能没打开有人卡在商店下载失败还有人想在公司内网离线环境装却到处找不到靠谱的离线包。这篇就按真实操作流程把在线安装、离线安装、初始化配置、常见报错整个过一遍看完你大概率能顺顺利利把WSL跑起来。无论你是刚接触Linux的新手还是需要在Windows上跑Linux工具链的老手这套流程都适用。题目里写2026最新其实WSL安装方式这两年已经稳定下来照着这篇操作一两年内基本不会有太大变化。1. 为什么选WSL而不是虚拟机聊聊真实开发场景里的取舍1.1 WSL是什么它和虚拟机的本质区别WSL的全称是Windows Subsystem for Linux中文通常叫“Windows上的Linux子系统”。它的本质不是虚拟机也不是模拟器而是Windows系统自带的一种Linux兼容运行环境。具体到WSL 2它运行在一个轻量级虚拟机里这个虚拟机使用的是微软自己发布的Linux内核和Windows本体配合得很好启动速度非常快。很多人会把WSL和VMware、VirtualBox这种传统虚拟机混为一谈但它们的区别非常大。传统虚拟机需要完整模拟CPU、内存、硬盘、网卡这些硬件设备系统启动要经历完整的BIOS引导过程所以开机通常要几十秒甚至几分钟内存占用也动不动好几GB。WSL 2虽然底层也用了虚拟化技术但它只运行一个精简的Linux用户态加内核启动时间通常在几秒内内存占用只有几百MB日常开个终端跑命令体验非常接近原生Linux机器。用一句话说如果你只想在Windows上开一个Linux终端跑命令、折腾工具链、部署服务WSL比虚拟机轻量得多如果你要跑带图形界面的完整Linux桌面或者测试内核级驱动那还是老老实实用VMware或VirtualBox。1.2 哪些场景最适合用WSL先盘点一下我见过最常见的WSL使用场景你可以对号入座第一开发工具链。Node、Python、Ruby、Go这些开发环境很多人在Windows上配置起来头疼环境变量、路径分隔符、编译依赖各种问题。在WSL里直接装Linux版工具链干净统一不会污染Windows系统。第二Docker容器。Docker Desktop的WSL 2后端比旧版Hyper-V方案体验好太多容器启动速度快资源占用也合理。第三数据分析和机器学习。numpy、pandas、CUDA工具链这些在Linux下兼容性更好很多官方文档都默认你是Linux环境。第四编译开源项目。大多数开源项目都优先支持Linux编译链在WSL里编译踩坑概率低很多。第五运维和服务器管理。平时要操作Linux服务器本地装一个WSL就能复现线上环境测试脚本、调试配置都方便。如果你是这些用户里的任何一个花十分钟把WSL装好后面能省下大量时间。1.3 版本选型WSL 1 与 WSL 2 怎么选WSL 1和WSL 2的区别经常让人困惑这里说清楚。WSL 1没有虚拟机它的原理是把Linux系统调用翻译成Windows系统调用相当于做一个翻译层。好处是磁盘IO性能好访问Windows文件系统很快坏处是无法运行需要Linux内核功能的程序比如Docker、某些需要内核模块的软件在WSL 1里就跑不起来。WSL 2是基于轻量级虚拟机自带完整Linux内核兼容性比WSL 1好很多绝大部分Linux软件都能直接跑。坏处是跨系统文件访问慢一些因为从一个文件系统跳到另一个文件系统有额外开销另外内存占用比WSL 1略大。我自己的建议是大多数情况下直接用WSL 2微软官方现在的默认也是WSL 2。只有老电脑配置很低或者必须频繁操作Windows磁盘文件并且不需要Docker这类场景才考虑WSL 1。所以别纠结默认走WSL 2就行。2. 安装前的准备把这些条件搞清楚再动手2.1 系统版本和硬件要求安装WSL前得先确认系统版本是否满足要求。WSL 2要求Windows 10版本2004及以上对应的内部版本号是19041或更高Windows 11全版本都支持。如果你用的是Windows Server建议使用2019或2022版本越新越省心。检查系统版本的方法很简单按WinR输入winver弹出的窗口里就能看到内部版本号。硬件方面要求不高只要是64位x86或ARM处理器就行。关键点是必须启用虚拟化功能很多电脑BIOS里默认关闭了虚拟化会导致WSL 2启动失败。检查方法打开任务管理器切到“性能”标签点击CPU在右下角能看到“虚拟化”状态。如果显示“已禁用”就需要进BIOS开启Intel VT-x或AMD-V。这一步很多人卡了好久其实只要在开机时按Del或F2进BIOS找到虚拟化选项改成Enable保存重启就行。内存方面建议至少4GB8GB以上体验更好。WSL 2默认会占用一部分内存如果你的机器只有4GB内存跑大型项目可能会吃力后面我会讲怎么限制WSL的内存占用。2.2 打开必需的Windows功能这一步很多人漏掉安装WSL之前需要先打开两个Windows功能“适用于Linux的Windows子系统”和“虚拟机平台”。这两个功能是WSL运行的基础尤其是WSL 2必须开启“虚拟机平台”否则启动时会报硬件支持相关错误。操作路径打开控制面板点击“程序”再点击“启用或关闭Windows功能”在弹出的窗口里勾选“适用于Linux的Windows子系统”和“虚拟机平台”确定后重启电脑。如果你用的是Windows家庭版可能在“启用或关闭Windows功能”里看不到“虚拟机平台”这个选项这时候可以用管理员PowerShell执行命令来开启后面在线安装章节会给出具体的命令。这一步相当重要很多教程直接跳过结果用户装完WSL启动报错又不知道怎么回事。2.3 网络环境和商店配置检查在线安装WSL时会用到微软商店和Windows更新服务如果你的网络环境访问这些服务很慢或超时安装过程就会卡住。另外请确保网络通畅尤其不要开启某些会导致系统代理异常的配置否则商店下载会报0x80072EFD之类的网络错误。如果你在公司内网、离线环境或者网络受限直接看第4章的离线安装方案那边准备了完整的离线包操作思路。另外提醒一句Windows商店部分下载可能需要登录微软账号才能下载发行版。如果不想登录账号用命令行方式安装会更省事命令方式对账号要求更宽松。3. 在线安装WSL最推荐的方式5分钟搞定3.1 命令安装法和图形安装法哪个快安装WSL有两种主流方式命令行方式和图形商店方式。我个人最推荐命令行方式理由很简单在管理员PowerShell里执行一条wsl --install系统会自动完成启用功能、下载WSL核心组件、安装Ubuntu发行版这一整套流程不用打开商店不用手动勾选功能对新手极其友好。图形化方式适合已经在微软商店里有账号、习惯点一点操作的人。方法也简单打开Microsoft Store搜索“Windows Subsystem for Linux”或者直接搜索“Ubuntu”点安装就行。图形方式的好处是能直观选择发行版版本坏处是有些网络环境下商店下载容易失败而且商店下载时间长的时候没有一个明确的进度提示容易让人干着急。总的来说能走命令就尽量走命令。下面的操作流程以命令行为主商店方式我会作为一个备选方案写清楚步骤。3.2 完整命令安装流程第一步右键点击开始菜单选择“Windows PowerShell(管理员)”或“终端(管理员)”。如果用户账户控制弹窗点击“是”授权。第二步在PowerShell里输入下面的命令回车wsl --install如果系统之前完全没有WSL组件命令会自动处理后续流程包括启用Windows功能、下载WSL核心组件、安装默认的Ubuntu发行版。整个过程可能持续几分钟窗口会滚动显示进度信息。此时不要关闭窗口等它跑完。安装完成后系统会提示需要重启电脑。第三步重启电脑后系统会自动弹出一个Ubuntu终端窗口提示你创建Linux用户名和密码。输入的用户名只用于Linux系统内部和Windows账号可以完全不同密码输入时不会显示字符这是Linux的正常行为不是键盘坏了。用户名建议用短一点的小写字母组合密码设置得复杂一些。第四步安装完成后在Windows终端或PowerShell里执行wsl -l -v能看到当前安装的发行版列表和版本号确认一下VERSION列是不是2。这里说明一下wsl --install默认安装的是最新Ubuntu LTS版本对大多数人够用。想装其他发行版可以先查看可用列表wsl -l -o再指定发行版名称安装wsl --install -d Debian想装Kali、Fedora等发行版也是一样的方式把名字换成相应的就行。3.3 从微软商店安装Ubuntu如果你偏好图形操作可以打开Microsoft Store搜索“Ubuntu”会看到多个版本一般选最新的LTS版本比如Ubuntu 22.04.5 LTS或Ubuntu 24.04 LTS。LTS版本是长期支持版稳定性有保障不会频繁大变。点击获取或安装等待下载完成后从开始菜单启动Ubuntu同样会进入创建用户的初始化流程。有一个坑需要提醒商店安装的通常只是Ubuntu发行版本身如果系统里完全没装WSL核心组件直接开Ubuntu会提示“WSL未安装”或类似报错。所以商店方式往往需要先确认系统是否已有WSL基础组件。如果执行wsl --version没反应就先用管理员PowerShell执行wsl --install装一下WSL核心或者去微软商店搜索“Windows Subsystem for Linux”安装那个应用。这也是很多新手困惑的地方。3.4 验证安装结果装完之后打开PowerShell或Windows终端执行wsl -l -v输出大概是这样NAME STATE VERSION * Ubuntu Running 2第一列是发行版名称第二列是运行状态第三列是WSL版本。看到VERSION是2说明WSL 2已经正常工作了。然后试着执行wsl应该会进入Linux终端。在Linux提示符下执行uname -a lsb_release -a如果能看到内核版本和Ubuntu版本信息说明WSL已经可以正式使用了。另外如果你现在使用新版Windows Terminal建议把默认终端设置为Windows TerminalWSL的命令行体验会好很多还能自定义配色、透明背景、快捷键比默认的conhost强不少。4. 离线安装WSL和Ubuntu没网也能装重点4.1 为什么要准备离线安装包在线安装虽然简单但现实中很多人是公司内网环境、机房测试机、或者网络受限的机器。这些机器要么没有外网要么外网速度极慢在线安装会卡在下载阶段。这个时候就需要一个“离线安装包”方案在联网机器上提前下载好WSL核心组件和Linux发行版安装包拷贝到目标机器上安装。我最早处理这个问题是因为一台不连外网的测试服务器需要跑Linux工具链Windows Server上什么都要手动装折腾了很久才把流程跑通。后来我把这套步骤固定下来基本十几分钟就能完成离线部署。这篇把这个过程完整还原出来项目的标题里写着“带安装包”其实说的就是这类离线部署场景。4.2 在能联网的机器上下载离线包第一步下载WSL核心组件。新版WSL是一个MSI或MSIX安装包可以从微软官方的GitHub Releases页面下载Assets里的安装包常见文件名是wsl.2.x.x.x.x64.msi。为了安全一定从官方地址下载不要随意使用第三方站点的包否则容易碰到被篡改的软件包甚至可能带着恶意内容。如果你在浏览器里访问下载慢可以考虑用支持断点续传的下载工具或者换一个时间段再试。第二步下载Linux发行版安装包。有两种主流方式。第一种是使用wsl --export从另一台已经装好的机器导出这个命令会把整个Linux文件系统打包成一个.tar文件拷贝到目标机器后使用wsl --import导入。这种方式适合迁移自己已经配置好的环境比如你把Ubuntu里装了一堆开发工具想原样搬到新机器。第二种是直接下载发行版对应的.appx或.msixbundle安装包。比如Ubuntu在微软商店页面上有对应的下载链接也可以用商店下载工具抓取到本地。对企业内网来说appx包更适合统一分发导入方式更适合保留个人配置。我建议这样选择如果是干净机器全新装优先用appx包或msixbundle安装简单如果是想把自己已经配好的开发环境迁移到另一台机器用wsl --export导出更省时。4.3 目标机器离线安装WSL本身在目标机器上首先需要以管理员身份打开PowerShell手动安装之前下载好的WSL MSI安装包。正常双击运行即可跟着向导下一步到底。安装完成后还需要手动启用Windows功能。如果之前没启用可以执行以下命令dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart执行完后重启系统。这一步相当于图形界面的“启用或关闭Windows功能”但离线机器上往往不方便手动操作用命令更稳。重启后如果需要把WSL 2设为默认版本执行wsl --set-default-version 2如果这条命令报错多半是WSL核心组件没装好回头检查MSI安装是否成功。4.4 离线安装Ubuntu发行版拿到appx或msixbundle包以后有两种安装方式。方式一直接双击安装。但需要确认系统里WSL核心组件已经装好否则会提示依赖缺失。方式二用PowerShell命令行安装更稳。以管理员身份打开PowerShell切换到安装包所在目录执行Add-AppxPackage .\Ubuntu.appx如果是msixbundle可能需要带依赖包Add-AppxPackage .\Ubuntu.msixbundle -DependencyPath .\Dependencies\x64\*.appx安装完成后开始菜单会出现Ubuntu图标点开即可初始化。如果手里是wsl --export导出的tar包那就用导入方式wsl --import 自定义名称 安装目录 tar包路径 --version 2比如wsl --import UbuntuDev D:\WSL\UbuntuDev D:\backup\ubuntu.tar --version 2导入后你会发现默认用户是root需要自己创建普通用户并设置默认用户。具体做法在第5章会讲。4.5 离线包版本匹配问题的排查离线安装常见的坑是版本不匹配。一个是WSL核心组件版本太老不支持某些发行版导出的版本表现为启动时提示“WSL版本过低”或“请求的功能未包含在旧版本中”。解决办法是确认WSL核心组件版本足够新尽量下载最新版MSI。另一个是发行版架构不匹配比如在ARM64设备上装了x64的appx包启动会黑屏或报错。下载离线包时务必确认目标机器的CPU架构是x64还是ARM64有些商店页面会同时给出不同架构的包别下错。还有一个容易忽略的地方Windows Server或Windows LTSC等精简版系统商店组件可能不完整Add-AppxPackage可能会失败。此时可以试试把msixbundle后缀改为.zip手动解压后找到里面的.exe安装器或者手动调用安装命令。这个技巧对很多内网机器很管用但不是所有版本都支持要根据实际反馈试验。5. 装完之后的初始化配置让终端真正能用5.1 创建用户和密码时的几个细节第一次启动Ubuntu时会提示输入新的UNIX用户名和密码。用户名可以任意小写字母组合不要带空格或特殊字符。密码不会回显这是Linux的正常行为不要以为键盘坏了。输入密码时尽量设置复杂一点因为WSL里的Linux系统在很多配置下会开放22端口或运行网络服务一旦局域网内有恶意扫描弱密码很容易被爆破。如果你跳过了用户创建直接以root身份在跑建议尽快创建一个普通用户日常操作不要所有任务都用root。创建命令adduser 用户名 usermod -aG sudo 用户名然后退出WSL重新进入用普通用户登录即可。这样万一误操作删除东西还有一层保护。5.2 软件源配置换一个速度更快的镜像源刚装完的Ubuntu默认使用官方源在一些网络环境下apt下载软件会很慢。这时可以把软件源替换成公共镜像源速度能提升好几倍。具体做法先备份原文件再编辑源列表文件。Ubuntu 22.04及之前文件路径是/etc/apt/sources.listUbuntu 24.04开始文件路径改成了/etc/apt/sources.list.d/ubuntu.sources格式也变了。以22.04为例执行sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak sudo sed -i s/archive.ubuntu.com/mirrors.aliyun.com/g /etc/apt/sources.list如果你用的是24.04文件格式变了建议手动编辑文件把原来的URL替换成公共镜像站的地址。替换完执行sudo apt update如果报错检查URL是否写错或者源文件里是否有重复行。我建议无论做不做镜像源先把apt update跑一遍确认基础软件源可用再继续下面的操作。5.3 更新系统组件刚装完的Linux发行版不一定是最新状态建议先更新sudo apt update sudo apt upgrade -y这个命令会更新软件包索引并升级所有可升级的软件。升级可能需要几分钟取决于网络。更新完重启终端基本环境就干净了。如果后面要装开发工具常用命令sudo apt install build-essential git curl wget vim net-toolsbuild-essential是编译工具链很多源码项目都需要git和curl是基础工具不用多说。vim是编辑器net-tools里包含ifconfig等老牌网络命令虽然现代Ubuntu推荐用ip命令但如果你习惯了ifconfig装一个也不亏。5.4 和Windows共享文件、用VS Code连进去WSL的特别之处在于文件系统互通。Windows的C盘在WSL里挂在/mnt/c比如Windows桌面的路径C:\Users\名字\Desktop在WSL里就是/mnt/c/Users/名字/Desktop可以直接访问。反过来WSL里的家目录也通过类似\wsl$\Ubuntu\home\用户名这样的路径访问Windows资源管理器地址栏输入即可。还有一个很常用的操作在Windows上装好VS Code然后在WSL里执行code .它会自动安装Remote-WSL插件并连接到当前WSL环境这样你就能在Windows的图形编辑器里编写代码命令行和编译全在Linux环境里执行。这也是我强烈推荐WSL的原因它把Windows的图形体验和Linux的工具链无缝结合比在虚拟机里折腾共享文件夹舒服太多。6. 内核升级、网络代理与存储位置管理6.1 更新WSL内核的方法WSL 2的内核由微软发布和普通Linux发行版内核更新机制不同。最简单的更新方式是执行wsl --update这个命令会从微软官方源下载最新WSL内核并安装执行完后可能需要重启WSL。也可以去微软GitHub Releases下载msi安装包手动更新适合离线环境。检查当前WSL版本wsl --version会显示WSL版本、内核版本等信息。如果版本偏低有些新功能可能用不了比如systemd支持就是较新版本才引入的。再说一个点新版WSL已经支持systemd如果你发现Linux发行版里没有systemd相关服务检查是否需要在/etc/wsl.conf里添加[boot] systemdtrue然后执行wsl --shutdown重启WSL服务管理就会正常。6.2 网络异常时的排查思路WSL 2的网络默认是NAT模式由Windows虚拟交换机管理。如果你在WSL里发现无法联网先检查宿主机网络是否正常。然后进入WSL执行ping 223.5.5.5如果IP能通而域名不通多半是DNS配置问题。可以检查/etc/resolv.conf或者编辑/etc/wsl.conf设置DNS。如果Windows里开了代理工具WSL里访问网络经常出现“代理未设置”导致失败。解决办法是在WSL里配置HTTP_PROXY和HTTPS_PROXY环境变量指向Windows宿主机IPexport http_proxyhttp://Windows本机IP:代理端口 export https_proxyhttp://Windows本机IP:代理端口需要注意的是WSL 2中访问Windows宿主机不能使用127.0.0.1需要找到Windows实际IP。可以用ip route show | grep default查看默认网关地址这个地址往往就是Windows宿主机在虚拟网络里的IP。6.3 把WSL迁移到其他磁盘省C盘空间很多人的C盘空间紧张装了几个发行版后发现快满了。WSL发行版默认放在C盘用户目录下的AppData\Local\Packages或Local\WSL目录里时间一长占用越来越大。处理方法是导出再导入。先关闭发行版wsl --shutdown然后导出到D盘wsl --export Ubuntu D:\wsl-backup\ubuntu.tar再注销原来的发行版wsl --unregister Ubuntu最后导入到新位置wsl --import Ubuntu D:\WSL\Ubuntu D:\wsl-backup\ubuntu.tar --version 2这样就把整个发行版迁移到了D盘。注意迁移后默认用户可能变成root需要手动设置默认用户。方法是在/etc/wsl.conf里添加[user] default用户名然后执行wsl --shutdown重启。迁移前一定备份别图省事直接删目录否则配置都没了后悔都来不及。我见过有人直接删了AppData下的WSL目录结果用了一年多的环境全部消失只能从头配。7. 常见问题与排查技巧实录7.1 安装到一半报错怎么办常见报错和解决方案我整理成一张表遇到问题先对照查报错信息常见原因解决办法0x80070003Windows功能未启用检查“适用于Linux的Windows子系统”和“虚拟机平台”是否都开启0x800701bc系统版本过低升级到Windows 10 2004以上或改用WSL 10x80370102虚拟化未开启BIOS里开启VT-x/AMD-V关闭其他占用虚拟化的应用WslRegisterDistribution failed发行版安装损坏重新安装发行版或wsl --unregister后再导入0x80072EFD网络连接问题检查代理设置确保能访问微软服务这些是我遇到次数最多的报错。遇到报错先别慌对照表格检查是最快的路径。很多时候只是Windows功能没勾选重启一下就解决了。7.2 WSL命令不存在或版本为0有时候执行wsl -l -v显示版本是0说明当前发行版被设置成了WSL 1模式。如果想切换为WSL 2wsl --set-version 发行版名 2如果提示版本不受支持先更新WSL内核组件再说。还有种情况是执行wsl命令提示“未安装”但商店里明明装了Ubuntu。很可能是系统缺少WSL应用本身需要单独安装WSL核心组件或执行wsl --install补装。这种情况在旧版Windows上更常见升级到新版后一般会消失。7.3 启动报0x80070003等错误这个错误在旧版本Windows上很常见本质是WSL功能组件没装全。处理方案重新打开“启用或关闭Windows功能”确认两个功能都勾选重启后再试。如果还是不行建议直接进管理员PowerShell执行dism.exe /online /cleanup-image /restorehealth然后重新安装WSL组件。不过如果系统镜像本身被精简过restorehealth可能也修复不了那就得考虑用离线安装包方案。会装离线包这招在这种场景下真的能救命。7.4 资源占用和性能问题WSL 2因为是轻量虚拟机会占用内存。默认情况下它最多可能使用宿主机50%内存如果内存小有点吃力。解决办法是创建%UserProfile%.wslconfig文件限制内存和CPU数[wsl2] memory4GB processors4 swap2GB保存后执行wsl --shutdown重启WSL生效。另一个常见问题是跨文件系统访问很慢。在WSL里频繁操作/mnt/c下的Windows文件时速度明显比在Linux原生文件系统里慢这是因为跨文件系统IO有额外开销。解决方法很简单项目代码尽量放在WSL的Linux文件系统里比如~/code目录而不是直接放在C盘上让WSL去访问。这个习惯养成后编译、启动服务速度会有明显提升。我记得有次帮同事排查一个Node项目启动慢的问题找了半天最终发现项目代码放在D盘、从WSL里通过/mnt/d跑每次编译都要读一堆文件速度慢得离谱。把代码挪到Linux家目录后启动时间从十几秒降到两秒内。最后再分享一个经验最后再分享一个我个人用了很久的习惯安装完WSL后我会同时装好Windows Terminal和VS Code并设置好Windows Terminal的热键和默认配置。这样日常开发时我几乎只在终端和编辑器之间切换很少需要鼠标去Windows资源管理器里找文件。小技巧很简单在Windows Terminal的设置里把默认配置文件改成Ubuntu字体用JetBrains Mono Nerd Font背景调成深色体验完全不输所谓的“原生开发机”。如果你要长期在Linux环境里折腾建议一开始就把环境配置干净至少把升级、换源、创建用户这几件事做完再安装开发工具。这套流程走完后后面的开发会轻松很多。
返回列表