摘要 :换了新电脑或需要在多台设备间同步开发环境?本文介绍使用 WSL 原生
export/import命令,零第三方工具、完整保留配置与数据的迁移方案。附默认用户修复、VHD 导出等进阶技巧。
💡 为什么选择原生导出/导入?
市面上有不少 WSL 备份工具,但微软官方提供的 wsl --export 和 wsl --import 始终是最稳妥的选择:
- 完整性:打包整个 ext4 文件系统,包括隐藏文件、符号链接、权限位
- 无依赖:不需要安装任何额外软件,Windows 10 (2004+) / Windows 11 原生支持
- 可验证:生成的 tar/vhd 是标准格式,可随时校验完整性
📦 第一步:在源电脑导出发行版
1. 确认发行版名称
powershell
wsl -l -v
输出示例:
NAME STATE VERSION
* Ubuntu Running 2
2. 关闭 WSL 确保数据一致性
powershell
wsl --shutdown
⚠️ 重要:导出前务必关闭 WSL,避免数据库、Docker 等运行中的服务导致数据损坏。
3. 执行导出
方式 A:导出为 tar(通用兼容)
powershell
wsl --export Ubuntu D:\Backup\ubuntu-backup.tar
方式 B:导出为 VHD(WSL2 专属,推荐)
powershell
wsl --export Ubuntu D:\Backup\ubuntu-backup.vhd --vhd
| 对比项 | tar | VHD |
|---|---|---|
| 兼容性 | WSL1 & WSL2 | 仅 WSL2 |
| 导入速度 | 较慢(需解压) | 较快(直接挂载) |
| 文件大小 | 略大 | 略小(稀疏文件) |
| 推荐场景 | 跨版本/归档 | 同版本快速迁移 |
💡 导出耗时取决于数据量,几十 GB 的环境可能需要 10--30 分钟,请耐心等待。
🔄 第二步:传输与导入
1. 传输备份文件
通过移动硬盘、NAS、云盘等方式将 .tar 或 .vhd 复制到目标电脑。
🔒 安全提醒:备份包含完整的 Linux 文件系统(SSH 私钥、密码哈希、环境变量等),请加密传输或妥善保管。
2. 在目标电脑导入
powershell
# 语法: wsl --import <自定义名称> <安装目录> <备份文件路径> [--vhd]
wsl --import MyUbuntu D:\WSL\Ubuntu D:\Backup\ubuntu-backup.tar
如果使用的是 VHD 文件:
powershell
wsl --import MyUbuntu D:\WSL\Ubuntu D:\Backup\ubuntu-backup.vhd --vhd
🔧 第三步:修复默认用户(必做!)
--import 导入的发行版默认以 root 登录,这是最常见的"坑"。以下两种方法任选其一:
方法 A:通过 wsl.conf(推荐)
进入 WSL 后执行:
bash
# 将 your_username 替换为你原来的用户名
echo -e "[user]\ndefault=your_username" >> /etc/wsl.conf
然后在 PowerShell 中重启该实例:
powershell
wsl --terminate MyUbuntu
方法 B:通过注册表设置 UID
powershell
# 1. 查找发行版对应的 GUID
reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Lxss" /s /f "MyUbuntu"
# 2. 设置 DefaultUid(普通用户通常为 1000)
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Lxss\{你的GUID}" /v DefaultUid /t REG_DWORD /d 1000 /f
💡 如何确认 UID? 在源电脑的 WSL 中运行
id your_username,输出的uid=值即为目标 UID。
✅ 迁移后验证清单
完成上述步骤后,逐项确认:
bash
# 1. 确认当前用户
whoami # 应显示你的用户名
# 2. 确认家目录完整
ls -la ~ # 检查 .ssh, .bashrc, 项目文件等
# 3. 确认环境变量
echo $PATH # 自定义路径应保留
# 4. 确认 WSL 版本
wsl -l -v # VERSION 应为 2
⚠️ 常见问题与注意事项
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 导入失败提示版本不兼容 | 目标电脑 WSL 版本过低 | 目标电脑执行 wsl --update |
| 导入后网络不通 | WSL 网络模式差异 | 检查 /etc/resolv.conf 或重置网络 |
| systemd 服务未启动 | 目标电脑未启用 systemd | 在 wsl.conf 中添加 [boot] systemd=true |
| Docker 容器丢失 | 导出时 Docker 正在运行 | 导出前 docker stop $(docker ps -q) |
| 磁盘空间不足 | 未预估备份大小 | 先用 wsl --list --verbose 查看占用 |
📝 补充:本机克隆(非跨电脑)
如果只是在同一台电脑上复制一份用于测试,无需导出导入:
powershell
wsl --clone Ubuntu Ubuntu-Test
❌
--clone仅限本机,不支持跨设备迁移。
🎯 总结
整个迁移流程可以浓缩为三条核心命令:
powershell
# 源电脑:导出
wsl --shutdown && wsl --export Ubuntu ubuntu-backup.vhd --vhd
# 目标电脑:导入
wsl --import MyUbuntu D:\WSL\Ubuntu ubuntu-backup.vhd --vhd
# 目标电脑:修复默认用户后重启
wsl --terminate MyUbuntu
掌握这套流程,无论是换机、团队协作还是灾备恢复,都能做到 WSL 环境的无缝衔接。如果迁移过程中遇到具体问题,欢迎在评论区交流!
本文基于 WSL2 + Windows 11 24H2 验证,其他版本可能存在细微差异。建议操作前先运行 wsl --update 确保内核为最新。