news 2026/6/11 10:55:32

告别C盘焦虑:手把手教你将WSL2 Ubuntu 20.04迁移至非系统盘

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
告别C盘焦虑:手把手教你将WSL2 Ubuntu 20.04迁移至非系统盘

1. 为什么需要迁移WSL2到非系统盘?

很多开发者第一次接触WSL2时,都会直接从微软商店安装Ubuntu发行版。默认情况下,系统会把所有文件存放在C盘的隐藏目录里。随着使用时间增长,你会发现C盘空间莫名其妙被吃掉几十GB。我去年就遇到过C盘只剩3GB的窘况,连Windows更新都提示空间不足。

WSL2的磁盘占用主要来自三个方面:首先是基础系统文件,Ubuntu 20.04初始安装大约占用1.5GB;其次是apt安装的软件包,像Python全家桶、Docker这些开发环境轻松吃掉5GB+;最可怕的是项目数据,比如训练机器学习模型时生成的临时文件,我曾经有个TensorFlow项目单数据集就占了20GB。

更麻烦的是,WSL2使用的是动态扩容的虚拟硬盘(ext4.vhdx),这个文件会随着使用不断膨胀,但不会自动收缩。即便删除了里面的文件,虚拟硬盘占用的物理空间也不会释放。有次我清理了Ubuntu里10GB的缓存文件,回到Windows查看vhdx文件大小纹丝不动。

2. 迁移前的准备工作

2.1 检查当前WSL状态

首先打开PowerShell(管理员权限),运行:

wsl -l -v

这个命令会列出所有已安装的WSL发行版及其状态。确认你要迁移的Ubuntu 20.04处于"Stopped"状态。如果显示"Running",需要先执行:

wsl -t Ubuntu-20.04

接着查看当前虚拟硬盘的位置和大小:

Get-ChildItem "C:\Users\你的用户名\AppData\Local\Packages\CanonicalGroupLimited*\LocalState\*.vhdx" | Select-Object FullName,Length

记下这个vhdx文件的路径,稍后导出时会用到。我的机器上显示大小是27.8GB,而实际Ubuntu系统只用到了15GB左右。

2.2 准备目标存储位置

在目标盘(比如D盘)创建存放目录。建议路径不要包含中文和空格:

mkdir D:\WSL\Ubuntu2004

考虑到未来可能安装多个WSL实例,可以建立层级目录结构。我个人的习惯是按发行版和用途分类:

D:\WSL ├── Ubuntu2004 ├── Ubuntu2204 └── Kali

注意:确保目标分区有足够剩余空间。建议至少保留原vhdx文件1.5倍的可用空间,以防导出过程中需要临时存储。

3. 完整迁移操作步骤

3.1 导出现有系统镜像

在PowerShell执行导出命令,这相当于给WSL系统做个快照:

wsl --export Ubuntu-20.04 D:\WSL\temp.tar

这个过程可能会持续5-15分钟,取决于你的系统大小。我的27GB镜像用了约8分钟完成导出,生成的temp.tar文件大小是14GB。

3.2 导入到新位置

关键命令来了:

wsl --import Ubuntu-20.04-new D:\WSL\Ubuntu2004 D:\WSL\temp.tar --version 2

参数说明:

  • Ubuntu-20.04-new是新实例的名称(后续可以改名)
  • D:\WSL\Ubuntu2004是目标路径
  • temp.tar是上一步导出的镜像
  • --version 2指定使用WSL2

导入完成后,立即删除临时文件释放空间:

del D:\WSL\temp.tar

3.3 设置默认用户

导入的新实例默认以root身份登录,需要修改注册表设置默认用户。新建reg文件并写入以下内容:

Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss\{你的分发版ID}] "DefaultUid"=dword:000003e8

分发版ID可以通过命令获取:

wsl -l -v

然后在注册表编辑器中找到对应项,将"DefaultUid"值改为你的用户UID(十进制1000对应十六进制3E8)。

4. 迁移后的优化配置

4.1 清理旧系统

确认新系统运行正常后,可以卸载原系统释放C盘空间:

wsl --unregister Ubuntu-20.04

然后手动删除残留文件:

Remove-Item -Path "C:\Users\你的用户名\AppData\Local\Packages\CanonicalGroupLimited*" -Recurse -Force

4.2 配置快捷方式

在桌面新建快捷方式,目标位置填写:

wsl -d Ubuntu-20.04-new

如果想保留原名称,可以先注销旧实例,然后重命名新实例:

wsl --unregister Ubuntu-20.04 wsl --import Ubuntu-20.04 D:\WSL\Ubuntu2004 D:\WSL\Ubuntu2004\ext4.vhdx --version 2

4.3 磁盘空间回收技巧

WSL2的虚拟硬盘不会自动收缩,需要手动压缩。首先在Ubuntu内运行:

sudo apt install zerofree sudo zerofree -v /dev/sda1

然后在PowerShell执行:

wsl --shutdown diskpart select vdisk file="D:\WSL\Ubuntu2004\ext4.vhdx" attach vdisk readonly compact vdisk detach vdisk exit

这套操作让我的vhdx文件从27GB缩小到了15GB。建议每月执行一次维护。

5. 常见问题解决方案

5.1 导入后无法启动

如果遇到错误码0x800700b7,通常是权限问题。尝试:

icacls "D:\WSL\Ubuntu2004" /grant "你的用户名":(OI)(CI)F

然后重新导入镜像。

5.2 网络连接异常

迁移后可能会出现apt无法更新的情况。在Ubuntu内执行:

sudo rm /etc/resolv.conf sudo bash -c 'echo "nameserver 8.8.8.8" > /etc/resolv.conf' sudo chattr +i /etc/resolv.conf

5.3 性能调优建议

在.wslconfig文件中添加以下配置(位于用户目录下):

[wsl2] memory=8GB processors=4 localhostForwarding=true

这可以避免WSL2占用过多主机资源,特别是当你有大内存需求时。

迁移完成后,我的C盘瞬间多出30GB空间,再也不用每天清理临时文件了。有个细节提醒大家:如果你使用Docker Desktop with WSL2,记得在设置里将新创建的WSL实例设为默认,否则它可能还会继续使用C盘空间。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/11 10:55:30

QRemeshify:Blender四边形重拓扑插件的终极指南

QRemeshify:Blender四边形重拓扑插件的终极指南 【免费下载链接】QRemeshify A Blender extension for an easy-to-use remesher that outputs good-quality quad topology 项目地址: https://gitcode.com/gh_mirrors/qr/QRemeshify 在3D建模和动画制作领域&…

作者头像 李华
网站建设 2026/6/11 10:54:30

Mac上PostgreSQL的快速部署与核心操作指南

1. 5分钟搞定Mac上的PostgreSQL安装 作为一个常年和数据库打交道的开发者,我深知在本地快速搭建开发环境的重要性。PostgreSQL作为最受欢迎的开源关系型数据库之一,在Mac上的安装其实比想象中简单得多。下面我就来分享一套经过实战验证的快速安装方案。 …

作者头像 李华
网站建设 2026/6/11 10:51:33

DSP28335参数掉电保存:我的Flash存储方案与CCS工程配置全记录

DSP28335参数掉电保存实战:从零构建Flash存储系统的完整指南作为一名嵌入式开发者,你是否遇到过这样的场景:精心调试的PID参数在设备重启后全部归零?或是每次上电都要重新校准传感器?三周前,我在开发一款智…

作者头像 李华