将 Hyper-V 上的 Ubuntu 虚拟机内容迁移到 WSL (Windows Subsystem for Linux) 中,最推荐且最干净的方法是在 Hyper-V 内部打包文件系统,然后在 WSL 中导入。
以下是详细的操作步骤:
方法一:通过 Tar 包迁移(推荐)
这种方法可以保留你的用户数据、配置文件和已安装的软件,同时避免迁移不必要的系统垃圾。
1. 在 Hyper-V Ubuntu 中导出文件系统
启动你的 Hyper-V Ubuntu 虚拟机,打开终端,执行以下命令将整个文件系统打包:
bash
# 进入根目录或临时目录
cd /tmp
# 打包整个文件系统(排除不需要的虚拟文件系统和挂载点)
sudo tar -czf /tmp/ubuntu-hyperv-backup.tar.gz \
--exclude=/proc \
--exclude=/sys \
--exclude=/dev \
--exclude=/run \
--exclude=/tmp/ubuntu-hyperv-backup.tar.gz \
--exclude=/mnt \
--exclude=/media \
--exclude=/lost+found \
/
注意: 如果文件很大,建议将生成的
ubuntu-hyperv-backup.tar.gz移动到一个 Windows 也能访问的共享文件夹,或者通过 SCP/SFTP 传输到 Windows 宿主机上。你也可以直接在 Hyper-V 中挂载一个 Windows 的共享目录来写入这个文件。
2. 在 Windows 上准备 WSL 环境(如果已有则跳过)
确保你已经安装了 WSL。打开 PowerShell:
powershell
# 查看当前已安装的发行版
wsl -l -v
# 如果需要,可以先安装一个空的 Ubuntu 作为基础(可选)
wsl --install Ubuntu-24.04
3. 将备份导入为新的 WSL 实例
使用 wsl --import 命令将刚才的 tar 包导入为一个全新的 WSL 发行版:
powershell
# 语法: wsl --import <自定义名称> <安装路径> <tar包路径>
wsl --import MyUbuntu D:\WSL\MyUbuntu C:\path\to\ubuntu-hyperv-backup.tar.gz
4. 修复默认用户(重要!)
通过 --import 导入的 WSL 实例默认会以 root 用户登录。你需要设置回你原来的普通用户:
powershell
# 进入新导入的实例
wsl -d MyUbuntu
# 在 WSL 内部执行(将 your_username 替换为你在 Hyper-V 中的用户名)
# 对于 Ubuntu/Debian:
echo -e "[user]\ndefault=your_username" | sudo tee /etc/wsl.conf
# 退出 WSL
exit
然后在 PowerShell 中重启该 WSL 实例使配置生效:
powershell
wsl --terminate MyUbuntu
wsl -d MyUbuntu
此时你应该以普通用户身份登录,且所有之前的文件、软件、配置都完好无损。
方法二:仅迁移特定项目(轻量级)
如果你不需要完整的系统环境,只想迁移部分内容:
| 迁移内容 | 推荐方式 |
|---|---|
| 个人文件/代码 | scp / SFTP / 共享文件夹直接拷贝 |
| 已安装的软件包列表 | dpkg --get-selections > packages.txt → WSL中 dpkg --set-selections < packages.txt && apt-get dselect-upgrade |
| 用户配置 | 拷贝 ~/.bashrc, ~/.ssh, ~/.config 等 dotfiles |
| Docker 镜像/容器 | docker save/load 或推送到 Registry |
| 数据库 | 使用 mysqldump / pg_dump 等原生导出工具 |
⚠️ 注意事项
- 内核差异:Hyper-V 使用完整的 Linux 内核,WSL2 使用微软定制的轻量级内核。极少数依赖特定内核模块的程序可能无法在 WSL 中运行。
- Systemd :WSL2 较新版本已支持 systemd,但如果你的服务依赖完整的 init 系统行为,可能需要额外配置。确认
/etc/wsl.conf中有[boot] systemd=true。 - 网络配置:Hyper-V 中的静态 IP、网卡绑定等网络配置在 WSL 中不适用,需要重新适配 WSL 的网络模式(NAT/mirrored)。
- 磁盘空间:确保 Windows 目标盘有足够的空间,tar 包 + 解压后的 VHDX 文件会占用较多空间。
- 清理 :迁移完成并验证无误后,记得删除
/tmp下的 tar 包以释放 Hyper-V 虚拟机的磁盘空间。
推荐优先使用方法一,它是最完整、最可靠的整机迁移方案。