
WSL 这东西属于那种一旦用上就回不去的工具但它的安装和迁移过程也是我这些年被问到最多的问题之一。尤其是WSL 默认安装目录这一环——很多人一开始随手wsl --install用着挺爽直到某天发现 C 盘只剩 8 个 G才想起来找那个几十个 G 的ext4.vhdx到底藏在哪。这篇就把 Win10/11 下安装 WSL、以及把 WSL 默认安装目录挪到其他盘这条链路从头到尾捋一遍包含命令行装法、离线包装法、整体迁移、配置调优和一堆踩过的坑。不管你是刚听说 WSL 的新手还是想给已有的 Ubuntu 发行版搬家都能直接照着做。1. 先弄明白 WSL 把数据放在哪C 盘为什么会被吃掉1.1 WSL1 和 WSL2 在磁盘上的本质差别WSL1 和 WSL2 完全是两套东西这一点决定了你的磁盘会不会被撑爆。WSL1 本质上是一层系统调用翻译层它没有真正的 Linux 内核文件是直接以 Windows 文件的形式存在磁盘上的所以你打开资源管理器是能看到一堆散装文件的容量增长比较温和但也因为如此它对inode、fork、epoll这些语义支持得不够完整很多工具跑起来会有莫名其妙的报错。WSL2 换了思路它跑的是一个轻量级虚拟机里面跑真正的 Linux 内核根文件系统躺在一个虚拟硬盘文件里也就是大家常说的ext4.vhdx。这个 vhdx 是动态扩展的你用多少它长多大但它几乎不会自动缩回去。删掉 20G 的编译产物vhdx 大小往往还是原来那样。所以WSL 吃 C 盘这个印象九成来源于 WSL2。再叠一层现实因素apt install装 CUDA 工具链、docker pull拉镜像、binwalk解一个几百兆的固件包这些动作都会在 vhdx 里堆出大量碎片和小文件。一个做嵌入式解包的发行版半年长到 60G 是常有的事。1.2 默认安装目录到底藏在哪这个问题的答案取决于你是怎么装的现在主要有两种形态。第一种你用的是商店版 WSL也就是微软现在主推的、可以通过wsl --update更新的那个版本wsl --install -d Ubuntu-22.04装出来的发行版通常落在C:\Users\你的用户名\AppData\Local\wsl\{一串GUID}\ext4.vhdx第二种你用的是带 Windows 内嵌组件的旧版 WSL通过 Microsoft Store 单独安装 Ubuntu 这类发行版那路径一般是C:\Users\你的用户名\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu22.04LTS_79rhkp1fndgsc\LocalState\ext4.vhdx中间那串包名每家发行版都不一样Debian、Kali、openSUSE 各有各的标识符肉眼很难记住。与其背路径不如学会自己查。注册表里HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss下面每个子项对应一个已注册的发行版里面的BasePath值就是它的落脚点直接复制到资源管理器地址栏就能打开。这是最稳的定位方式不依赖你当初是怎么装的。注意wsl -l -v只能告诉你发行版名字和 WSL 版本看不了路径。查路径走注册表或者直接按上面的目录结构找。1.3 哪些情况必须把发行版挪出 C 盘不是所有人都需要搬家我大概总结几种必须挪的场景。一是系统盘容量本身就紧张比如 256G 的笔记本、或者系统盘是 SSD 但分区只给了 100GWSL 一长起来就直接告急。Windows 系统盘一旦剩余空间低于 10%页面文件、系统更新、临时文件都会开始出问题这时候就不是美观问题了而是稳定性问题。二是你要跑重负载的开发环境。装 CUDA 全套、跑 Docker Desktop 的 WSL 后端、在发行版里做大模型相关的推理环境、或者用 MATLAB 去调 WSL 里的解释器这些都会带来几十 G 级别的占用。三是你经常需要重装系统。把发行版和数据放在 D 盘甚至独立的数据盘上重装 Windows 之后重新注册一下就能接着用省掉一整天的环境重建。四是公司电脑有 C 盘配额管理比如强制限制用户目录大小超过就报警甚至限制登录。如果你刚好对上其中一条那下面的迁移流程就是为你准备的。如果 C 盘宽裕得很那也可以只看安装部分把迁移当知识储备。2. 装 WSL 之前的准备工作和几条可走的路线2.1 硬件虚拟化和系统版本这两道门槛WSL2 要跑虚拟机所以有两条硬性条件必须先过。第一条是CPU 虚拟化。开机进 BIOS/UEFI把Intel VT-x或者AMD-V有的板子写的是 SVM Mode打开。判断有没有开任务管理器 → 性能 → CPU右下角会显示虚拟化已启用或已禁用。如果显示已禁用后面的所有步骤都会卡在 0x80370102 这个错误码上别硬扛先去 BIOS 改。第二条是系统版本。WSL2 在 x64 上要求 Windows 10 版本 1903 及以上内部版本 18362ARM64 上要求 2004 及以上。这个版本指的是 build 号不是营销名winver命令一看便知。这里插一句企业版/LTSC 的问题因为问的人特别多Windows 10 LTSC 20191809只支持 WSL1装不了 WSL2LTSC 202121H219044则完整支持 WSL2。如果你在 LTSC 2019 上折腾wsl --install大概率会看到一堆莫名其妙的报错先确认自己的 build 号再动手。Windows 11 全系都没问题。还有一个容易被忽略的点老版本的 WSL2 需要额外安装适用于 Linux 的 Windows 子系统更新程序内核更新包。新版 WSL 已经把内核打包进主程序了但如果你在旧系统上装可能还是需要这一步。微软官方的短链是https://aka.ms/wsl2kernel直接下载 msi 双击安装即可。2.2 一次搞定wsl --install 的完整流程环境确认没问题之后最简单的一条路就是官方一把梭。以管理员身份打开 PowerShell 或 Windows 终端执行wsl --install这一条命令会帮你做完三件事启用适用于 Linux 的 Windows 子系统可选组件、启用虚拟机平台组件、下载并安装默认的 Ubuntu 发行版。执行完之后必须重启电脑这一点很多人漏掉然后抱怨wsl命令不存在。重启之后系统会自动拉起 Ubuntu让你设置用户名和密码设完就进系统了。如果你想指定发行版可以这样# 先看看有哪些能装 wsl --list --online # 装指定的 wsl --install -d Ubuntu-22.04如果你是先装好 WSL 主体、以后再补发行版或者只想启用功能不装发行版可以手动走# 启用两个必需组件 dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart # 重启后设置默认版本为 WSL2 wsl --set-default-version 2wsl --set-default-version 2这一步很关键。如果不设某些情况下导入的发行版会默认落到 WSL1 上到时候你发现自己装的东西行为和教程不一样排查半天才发现是版本问题。提示wsl --set-default-version 2只影响之后注册的发行版。已经存在的发行版要单独转换用wsl --set-version 发行版名 2转换过程可能要几分钟别中途关窗口。2.3 命令走不通时离线包与手动启用的两条退路现实里wsl --install经常不顺热词里那几个高频报错基本都出在这一步。我按现象分三类说。第一类403 已禁止。这个报错的意思是下载请求被网络策略挡回来了跟你的 WSL 本身没关系。常见于公司网络有出口白名单、或者运营商侧有缓存劫持。处理方式很朴素换个网络环境试比如用手机热点跑一次或者直接放弃在线下载走离线路线下面讲。第二类--list --online连接超时、--update下载极慢。本质还是同一个问题——要联网拉包。同样的思路能换网络就换不能换就走离线。第三类your version of windows subsystem for linux (wsl) is too old。这个提示通常是某个工具在调用 WSL 时发现你的 WSL 主体版本太老。解决方向是更新 WSL 主体wsl --update如果在线更新走不动就去 GitHub 上microsoft/WSL仓库的 Releases 页面手动下载最新版的安装包现在是 msi 格式双击装上。这条路绕开了命令行下载成功率明显更高。至于完全离线安装发行版这是我最推荐的兜底方案因为一次准备好以后重装系统都能用。步骤分三步第一步从微软官方渠道下载发行版的 AppxBundle 包。比如 Ubuntu 22.04 的官方下载短链是https://aka.ms/wslubuntu2204下载下来是个类似Ubuntu_2204.x.x.x_x64.appx的文件。Debian、Kali 也都有对应的官方短链。第二步把这个.appx文件改后缀为.zip用解压软件打开里面会有一个install.tar.gz这才是真正的根文件系统包把它解压到一个你规划好的位置例如D:\wsl-pkgs\install.tar.gz。第三步在管理员 PowerShell 里直接导入wsl --import Ubuntu-22.04 D:\WSL\Ubuntu-22.04 D:\wsl-pkgs\install.tar.gz --version 2这样装出来的系统从第一天起就在 D 盘压根不需要迁移。代价是没有经过商店的初始配置流程进去默认是 root 用户需要自己建普通用户这个后面 3.4 节会讲清楚几分钟的事。注意AppxBundle 改成 zip 解压这招只对官方分发的包有效。解压出来如果找不到install.tar.gz说明你下的是别的格式别硬凑换回官方短链重下。2.4 发行版怎么选Ubuntu 22.04 是不是最优解现在wsl --list --online里能看到的选项不少Ubuntu 各个 LTS 版本、Debian、Kali、openSUSE、Oracle Linux 等等。选哪个我的建议是按用途来。做通用开发、查资料最方便、社区文章最多的还是Ubuntu 22.04 LTS或者 24.04 LTS。区别在于 22.04 的软件源里各种包版本更保守、兼容性经过长期验证CUDA 工具链、Docker 官方文档、各类教程默认也都是按它写的24.04 更新但偶尔会遇到第三方仓库还没跟上。所以求稳就 22.04求新就 24.04。需要跑安全测试类工具的Kali 官方版可以直接装。想要贴近生产服务器环境的Debian 很合适只是默认软件源里的包版本偏老。CentOS 那条线现在官方已经转向了WSL 里想装旧版 CentOS 8 通常得走第三方打包或者自己用 tar 导入不是首选除非你有明确的兼容需求。还有一个容易被忽视的点发行版名字里带不带版本号会影响你后面所有脚本的写法。Ubuntu和Ubuntu-22.04是两个不同的注册名wsl -d Ubuntu-22.04 -u root这种命令在没装对应名字的机器上会直接报错。我自己习惯统一带版本号命名多台机器之间脚本可以直接复制。3. 迁移实战把已有的发行版整体搬到 D 盘如果你已经用了很久、C 盘告急那核心思路只有一句话导出成 tar 包再导入到新位置。这个方式官方支持、跨版本通用、还能顺便当备份用。3.1 动手前必做备份、清理、记录信息别急着敲命令先把三件事做了。第一记录关键信息。至少记下发行版的准确名字wsl -l -v的输出、WSL 版本1 还是 2、当前默认用户是谁进去之后whoami。这几条信息决定了导入之后能不能顺利恢复成原来的样子。第二先清理再导出。tar 导出会把整个文件系统打个包里面有多少垃圾就导出多少。花五分钟清理一下非常值得# 清 apt 缓存 sudo apt clean sudo rm -rf /var/lib/apt/lists/* # 看看到底谁在占空间从大到小排 sudo du -h --max-depth1 / | sort -hr | head -20 # 如果你用 docker清一下无用镜像和卷 docker system prune -a第三确认目标盘的文件系统。D 盘必须是 NTFS。不要放进 exFAT、FAT32 的分区也不要用 OneDrive 同步目录、网络映射盘。exFAT 不支持 Linux 的权限和符号链接语义导入时直接失败OneDrive 会尝试同步那个几十 G 的 vhdx 并反复锁文件导致 WSL 启动失败网络盘延迟高跑起来卡到怀疑人生。还要避开带中文或空格的路径虽然多数情况下能跑但某些工具链处理路径时会出问题徒增排查成本。顺带说一句如果你打算长期用建议在 D 盘建一个专门的目录比如D:\WSL\下面按发行版名分子目录。将来发行版多了一眼能看清。3.2 导出wsl --export 的正确用法与体积优化导出前先彻底关掉 WSL否则可能导出到一半文件被占用wsl --shutdown然后执行导出在 PowerShell 或 CMD 里不要在 WSL 内部执行wsl --export Ubuntu-22.04 D:\wsl-backup\ubuntu-2204-20250601.tar几个实操细节值得说清楚。导出体积和 vhdx 体积不是一回事。tar 打包是按文件系统内容来的会跳过块设备里那些空洞而 vhdx 是块级的删掉文件后空间可能还占着。所以经常出现vhdx 有 50Gtar 只有 28G的情况这是正常的不是文件损坏。反过来也有如果你装了 CUDA 这种带大量硬链接的工具链tar 不做去重包可能比你想的大。导出耗时和磁盘类型有关。我的经验是50G 左右的发行版从 NVMe 导出到 NVMe 大概 3 到 6 分钟导出到机械盘会明显慢很多可能十几分钟。这个过程没有进度条窗口看着像卡住了实际上在跑。千万别手贱点关闭中断之后只能重来。建议不要只留一份。导出的 tar 就是一份完整的系统快照把它当成版本备份非常划算。我一般会保留一个干净基线版本刚配好开发环境、还没装乱七八糟东西的那个状态以后环境被搞坏了直接用这个基线覆盖回去比排查问题快得多。注意导出过程中的路径不要写到系统盘。很多人习惯性把备份放桌面结果 C 盘先炸了逻辑上有点滑稽。3.3 导入wsl --import 参数逐个拆解导出成功、确认 tar 文件大小合理之后就可以导入到新位置了。命令结构是wsl --import 发行版名 安装位置 tar文件路径 [--version 2]对应实际写法wsl --import Ubuntu-22.04 D:\WSL\Ubuntu-22.04 D:\wsl-backup\ubuntu-2204-20250601.tar --version 2三个参数分别解释一下每个都有坑。第一个参数是发行版名。这里有个必须提前想清楚的问题如果你导入的名字和现有的完全相同会发生什么答案是注册表项会被覆盖原来那个发行版的注册信息就没了而 C 盘上原来的ext4.vhdx会变成一个没人管的孤儿文件继续占着空间。所以我的建议顺序是先wsl --export导出并确认文件正常再wsl --unregister Ubuntu-22.04注销旧的这一步会删掉 C 盘的 vhdx然后用原名字wsl --import导入到新位置。如果你心里没底也可以换个名字导入比如Ubuntu-22.04-New进去验证一切都好之后再注销旧的、把名字改回来或者直接把新名字当成正式的用。多花几分钟换来的是绝对安全。第二个参数是安装位置。这个目录必须不存在或者是个空目录。如果目录里已经有文件导入会失败。这一点和很多人的直觉相反大家习惯先建好文件夹。所以要么别建让wsl --import自己创建要么建了但保证是空的。第三个参数是 tar 文件路径。可以是本地磁盘路径也支持网络路径但网络路径慢不推荐。--version 2建议显式写上。虽然你之前设过默认版本但显式指定永远不会错。如果你确实需要 WSL1极少数场景比如某些老工具和老内核模块写--version 1或者在导入前wsl --set-default-version 1。导入过程比导出快一些但同样没有进度条。导入完成后用wsl -l -v确认一下状态应该是Stopped版本是2。3.4 导入后必改的三处配置导入之后你会发现一个很尴尬的事进去的是 root不是原来的用户。这不是坏了而是 tar 里保留了原本的用户信息但 WSL 的默认登录用户配置没有跟着走。要修得进系统里改配置。第一处改默认登录用户。先确认原用户名还在cat /etc/passwd里能翻到然后编辑/etc/wsl.confsudo tee /etc/wsl.conf EOF [user] defaultyourusername [boot] systemdtrue EOF把yourusername换成你原来的用户名。如果你是从离线包新装的、系统里还没有普通用户那就先建一个adduser yourname usermod -aG sudo yourname然后再把上面配置里的default指到这个名字上。第二处确认 systemd。[boot] systemdtrue这一行是近几年 WSL 生态里最重要的改动之一。开了它systemctl才能正常工作Docker、MySQL、Redis 这些靠服务管理的组件才装得顺。不开的话systemctl status xxx会一直报System has not been booted with systemd。老版本 WSL 不支持这个配置项需要升级 WSL 主体新版直接写就行。第三处设默认发行版。如果你机器上有多个发行版wsl直接回车进的是默认那个。设置命令wsl --set-default Ubuntu-22.04改完配置后必须wsl --shutdown彻底关闭再重进配置才会生效。只关窗口是不够的后台那个虚拟机还在跑。这一步漏掉的人特别多然后跑来问我明明改了配置为什么不生效。3.5 收尾注销旧发行版、压缩 vhdx 与空间回收配置刷新完之后验证几件事wsl -d Ubuntu-22.04 -u root whoami应该返回你的用户名df -h /看一下根分区容量把常用的项目跑一遍确认没出问题。验证没问题后注销掉旧的那份wsl --unregister Ubuntu-22.04-Old再去看 C 盘应该释放出几十 G。如果没释放八成是这三种情况旧 vhdx 还在某个 Packages 目录里躺着、Docker 的发行版还在 C 盘、或者你忘了重启资源管理器缓存。用 WizTree 或者 TreeSize 扫一遍 C 盘按大小排序什么大户一眼就看出来了。至于 D 盘上新的ext4.vhdx它同样只涨不缩。等哪天你清理了大量文件想把它压回去有两种方式。一种是用 diskpart需要管理员权限且必须先wsl --shutdowndiskpart select vdisk fileD:\WSL\Ubuntu-22.04\ext4.vhdx attach vdisk readonly compact vdisk detach vdisk exit另一种更省事如果你用的是较新版本的 WSL直接开启稀疏文件模式wsl --shutdown wsl --manage Ubuntu-22.04 --set-sparse true稀疏模式的好处是以后你在 Linux 里删文件vhdx 会逐渐把空间还回来不用每次手动 compact。这个功能不是所有版本都有wsl --manage --help能看到相关参数就说明支持。提示compact 过程中不要同时开着 WSL也不要让别的程序访问这个 vhdx 文件否则会提示文件被占用。4. 搬完之后内存、网络与日常开发体验调优位置挪好了只是第一步真正让 WSL 用着舒服还得动几个配置。这些配置文件和发行版本身无关是写给 WSL 虚拟机的。4.1 用 .wslconfig 控制内存和 CPU 分配WSL2 默认会吃掉相当比例的内存你可能会发现开了 WSL 之后 Windows 侧开始频繁换页、开个浏览器都卡。控制开关是这个文件C:\Users\你的用户名\.wslconfig注意它是用户级全局配置不是放在发行版里的也不是放在项目目录里。新建或编辑它内容大概这样[wsl2] memory8GB processors6 swap4GB localhostForwardingtrue [experimental] autoMemoryReclaimgradual sparseVhdtrue逐项说说怎么定。memory是给虚拟机分配的上限。我的经验值是物理内存的 50% 到 70%。比如 32G 的机器给 16G 比较舒服16G 的机器给 8G8G 的机器给 4G 就别再多了否则 Windows 侧自己会喘不上气。注意这是个上限不是预分配Linux 里不用那么多的时候Windows 还是能拿回来的但老版本 WSL 的内存回收比较迟钝需要靠autoMemoryReclaim来改善。processors是分几个逻辑核。一般设成物理核心数就行别贪多把全部线程都用上留一点给 Windows 侧的编辑器、浏览器。swap是交换文件默认值有时候偏大。这个交换文件同样放在 C 盘的用户目录下如果 C 盘吃紧可以把它调小或者直接设成 0但不建议某些编译任务会 OOM。localhostForwardingtrue决定了 Windows 侧能不能用localhost直接访问 Linux 里监听的端口。这一项非常重要热词里那些MATLAB 识别不到 WSL某个工具连不上 WSL 里的服务很多就是因为它被关掉了或者被改成了别的网络模式。默认是开的除非你有明确理由别关。autoMemoryReclaim和sparseVhd属于实验特性新版 WSL 支持。前者让 Linux 侧释放掉的内存缓存逐渐还给 Windows后者让 vhdx 自动瘦身。两个都很实用但既然标着 experimental出问题的时候要想到它可能是原因之一。改完.wslconfig同样需要wsl --shutdown再重启才生效。4.2 systemd、Docker、CUDA 这类重负载场景的注意点WSL 用久了必然会碰上几个吃空间大户提前规划能省很多事。Docker Desktop 的 WSL 后端。如果你开了 Docker Desktop 的 WSL2 集成它会创建自己的发行版来存镜像和容器数据。新版 Docker Desktop 已经把数据合并到docker-desktop这一个发行版里而它的 vhdx默认还是放 C 盘而且镜像层动辄几十 G。要挪去 Docker Desktop 设置里的Resources → Advanced → Disk image location改成 D 盘上的目录点 Apply Restart它会自动迁移。这一项如果你不主动改前面辛辛苦苦搬的发行版省下来的空间很快又被镜像吃回去。CUDA 与深度学习环境。WSL2 里跑 CUDA需要 Windows 侧装好显卡驱动Linux 侧不要再装驱动然后在发行版里装 toolkit 和 cuDNN。这套东西装完轻松 15G 往上编译自定义算子时临时文件还会再翻倍。计划用量时建议给发行版预留至少 100G 的余量。另有一点CUDA 的安装包下载量很大网络不稳定的环境下建议先apt-get install --download-only把包装到本地再安装中断了也能续。binwalk 这类固件解包工具。解一个几百兆的固件会瞬间产生几千个小文件对 inode 消耗很大而且解出来的文件系统镜像往往比原包大好几倍。这类工作放在 D 盘上确实更稳妥因为 C 盘一旦满了很多工具会以写入失败的形式报错看起来像 bug实际是磁盘问题。编译类工作负载。Linux 内核编译、大型 C 项目构建都会产生大量中间文件。有一个常见误区是把项目放在/mnt/d/project下编译——千万别这么干。跨文件系统访问走的是 9p 协议读写性能比 Linux 原生文件系统慢一个数量级编译时间可能翻好几倍。正确做法是把项目放在 Linux 文件系统里比如~/projects需要和 Windows 共享的只放结果文件。vhdx 在 D 盘不代表项目要放在 D 盘的 NTFS 分区里这两件事要分清。4.3 VSCode 加 WSL 的工作流和终端字体日常写代码VSCode Remote - WSL基本是目前最舒服的组合。装好 Remote Development 扩展包之后在 WSL 的项目目录里敲code .VSCode 会在 Windows 侧启动但把工作区挂到 WSL 里终端、调试器、语言服务全在 Linux 侧跑插件也装在 Linux 侧。这里有个新手常犯的坑在 Windows 侧装的 Python 插件在 WSL 工作区里是用不上的需要重新在扩展 → 在 WSL 中安装里装一遍。看着重复但这正是它能跑得快的原因。字体这块追求接近 macOS 终端观感的话核心是三件事选一个等宽字体、开连字可选、把行高调舒服。macOS 自带的是 Menlo 和 SF Mono 那一类Windows 上比较接近的选择有 Cascadia Code、JetBrains Mono、Fira Code。如果你终端里要显示各类图标比如lsd、starship这些把提示符做得很花哨的工具得用带 Nerd Font 补丁的版本否则会出现方框和乱码。VSCode 里的配置大概这样{ terminal.integrated.fontFamily: Cascadia Code, JetBrainsMono Nerd Font, terminal.integrated.fontSize: 14, terminal.integrated.lineHeight: 1.3, terminal.integrated.fontLigatures: true }行高这一项容易被忽略但它是像不像 macOS的关键。默认行高偏挤调到 1.2 到 1.3 之间整屏观感立刻松弛下来。另外中文字符在等宽字体里经常对不齐可以在 VSCode 里单独指定一个中文字体作为后备比强行找一个中西文都等宽的字体省事。5. 常见问题与排查速查5.1 安装阶段的高频报错wsl --install报已禁止 (403)。这是下载环节被网络策略挡了和 WSL 组件本身无关。先试试换个网络环境比如切到手机热点。长期方案是走 2.3 节的离线包路线一劳永逸。wsl --list --online连接超时。同样是联网拉列表失败。不影响你直接用wsl --install -d 发行版名因为发行版名不需要联网查询。或者干脆离线导入。wsl --update下载极慢或中断。去 GitHub 上microsoft/WSL的 Releases 页面手动下安装包本地执行。已经下过的包留着同事装机也能用。提示your version of windows subsystem for linux (wsl) is too old。通常是某个工具要求更新的 WSL 主体。执行wsl --update失败就走手动安装包。另外确认你没有同时启用两套 WSL 组件商店版和系统内置版打架这种情况建议只保留一套。报 0x80370102。几乎百分之百是 CPU 虚拟化没开或者 WSL2 需要的虚拟机平台组件没启用。回 BIOS 开虚拟化再确认VirtualMachinePlatform功能已启用然后重启。wsl --install提示计算机无法连接到远程计算机或者远程过程调用失败。这通常是 WSL 相关服务卡死了。管理员 PowerShell 里执行wsl --shutdown后重试还不行就重启系统的 LxssManager 服务或者直接重启电脑。如果反复出现检查一下杀毒软件和系统优化工具是不是把相关服务禁用了。5.2 迁移与运行阶段的典型故障导入后是 root切不回普通用户。检查/etc/wsl.conf里[user] default的拼写以及这个用户名是否真实存在于/etc/passwd。改完必须wsl --shutdown再进。导入报目录已存在且非空。换个空目录名或者把已有内容挪走。这个报错很直白别想着强行覆盖。导入后硬盘空间没释放。按 3.5 节的顺序查旧 vhdx 是否还在、Docker 数据是否还挂在 C 盘、系统还原点是否占了空间。用磁盘分析工具按大小排序扫一遍最有效。迁移后某个项目跑不起来。优先怀疑路径。原来的项目在~/work下迁移后还在但如果你的脚本里写死了绝对路径而路径里包含原来 vhdx 的位置信息就可能失效。另外检查权限tar 会保留 uid/gid如果你的用户名在导入后 uid 变了某些文件会变成属于 uid 1000 但当前用户 uid 1001用ls -ln看数字 uid 最容易发现。Windows 侧工具连不上 WSL 里的服务。检查.wslconfig里localhostForwarding是否为 true确认服务监听在0.0.0.0而不是127.0.0.1之外的奇怪地址以及 Windows 防火墙有没有拦。MATLAB、某些 IDE 的远程解释器配置基本都是这三条里的某一条。卸载不干净。卸载单个发行版用wsl --unregister 名字彻底关掉 WSL 功能则在启用或关闭 Windows 功能里取消勾选适用于 Linux 的 Windows 子系统和虚拟机平台重启后残留目录手动删。卸载前一定记得先导出备份--unregister是直接删数据不进回收站的。5.3 一张速查表现象最可能的原因处理方式wsl --install报 403下载被网络策略拦截换网络环境或走离线包导入--list --online超时联网查询发行版列表失败直接指定发行版名安装不必查列表报 0x80370102CPU 虚拟化未开进 BIOS 开 VT-x / AMD-V提示 WSL 版本过旧WSL 主体未更新wsl --update或手动装安装包导入后登录成 root默认用户配置未随迁移编辑/etc/wsl.conf的[user] default配置改了不生效虚拟机未彻底关闭wsl --shutdown后重新进入C 盘空间没释放旧 vhdx / Docker 数据残留用磁盘分析工具定位后手动清理vhdx 只涨不缩WSL2 块设备特性diskpart compact 或开启 sparse 模式跨盘编译极慢项目放在/mnt/下项目移到 Linux 原生文件系统Windows 侧连不上 Linux 服务端口转发被关检查localhostForwarding和监听地址我把这套流程在好几台机器上跑过最省心的组合其实是离线包 提前规划目录第一次装的时候就用wsl --import直接导到 D 盘压根不用经历迁移这一遭。已经装了的朋友也别嫌麻烦export出来的那个 tar 就当是给环境上了份保险我至今保留着两个基线包一个纯干净的开发环境一个装好全部工具链的完整环境哪次手抖把系统搞坏了十几分钟就能回到可用状态比任何排查都来得实在。