视频加载失败

如何将 WSL2 镜像无损迁移至非系统盘

1293 字
6 分钟
如何将 WSL2 镜像无损迁移至非系统盘

1 引言#

随着开发环境的日益庞大,默认安装在 C:\ 盘的 WSL2 (Windows Subsystem for Linux) 镜像体积也会不断膨胀。本文将分享如何通过命令行操作,将 WSL 迁移至 E:\ 盘乃至其他盘符,彻底释放系统盘空间。

1.1 笔者环境#

名称版本
Windows 11 Pro25H2 26200.8037
PWSH7.5.5
WSL2.6.3.0
Ubuntu22.04 LTS
Ubuntu24.04 LTS
Note

注意:这里的 PWSH 并不是指 Windows 系统内置的经典 PowerShell,而是跨平台的开源项目 PowerShell Core。下文中使用 PowerShell 指代系统默认版本,PWSH 指代开源版本。

2 准备工作#

2.1 确认当前安装状态#

如果你还没有安装镜像,或想查看当前支持的发行版,可以使用以下命令:

Terminal window
# 查看支持的在线发行版
wsl --list --online
# 安装 Ubuntu 镜像
wsl --install Ubuntu-22.04
wsl --install Ubuntu-24.04

在终端输入以下命令,查看当前已安装的发行版:

Terminal window
wsl -l -v

2.1 确定原镜像及目标路径#

WSL2 的虚拟磁盘文件通常为 ext4.vhdx。你可以使用强大的文件搜索工具 Everything 来定位它们。不同版本的 Ubuntu 默认安装路径可能略有不同。

镜像原始路径
Ubuntu 22.04 LTSC:\Users\<your_windows_username>\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu22.04LTS_...\LocalState
Ubuntu 24.04 LTSC:\Users\<your_windows_username>\AppData\wsl\{UUID}

可以看到这里两者的路径有着细微差别,Ubuntu 22.04 LTS 安装在 Local\Packages 下,而 Ubuntu 24.04 LTS 却安装在 Local 同级的 wsl 下。

具体原因犹未可知,笔者暂时没有时间去查阅官方文档,但是并不影响后续步骤以及日常使用。

2.2 建立新的位置#

在上一步中已经获取到了原始的位置,根据笔者的风格,迁移之后的镜像路径应该尽可能维持原来的目录结构,但是笔者还是做了一点细微的修改,迁移路径具体如下:

镜像迁移路径
Ubuntu 22.04 LTSE:\Users\<your_windows_username>\AppData\wsl\ubuntu2204
Ubuntu 24.04 LTSE:\Users\<your_windows_username>\AppData\wsl\ubuntu2404
Warning

请在后续的命令行中将 <your_windows_username> 替换为你的实际 Windows 用户名。

在新版的 PWSH 中可以直接使用以下命令创建目录:

Terminal window
mkdir -p E:\Users\<your_windows_username>\AppData\wsl\ubuntu2204\
mkdir -p E:\Users\<your_windows_username>\AppData\wsl\ubuntu2404\

或者以下命令(支持在 PowerShell 中使用):

Terminal window
New-Item -Path E:\Users\<your_windows_username>\AppData\wsl\ubuntu2204\ -ItemType Directory
New-Item -Path E:\Users\<your_windows_username>\AppData\wsl\ubuntu2404\ -ItemType Directory

3 迁移镜像#

3.1 导出原 WSL 分发#

在进行导出操作前,强烈建议先停止 WSL2 中的所有工作并彻底关闭所有正在运行的 WSL 实例以防止数据损坏:

Terminal window
wsl --shutdown

接着,将现有的系统状态导出为 .tar 压缩包:

Terminal window
wsl --export Ubuntu-22.04 E:\Users\<your_windows_username>\AppData\wsl\ubuntu2204.tar
wsl --export Ubuntu-24.04 E:\Users\<your_windows_username>\AppData\wsl\ubuntu2404.tar

