资讯动态

WSL 2从装到用:版本选型、离线安装与Docker/CUDA开发配置

发布时间:2026/9/30 10:37:34 来源:尧图企业网站定制
1. 安装前先想清楚你需要的到底是WSL 1还是WSL 2我第一次接触WSLWindows Subsystem for Linux是好几年前的事了当时折腾双系统、虚拟机来回切换光在Windows里写个Linux命令都得开个VMware内存直接爆掉。后来微软推出WSL等于在Windows里原生跑一个Linux子系统不需要虚拟机那套虚拟化开销启动一个终端就能用上bash、apt、Ubuntu那一套东西。这个概念一出来我就知道Windows开发者的好日子来了。但很多人上来就问“WSL怎么装”其实WSL坑不多真正要命的是版本选择。WSL分两代WSL 1不是一个传统意义上的虚拟机它是通过翻译层把Linux系统调用转成Windows系统调用启动快、内存占用低但兼容性有限很多依赖内核模块的工具跑不起来。WSL 2则是真正跑在一个轻量级虚拟机里里面是一个完整的Linux内核Docker、CUDA、binwalk这类工具都能正常工作代价是首次启动慢一点、内存占用稍微高一点。1.1 两种版本的核心差异如果你只是偶尔用一下bash命令、跑跑shell脚本WSL 1够用。但只要你碰过这些场景——装Docker Desktop、做固件分析用binwalk、跑深度学习装CUDA、在WSL里跑conda环境——WSL 1马上就会成为瓶颈。最典型的问题是DockerWSL 1不支持完整的Docker守护进程很多教程会让你绕来绕去最后你还是得切到WSL 2。还有一个很多人忽略的差异文件系统性能。WSL 1访问Windows盘符下的文件速度比较快因为本身就是文件映射而WSL 2在访问/mnt/c这类跨系统文件时因为要走9P协议速度慢得让人抓狂。反过来WSL 2在自家Linux文件系统也就是/home、/root里读写速度吊打WSL 1编译源码、跑数据库、解压大文件体验完全是两个级别。所以我的建议很简单网站如果只是临时玩一下WSL 1可以试试只要你的目标是正经开发直接上WSL 2别走弯路。1.2 兼容性自查Win10、Win11、长期企业版到底行不行“Win10 长期企业版能用WSL吗”这个问题我被人问过无数次。先说结论能Windows 10 LTSC 2019及其以上版本都支持WSL只是老的LTSC版本默认带着的是WSL 1时代的内核你需要手动升级内核包才能用WSL 2。Windows 10 22H2、Windows 11全系都能通过一条命令把WSL 2装好差别只是系统设置界面长得不一样。检查方法很简单按WinR输入winver看到你的系统版本号同时打开“启用或关闭Windows功能”确认这三个东西的状态适用于Linux的Windows子系统虚拟机平台Virtual Machine Platform在Windows 11上还有一个“Windows虚拟机监控程序平台”。这三个是WSL 2能不能跑起来的关键。安装完WSL后如果提示“your version of windows subsystem for linux (wsl) is too old”基本就是内核版本太老或者是Windows功能没开全跟系统是不是正版没有半毛钱关系。1.3 虚拟机平台与BIOS虚拟化检查WSL 2是基于Hyper-V虚拟化技术的所以BIOS里的虚拟化开关必须开着。怎么检查打开任务管理器切到“性能”标签页右下角看“虚拟化”这一项显示“已启用”就OK。如果显示“已禁用”你需要重启进BIOS找到Intel Virtualization TechnologyIntel VT-x或AMD SVM Mode改成Enabled保存退出。这一步看着简单但踩坑的人特别多。有些品牌机的BIOS把虚拟化开关藏得很深甚至有些机型默认关闭还不显示。另一个容易忽略的地方是Windows Defender的内核隔离功能有些安全软件也会把虚拟化功能占住导致WSL 2启动失败报错信息五花八门。处理方式是先关掉所有第三方安全软件再打开“Windows安全中心-设备安全性-内核隔离-内存完整性”如果打不开就先关掉试。2. 从0到1三种最常用的WSL安装方式安装方式我分三条线讲标准安装、离线安装、第三方工具安装。大部分人卡在“wsl --install太慢”或者“wsl --update下载很慢”上本质都是网络问题。我不绕弯子直接给你能落地的方案。2.1 标准安装wsl --install 一条命令搞定Windows 10 22H2和Windows 11上最推荐的路径是管理员身份打开PowerShell或CMD然后执行wsl --install这条命令会自动开启WSL功能、虚拟机平台然后下载并安装默认的Ubuntu发行版。装完重启系统会让你设置Linux用户名和密码接着就进入Ubuntu环境了。如果你不想用默认版本可以先看有哪些可选发行版wsl --list --online然后指定发行版安装比如装Ubuntu 22.04wsl --install -d Ubuntu-22.04这里有个小细节很多人的wsl --list --online会卡住或超时爆出“wsl --list --online 连接超时”的错误。这不是你电脑坏了而是微软官方发行版列表服务器响应不稳定。你可以换思路直接指定已知可用的镜像名安装比如Ubuntu、Debian、kali-linux这些是内置默认的不依赖在线列表。2.2 离线安装没有网络或下载太慢时的救星离线安装排第一理由很简单——这是解决下载太慢、403、连接超时等一切网络问题的最终手段。WSL的发行版本质上是一个appx包你可以从微软官方商店页面或者第三方镜像站拿到离线安装包然后在本地解压安装。我在离线环境里装过Ubuntu 22.04步骤大致是这样找一台能正常下载的机器下载Ubuntu 22.04的appx包文件名类似Ubuntu2204-220513.1526.appx把appx复制到目标机器上后缀改成zip用资源管理器或tar命令解压解压后目录里有一个install.tar.gz或rootfs文件还有exe启动器打开PowerShell进入解压目录执行那个exe文件系统会把rootfs注册到WSL里接下来照常设置用户名密码。还有一种方式是用wsl命令直接导入rootfs。比如你有一个ubuntu_22.04_rootfs.tar.gz的根文件系统包可以这样做wsl --import Ubuntu2204 D:\wsl\Ubuntu2204 D:\path\to\ubuntu_22.04_rootfs.tar.gz --version 2注意用wsl --import导入的发行版默认是以root身份进入的下次想用普通用户登录可以这样指定wsl -d Ubuntu2204 -u root然后在系统里创建普通用户再设置默认用户。这个办法对网络环境特别差的机器最友好一次性把rootfs放到位。2.3 wsl --install太慢、403、连接超时的解决思路先明确一件事WSL官方安装过程会把文件从微软的CDN拉到你本地不同地区、不同运营商体验天差地别。我遇到过的情况包括wsl --install卡在0%或者每秒几十KB过半小时还在转wsl --update报“已禁止(403)”wsl --install -d ubuntu报403从raw.githubusercontent.com拉发行版清单时连接超时。处理这些我不会让你碰什么违规工具正经可用的路子有这几条。第一条用系统自带的“联机搜索更新”替换在线命令。微软把WSL内核更新做成了独立的msi安装包你可以下载这个msi包手动安装绕开wsl --update。装上之后WSL内核就是最新版那个“too old”的报错直接消失。第二条给官方域名换个DNS。很多连接超时其实是DNS解析到了错误的节点尤其是一些企业网络。把DNS改成公共DNS比如223.5.5.5阿里或8.8.8.8在PowerShell里用Resolve-DnsName测试一下能不能拿到微软相关域名的解析结果。实测下来换DNS能解决一部分启动慢、连接超时的问题。第三条如果你主要是想用某个发行版别死磕在线安装直接走离线包路线。离线包下载是走浏览器或下载器断点续传支持好你还可以用镜像加速地址下载速度比wsl --install那个进程稳定得多。这也是我每次帮同事排障时首推的路线省钱省时省脾气。还有一条冷门但有效的经验关闭IPv6。有些网络IPv6路由质量差WSL的在线安装反而被拖慢。在“网络设置-高级网络设置-更多网络适配器选项”里找到当前连接的网卡右键属性取消勾选“Internet协议版本6 (TCP/IPv6)”然后重试。这个办法没有科学依据背书但我在自己机器上试过确实有改善。3. 装完不是终点Ubuntu的基本运行与初始化WSL装好之后很多人以为就万事大吉了结果第一次打开Ubuntu终端就遇到各种报错或者根本打不开。这一节我把Ubuntu运行和初始化过程中最关键的几步拆开讲。3.1 首次启动与账号配置第一次启动Ubuntu系统会要求你设置一个Linux用户名和密码。注意这个用户名不需要和Windows用户名一致密码不会在你输入时显示别以为键盘坏了。这个用户名是你的普通用户默认有sudo权限日常操作就用它不要默认切到root。如果手滑把初始化流程关了或者想重新设置默认用户在Windows端打开PowerShell执行wsl -d Ubuntu -u root这样你能直接以root身份进入那个发行版然后编辑/etc/wsl.conf写入如下内容[user] default你的用户名保存退出后用wsl --terminate Ubuntu关掉实例再重新进入就会以普通用户身份登录。WSL的Linux子系统虽然跑在虚拟化环境里但它的rootfs默认放在Windows系统盘里通常是C:\Users\你的用户名\AppData\Local\Packages...这意味着你的Ubuntu会占用C盘空间。时间长了你会发现C盘莫名其妙少了几十个G。解决办法是把发行版迁移到其他盘用wsl --export和wsl --import将rootfs导出再导入到D盘或者用第三方工具比如LxRunOffline改安装目录。我个人的习惯是一开始就规划好C盘只放系统Linux子系统一律放D:\wsl目录下。3.2 换源与基础工具安装含binwalk安装Ubuntu装好之后第一件事永远是换软件源。默认官方源在国内速度惨不忍睹apt install一个包能等半天。我建议直接把源换成清华TUNA源或阿里云源。以Ubuntu 22.04为例备份原文件sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak然后用sed替换源内容或者直接编辑文件把http://archive.ubuntu.com/ubuntu/ 替换成https://mirrors.tuna.tsinghua.edu.cn/ubuntu/。换完源后执行sudo apt update sudo apt upgrade -y接下来安装基础工具。编译环境、网络工具、常用编辑器我一般一次性装好sudo apt install -y build-essential git curl wget net-tools vim tree这里单独说一下binwalk。binwalk是一个固件分析工具在安全研究和嵌入式开发里用得非常多很多跑WSL的人就是为了用它分析固件。安装很简单sudo apt install -y binwalk装完可以马上验证一下把固件文件放到WSL里运行binwalk 固件.bin它会自动扫描并列出文件中的嵌入式文件。但要注意binwalk的某些高级功能依赖Python模块比如sasquatch、jefferson等apt装的版本不一定带全如果你要做深度解包建议用pip再装一层pip install ubi_reader3.3 网络问题排查计算机无法连接到远程计算机“WSL计算机无法连接到远程计算机”这个问题我见过好几种触发场景一是你在WSL里ping不通外网二是Windows防火墙拦截了WSL的网络流量三是WSL 2的虚拟网卡和宿主机网络冲突导致无法互相访问。最简单的方法是先分别测试ping 127.0.0.1 ping 8.8.8.8 ping baidu.com如果127.0.0.1通、8.8.8.8通但域名不通大概率是DNS问题去/etc/resolv.conf检查一下nameserver或者在/etc/wsl.conf里加[network] generateResolvConf false然后手动设置DNS为223.5.5.5。注意改完要重启WSL实例才生效。如果Windows能ping通WSLWSL却连不上宿主机那多半是防火墙入站规则没有放行。在Windows上以管理员身份执行New-NetFirewallRule -DisplayName WSL -Direction Inbound -InterfaceAlias vEthernet (WSL) -Action Allow创建一条针对WSL虚拟网卡的入站规则问题一般就解决了。4. 高频场景实操从开发到工具链WSL最大的价值不只是当个Linux终端用而是能和Windows下的开发工具无缝配合。这一节我挑几个被问得最多的场景逐一演示。4.1 VSCode WSL命令行与编辑器的最佳组合“在vscode中使用wsl”是我看到最多的热搜词确实这也是WSL最爽的用法。微软在VSCode里做了Remote - WSL扩展装上之后你在Windows里启动VSCode可以一键连接到WSL里的Ubuntu环境编辑器界面看起来完全一样但所有操作都在Linux里执行文件路径是Linux路径终端是bash插件也可以单独装Linux版本。步骤非常简单在VSCode扩展市场搜索Remote - WSL并安装打开VSCode按CtrlShiftP输入“WSL: Connect to WSL”选择你要连接的发行版VSCode会重新加载左下角显示“WSL: Ubuntu”字样。连接成功后你在VSCode里打开文件夹选的是/home/yourname/xxx而不是C:\盘路径。这样做的最大好处是你在Windows里用VSCode的图形界面写代码但编译、运行、调试全部走Linux环境再也不用纠结Windows和Linux路径转换的问题。一个真实教训如果你要跑的是Python Web项目文件在Windows盘符比如C:\Users...下然后通过/mnt/c访问那性能会非常差因为WSL 2跨文件系统访问有额外开销。正确做法是把项目代码放在Linux文件系统里也就是/home/你的用户名/项目目录然后通过VSCode的WSL连接去操作。这样编译速度、文件监听、git操作都会有明显提升。4.2 字体推荐接近macOS体验的选择“wsl ubuntu写代码最推荐的字体接近macos的体验”这个热搜词我太熟了说明大家除了功能也开始关心颜值。在WSL的终端里写代码终端字体直接影响眼睛舒适度。Windows Terminal WSL是标配字体上我推荐这几个JetBrains Mono程序员友好字母区分度高圆角设计长时间看不累Cascadia Code微软官方出品Windows Terminal默认字体支持连字Sarasa Mono SC更纱黑体中英文混排首选中文显示效果接近macOS的苹方英文部分又是等宽字体最适合WSL写代码的场景SF Mono的替代方案如果你就是喜欢macOS终端里SF Mono那种细长、清晰的感觉可以找开源的SFMono替代包或者直接用Menlo的镜像字体。字体设置方法打开Windows Terminal按下Ctrl逗号打开设置在配置文件-默认值-外观里把字体脸font face改成Sarasa Mono SC字号建议12或14。设置完你会发现WSL里的ls、git log、代码缩进全部看起来清爽很多跟macOS终端的差距瞬间缩小大半。4.3 Docker Desktop与WSL 2集成“docker desktop there was a problem with wsl”这个问题属于高频中的高频。Docker Desktop现在默认用WSL 2作为后端如果WSL 2状态不对Docker Desktop会直接报错。先说正确姿势装好WSL 2和Ubuntu后再安装Docker Desktop安装过程中勾选“Use WSL 2 based engine”。这样Docker Desktop会创建一个名为docker-desktop的专用发行版你的Ubuntu里也能直接使用docker命令前提是打开Docker Desktop设置里的“Enable integration with my default WSL distro”。报“there was a problem with wsl”的常见原因和对策WSL内核版本太老去微软官方下载最新版WSL更新包装上重启Windows功能“虚拟机平台”没有启用去“启用或关闭Windows功能”里勾选发行版损坏执行wsl --shutdown然后重新启动Docker DesktopDocker Desktop和Docker引擎版本不匹配卸载后重装最新版。如果你不想用Docker Desktop也可以直接在WSL的Ubuntu里装Docker Engine。方法网上很多但注意WSL 2需要systemd支持。新版WSL默认开启systemd可以在/etc/wsl.conf里确认[boot] systemdtrue然后在Ubuntu里正常安装docker.io或docker-ce通过sudo service docker start启动守护进程。4.4 CUDA、conda与PyCharm把WSL当成正经开发环境WSL 2早就不是玩具了它支持NVIDIA GPU直通。在Windows上安装好NVIDIA显卡驱动不用在WSL里再装驱动然后在WSL里运行nvidia-smi如果能显示显卡信息说明GPU出来。CUDA这个场景WSL 2本质上是完整Linux内核所以你在WSL里安装CUDA工具链和Linux桌面一样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 -y cuda-toolkit装完后把CUDA路径加进.bashrcexport PATH/usr/local/cuda/bin:$PATH export LD_LIBRARY_PATH/usr/local/cuda/lib64:$LD_LIBRARY_PATH深度学习框架PyTorch、TensorFlow都能在WSL 2里直接跑GPU训练性能接近原生Linux。这也是为什么很多AI相关的工具链比如MOSS-VL、DeepSeek Harness、Codex、dsh等都能在WSL里顺畅运行。很多模型推理和微调工具要求Linux环境又不想舍弃WindowsWSL就是最折中的方案。conda环境同样没问题。去Anaconda官网下Linux版的Miniconda安装包在WSL里用bash安装然后正常创建conda环境。PyCharm也能直接识别WSL里的conda解释器在PyCharm设置里Project Interpreter → Add Interpreter → WSL然后选择WSL里的conda环境路径比如~/miniconda3/envs/项目名/bin/python。这样你就能享受Windows下PyCharm的图形界面同时用WSL里的conda环境跑脚本不需要来回切换系统。4.5 顺手一提Redis、网络服务和日常运维很多人跑WSL是为了本地开发时起Redis、MySQL、Nginx这些服务。Redis尤其典型在WSL里装和启动都很省心sudo apt install -y redis-server sudo service redis-server start redis-cli ping看到PONG就说明服务起来了。这里有个细节WSL 2里的服务默认监听的是WSL虚拟网卡的IPWindows宿主机可以通过wsl hostname -I查到WSL的IP然后用这个IP访问WSL里的服务。如果不想每次查IP可以配置端口转发或者直接用WSL 2的镜像网络功能新版Windows已经支持networkingModemirrored在.wslconfig里设置一下就行Windows localhost直接访问WSL服务体验好很多。5. 常见问题排查与卸载重装实录这一节我把WSL使用过程中翻车最多的几个问题整理成速查表顺便讲讲卸载重装的完整流程。5.1 “too old”提示、403、镜像拉取失败的组合处理很多老用户在运行wsl --update时遇到“已禁止(403)”之后再启动WSL就报“your version of windows subsystem for linux (wsl) is too old. run the command wsl --update”这种组合问题我处理过不止一次。原因其实是同一个WSL更新组件访问微软更新服务失败导致内核停在一个很老的版本。解决办法有两个方案A下载最新版WSL的msi更新包手动安装。安装包可以从微软的GitHub Release页面下载认准msi后缀在Windows上双击安装完成后运行wsl --version验证版本。方案B直接检查系统版本和Windows功能排除功能缺失的情况。有时候不是WSL老而是“虚拟机平台”功能没启用报错文案相同但本质不同。装上新版WSL之后403问题一般就消失了。如果还出现可以重置WSL网络组件管理员PowerShell执行wsl --shutdown然后netsh winsock reset重启电脑再试。5.2 MATLAB识别不到WSL的解决思路“matlab识别不到wsl”这个问题通常出现在你希望在MATLAB里调用WSL命令的场景。MATLAB的system()函数或!操作符可以直接调用系统命令但它在Windows下默认调用的命令解释器是cmd.exe不会自动去找WSL里的bash。解决方法是在MATLAB里显式调用wsl.exe。比如你想在WSL里执行ls可以写[status, cmdout] system(wsl ls -la);如果提示找不到wsl检查一下WSL是否真的装好、wsl.exe是否在PATH里。一般装好WSL后wsl.exe位于C:\Windows\System32\wsl.exe应该默认在PATH。如果还是不行把MATLAB工作目录切成Linux路径或者直接指定发行版名[status, cmdout] system(wsl -d Ubuntu ls -la);另外新版MATLAB支持在Live Editor里直接运行Linux代码块前提是你装了MATLAB的WSL支持包这个可以在Add-On Explorer里搜“MATLAB Support for WSL”装上后就能在MATLAB里直接选择WSL环境运行Linux命令比手动拼system命令优雅得多。5.3 WSL的卸载与清理卸载WSL分两个层面卸载发行版和卸载WSL功能本身。卸载某个发行版用wsl --unregister 发行版名。比如wsl --unregister Ubuntu注意这个命令会删除该发行版的所有文件包括rootfs和数据不可恢复。如果你想保留镜像先用wsl --export Ubuntu D:\backup\ubuntu.tar导出再执行unregister。卸载完成之后确认一下wsl --list应该看不到被卸载的发行版了。彻底卸载WSL功能在“启用或关闭Windows功能”里把“适用于Linux的Windows子系统”和“虚拟机平台”都取消勾选重启电脑WSL相关服务会被禁用。之后再删除C盘里残留的WSL数据目录路径在C:\Users\你的用户名\AppData\Local\Packages下搜“Ubuntu”或“WSL”相关的文件夹整个WSL就从系统里清掉了。我在实际重置时有个习惯先卸载发行版再wsl --shutdown最后把.wslconfig文件也删掉如果之前配过。这样可以避免旧配置残留导致重装后异常。5.4 .wslconfig进阶玩法与存档点.wslconfig文件是WSL 2的全局配置放在Windows用户目录C:\Users\你的用户名.wslconfig用来控制内存、CPU、网络模式等。我在配置多台机器时固定的最优参数是这样[wsl2] memory8GB processors4 swap2GB networkingModemirrored localhostForwardingtruememory控制WSL最大内存processors控制可用CPU核数swap指定交换空间大小。networkingModemirrored是Windows 11 22H2以上才支持的镜像网络模式它能让WSL直接共享Windows的网络接口localhost可以双向访问对于开发Web服务、跑机器人框架比如ROS都很有帮助。.wslconfig改完不是立即生效必须执行wsl --shutdown然后再启动WSL才会读取新配置。很多人在网上问“为什么我的.wslconfig没有效果”九成是没执行shutdown老实例还在跑自然不读新配置。让我最后分享一点实际体会我用WSL这些年最大的感受是它正在慢慢消解“Windows做开发环境不如Linux”这个老论调。以前我为了跑Linux工具链要么装双系统来回切换要么开着虚拟机吃到内存告警现在打开Windows Terminal输一行wsl就能进入UbuntuVSCode、Docker、CUDA、conda全部打通日常开发基本不需要离开Windows。如果你刚开始接触WSL我的建议是别贪多先把基础装好跑通一个真实项目再慢慢研究.wslconfig、离线包、容器化这些东西。网络出问题的时候记住“离线安装包”这个兜底方案就行它是我在无数个403和超时面前保下来的经验。WSL的世界里没有解决不了的安装问题只有还没尝试的替代路径。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