WSL系统迁移指南:如何将Linux子系统从C盘解放到其他路径

📅 发布时间:2026/7/11 3:42:32 👁️ 浏览次数:
WSL系统迁移指南:如何将Linux子系统从C盘解放到其他路径
1. 为什么你需要把WSL从C盘“搬个家”我猜很多朋友第一次用WSLWindows Subsystem for Linux的时候都是跟着教程一路“下一步”最后发现这个好用的Linux子系统悄无声息地就住进了你的C盘。用着用着C盘空间就开始“告急”那个红色的空间条看得人心慌。我自己也踩过这个坑当时C盘就剩几个G开个IDE都卡一查才发现那个不起眼的ext4.vhdx虚拟硬盘文件已经默默吃掉了好几十个G的空间。WSL默认把系统装在C盘的用户目录下路径长得像C:\Users\你的用户名\AppData\Local\Packages\发行版包名\LocalState\。这个设计对新手很友好安装时不用做任何选择。但问题就在于C盘通常是系统盘很多人的C盘分区本身就不大还要承载Windows系统、各种软件的缓存和临时文件。当你的WSL里开始安装开发环境、Docker镜像、编译大型项目或者玩机器学习时这个虚拟硬盘文件膨胀起来的速度绝对超乎你的想象。把WSL迁移到其他盘比如D盘、E盘或者一块专门的SSD上绝不仅仅是为了“腾地方”。这背后有几个很实在的好处。首先最直接的就是解放C盘空间让Windows系统运行得更流畅减少因为磁盘空间不足导致的各种奇怪问题。其次如果你有一块性能更好的NVMe固态硬盘把WSL放上去能显著提升文件读写速度特别是编译代码、加载数据集、运行数据库这些IO密集的操作体验提升是立竿见影的。最后这也是一种很好的数据管理习惯。把你的开发环境、项目数据和个人文件与系统盘分离以后重装系统或者做系统备份时会省心很多不用担心辛辛苦苦配置好的Linux环境一夜回到解放前。所以无论你是C盘空间亮起了红灯还是想给WSL一个更宽敞、更高速的“家”这次迁移都是非常值得花时间操作一次的。别担心整个过程听起来有点技术性但跟着步骤走其实就像给电脑文件搬个家一样有手就会。2. 动手前先摸清家底查看你的WSL状态在开始搬家之前我们得先搞清楚家里有什么东西都在哪儿。盲目操作可是数据丢失的“头号杀手”。这里需要用到几个简单的命令你只需要打开Windows终端推荐、PowerShell或者**命令提示符CMD**就可以。记住这些命令是在Windows环境下运行的不是在WSL的Linux命令行里哦。首先我们看看自己到底安装了哪些Linux子系统。打开终端输入下面这个最常用的命令wsl --list --verbose或者用它的简写形式wsl -l -v这个命令会给你一个清晰的列表。举个例子输出可能长这样NAME STATE VERSION * Ubuntu-22.04 Stopped 2 Debian Running 2 kali-linux Stopped 2我来解释一下每一列的意思。NAME就是你的子系统叫啥比如Ubuntu-22.04、Debian。STATE告诉你它当前的状态Running表示正在后台运行Stopped表示已经停止。有时候你关了终端但WSL服务可能还在跑这里能看到。最关键是VERSION它指明这个子系统用的是WSL1还是WSL2。现在主流和推荐的都是WSL2因为它有完整的Linux内核兼容性和性能好太多。确认你要迁移的系统是WSL2版本号显示为2很重要因为WSL1和WSL2的架构不同迁移方法也略有差异本文主要针对WSL2。如果你看到前面有个星号*比如例子里的Ubuntu-22.04那就表示它是你的默认发行版。也就是说当你直接在命令行输入wsl命令时会默认进入这个系统。知道哪个是默认的迁移后如果需要改回来心里就有数了。除了查看再学两个有用的管理命令搬家时可能用得上。如果你想关闭某个正在运行的子系统可以针对性地“关掉”它而不是重启整个WSL服务wsl --terminate 发行版名称比如wsl --terminate Debian。如果你想彻底重启整个WSL的后台虚拟机比如修改了.wslconfig配置后需要生效可以用wsl --shutdown这个命令会停止所有WSL发行版和相关的虚拟机进程。执行后上面wsl -l -v命令里所有系统的状态都会变成Stopped。在准备导出系统前确保你的目标系统是停止状态会让过程更顺利。3. 找到WSL的“老房子”虚拟硬盘文件在哪知道了系统叫什么我们还得找到它具体住在C盘的哪个“房间”。WSL2的每个Linux发行版本质上都是一个存储在虚拟硬盘文件通常是ext4.vhdx里的完整Linux系统。这个.vhdx文件就相当于你电脑里的一块“虚拟硬盘”里面装着Linux的根文件系统、你安装的软件、配置的文件等等所有东西。它的默认藏身之处就在我们开头提到的那个复杂路径里C:\Users\你的用户名\AppData\Local\Packages\发行版包名\LocalState\。这里的发行版包名是一串由发行版供应商命名的、看起来有点乱的字符串比如Ubuntu可能是CanonicalGroupLimited.Ubuntu22.04LTS_xxxxx这种形式。直接去文件资源管理器里一层层点进去找既麻烦又容易错。我教你一个更高效的方法使用Everything这款神器如果还没安装强烈建议装一个秒搜文件。你只需要在Everything的搜索框里直接输入ext4.vhdx它瞬间就能把你电脑里所有WSL的虚拟硬盘文件都找出来。通常你会看到路径指向C:\Users\你的名字\AppData\Local\Packages\...下的文件。核对一下文件修改日期和大小结合你之前用wsl -l -v看到的系统名称就能确定哪个文件对应哪个系统了。找到这个文件很重要因为它直观地告诉你这个“家当”有多大。右键查看文件属性你可能会惊讶地发现它已经占用了十几GB甚至更多空间。这就是我们要搬走的核心“资产”。记住这个文件的路径和对应的系统名我们接下来的“打包”和“搬家”操作都是围绕着它进行的。4. 核心迁移操作四步搞定“打包-搬家-落户”好了前期侦查工作完毕现在开始正式搬家。整个过程就像现实中的搬家一样先把所有东西打包导出然后把旧房子清空注销最后在新地方拆包安家导入。我们以最常用的Ubuntu 20.04为例假设你想把它搬到D:\WSL_Systems\Ubuntu20.04这个新目录下。4.1 第一步打包全部家当导出系统首先我们需要把整个Linux系统包括你的用户数据、安装的软件、配置的环境完整地“打包”成一个压缩档案。这个操作不会影响你正在运行的WSL系统。打开Windows终端管理员或非管理员模式均可但建议用管理员权限避免权限问题。执行导出命令。命令的格式是wsl --export 发行版名称 导出文件保存路径和名称对应我们的例子就是wsl --export Ubuntu-20.04 D:\WSL_Systems\ubuntu20.04_backup.tarUbuntu-20.04就是你用wsl -l -v看到的那个系统名称一定要写对。D:\WSL_Systems\ubuntu20.04_backup.tar这是你指定的打包文件存放路径和文件名。我习惯加个_backup后缀明确这是备份文件。文件格式是.tar这是一种常见的Linux系统归档格式。执行这个命令后WSL会将整个发行版的根文件系统压缩并导出到你指定的位置。这个过程可能需要几分钟时间长短取决于你的系统有多大。你会看到命令行窗口有进度提示。完成后去D:\WSL_Systems目录下检查应该会看到一个名为ubuntu20.04_backup.tar的文件这个就是你的完整系统快照。注意导出的.tar文件只是某个时间点的静态备份。在导出完成后如果你又在原系统里做了任何修改比如安装了新软件这些改动不会自动同步到这个备份文件里。所以理想的操作时机是在你准备长期迁移前或者确保当前系统状态是你想要保留的。4.2 第二步退租旧房子注销原系统“打包”完成确保备份文件安然无恙后我们就可以放心地清理掉C盘上的原始系统了。这一步叫做“注销”(unregister)。执行命令wsl --unregister Ubuntu-20.04这个命令会立即注销并删除Ubuntu-20.04这个WSL发行版实例。请注意这个操作是不可逆的它会删除C盘里那个ext4.vhdx虚拟硬盘文件以及相关的配置数据。所以务必确认第一步的导出已经成功完成并且你已经验证了导出的.tar文件是有效的比如检查一下文件大小是否合理。执行成功后你再运行wsl -l -v就会发现Ubuntu-20.04已经从列表里消失了。同时C盘对应路径下的那个LocalState文件夹及其里面的ext4.vhdx文件也应该被删除了此时C盘空间会立刻释放出来。这一步相当于把旧房子里的东西清空房子退租。4.3 第三步新家落户导入到新路径现在我们拿着打包好的行李.tar文件到新地址去安家。导入命令会基于备份文件在新的位置创建一个全新的WSL发行版实例。执行导入命令格式如下wsl --import 新系统名称 新系统安装路径 备份文件路径 --version 2对应我们的例子wsl --import Ubuntu-20.04 D:\WSL_Systems\Ubuntu20.04 D:\WSL_Systems\ubuntu20.04_backup.tar --version 2第一个Ubuntu-20.04这是你给新安装的系统起的名字可以和原来一样也可以不一样。它将成为你在wsl -l -v列表中看到的名字以及用wsl -d 名称启动时使用的标识。D:\WSL_Systems\Ubuntu20.04这是目标目录也就是你希望WSL系统“住”进去的新家。这个目录需要事先创建好比如我在D盘先新建了WSL_Systems文件夹。导入命令会在这个目录下生成运行所需的文件主要是一个新的ext4.vhdx文件。D:\WSL_Systems\ubuntu20.04_backup.tar这就是你上一步生成的备份文件路径。--version 2这个参数非常重要它指定新系统使用WSL2。如果你省略默认可能会使用WSL1导致性能和功能上的差异。导入过程同样需要一些时间系统会解压备份文件并在新位置创建虚拟硬盘。完成后运行wsl -l -v你应该能看到Ubuntu-20.04又回来了状态是Stopped版本是2。此时去D:\WSL_Systems\Ubuntu20.04目录下看看应该已经生成了新的系统文件。4.4 第四步找回老管家设置默认用户通过--import方式导入的系统默认会以root用户身份启动。这意味着你每次进入系统都是拥有最高权限的root账户这既不安全也不符合我们平时的使用习惯之前配置的用户环境、桌面设置等都在原用户目录下。我们需要把默认登录用户改回你原来在Ubuntu里创建的那个普通用户。怎么做呢首先启动这个新系统。你可以运行wsl -d Ubuntu-20.04这会以默认的root身份启动并进入该系统。然后在WSL的Linux命令行里执行一个特殊的配置命令。这个命令的格式是发行版名 config --default-user 用户名。但这里的发行版名需要一点小技巧它通常不是你wsl -l -v里看到的那个带版本号的名字而是一个更简洁的可执行文件名称。一个通用的查找方法是导入成功后你可以在Windows开始菜单里搜索你导入的系统名如“Ubuntu”通常会出现一个对应的应用图标。这个图标对应的命令名就是我们要用的。对于Ubuntu 20.04这个命令通常是ubuntu2004.exe对应Ubuntu 22.04可能是ubuntu2204Debian是debian等。所以退出WSL的Linux命令行输入exit回到Windows终端PowerShell/CMD执行ubuntu2004 config --default-user 你原来的用户名例如你原来的用户名是zhangsan就执行ubuntu2004 config --default-user zhangsan执行成功后下次你再通过wsl命令或者点击开始菜单的图标启动这个Ubuntu系统时就会直接以zhangsan这个普通用户身份登录了你之前的所有用户文件和环境配置都应该还在。5. 迁移后的优化与高级管理技巧成功迁移只是第一步要让WSL在新家“住”得舒服我们还可以做一些优化和设置同时掌握一些多系统管理的技巧。5.1 性能优化建议把WSL放到其他盘尤其是NVMe SSD上本身已经是最大的性能优化。但WSL2还有一些内存和CPU的默认配置可能不符合你的机器情况我们可以通过配置文件来调整。在Windows用户目录下C:\Users\你的用户名\创建一个名为.wslconfig的文本文件注意前面有个点。这个文件可以用来全局控制所有WSL2发行版的资源使用。用记事本或VSCode打开它添加如下内容根据你的硬件调整[wsl2] # 限制WSL2虚拟机可以使用的最大内存单位MB。避免WSL占用过多内存影响Windows。 memory8GB # 限制WSL2可以使用的CPU核心数。默认会使用所有逻辑核心。 processors4 # 设置Linux启动时自动挂载的Windows驱动器默认是true。如果不需要可以关闭以加快启动。 autoMounttrue # 启用Windows和Linux之间的互操作性比如在Linux里运行.exe默认开启。 interopEnabledtrue # 允许在WSL2中启动Windows进程时附加控制台窗口对开发者调试有用。 consolefalse修改并保存.wslconfig后需要重启WSL使配置生效。在Windows终端运行wsl --shutdown然后重新启动你的WSL发行版即可。通过调整memory和processors你可以更精细地分配资源特别是在内存不那么充裕的电脑上避免WSL和Windows争抢资源导致卡顿。5.2 多发行版管理与备份策略迁移到自定义路径后管理多个Linux发行版变得异常清晰。你可以在D:\WSL_Systems或你自定义的根目录下为每个发行版建立独立的文件夹例如D:\WSL_Systems\ ├── Ubuntu20.04\ ├── Ubuntu22.04\ ├── Debian11\ └── Kali\每个文件夹里都包含该发行版独立的虚拟硬盘文件和相关数据互不干扰。想用哪个就启动哪个想备份哪个就直接复制整个文件夹。说到备份现在你的WSL系统变成了一个独立的文件夹备份和恢复变得极其简单备份直接关闭该发行版wsl --terminate 名称然后复制整个系统文件夹如D:\WSL_Systems\Ubuntu20.04\到你的备份硬盘或网盘。恢复把备份的文件夹复制回原位置或任何其他位置然后使用wsl --import命令指定这个文件夹作为安装路径并指向一个备份时导出的.tar文件或者更简单粗暴的方法是如果你复制了整个文件夹其实里面已经包含了ext4.vhdx但为了在WSL中正确注册通常还是需要走一遍导入流程或者你可以直接替换现有文件夹内的.vhdx文件但这需要更谨慎的操作。5.3 可能遇到的坑与解决方法迁移过程大部分时候很顺利但我也遇到过一些小问题这里分享一下导入后默认用户设置不生效如果你执行了ubuntu2004 config --default-user 用户名但启动后还是root请检查用户名是否拼写正确Linux用户名区分大小写。最彻底的方法是直接修改WSL的配置文件。进入WSL编辑/etc/wsl.conf文件可能需要sudosudo nano /etc/wsl.conf添加或修改以下内容[user] default你的用户名保存退出然后在Windows中执行wsl --shutdown重启WSL。新路径权限问题如果你把WSL导入到一个受限制的目录比如某些需要管理员权限的目录可能会遇到启动失败。建议在非系统盘如D盘、E盘的根目录或你的用户文档目录下创建专属文件夹避免权限纠纷。磁盘空间不足导出和导入过程中会产生临时文件和最终的虚拟硬盘文件确保目标磁盘有足够空间。特别是导入时新的.vhdx文件大小至少会和原系统占用空间一样大。忘记原系统用户名如果你在导入后完全忘记了原来Ubuntu里的用户名是什么有一个办法可以尝试。在设置默认用户前先以root身份启动系统然后查看/home目录下有哪些用户文件夹ls /home通常你自己创建的用户文件夹名就是你的用户名。 迁移完成后你会发现WSL的运行速度和文件操作响应有了可感知的提升特别是当你的新家在一块高速SSD上时。更重要的是C盘终于“瘦身”成功再也不用为红色空间警告而焦虑了。整个操作流程从查看、导出、注销到导入、配置其实是一套标准的WSL系统备份、恢复和迁移的方法熟练掌握后你可以自由地在不同电脑、不同磁盘之间搬运你的Linux开发环境非常灵活。