WSL 迁移指南:如何将 Linux 环境完整复制到另一台电脑

摘要 :换了新电脑或需要在多台设备间同步开发环境?本文介绍使用 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 确保内核为最新。

相关推荐
邪修king1 小时前
Re:Linux 系统篇(三十五):进程间通信Chapter2:从匿名管道到进程池:Linux 进程间通信实战(深度理解「先描述,再组织」)
java·linux·运维
2301_777998341 小时前
ARP协议进阶:ARP缓存、RARP与ARP欺骗原理解析
linux·服务器·网络·网络协议·缓存
运维行者_2 小时前
应用性能监控怎么选?从调用链到用户体验的五个能力维度
运维·服务器·数据库·人工智能·mysql·性能优化·应用性能监控
考虑考虑6 小时前
nginx路由重写
运维·后端·自动化运维
Zenova EdgeOS8 小时前
Linux 内核日志 dmesg 进阶实战:从现场过滤到持久化闭环
linux·运维·服务器
郝亚军9 小时前
ec_private.pem的生成方法
linux·运维·服务器
NendoZen9 小时前
Arch Linux解决Grub无法SAVEDEFAULT问题(uki启动问题)
linux·运维·服务器
Elastic 中国社区官方博客10 小时前
Elasticsearch:安装自行管理的 Elastic Stack 集群
大数据·运维·服务器·数据库·elasticsearch·搜索引擎·全文检索
忆挽篱笙歌10 小时前
进程控制管理
linux·运维·服务器
Escalating_xu11 小时前
【Linux 网络编程】connect 的断线重连:用状态机写一个能恢复连接的 TCP 客户端
linux·网络·tcp/ip