为什么需要迁移
WSL 默认将发行版安装在 C 盘的用户目录下(例如 C:\Users\用户名\AppData\Local\Packages\...),每个发行版对应一个 ext4.vhdx 虚拟磁盘文件。随着你在 WSL 中安装开发工具、下载依赖、构建项目,这个文件很容易膨胀到几十 GB。如果你的 C 盘是 SSD 且空间有限,迁移到 D 盘或其他大容量磁盘是性价比最高的解决方案。
重要提示:不要在 Windows 设置中修改"应用的默认安装位置"来试图迁移 WSL,这会导致不可预知的问题。正确的方法是使用 WSL 内置的
--export/--import命令。
一、准备工作
1.1 检查当前 WSL 状态
以管理员身份打开 PowerShell 或 Windows 终端,先查看已安装的发行版及其状态:
wsl -l -v输出示例:
NAME STATE VERSION* Ubuntu Stopped 2Debian Running 2
确认你要迁移的发行版名称(本文以 Ubuntu 为例)。如果发行版正在运行,先关闭它:
wsl --shutdown1.2 检查目标磁盘空间
确保目标盘(如 D 盘)有足够空间容纳导出的 tar 文件和导入后的虚拟磁盘。一般建议预留 发行版已用空间 × 1.5 倍 的可用空间。
1.3 记录当前默认用户(重要)
wsl -d Ubuntu# 进入 WSL 后执行whoami
记下你的用户名,迁移后需要手动恢复默认登录用户。
二、迁移流程(四步完成)
2.1 导出发行版为 tar 文件
# 语法:wsl --export <发行版名称> <目标路径>wsl --export Ubuntu D:\wsl-backup\Ubuntu.tar
如果
D:\wsl-backup\目录不存在,先创建它:mkdir D:\wsl-backup
导出时间取决于发行版的大小,几 GB 的 Ubuntu 通常在 1-3 分钟内完成。导出完成后你可以看到生成的 .tar 文件大小与 WSL 实际占用空间基本一致。
官方文档参考:wsl --export[1] — 将指定发行版导出到 tar 文件。
2.2 注销旧的发行版
# 先确保 WSL 已完全关闭wsl --shutdown# 注销旧发行版(这会删除 C 盘上的 ext4.vhdx 文件)wsl --unregister Ubuntu
执行 --unregister 后,原有的 C 盘 WSL 数据会被彻底删除。如果担心误操作,可以在执行此步骤前给 %LOCALAPPDATA%\Packages\ 下对应的 WSL 包目录做个手动备份。
验证注销成功:
wsl -l -v# 输出应不再显示 Ubuntu
官方文档参考:wsl --unregister[2] — 注销(删除)指定发行版并回收磁盘空间。
2.3 导入发行版到目标磁盘
# 在目标盘创建存储目录(可选,但推荐)mkdir D:\WSL\Ubuntu# 导入:wsl --import <发行版名> <安装目录> <tar文件路径> --version <版本号>wsl --import Ubuntu D:\WSL\Ubuntu D:\wsl-backup\Ubuntu.tar --version 2
参数说明:
Ubuntu | |
D:\WSL\Ubuntu | |
D:\wsl-backup\Ubuntu.tar | |
--version 2 |
导入完成后,验证是否成功:
wsl -l -v# 输出应显示 Ubuntu 在新的路径下正常运行
官方文档参考:wsl --import[3] — 从 tar 文件导入指定发行版。
2.4 恢复默认登录用户
通过 --import 导入的发行版默认以 root 用户登录,需要手动恢复你之前记录的用户名。推荐在 WSL 内部编辑 /etc/wsl.conf 文件来设置(config --default-user 命令在某些版本上不稳定):
# 编辑 /etc/wsl.conf 文件,添加 [user] 配置段sudo vim /etc/wsl.conf
在文件中写入以下内容(以用户名为 jackal 为例):
[boot]systemd=true[user]default=jackal
然后退出 WSL,执行 wsl --shutdown 重新进入,新配置即可生效。
如果不想开启 systemd,可以只保留
[user]段:[user]default=jackal
验证:
wsl --shutdownwsl -d Ubuntu# 进入后执行 whoami,应显示你设置的用户名
官方文档参考:WSL 中的高级设置配置 - wsl.conf[4] — 通过 [user] 段设置默认登录用户。
三、清理导出文件(可选)
确认新发行版正常工作后,可以删除导出的 tar 文件以回收临时空间:
Remove-Item D:\wsl-backup\Ubuntu.tar# 或者如果目录中只有这个文件,可直接删除目录Remove-Item D:\wsl-backup -Recurse
四、迁移后的注意事项
4.1 默认发行版设置
如果你有多个 WSL 发行版,可能需要重新设置默认发行版:
wsl --set-default Ubuntu4.2 Windows Terminal 配置
如果你使用 Windows Terminal,Ubuntu 配置文件通常会保持有效,无需额外修改。如果发现启动路径指向旧位置,在 Windows Terminal 设置中检查 Ubuntu 配置文件的"命令行"字段即可。
4.3 VSCode Remote-WSL
VSCode 的 Remote-WSL 扩展会自动检测注册的 WSL 发行版,迁移后无需重新配置,直接在 VSCode 中按 F1 → Remote-WSL: Reopen in WSL 即可正常工作。
4.4 迁移后 C 盘空间恢复
如果你执行 wsl --unregister 后 C 盘空间没有释放(极少情况),可以手动检查以下位置并删除残留文件:
C:\Users\<你的用户名>\AppData\Local\Packages\查找形如 CanonicalGroupLimited.Ubuntu... 的目录,确认其中没有你需要的数据后删除。
五、进阶:压缩现有 WSL 虚拟磁盘(不迁移版)
如果你的 C 盘暂时还能撑住,但 WSL 的 ext4.vhdx 文件已经膨胀得比实际数据大很多(WSL2 的常见问题),可以用磁盘压缩来瘦身:
# 1. 在 WSL 内部用零填充空闲空间wsl -d Ubuntusudo dd if=/dev/zero of=/EMPTY bs=1Msudo rm -f /EMPTYexit# 2. 在 PowerShell 中压缩 vhdxwsl --shutdowndiskpart# 在 diskpart 中执行:select vdisk file="D:\WSL\Ubuntu\ext4.vhdx"compact vdiskdetach vdiskexit
这是一个独立操作,可以在迁移前做也可以在迁移后做。
六、常见问题
Q: 迁移后 WSL 无法启动?
检查目标路径的权限。确保存放 vhdx 文件的目录有正确的 NTFS 权限。通常放在普通用户目录或非系统盘的根目录下即可。
Q: 迁移后 wsl -l -v 显示版本为 1?
A: 导入时忘了加 --version 2 参数。可以之后用以下命令转换:
wsl --set-version Ubuntu 2Q: 迁移后中文显示乱码?
在 WSL 中安装中文字体包:
sudo apt install fonts-noto-cjkQ: 可以同时迁移多个发行版吗?
可以。每个发行版单独执行一遍 export → unregister → import 流程即可,注意步骤间不要混淆名称。
Q: 迁移后 WSL 网络不通?
WSL2 使用虚拟交换机网络,迁移不会影响网络配置。如果遇到 DNS 问题,可以尝试修改 /etc/resolv.conf 或重置 WSL:
wsl --shutdownwsl --terminate Ubuntu# 重启 WSL 服务net stop LxssManagernet start LxssManager
七、参考资料
•WSL 基本命令(官方文档)[5]•WSL 安装指南(官方文档)[6]•WSL 虚拟磁盘管理 - Microsoft Learn[7]•WSL 中的高级设置配置 - wsl.conf[8]
本文基于 WSL2 编写,理论上同样适用于 WSL1。如果你在迁移中遇到其他问题,欢迎在评论区交流。
References
[1] wsl --export:https://learn.microsoft.com/en-us/windows/wsl/basic-commands#export[2]wsl --unregister:https://learn.microsoft.com/en-us/windows/wsl/basic-commands#unregister[3]wsl --import:https://learn.microsoft.com/en-us/windows/wsl/basic-commands#import[4]WSL 中的高级设置配置 - wsl.conf:https://learn.microsoft.com/en-us/windows/wsl/wsl-config#user-settings[5]WSL 基本命令(官方文档):https://learn.microsoft.com/en-us/windows/wsl/basic-commands[6]WSL 安装指南(官方文档):https://learn.microsoft.com/en-us/windows/wsl/install[7]WSL 虚拟磁盘管理 - Microsoft Learn:https://learn.microsoft.com/en-us/windows/wsl/disk-space[8]WSL 中的高级设置配置 - wsl.conf: https://learn.microsoft.com/en-us/windows/wsl/wsl-config#user-settings
夜雨聆风