做后端或者搞算法的人应该都体会过这种纠结主力机是Windows 11但代码得在Linux环境里跑。以前要么开个虚拟机要么装双系统各有各的折腾。我用WSL2加Ubuntu 22.04这套组合已经两年多现在日常开发、跑脚本、调模型基本都在这套环境里完成再也没为“要不要重装个Ubuntu”纠结过。这篇就把我从零搭建Windows 11下Linux环境的完整过程写出来包括怎么装、装完怎么配、遇到问题怎么排以及踩过的坑。内容覆盖从安装到进阶配置的完整链路适合刚接触WSL2的新手也让已经装好但用着不顺的人有地方参考。1. 为什么是WSL2它和虚拟机、双系统到底差在哪1.1 三种方案的使用场景对比很多人在选方案时第一个问题就是我用虚拟机不行吗非得WSL2我这些年三种方式都深度用过简单说说各自的定位。双系统适合那些需要完整硬件性能、要跑GPU训练、要做内核级开发的场景。但它最大的问题是切换成本必须重启进另一个系统两边文件系统互相访问别扭Windows和Linux的数据基本是割裂的。我当年装完双系统后实际使用频率越来越低因为每次重启实在太劝退。虚拟机比如VirtualBox、VMware的好处是隔离完整、不破坏宿主机适合当“一次性测试环境”或者跑不想要了随时删的系统。缺点是性能损耗明显尤其磁盘I/O和图形界面而且虚拟机里的Linux访问宿主机文件效率很低来回复制文件相当难受。WSL2走的是完全不同的路线它不是一个完整模拟器而是基于Windows自带的虚拟机平台跑一个轻量级Linux内核开机启动速度比虚拟机快一个量级内存占用也克制得多。更重要的是它和Windows原生共享文件系统你能在Windows资源管理器里直接打开Linux目录也能在WSL2里直接访问/mnt/c/下的Windows文件这种互操作体验是前两种方案给不了的。1.2 WSL2的架构优势与短板WSL2和WSL1的最大区别是底层架构。WSL1通过翻译层把Linux系统调用转成Windows调用兼容性有限WSL2则是一个真正的轻量虚拟机Linux内核在Hyper-V虚拟化平台里真实运行系统调用的兼容性接近原生这也是它能跑Docker、跑CUDA这类需求的基础。我个人的体感是日常写代码、跑Python、用Git、编译小项目WSL2的速度和原生Linux基本没有体感差异。就算跑一些重量级任务比如Maven构建、Node的Webpack打包比Windows原生环境还要稳定——因为路径转换、文件监听这些在原生Linux语义下更不容易出问题。短板也是真实存在的。首先是跨文件系统的I/O性能如果你把项目放在Windows目录/mnt/c/...下用WSL2里的工具构建速度会明显偏慢正确做法是把项目放在WSL2家目录下。其次是GPU和硬件直通能力有限虽然CUDA已经能跑但涉及USB直通、特殊外设时还是得用完整虚拟机或双系统。最后WSL2的网络默认走NAT模式和宿主机是两个网络栈个别场景比如局域网设备直接访问WSL2服务需要额外配置。一句话总结WSL2是“90%日常开发场景”的最优解但如果你要做硬件相关、完整桌面体验、极致的I/O性能那它替代不了双系统。想清楚这一点后面所有配置就都很顺了。2. 动手前先做三件事版本检查、BIOS虚拟化和Windows功能2.1 版本与硬件检查安装WSL2之前先确认系统满足条件这一步最多花两分钟但能省掉后面一大堆莫名其妙的问题。首先确认Windows 11版本。WSL2在Windows 11 21H2及以上版本里体验最完整一般只要系统更新到最新都没问题。在“运行”里输入winver可以快速看到版本号如果是22H2或者更新的版本放心往下走。其次是确认CPU虚拟化已经开启。打开任务管理器切到“性能”页签看CPU一栏是否有“虚拟化已启用”。如果没有显示“已启用”大概率是BIOS/固件里关了虚拟化功能Intel的VT-x或者AMD的SVM后面装WSL2会遇到“尚未准备就绪”之类的错误。还有一个容易忽略的检查点如果机器内存小于8GB建议开WSL2之前先掂量一下。WSL2默认会占用一定内存虽然能在.wslconfig里限制上限但内存只有4GB的老机器同时跑Windows和WSL2确实会比较紧张这种情况更推荐用WSL1。2.2 开启CPU虚拟化如果任务管理器里显示虚拟化未开启需要进BIOS设置。不同品牌主板入口不一样一般是开机时按Del或者F2但联想、戴尔这些品牌机也可能是F12或者Esc具体看开机画面提示。进BIOS之后找CPU配置相关的菜单Intel平台找Intel Virtualization Technology也有叫VT-x的AMD平台找SVM Mode改成Enabled保存退出。注意安全功能的名字容易混淆不要和VT-d搞混那个是I/O虚拟化WSL2依赖的是CPU虚拟化虽然一起打开也无妨。改完后回到Windows再确认一次任务管理器里的虚拟化状态。这一步如果没做对后面无论怎么折腾wsl --install都可能碰到系统提示虚拟化平台未开启的问题。2.3 启用WSL相关Windows功能Windows上有些可选功能默认是关闭的需要手动打开。这一步需要管理员权限的PowerShell或CMD。以管理员身份打开PowerShell依次执行下面两条命令dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart第一条是启用WSLWindows Subsystem for Linux基础功能第二条是启用虚拟机平台。执行完之后系统会提示重启一定重启一次再继续。这一步别跳过很多人后面遇到“WSL2尚未准备就绪”或安装内核失败回头查基本都是功能没开全。如果你用的是Windows 11较新版本wsl --install命令本身也会自动打开这些功能但如果你的系统之前改过可选功能或者从旧版本升级上来手动执行一遍更稳妥。反正也就两行命令的事。3. 正式安装从一行命令到Ubuntu 22.04跑起来3.1 用wsl --install装好底层Windows 11系统在满足前面的条件后安装WSL2比你想象中简单。还是在管理员PowerShell里执行wsl --install这条命令会帮你做完大部分事情启用需要的Windows功能、下载并安装WSL2内核、安装默认的Linux发行版通常是Ubuntu最新LTS。如果你不想装默认版本想直接指定Ubuntu 22.04那就用wsl --install -d Ubuntu-22.04首次执行完后重启电脑。重启后再打开终端系统会自动进入Ubuntu 22.04的初始化流程。这里多说一句旧版本的安装方式手动下载WSL包、手动装Ubuntu App已经不需要了新版本Windows 11全部走wsl --install就够。如果遇到下载慢或者中途失败多半是网络波动重试一次或者换个时间段再跑一般能过。3.2 安装Ubuntu 22.04并完成初始化重启后第一次启动Ubuntu 22.04会提示设置UNIX用户名和密码。这个用户名不需要和Windows用户名一致密码也随意但一定要记好后面用到sudo的次数太多了。设置完会直接进入Linux Bash提示符这时候可以做几件基础的事sudo apt update sudo apt upgrade -y sudo apt install -y build-essential git curl wgetbuild-essential包含gcc、g、make这些编译工具几乎是开发环境标配git和curl/wget就不多解释了装完基本就能开始干活。如果网络慢别急第4节有换源的方案。3.3 用命令确认安装结果装完别急着关先确认一下WSL2的版本和发行版状态。在Windows PowerShell里执行wsl --status wsl --list --verbose第一条能看到默认版本是否是2第二条能看到所有已安装的发行版列表以及它们的运行状态和存储占用。正常应该看到Ubuntu-22.04这一行VERSION列显示2。如果你发现VERSION是1说明发行版还在用旧的WSL1模式用下面命令手动转换wsl --set-version Ubuntu-22.04 2转换可能要花一两分钟等它提示转换完成就好。这里有个小技巧wsl --set-default-version 2可以把默认版本改成2以后安装新发行版时都默认用WSL2不用每次手工转换。4. 安装提速与踩坑实录下载慢、尚未准备就绪、网络异常4.1 下载慢的提速办法“wsl2下载慢”是我看到最多人问的问题之一。这里有两层含义一是wsl --install下载WSL2包慢二是Ubuntu 22.04每次apt update时从官方源拉取软件包慢。第一层慢通常发生在安装WSL2内核或者初始下载发行版时。这类下载走的是Windows系统组件下载渠道受所在网络环境影响较大没有太多本地控制的办法最实际的做法就是多试几次选择一个网络空闲的时段再装。安装包本身不大一旦下载完成进入安装阶段就基本不会卡了。第二层慢是日常使用中真正烦人的解决办法是把Ubuntu的apt源换成国内镜像。我习惯用清华TUNA或者阿里云的镜像速度稳定得多。以清华源为例先备份再替换cd /etc/apt sudo cp sources.list sources.list.bak sudo sed -i s//.*archive.ubuntu.com//mirrors.tuna.tsinghua.edu.cng /etc/apt/sources.list sudo apt update阿里云源同理把域名换成mirrors.aliyun.com即可。21.04之后版本的Ubuntu还引入了ports.ubuntu.com但22.04的x86_64版本用上面这条替换就够了。换完之后apt update的速度体感差别非常大。4.2 “wsl2 尚未准备就绪”的排查链路这个错误提示很经典出现的时候通常伴着无法启动任何发行版。我按实际排查顺序说一下第一步检查虚拟化是否真的开启了。有时候BIOS里改了但Windows快速启动或休眠导致内核状态异常直接重启电脑更有效。第二步在管理员PowerShell里执行wsl --update手动更新WSL2内核。这个操作会把内核更新到最新版本很多“尚未准备就绪”的问题就是内核版本太老导致的。第三步确认Windows相关功能没有被安全软件或系统策略禁掉。打开“启用或关闭Windows功能”看“适用于Linux的Windows子系统”和“虚拟机平台”两项是否都已经勾选。如果被勾掉了重新勾上并重启。第四步检查系统虚拟化状态systeminfo | find Hyper-V看到“Hyper-V要求: 已检测到虚拟机监控程序。将不启用Hyper-V”这类的提示一般没问题如果提示“固件中已禁用虚拟化”说明BIOS那一步还没做对。4.3 WSL2的网络配置异常处理WSL2默认网络模式是NAT虚拟网卡和宿主机不在同一个子网。大部分情况下这不妨碍使用因为你上网、apt update、访问远程服务器都是正常的。但有几个典型问题需要单独处理。一是WSL2里访问Windows上的服务一般直接用localhost就行WSL2做了NAT转发不用记IP。反过来如果Windows要访问WSL2里启动的服务比如开发服务器监听在某个端口通常也直接访问localhost即可新版WSL2对端口转发支持得比较好但偶尔会因为防火墙或Windows更新导致自动转发失效。遇到这种情况在Windows PowerShell里执行wsl --shutdown再重启WSL2往往就能恢复。二是WSL2里的时间不同步。如果你发现date显示的UTC时间和Windows对不上执行sudo hwclock -s让它与硬件时钟同步即可。三是DNS偶尔失灵导致能ping通IP但域名解析不了。检查一下/etc/resolv.conf如果里面是空的或只有一行奇怪的注释重启WSL2wsl --shutdown再启动一般就恢复了。这类网络问题本质都是WSL2作为轻量虚拟机的网络栈特性导致的绝大多数都能靠重启WSL2解决不用太焦虑。5. 存储优化把WSL2迁到D盘给C盘减负5.1 导出导入法迁移发行版WSL2默认把虚拟磁盘文件存在%LOCALAPPDATA%\Packages\...\LocalState\ext4.vhdx路径藏在C盘用户目录下。开发用久了这个vhdx文件能膨胀到几十GBC盘扛不住。我基本每半年就迁移一次流程非常成熟。先把WSL2正常关闭wsl --shutdown然后导出当前发行版为tar包wsl --export Ubuntu-22.04 D:\wsl-backup\ubuntu22.04.tar接着注销当前发行版注意注销会删除当前发行版的所有数据所以上一步的导出必须成功之后再继续wsl --unregister Ubuntu-22.04最后把tar导入到D盘的新位置wsl --import Ubuntu-22.04 D:\WSL\Ubuntu-22.04 D:\wsl-backup\ubuntu22.04.tar导入完成后发行版会被注册默认进入root用户文件也搬到了D:\WSL\Ubuntu-22.04。最后把之前的tar包删掉就行但建议保留一段时间确认一切正常再删。5.2 指定默认用户和磁盘瘦身用import方式迁移后的发行版有个典型问题默认登录用户变成了root之前那个UNIX用户还在但你每次打开终端都是root不习惯也容易误操作。解决办法有两种一是改配置文件在WSL2发行版内编辑/etc/wsl.conf加上[user] default你的用户名保存后重启WSL2默认用户就恢复了。二是在Windows侧用命令指定Ubuntu发行版自带配置ubuntu2204 config --default-user 你的用户名磁盘瘦身是另一个常被忽略的点。WSL2的vhdx文件只增不减你删了再多文件虚拟磁盘文件可能还是那么占用。压缩方法是关闭WSL2后在管理员PowerShell里用diskpart依次执行select vdisk fileD:\WSL\Ubuntu-22.04\ext4.vhdx attach vdisk readonly compact vdisk detach vdisk执行完后vhdx会尽量收缩到实际使用大小。我试过把60多GB的文件压回20多GB效果非常明显。5.3 配置Docker等其他数据目录如果你装了Docker Desktop且使用WSL2后端Docker的数据也会存在WSL2的发行版里C盘压力会更大。Docker Desktop本身在设置里可以改WSL2数据目录位置在“Settings - Resources - Advanced - Disk image location”把那里改到D盘。如果不用Docker Desktop而是直接在WSL2里装Docker Engine数据目录默认在/var/lib/docker一样在虚拟磁盘里。想单独指定Docker数据位置可以编辑/etc/docker/daemon.json把>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装完在WSL2终端里执行nvidia-smi如果能看到GPU信息说明环境已经通了。再配合PyTorch的CUDA版本就能直接在WSL2里训练模型。这里有个我踩过的坑在WSL2里编译CUDA项目时gcc版本别太低Ubuntu 22.04自带的gcc-11在多数情况下够用。如果编译报和CUDA版本不匹配的错优先考虑升级CUDA Toolkit到最新版而不是降gcc版本。6.2 Docker Desktop与WSL2集成在Windows 11上用Docker最顺滑的方式就是配合WSL2。Docker Desktop安装时可以选“Use WSL 2 based engine”安装完Settings里能指定哪些WSL发行版可以访问Docker。选好集成之后在Ubuntu 22.04里直接执行docker命令就能用相当于Docker引擎跑在WSL2内核上但命令行在Linux里执行这是很舒服的开发体验。Windows侧再配一个VS Code的Dev Containers插件就能做到完全在容器里开发。需要注意的一点是资源占用。Docker Desktop默认分配的内存等于总内存的一半如果开发机内存只有16GB开了Docker之后WSL2的Linux内存会紧张不少。在.wslconfig里手动限制一下[wsl2] memory6GB processors4 swap2GB保存后执行wsl --shutdown再启动限制就生效了。6.3 Kali Linux等其他发行版共存WSL2的一个明显优势是能同时装多个发行版互不干扰。我经常用Kali做安全测试安装同样是一行命令wsl --install -d kali-linux装完用wsl -d kali-linux指定进入Kali默认还是Ubuntu-22.04不带-d参数时进入默认发行版。如果想把Kali设为默认用wsl --set-default kali-linux多个发行版之间文件系统完全隔离但都能访问Windows文件。我自己的习惯是日常开发在Ubuntu 22.04安全工具类的东西放Kali两者共享Windows工作目录互不污染。7. 日常维护与善后更新、重置、备份和彻底卸载7.1 系统和软件包更新WSL2里的Ubuntu本质就是一个正版Linux日常维护节奏和物理机一样。最简单的更新sudo apt update sudo apt upgrade -y建议每周跑一次尤其Ubuntu 22.04这种长期支持版本安全更新要及时。要清理不再依赖的包sudo apt autoremove -y sudo apt clean这些维护做完虚拟磁盘文件里都是干净状态定期关闭WSL2再compact一次vhdxC盘占用会维持在一个很健康的状态。7.2 重置、备份和彻底卸载如果哪天把系统搞坏了不用重装Windows。先试重置在Windows的“设置 - 应用 - 安装的应用”里找到Ubuntu 22.04进入高级选项选择“重置”。这会恢复初始状态但你的数据也可能一起没了所以操作前一定要备份。备份用导出最好把整个发行版导成tarwsl --export Ubuntu-22.04 D:\backup\ubuntu.tar恢复则用wsl --import整个过程都是文件级复制不依赖任何备份软件很可靠。想彻底卸载顺序是先注销发行版再卸载应用wsl --unregister Ubuntu-22.04wsl --unregister会把虚拟磁盘文件一并删掉相当于格式化。然后再去“设置 - 应用”里卸载Ubuntu的App。要注意注册表和残留配置如果还想清理去%LOCALAPPDATA%\Packages\下找相关目录手动删除但除非洁癖一般没必要。7.3 几个让我省心的使用习惯最后分享几个纯经验层面的习惯都是折腾出来的结论。第一所有项目文件放在WSL2的家目录里而不是/mnt/c/下。跨文件系统读写慢的问题放在家目录后用任何编译工具、包管理器都更舒服。需要和Windows交换文件时用\\wsl$路径在Windows资源管理器里访问或者干脆用VS Code直接编辑WSL里的文件。第二给WSL2配置一套独立的Git SSH key别和Windows混用。这样在Linux和Windows下操作不同仓库时认证互不干扰也不会出现一个改动了公钥导致另一个环境失效的奇怪问题。第三不要试图在WSL2里跑桌面环境。虽然理论上能装xfce4之类的但体验真的不怎么样也会大幅增加内存负担。我见过有人把WSL2当轻量虚拟机用装了个完整桌面结果内存占用高到Windows都卡。WSL2适合的是终端工作流图形需求交给Windows本机各司其职效率最高。