
你可能已经在各种开发社区里反复看到过 WSL2 这个词它全称 Windows Subsystem for Linux 2说人话就是在 Windows 系统里直接跑一个真正的 Linux 内核不是模拟器也不是虚拟机而是微软把完整的 Linux 内核整合进了操作系统。这篇文章我会从零开始把下载 WSL2、完整安装、配置 Ubuntu、接上 Docker 和 CUDA、再把图形界面也折腾出来的整个过程讲清楚每一步都附上实际的命令和踩坑记录。如果你是第一次接触 WSL2跟着做就行如果你是在 Windows Server 2022 上或者从 WSL1 怎么都升不到 WSL2也能在这里找到对应的解法。1. 理解 WSL2本质、差异与适用场景1.1 为什么需要 WSL2它解决了什么问题以前在 Windows 上跑 Linux 只有三种路子装双系统每次重启切换装虚拟机VMware/VirtualBox完整启动一个图形化系统吃内存吃 CPU再就是装 Git Bash、Cygwin 这类模拟层工具只是长得像 Linux实际上不是。WSL2 的出现把这些问题基本都抹平了它启动只需要一两秒内存按需动态分配不占用额外 CPU而且因为是一个真正的 Linux 内核所以 apt、systemd、原生 Docker、CUDA 这些都能直接跑兼容性比 WSL1 那种翻译层方式高了一大截。我个人的体验是以前很多项目必须在云 Linux 服务器上跑本地 Windows 只用来写代码来回传文件、开调试端口效率低得让人抓狂。有了 WSL2 之后本地就可以当作一台低配 Linux 服务器开发、验证、部署脚本全在同一个环境里跑再也不用担心“我本机上能跑服务器上就挂了”这种玄学问题。对于做运维、搞后端、学数据科学的人这是 Windows 下最值得折腾的基础设施。1.2 WSL1 和 WSL2 的差异与选型建议WSL1 是把 Linux 系统调用翻译成 Windows 系统调用相当于一个兼容层所以启动极快跨文件系统访问也没什么障碍但有些依赖 Linux 内核特性的软件比如 Docker、需要 inotify 的框架跑不了或者行为奇怪。WSL2 则是用一个轻量虚拟机去跑真正的 Linux 内核兼容性大幅提升代价是跨文件系统读写性能有所下降、内存占用会随内核分配。对比项WSL1WSL2架构系统调用翻译层轻量虚拟机真实Linux内核启动速度极快快秒级启动Linux内核兼容性不完整完整跨文件系统性能较好明显下降Docker/GPU/CUDA不支持原生支持内存/CPU占用较低按需分配默认占满可达100%适用场景快速脚本、文件互操作服务端开发、容器、GPU计算现在新安装的 WSL 默认就是 WSL2不建议再装 WSL1。如果你手头已经有 WSL1 发行版可以之后用命令升级到 WSL2。后面第 3 章我会详细说明怎么切换。简单来说没有特殊历史包袱的情况下直接锁死 WSL2 就是最佳选择。2. 安装前的准备系统要求与下载选择2.1 先检查自己的 Windows 版本和支持情况在动手之前先确认系统版本是否支持。WSL2 要求 Windows 10 版本 1903 及以上且内部版本号在 18362 以上也就是 2019 年中以后的版本Windows 11 全系支持。Windows Server 2019/2022 也支持但需要一些额外步骤这个我放到第 5 章单独讲。按Win R输入winver就能看到版本和内部版本号。如果版本太低先把 Windows 系统更新到最新否则后面很可能遇到“无法安装”“找不到功能”之类的问题。另外需要确认 CPU 支持虚拟化。在任务管理器——性能——CPU 页面右下角找到“虚拟化”一栏显示“已启用”就说明 BIOS 里已经开好了。如果显示“已禁用”需要重启进 BIOS找到 Intel VT-x / AMD-V / SVM Mode 之类的选项打开。这一步很多人在最开始就忽略结果后面装好了 WSL2一启动发行版就报错“Please enable the Virtual Machine Platform...”折腾半天才发现问题是虚拟化开关没开。我建议动手前花一分钟看掉这个能省很多事。2.2 启用必要的 Windows 功能WSL2 依赖两个 Windows 功能适用于 Linux 的 Windows 子系统和虚拟机平台。在控制面板——程序和功能——启用或关闭 Windows 功能把这两个勾选上。也可以直接用 PowerShell管理员模式一次性执行dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart执行完重启系统。请注意VirtualMachinePlatform是 WSL2 专属系统里只有 WSL1 的话这个功能通常不会出现所以很多人从 WSL1 升级到 WSL2 失败根本原因就是没开它。开启之后再重新执行升级命令一般就能成功。2.3 下载 WSL2 的几种途径这里必须澄清一个概念WSL2 不是像 QQ 安装包那样的单个文件它由“功能组件内核更新包发行版镜像”三部分组成。所以“下载 WSL2”实际上可能涉及三个下载动作。第一种途径是通过应用商店下载发行版。打开 Microsoft Store搜索 Ubuntu选择你想要的版本比如 Ubuntu 22.04.3 LTS点击获取即可。商店里只下载发行版镜像底层运行所需的内核和功能组件由系统负责更新。第二种途径是下载 WSL2 内核更新包。微软官方提供wsl_update_x64.msi这个独立安装包专门用于 Windows 10 1903~1909 等无法自动获取内核的环境。下载后双击安装安装完成后需要打开 PowerShell 执行wsl --set-default-version 2这样后续安装的发行版就默认跑在 WSL2 上了。第三种途径是离线和批量部署场景比如内网机器没有外网。这种情况可以在联网机器上用wsl --export导出已经安装好的发行版为.tar文件然后在目标机器上用wsl --import导回。具体导入导出命令在第 5 章会展示。我的建议是不是特别老的系统就用最简单的wsl --install一条命令把功能、内核和默认发行版全部装好这也是微软现在推荐的方式。3. 一步步安装 WSL2 与 Ubuntu含完整命令细节3.1 全新安装一条命令完成 WSL2 Ubuntu如果你的 Windows 版本较新Windows 11 或更新过的 Windows 10可以在管理员 PowerShell 中运行wsl --install这条命令会完成三件事启用 WSL 功能、启用虚拟机平台、自动安装默认的 Ubuntu 发行版。默认安装的是最新 Ubuntu LTS 版本目前是 Ubuntu 24.04。安装结束后系统通常要求重启重启后自动弹出 Ubuntu 终端提示你创建用户名和密码。这个用户名不是 Windows 用户名是 Linux 内独立的账号注意别搞混。如果想指定版本可以在安装时用wsl --install -d Ubuntu-22.04如果想看商店里有哪些可用的发行版执行wsl --list --online输出里会列出 Ubuntu、Debian、kalilinux、openSUSE 等一堆名字。把名字对应到-d参数后面就能安装指定发行版。这个技巧在需要固定版本训练或验证环境时非常有用比如很多项目依赖 Ubuntu 20.04 的老版本 Oxygen 库直接装 22.04 可能会有兼容问题。3.2 手动安装老版本 Windows 或商店不可用的完整流程如果你的系统版本较老或者使用的是 Windows Server 2022默认没有 Microsoft Store即便打开商店也经常下载失败就需要手动完成每一步。流程如下第一步启用功能管理员 PowerShell 执行前面第 2.2 节里的两条dism命令重启。第二步下载并安装 WSL2 内核更新包从微软官方下载wsl_update_x64.msi双击完成安装。这个包只有十几兆主要解决老系统内核更新问题。第三步设置默认版本管理员 PowerShell 执行wsl --set-default-version 2如果命令成功会提示 “For information about key differences with WSL 2...” 之类的内容说明 WSL2 已经成为默认版本。如果报错大概率是虚拟机平台功能没开或者没重启回去检查一下。第四步安装发行版在 Microsoft Store 里安装 Ubuntu或者直接访问 Ubuntu 官网下载.appx/.appxbundle安装包。手动下载的包在 PowerShell 里用Add-AppxPackage安装。安装后用开始菜单打开 Ubuntu 图标完成初始化账号设置。整个过程会比wsl --install繁琐一些但胜在可控。尤其是 Server 系统上商店经常抽风手动下载.appx是最可靠的路子。3.3 安装指定版本的 Ubuntu20.04 和 22.04 怎么选WSL2 对发行版的版本支持是按需下载的所以才可能有“WSL2 安装 Ubuntu 20.04”“WSL2 安装 Ubuntu 22.04”这类搜索词。当前 Ubuntu 长期支持版本有 20.04、22.04、24.04。选哪款主要看你要跑什么发行版内核版本基础适用人群Ubuntu 20.04基于 20.04 LTS软件源成熟老项目、ROS Noetic、部分嵌入式工具链Ubuntu 22.04LTS兼容性更广大多数开发任务、深度学习环境、Docker 服务Ubuntu 24.04最新 LTS尝试新特性的场景但部分旧软件源可能没跟上我个人的建议是初次使用直接装 22.04这个版本经历了两年多的补丁踩坑资料最全。如果后面有特定需求再wsl --install -d Ubuntu-20.04装第二个发行版WSL2 完全支持多个发行版共存切换命令是wsl -d Ubuntu-20.04 wsl -d Ubuntu-22.04同一个内核上挂多个 Linux 环境互不干扰这种能力真的很适合测试软件在不同发行版上的行为。4. 装完别急着用环境配置与扩展重点4.1 检查 WSL2 状态和调整资源占用安装完成后先打开 PowerShell 跑两个命令熟悉下状态wsl --status wsl --list --verbosewsl --status会显示默认版本是不是 WSL2wsl --list --verbose会列出所有已安装的发行版并标明每个发行版当前是 VERSION 1 还是 VERSION 2。如果你看到的版本是 1可以用命令升级wsl --set-version Ubuntu-22.04 2升级过程可能需要一两分钟输出提示转换完成后这个发行版就跑在 WSL2 内核上了。内存占用是很多人抱怨的点。WSL2 默认“看到”多少内存就尽量用多少Windows 会被挤得内存吃紧。解决办法是在用户目录下创建.wslconfig文件路径类似C:\Users\你的名字\.wslconfig写入限制[wsl2] memory4GB processors4 swap0保存后在 PowerShell 里执行wsl --shutdown再重新进入 WSL2配置就生效了。这里的memory4GB表示最多给 WSL2 分配 4GB 内存processors4限制 CPU 核心数。如果你的机器内存只有 8GB建议把 WSL2 内存限制在 4GB 以内不然宿主机经常卡顿。4.2 在 Windows 环境里把 WSL2 和 Docker 组合起来Windows 环境安装 WSL2 和 Docker 的正确打开方式是安装 Docker Desktop并在设置里选择一个带有 WSL2 的集成方案。具体步骤第一步在 Windows 安装 Docker Desktop去官网下载 Docker Desktop for Windows安装时保持默认选项保证选中“Use WSL 2 based engine”。安装后 Docker Desktop 会自动检测 WSL2 环境并创建一个名为docker-desktop的 WSL 发行版。第二步在 Docker Desktop 设置里开启 WSL 集成进入 Settings → Resources → WSL Integration把你要使用的发行版比如 Ubuntu-22.04开关打开。这样在 WSL2 里面直接敲docker命令就会走 Windows 上 Docker Desktop 的引擎不需要在 Linux 里再单独装一套 Docker。第三步验证在 Ubuntu 终端里执行docker --version docker run hello-world能正常输出版本和运行信息就说明 Docker 环境已经通了。如果你不想用 Docker Desktop也可以在 WSL2 内部直接安装 Docker Enginesudo apt update sudo apt install docker.io sudo systemctl enable docker --now这种方式的好处是不依赖图形界面程序资源占用略低缺点是 Docker 容器端口映射和 Windows 防火墙配置要自己管。我现在的习惯是日常开发用 Docker Desktop 集成跑资源敏感的任务时直接在 WSL2 内启动 Docker灵活切换。4.3 在 WSL2 中安装 CUDA让显卡真正跑起来WSL2 一个被严重低估的能力是原生 GPU 加速。只要 Windows 上安装的 NVIDIA 驱动版本足够新460.89 及以上并且完成 CUDA on WSL 的配置WSL2 内部就能直接使用显卡计算不需要在 WSL 里单独安装显卡驱动。这个特性对做深度学习、跑 Stable Diffusion、或者搞 CUDA 编程的人非常实用。第一步在 Windows 侧安装 NVIDIA 驱动注意这里说的是 Windows 版本驱动不是 Linux 版本。到 NVIDIA 官网下载对应型号的 Windows 驱动装好即可。装完在 Windows 命令行里执行nvidia-smi能看到显卡信息和驱动版本就说明基础环境就绪。第二步在 WSL2 里安装 CUDA Toolkit进入 Ubuntu安装官方提供的 CUDA Toolkit for WSL2wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-keyring_1.0-1_all.deb sudo dpkg -i cuda-keyring_1.0-1_all.deb sudo apt-get update sudo apt-get install -y cuda-toolkit安装过程比较大建议网络环境可靠时一次性装完。如果只做推理不需要编译可以装上更轻量的cuda-toolkit子集或直接用 conda 里的 CUDA 运行时。第三步验证 GPU 能力nvidia-smi在 WSL2 终端里如果能看到和 Windows 侧一致的显卡信息说明 GPU 已经被 WSL2 认出来。用 Python 测试一下import torch print(torch.cuda.is_available()) print(torch.cuda.device_count())能输出True就说明 CUDA 环境完全跑通了。实际使用中我踩过最大的坑是 Windows 驱动更新后WSL2 内部的 CUDA 相应版本不匹配这时候只需要重新安装一次 CUDA Toolkit让它随驱动版本自动对齐。4.4 给 WSL2 配上图形界面从 WSLg 到 X11 转发很多人以为 WSL2 只能敲命令其实它也能跑图形程序。Windows 11 自带 WSLg安装完 WSL2 后无需任何配置直接在终端里敲code .或者启动一个 Linux GUI 应用窗口就会弹出来。Windows 10 用户则需要用 X 服务器配合环境变量来实现。Windows 10 的教程我实测过流程如下第一步在 Windows 侧安装 VcXsrv下载安装 VcXsrv启动时注意勾选“Disable access control”否则 WSL2 里的图形程序会因为权限问题连不上。第二步在 WSL2 里配置 DISPLAY 环境变量在~/.bashrc末尾加一行export DISPLAY$(cat /etc/resolv.conf | grep nameserver | awk {print $2}):0.0保存后执行source ~/.bashrc。这里的原理是WSL2 使用 NAT 网络Windows 侧的 X 服务器在网关 IP也就是/etc/resolv.conf里的 nameserver上监听。第三步安装并启动图形软件以 GIMP 为例sudo apt update sudo apt install gimp -y gimp这样就能看到 GIMP 图形界面弹出。这个方法在 Windows 10 上跑 Linux 桌面应用非常实用比如 RStudio、Blender、Qt 程序都能用。不过需要注意性能和缩放表现高 DPI 屏幕下部分应用会有点模糊这是 X11 转发的固有问题没法完全根治。如果图形程序用得频繁我建议升级到 Windows 11用 WSLg 体验好得多。5. 高频问题排查从 WSL1 升不到 WSL2 到 Server 2022 的坑5.1 已有 WSL1怎么都切不到 WSL2 怎么处理“WSL1 改不成 WSL2”是我看搜索记录里出现频率很高的一个说法。一般表现为执行wsl --set-version Ubuntu-20.04 2等了很久之后提示Conversion in progress... Please enable the Virtual Machine Platform Windows feature and ensure virtualization is enabled in the BIOS.或者干脆卡住不动。原因基本是三个虚拟机平台功能没启用、BIOS 虚拟化没开启、内核更新包没装。解决顺序是确认虚拟机平台已启用管理员 PowerShell 跑dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart然后重启。确认 BIOS 虚拟化已开启任务管理器里查看“虚拟化”是否“已启用”。确认内核更新包已装打开“应用和功能”搜“Windows Subsystem for Linux”看能否看到内核版本信息。没有就下载wsl_update_x64.msi装上。还有一个冷门原因发行版系统盘空间不足。转换过程需要一点额外空间如果系统盘快满了就跑到一半失败。清理一下磁盘再重试就能过。5.2 Windows Server 2022 上安装 WSL2 的额外细节Windows Server 2022 装 WSL2 比客户端系统要麻烦一些。这个系统默认没有 Microsoft Store即使手动打开商店也可能因为依赖问题无法使用。我在 Server 上装 WSL2 的实测流程是第一步安装功能管理员 PowerShellInstall-WindowsFeature -Name Microsoft-Hyper-V, Containers接着与第 2.2 节相同启用 WSL 和虚拟机平台功能dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart重启。第二步手动下载发行版包由于 Server 上没有商店需要在有网络的机器上从微软网站下载 Ubuntu 的.appx包比如用浏览器打开 Ubuntu 在 Microsoft Store 页面里的官方下载链接把.appx后缀改为.zip解压然后在解压目录执行.\ubuntu.exe install或者直接用Add-AppxPackage .\Ubuntu.appx就能把发行版注册进去。第三步设置版本照旧执行wsl --set-version Ubuntu-22.04 2。Server 2022 上最容易犯的错是跳过了VirtualMachinePlatform功能直接去跑--set-version 2结果一直失败。先确认两个功能都启用再谈升级。5.3 迁移发行版位置和备份还原WSL2 的发行版默认安装在 C 盘用一阵子之后体积可能膨胀到几十 GB把系统盘挤爆。我强烈建议从初始阶段就把发行版迁移到其他盘。流程先终止要迁移的发行版wsl --shutdown导出当前发行版为 tar 文件wsl --export Ubuntu-22.04 D:\wsl-ubuntu.tar从 WSL 中注销当前发行版wsl --unregister Ubuntu-22.04再导入到目标目录wsl --import Ubuntu-22.04 D:\WSL\Ubuntu-22.04 D:\wsl-ubuntu.tar导入后注意默认用户会变成 root。可以通过在 WSL 里修改/etc/wsl.conf加入[user] default你的用户名让下次启动切回普通用户。这个方法也是备份和还原的万能解法我在重装系统前一定会把重要发行版先导出。5.4 网络访问与文件共享的几个小经验WSL2 是 NAT 网络IP 地址每次重启都会变。因此从 Windows 访问 WSL 里的服务推荐直接用localhostWSL2 会自动把 Windows 的端口请求转发到 Linux。也就是说你在 WSL2 里跑了一个 8080 端口的服务浏览器里访问http://localhost:8080就能打开。从 WSL 访问 Windows 文件非常方便直接通过/mnt/c、/mnt/d挂载点即可。反过来从 Windows 访问 WSL 文件系统打开文件资源管理器输入\\wsl$就能看到所有发行版可以像普通网络路径一样拖拽文件。这种方式适合小文件传输大批量读写推荐放在 Linux 文件系统内部完成比如/home/用户名/下因为跨文件系统的 IO 性能差很多。还有个常见坑是防火墙拦截。在 WSL2 里启动服务后局域网其他电脑直接访问Windows 的局域网 IP 端口可能不通。原因是虚拟网卡防火墙规则。需要在管理员 PowerShell 里添加端口规则或者临时关闭专用网络的防火墙测试。这个行为取决于你所在网络的安全策略内部开发环境可以用公网环境务必谨慎。6. 一些私货我的避坑清单和最终建议WSL2 我已经用了两年多踩过的坑比写出来的还多最后分享几条真实体会第一条遇到奇怪的问题先执行wsl --shutdown再重进。这个命令能清掉 WSL2 的所有运行时状态多数“突然连不上网络”“程序卡死”“磁盘占用突高”都能靠它解决。它比重启电脑快得多也是排障的第一步。第二条不要把自己困在 WSL2 里当 Windows 的“二等公民”。WSL2 的文件系统、网络、虚拟化特性已经足够成熟完全可以把它当主力开发环境。如果你依赖 Windows 的图形工具就用 VS Code 的 Remote-WSL 插件把编辑器留在 Windows 侧运行环境放 WSL2 里两边都舒服。第三条.wslconfig是性能调优的关键。没设置任何限制时WSL2 会默认占用大量内存尤其是跑 Docker 或大型构建时Windows 会卡到怀疑人生。花两分钟写一个限制配置文件绝对值回票价。第四条发行版数据及时导出。WSL2 的发行版就是一个普通 Linux 文件系统重装系统前不导出数据就全没了。我把wsl --export当成日常备份习惯平时多几个 GB 的 tar 包关键时刻能救命。关于 WSL2 本身后续还可以继续扩展很多内容比如直接在这个环境里跑 systemd 服务、用 Ansible 批量管理、挂载磁盘、配置多用户都是很好的方向。但你不需要一次性搞定所有东西先把这篇文章里的安装、Docker、GPU、图形界面这几个环节走通就已经能覆盖百分之八十的开发场景了。如果安装过程中遇到我这里没写到的报错先看 Windows 版本和功能状态再看 BIOS 虚拟化最后查内核更新包九成问题都出在这三处。