WSL虚拟机整体迁移教程(如何将WSL从C盘迁移到其他盘)
文章目录
- WSL虚拟机迁移教程
- 一、查看当前主机的子系统
- 二、导出 WSL 子系统
- 三、将打包好的文件发送给另一个人
- 四、在另一台机器导入并恢复子系统
- 五、附加命令
- 六、注意事项和导出文件信息
- 6.1 注意事项
- 6.2 导出文件信息
- 使用 `wsl --export` 命令导出整个 WSL 子系统时,它会**完整打包该子系统中的全部内容**,包括:
- 不会被打包的内容:
- 七、一些建议
- 7.1 确保完整性:
- 7.2 如果只想打包 WSL 子系统中的环境(软件/依赖/工具),而不打包下载的项目代码、数据、临时文件等,可以采用以下三种策略
- 7.2.1 手动清理非环境类文件(推荐)
- 操作步骤:
- 7.2.2 复制并清理一个临时环境后打包
- 操作步骤:
- 7.2.3 新建一个“纯净环境”,只安装依赖
- 操作步骤:
- 7.3 总结对比
WSL虚拟机迁移教程
一、查看当前主机的子系统
(查看自己的子系统)指令:
wsl -l
二、导出 WSL 子系统
-
打开 PowerShell(管理员身份)
-
输入以下命令导出
wsl --export <系统名字> <导出位置//导出名字.tar>
(假设子系统名为 `Ubuntu-20.04`): wsl --export Ubuntu-20.04 D:\backup\ubuntu_backup.tar
Ubuntu-20.04
是当前安装的 WSL 名称(可通过wsl -l -v
查看)D:\backup\ubuntu_backup.tar
是导出的路径和文件名
导出的是整个 WSL 子系统,包括所有安装的软件、配置、环境变量等,适合打包迁移。
三、将打包好的文件发送给另一个人
- 把
ubuntu_backup.tar
文件通过硬盘、U盘、局域网等方式发给另一个人; - 不需要网络重新安装环境,只需导入即可。
四、在另一台机器导入并恢复子系统
-
仍在 PowerShell 中输入:
wsl --import <系统名字> <要搬到的位置> <之前导出包的位置>
wsl --import MyUbuntu D:\wsl\MyUbuntu D:\backup\ubuntu_backup.tar
MyUbuntu
是新导入的子系统名字D:\wsl\MyUbuntu
是你想要存储子系统根目录的位置ubuntu_backup.tar
是你导入的.tar
文件
-
运行新的子系统:
wsl -d MyUbuntu
五、附加命令
-
查看所有子系统:
wsl -l -v
-
删除旧的子系统(慎用):
wsl --unregister Ubuntu-20.04
六、注意事项和导出文件信息
6.1 注意事项
项目 | 说明 |
---|---|
权限 | 必须用管理员 PowerShell进行导出/导入 |
空间 | .tar 文件大小约等于整个 WSL 的体积 |
路径 | 导入路径不能是已有 WSL 的安装路径,否则会失败 |
同步 | 不包括 Windows ↔ WSL 的绑定配置(如启动任务计划) |
版本兼容 | WSL1/WSL2 建议在同一版本之间导出导入,避免版本不一致 |
6.2 导出文件信息
使用 wsl --export
命令导出整个 WSL 子系统时,它会完整打包该子系统中的全部内容,包括:
内容 | 是否打包 |
---|---|
在 WSL 里安装的所有软件 | ✅ 会 |
写的所有代码/项目文件 | ✅ 会 |
下载的数据集/模型 | ✅ 会 |
配置的 .bashrc 、.zshrc 等配置文件 | ✅ 会 |
安装的 Python 虚拟环境(venv/conda 等) | ✅ 会 |
在 /home/你的用户名/ 目录下的所有文件 | ✅ 会 |
在 /opt/ 、/usr/local/ 下自定义安装的工具 | ✅ 会 |
不会被打包的内容:
内容 | 是否打包 | 说明 |
---|---|---|
Windows 本地的文件 | ❌ 不会 | 比如 C:\Users\你的名字\Desktop\... 的内容不会被打包 |
Windows 和 WSL 的挂载点 /mnt/c , /mnt/d | ❌ 不会 | 这些是挂载路径,属于 Windows |
WSL 设置(如是否为 WSL2、是否自动启动等) | ❌ 不会 | 这是系统级配置,不包含在 .tar 中 |
使用 wsl.conf 配置的挂载参数(/etc/wsl.conf) | ✅ 包含文件,但配置在新环境不一定自动生效 |
七、一些建议
7.1 确保完整性:
-
提前清理不需要的缓存、临时文件(减少
.tar
体积):sudo apt clean pip cache purge conda clean --all
-
确保项目代码位于
/home/xxx/
或其他 Linux 内部路径,而不是/mnt/c/...
这样的 Windows 路径。
7.2 如果只想打包 WSL 子系统中的环境(软件/依赖/工具),而不打包下载的项目代码、数据、临时文件等,可以采用以下三种策略
7.2.1 手动清理非环境类文件(推荐)
这是最直接的方法 —— 在导出前,清理掉项目文件,只保留安装的系统工具和依赖环境。
操作步骤:
-
删除个人项目文件:
rm -rf ~/my_project/ rm -rf ~/Downloads/ rm -rf ~/notebooks/
只保留必要配置(比如
.bashrc
,.condarc
等) -
清理 pip / conda 缓存:
pip cache purge conda clean --all
-
导出子系统环境:
wsl --export Ubuntu-20.04 D:\clean_env.tar
这样导出的文件就是一个干净的环境模板。
7.2.2 复制并清理一个临时环境后打包
避免动当前 WSL,可以用 wsl --export
和 --import
创建一个副本,然后在副本中删掉项目内容:
操作步骤:
-
导出现有系统:
wsl --export Ubuntu-20.04 D:\ubuntu_temp.tar
-
导入成临时副本:
wsl --import Ubuntu-Clean D:\WSL\Ubuntu-Clean D:\ubuntu_temp.tar
-
进入临时系统并清理项目代码:
wsl -d Ubuntu-Clean # 然后执行 rm -rf ~/your_projects 之类
-
退出临时系统,再次导出干净版本:
wsl --export Ubuntu-Clean D:\clean_env.tar
-
删除临时环境(可选):
wsl --unregister Ubuntu-Clean
优点:不会你主用的系统,风险最低。
7.2.3 新建一个“纯净环境”,只安装依赖
如果只是想交付一份“干净的、带好开发环境”的 WSL 子系统,也可以从头开始:
操作步骤:
-
安装全新系统:
wsl --install -d Ubuntu-20.04
-
安装需要的环境:
sudo apt update && sudo apt install python3 python3-pip pip install flask numpy pandas # 举例
-
导出它即可:
wsl --export Ubuntu-20.04 D:\env_template.tar
适合做通用部署模板,比如交给其他同学或团队使用。
7.3 总结对比
方法 | 适合场景 | 是否改动现有系统 | 优点 |
---|---|---|---|
方法一:手动清理 | 你了解项目目录结构 | 是 | 快速直接 |
方法二:复制后清理 | 不想动主系统 | 否 | 更安全 |
方法三:新建系统 | 想交付纯净系统 | 否 | 最干净、体积最小 |