624 字
3 分钟
wsl_恢复与迁移实录
记录一次在重装 Windows 后,找回原有 WSL Ubuntu 环境的全过程,包括踩坑、排错思路与最终稳定方案。
一、背景
- 之前已将 WSL Ubuntu 的存储迁移到 D 盘
- 系统重装后:
wsl命令本身可用(2.6.3.0)- 但导入、挂载旧系统全部失败
- 旧数据仍在:
D:\wsl2\ubuntu\ext4.vhdx(约 54GB)
目标:无损恢复原 WSL 系统与用户环境。
二、初始问题表现
1. 导入旧系统失败
wsl --import-in-place Ubuntu D:\wsl2\ubuntu# 报错:E_INVALIDARGwsl --mount D:\wsl2\ubuntu\ext4.vhdx --vhd --bare# 报错:WSL_E_WSL2_NEEDEDwsl --list --verbose# 没有任何已注册发行版结论:WSL2 内核/驱动并未真正工作,尽管命令表面可用。
三、WSL2 运行环境修复流程
按顺序执行:
wsl --shutdownwsl --update --web-downloaddism /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestartdism /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart- 重启 Windows
- 验证:
wsl --status如果仍然报挂载 / import 异常,说明:
WSL2 组件损坏或 Hyper-V 底层不可用。
四、关键判断:绕过 WSL2 内核
当以下情况同时存在时:
wsl --mount失败--import-in-place失败- 但
ext4.vhdx文件完整存在
最稳妥方案:绕过 WSL2,手工导出 rootfs 再导入。
五、100% 成功的恢复方案
Step 1:Windows 侧只读挂载旧 VHDX
Mount-VHD -Path D:\wsl2\ubuntu\ext4.vhdx -ReadOnly- 在“磁盘管理”中查看新出现的 RAW 磁盘号
- 右键 → 分配盘符(如
X:)
Step 2:用临时 Ubuntu 打包 rootfs
sudo mkdir /mnt/oldsudo mount -t drvfs X: /mnt/old
sudo tar -C /mnt/old -cpf /mnt/c/rootfs.tar .Step 3:重新导入为新发行版
wsl --import UbuntuRecovered D:\wsl2\UbuntuRecovered C:\rootfs.tar --version 2验证:
wsl -d UbuntuRecovered六、恢复默认用户
导入后默认用户可能变成 root 或新用户,但原用户目录仍在:
ls /home修复默认用户:
sudo usermod -d /home/olduser -s /bin/bash olduserUbuntuRecovered config --default-user olduser七、如果恢复后仍像“新系统”
说明导入的 不是原系统盘。
全盘搜索真实旧盘:
dir D:\ -Recurse -Filter ext4.vhdx判断标准:
- 体积最大
- 修改时间最接近重装前
找到后重新执行本博客的恢复流程。
八、核心经验总结
- WSL 命令可用 ≠ WSL2 内核可用
ext4.vhdx只要在,系统就 100% 可救wsl --import-in-place并不可靠Mount-VHD + tar + wsl --import是最终保险方案- 永远定期导出 rootfs:
wsl --export Ubuntu D:\backup\ubuntu-rootfs.tar九、结语
这次恢复本质是一次:
在 WSL2 底层损坏场景下的人肉冷迁移。
比重装 Ubuntu、重配开发环境快 10 倍。
强烈建议所有长期用 WSL 的人:
- 迁移前先导出
- 重装前先导出
- 系统大版本升级前先导出
完
wsl_恢复与迁移实录
https://fuwari.vercel.app/posts/wsl_恢复与迁移实录/