WSL 备份、导出与迁移
WSL 的文件系统默认常常落在系统盘里。刚开始问题不大,但当你装了很多开发环境、模型、缓存和数据集后,它很容易变成 C 盘里的“隐形大户”。
这篇文档主要解决两类需求:
- 给现有 WSL 实例做完整备份
- 把 WSL 实例从默认位置迁移到其他磁盘
先分清三个动作
虽然命令都和 wsl --export、wsl --import 有关,但它们的目的不同:
- 备份:导出成一个
.tar文件,保留快照 - 恢复:把
.tar重新导入成一个新的 WSL 实例 - 迁移:导出后注销旧实例,再导入到新位置
迁移本质上就是“备份 + 删除旧实例 + 按新位置恢复”。
1. 先确认你要操作的发行版
在 Windows PowerShell 中查看当前实例列表:
wsl -l -v
重点确认两件事:
- 目标发行版名称
- 它是不是你当前默认使用的发行版
后面的命令里会用 <DistroName> 表示这个名字。
2. 导出前先关掉 WSL
严格来说,某些场景下 export 可以在实例运行时执行,但为了尽量减少不一致状态,我更建议先停掉 WSL:
wsl --shutdown
这样做的好处是:
- 文件系统状态更一致
- 不会导出到一半还在写数据
- 后续迁移步骤也更清晰
3. 导出完整备份
准备一个你想保存备份的目录,例如:
New-Item -ItemType Directory -Force -Path D:\WSL\backup | Out-Null
执行导出:
wsl --export <DistroName> D:\WSL\backup\<DistroName>-backup.tar
例如:
wsl --export Ubuntu D:\WSL\backup\Ubuntu-backup.tar
这个 .tar 文件就是完整备份。只要它还在,你就可以在同一台机器或另一台机器上重新导入。
4. 从备份恢复为一个新实例
如果你只是想测试恢复是否成功,最稳妥的做法是先恢复成一个新名字,而不是直接覆盖旧实例。
先准备安装目录:
New-Item -ItemType Directory -Force -Path D:\WSL\Ubuntu-Restore | Out-Null
再执行导入:
wsl --import Ubuntu-Restore D:\WSL\Ubuntu-Restore D:\WSL\backup\Ubuntu-backup.tar --version 2
此时你会得到一个新的发行版 Ubuntu-Restore。
进入测试:
wsl -d Ubuntu-Restore
5. 把实例迁移到其他磁盘
如果你的目标不是“多恢复一个实例”,而是“把原来的实例从 C 盘搬走”,流程通常如下:
wsl --shutdownwsl --export <DistroName> <BackupTarPath>wsl --unregister <DistroName>wsl --import <DistroName> <NewInstallPath> <BackupTarPath> --version 2
对应示例:
wsl --shutdown
wsl --export Ubuntu D:\WSL\backup\Ubuntu-backup.tar
wsl --unregister Ubuntu
wsl --import Ubuntu D:\WSL\Ubuntu D:\WSL\backup\Ubuntu-backup.tar --version 2