从 VHDX 文件恢复 (导入) WSL 2 安装 Microsoft 官方以及常见的 WSL 导入导出方式, 都是通过 wsl --export
生成 tar 文件而使用 wsl --import
命令完成导入.
但是, 有时候出于某些意外, 比如系统出现严重问题需要重装, 或者其他导致注册表丢失的情况, Windows 丢失了 WSL 安装相关的信息, 将无法使用上述的方式进行导出.
不过, 只要还有 WSL 所在的 VHDX 文件 (虚拟磁盘文件), 就没有问题, 因为 WSL 最关键的就是这个虚拟磁盘文件, 只需要在注册表中重建相应的信息就能正常使用.
有时候 WSL 磁盘文件过大, 导入导出时容易出现问题, 这种思路也是适用于的,
【Windows|从 VHDX 文件恢复 (导入) WSL 2 安装】本文讲解的思路主要来自于 Issue #4762 - Microsoft/WSL.
注册表丢失的情况 笔者在重装系统之前, 是通过 Microsoft Store 安装的 Ubuntu 发行版. 应用商店中的数据一般在 %LocalAppData%/Packages
1 下.
重置系统 (选择保留个人数据) 后, 数据文件会被 迁移 到 Windows.old
中, 也就是 X:/Windows.old/Users/%UserName%/AppData/Local/Packages
中.
其中, 商店里安装的 Ubuntu 发行版对应的包名会以 CanonicalGroupLimited.Ubuntu
开头, 打开对应的目录后, 在 LocalState
中就能找到 .vhdx
文件.
事实上, 重装系统后, 许多其他软件的数据也能从可以将Windows.old
中恢复. 为了防止Windows.old
在一段时间后被清清除, 建议及时备份Windows.old
中的用户文件.
.vhdx
文件剪切出来, 放在某个目录下, 比如 D:/wslinstall/ubuntu20.04
.之后, 编写对应的 REG 文件, 以便导入注册表. 文件模板:
Windows Registry Editor Version 5.00[HKEY_USERS\[SID]\SOFTWARE\Microsoft\Windows\CurrentVersion\Lxss\{[UUID]}]
"State"=dword:00000001
"DistributionName"="[DISTRO_NAME]"
"Version"=dword:00000002
"BasePath"="\\\\?\\[VHDX_PATH]"
"Flags"=dword:0000000f
"DefaultUid"=dword:000003e8
复制上述的模板到文本文件中, 并替换其中方括号标注的项 2:
项 | 替换说明 |
---|---|
[SID] 3 | 打开 “命令提示符”, 使用 whoami /user 命令获取到自己 (当前用户) 的 SID |
[UUID] | 可以去这个 UUID 生成网站 随机生成一个 UUID |
[DISTRO_NAME] | 指定发行版的名称, 比如 Ubuntu |
[VHDX_PATH] | 发行版所在的路径, 并将反斜线转义, 比如 D:\\WSL\\Ubuntu |
D:/wslinstall/ubuntu20.04
, 那么 REG 文件就类似如下所示:Windows Registry Editor Version 5.00[HKEY_USERS\<你的 SID>\SOFTWARE\Microsoft\Windows\CurrentVersion\Lxss\{8ebf13b4-6ce3-4027-a2c7-f84ab4dad111}]
"State"=dword:00000001
"DistributionName"="Ubuntu 20.04"
"Version"=dword:00000002
"BasePath"="\\\\?\\D:\\wslinstall\\ubuntu20.04"
"Flags"=dword:0000000f
"DefaultUid"=dword:000003e8
将内容保存成, 比如名为
wsl-info.reg
文件, 在资源管理器中直接双击就可以完成导入.导入完成后, 就可以在 Windows Termial 或者
wsl
命令中找到这个发行版了.迁移的情况 类似的, 只需要有 WSL 的 VHDX 文件, 重新建立注册表即可. 注意使用对应用户的 SID.
参考资料
- Manually installing WSL2 distributions - DEV Community
- What Is the AppData Folder in Windows? (howtogeek.com)
- AppData – Where to Find the AppData Folder in Windows 10 (freecodecamp.org)
- Windows special folders short names (%something%) – PCR’s notepad (patheticcockroach.com)
- How do I find AppData\LocalLow folders? - Microsoft Community
- Install WSL - Microsoft Docs
- Set up a WSL development environment - Microsoft Docs
- How do I get back unused disk space from ubuntu on wsl2? - Super User
- Get started mounting a Linux disk in WSL 2 | Microsoft Docs
- Connect USB devices | Microsoft Docs
- 即
X:/Users/%UserName%/AppData/Local/Packages
. 另见参考资料中 “关于 Windows 路径名缩写”. ??
- 参考 @synergies 的评论回复. ??
- 参考 Security identifiers - Microsoft Docs. ??
推荐阅读
- C++|走进Boost
- android-ndk-r15c-windows-x86_64
- windows修改图片默认程序打开方式
- linux安全|网络安全七大误解
- Tomcat - windows安装两个JDK并运行指定的JDK
- Forward windows logs to rsyslog server? with Nxlog
- WINDOWS编译JDK11
- 如何使用WindowsSever2019安装网站程序()
- SC实现隐藏Windows服务维持权限