3.2 将压缩包导入新位置#

使用 wsl --import 命令将刚才导出的 .tar 文件导入到我们在 E 盘创建的新目录中。为了方便区分,我们将导入后的新实例命名为小写的 ubuntu2204ubuntu240

Terminal window
wsl --import ubuntu2204 E:\Users\<your_windows_username>\AppData\wsl\ubuntu2204 E:\Users\amara\AppData\wsl\ubuntu2204.tar
wsl --import ubuntu2404 E:\Users\<your_windows_username>\AppData\wsl\ubuntu2404 E:\Users\amara\AppData\wsl\ubuntu2404.tar
Note

利用 wsl --import,你可以将同一个 .tar 包导入多次并赋予不同名称,从而实现多开同一个发行版。虽然在隔离环境方面类似于 Docker,但 WSL2 原生支持 WSLg,可以直接运行 Linux 图形化应用,这在某些桌面开发场景下比 Docker 更具优势。

3.3 恢复默认用户#

导入完成并启动新的分发后,你可能会发现默认登录用户变成了 root。我们需要将其改回你原本的 Linux 用户名。如果你的分发并没有发现此类问题,可以跳过本节。

进入新的 WSL 实例:

Terminal window
wsl ~ -d ubuntu2204

使用 nano 编辑器修改 WSL 配置文件(如果你更习惯图形化界面,也可以执行 apt update && apt install gedit -y 后使用 gedit):

Terminal window
sudo nano /etc/wsl.conf

在文件中添加或修改以下内容(将 <your_linux_username> 替换为你在 WSL 中的用户名):

[user]
default=<your_linux_username>

保存并退出:依次按下 Ctrl + X,输入 Y 确认保存,最后按 Enter 退出。

退出当前 WSL 会话,并在 Windows 终端中重启改实例使配置生效:

Terminal window
# 终止实例
wsl --terminate ubuntu2204
# 重新进入验证用户是否恢复正常
wsl ~ -d ubuntu2204

3.4 设置为默认分发并清理善后#

如果一切验证无误,将新的实例设置为系统的默认 WSL 分发:

Terminal window
wsl --set-default ubuntu2404

确认无误后,就可以卸载 C 盘中的旧分发了:

Terminal window
wsl --unregister Ubuntu-22.04
wsl --unregister Ubuntu-24.04

最后,删除存放在 E 盘的过渡文件 .tar 压缩包以释放空间。此时再次执行 wsl -l -v,你应该能看到干净清爽的列表了。

4 总结#

迁移安装最大的好处就是能显著减小 C 盘的存储压力。不过,如果你的物理磁盘总容量本身较小(比如只有 512GB 单盘),笔者依然更推荐直接重装系统并只保留一个 C 盘分区,统一管理存储空间。

此外,根据微软官方文档的建议,为了获得最佳的文件 I/O 性能,进行 Linux 相关的开发时,请务必将项目文件直接存储在 WSL 的 Linux 文件系统(如 ~ 目录下),而不是跨文件系统存储在 Windows 盘符(如 /mnt/c)中。

参考资料#

  1. Installing Ubuntu on /mnt/d with WSL
  2. install-latex-guide-zh-cn (附录B.5 迁移 WSL 的安装位置)

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
如何将 WSL2 镜像无损迁移至非系统盘
https://bfmhno3.github.io/posts/wsl2-image-migration-guide/
作者
bfmhno3
发布于
2026-03-14
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
bfmhno3
Hello, I'm bfmhno3.
公告
本站曾使用 Jekyll + Minimal Mistakes 主题,现已迁移至 Astro + Firefly。博客内容未变,但文章链接有所调整,请自行查找需要的文章。
分类
标签
最新动态
站点统计
文章
36
分类
2
标签
58
总字数
136,569
运行时长
0
最后活动
0 天前
站点信息
构建平台
GitHub Actions
博客版本
Firefly v6.16.7
文章许可
CC BY-NC-SA 4.0
文章目录