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

摘要 :换了新电脑或需要在多台设备间同步开发环境?本文介绍使用 WSL 原生 export/import 命令,零第三方工具、完整保留配置与数据的迁移方案。附默认用户修复、VHD 导出等进阶技巧。


💡 为什么选择原生导出/导入?

市面上有不少 WSL 备份工具,但微软官方提供的 wsl --exportwsl --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 确保内核为最新。

相关推荐
IT利刃出鞘1 小时前
Docker Compose--安装WordPress--方法/示例
运维·docker·容器
企鹅的蚂蚁2 小时前
LubanCat RK3588 实时 Linux 开发(六):启用 gs_usb 驱动并完成 USB-CAN 收发
linux·rk3588·linux驱动·socketcan·gs_usb·usb-can
2601_962299883 小时前
Linux执行Python脚本方法
linux·python·脚本·解释器·shebang
snow@li3 小时前
服务器运维:Linux命令速查手册(全景梳理)
linux·服务器·网络
handler013 小时前
【Linux】线程与虚拟内存的底层世界
linux·运维·服务器·c++·线程·虚拟地址空间·共享内存
布莱克6053 小时前
TCP 三次握手与四次挥手详解
服务器·网络·tcp/ip·计算机网络·网络编程
新时代牛马3 小时前
实时 Linux:PREEMPT_RT、延迟来源与观测
linux·运维·服务器
微露清风3 小时前
# Linux 进程全景:从 PCB 到 O(1) 调度队列
linux·服务器
H_oRIZoN_3 小时前
Linux入门DAY38(手写 HTTP 客户端抓取天气 + 简易 HTTP 服务器实现元器件 Web 系统)
linux·linux应用编程