从 VHDX 文件恢复 (导入) WSL 2 安装

2023-05-16

Microsoft 官方以及常见的 WSL 导入导出方式, 都是通过 wsl --export 生成 tar 文件而使用 wsl --import 命令完成导入.

但是, 有时候出于某些意外, 比如系统出现严重问题需要重装, 或者其他导致注册表丢失的情况, Windows 丢失了 WSL 安装相关的信息, 将无法使用上述的方式进行导出.

不过, 只要还有 WSL 所在的 VHDX 文件 (虚拟磁盘文件), 就没有问题, 因为 WSL 最关键的就是这个虚拟磁盘文件, 只需要在注册表中重建相应的信息就能正常使用.

有时候 WSL 磁盘文件过大, 导入导出时容易出现问题, 这种方式也是适用的.

本文讲解的思路主要来自于 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 文件, 重建安装信息, 再导入注册表即能恢复 WSL 安装.

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

将内容保存成后缀名为 reg 的文件, 比如一个名为 wsl-info.reg 的文件, 这样在 Windows 资源管理器中双击就可以完成导入.

导入完成后, 就可以在 Windows Termial 或者 wsl 命令中找到这个发行版了.

需要迁移 WSL 2 的情况

类似的, 只需要有 WSL 的 VHDX 文件, 重新建立注册表即可. 注意使用对应用户的 SID.

参考资料

  • Manually installing WSL2 distributions - DEV Community

关于 Windows 路径名缩写

  • 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

WSL 安装和使用

  • 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

  1. X:/Users/%UserName%/AppData/Local/Packages. 另见参考资料中 “关于 Windows 路径名缩写”. ↩︎

  2. 参考 @synergies 的评论回复. ↩︎

  3. 参考 Security identifiers - Microsoft Docs. ↩︎

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 VHDX 文件恢复 (导入) WSL 2 安装 的相关文章

  • wsl重启及如何在wsl下执行cmd命令

    wsl重启 本质上修改环境变量source不生效 想重启一下又要打开命令行 其实wsl可以直接调用windows下的程序 因此只需要执行 wsl exe 但是执行习惯了reboot 可以在shell的配置文件中配置alias span cl
  • WSL的CentOS7报错Failed to get D-Bus connection: Operation not permitted解决办法

    WSL的CentOS7使用systemctl和service命令时报错Failed to get D Bus connection Operation not permitted 解决办法是更换systemctl文件 首先备份systemc
  • WSL使用NFS

    微软的WLS下挂NFS系统是失败的 xff0c 因为内核不支持 xff0c 此路是不通的 xff0c 至少目前我是没有找到解决办法 xff0c 可以使用hane winNFS替代
  • Docker Desktop requires a newer WSL kernel version.

    问题描述 xff1a Docker Desktop requires a newer WSL kernel version 问题截图 xff1a 问题原因 xff1a WSL不是最新版 解决方案 xff1a 适用于 Linux 的 Wind
  • Windows11 WSL子系统ubuntu22.04 修改hostname

    大家都知道以往我们修改 Linux系统的 hostname只要修改 etc hostname 这个文件中的名字即可 但是在WSL中修改该文件是无法生效的 要修改Hostname并使它生效 我们必须修改 etc wsl conf 文件 编辑配
  • [WSL2+ROS (就不用虚拟机] 无法使用图形界面

    按照教程 rosrun打开小乌龟时失败 尝试查找原因发现wsl被微软阉割过没有图形界面 按照教程 转载安装VcXsrv图形界面 到这一步时如教程所说出现Cant open display的错误 更改DISPLAY 依旧报错 头痛 后尝试将D
  • 使用WSL2,开启Linux之旅

    使用WSL2 开启Linux之旅 1 确认虚拟环境的开启 2 更新WSL 3 安装ubuntu镜像 4 修改镜像路径 5 更换国内镜像源 6 配置ssh 7 配置远程桌面访问 在开始之前 提供官方链接如何更新及使用WSL 如果觉得官方操作难
  • WSL忘记密码?记一次在 WSL 中重设 Linux 密码

    当你 在 Windows 上使用 WSL 安装 Linux 时 会要求你创建一个用户名和密码 当你在 WSL 上启动 Linux 时 这个用户会自动登录 现在的问题是 如果你有一段时间没有使用它 你可能会忘记 WSL 的账户密码 而如果你要
  • 【WSL】[02] windows subsytem linux 配置和使用

    第 2 章前言 上一篇我们已经安装好了ubuntu在WSL下的GUI的桌面 我们现在继续进一步进行配置工作 同时也把 运用WSL的流程摸一把 以备后用 补充1 彻底的关闭WSL的方法 WSL使用后 原来Windows安装的传统虚拟机是用不了
  • 在window10 WSL 中编译 OpenJDK13

    简介 最新的OpenJDK13已经发布到git上 可以git pull 然后编译了 这里介绍了直接在windows 10 的WSL环境中进行build并测试 准备 在Open JDK13的网站文档中说 很简单的几步操作就好 下载源码 hg
  • [OtterCTF 2018]之Misc篇(NSSCTF)刷题记录⑦

    NSSCTF Misc篇 OtterCTF 2018 OtterCTF 2018 General Info OtterCTF 2018 Play Time OtterCTF 2018 Silly Rick OtterCTF 2018 Wha
  • wsl linux 安装

    1 首先确保windwos的操作系统 win 10 我的系统版本Microsoft Windows 版本 10 0 17134 285 2 开启 适用于linux的windows子系统 在 控制面板 程序 程序和功能 中 3 下载linux
  • win10 安装 Ubuntu 子系统

    参考 Linux Ubuntu 20 04换阿里源 Ubuntu 20 04换国内源 清华源 阿里源 中科大源 163源 开启win10下Ubuntu子系统的SSH服务 Win10 wsl linux子系统ssh服务自启动设置 安装使用oh
  • Windows11 配置WSL-GUI

    前言 之前在使用Windows10的时候开始关注WSL 最早WSL还不是运行在Hyper虚拟机上的 之前是和Windows10系统高度绑定的 后来WSL2的时候就开始基于Hyper虚拟机了 必须要在配置里打开Hyper才能使用 在折腾的时候
  • 更改wsl中系统的安装位置

    wsl默认安装位置是C盘 众所周知C盘总是不够用的 所以才有了把wsl的系统迁移到其它位置的需求 官网文档 首先查看所有分发版本 wsl l all v 列出已安装的Linux发行版 wsl list verbose 导出分发版为tar文件
  • Win10 WSL运行docker报错:Cannot connect to the Docker daemon at unix:///var/run/docker.sock.

    我安装的子系统是Ubuntu 1804 安装docker步骤如下 sudo apt update 更新软件源 sudo apt install y docker io 安装docker sudo usermod aG docker leo
  • WSL安装cuda输入nvidia-smi遇到报错

    打算在WSL安装Cuda 但是安装成功后发现输入nvidia smi一直报错 查了很多文章都没法解决 本来都准备放弃了 随手查看了下WSL版本 发现WSL一直是 1 改成 2 之后再次安装CUDA WSL驱动直接成功 1 在powershe
  • 2023最新WSL搭建深度学习平台教程(适用于Docker-gpu、tensorflow-gpu、pytorch-gpu)

    导语 2023 4 11 对于机器学习er配置环境一直是个头疼的事 尤其是在windows系统中 尤其像博主这样的懒人 又不喜欢创建虚拟环境 过段时间又忘了环境和包的人 经常会让自己电脑里装了各种深度学习环境和python包 长时间会导致自
  • WSL——NextCloud 在 Windows 端的网络访问配置

    NextCloud 在 Windows 端的网络访问配置 1 WSL2 的 IP 配置问题 在 Windows 每次重启后 WSL2 的 IP 将会发生变化 即 WSL2 的 IP 并非静态地址 为此 通过下述代码可以手动为 WSL2 增加
  • windows11安装wsl2(linux)+VScode+ miniconda+TVM+python环境部署

    在wsl上运行 TVM demo 环境配置 预备加速工具 vpn 清华镜像 第一次安装 失败 1 Windows11 D盘安装wls linux 2 安装vscode并连接到WSL2 3 wsl 安装miniconda 4 wls安装TVM

随机推荐

  • Ubuntu18 AMD和ARM版本的源的区别

    Ubuntu18 AMD和ARM版本的源的区别 文章目录 Ubuntu18 AMD和ARM版本的源的区别AMD版本ARM版本主要区别 之前因为懒没有仔细研究ubuntu AMD和ARM版本系统apt源的区别 xff0c 导致今天换源时候走了
  • 【C51】基于C51单片机的定时闹钟(含代码,电路,拿走即可用)

    基于C51单片机的定时闹钟 上电后设置定时时间 xff0c 按键1选择设置的是小时分钟还是秒钟 按键2对其进行具体的数字设置 一次选择完成之后就默认进入计时模式 达到计时时间后响铃 按键3可以关闭响铃 代码 span class token
  • 解决Centos7.9图形界面root用户登录报“sorry, that didn‘t work please try again”问题

    一 问题描述 xff1a 新装的Centos7 9 在图形界面以root身份进行登录时报 sorry that didn t work please try again xff0c 如下图所示 xff1a 经确认 xff0c root密码是
  • ubuntu 安装QT 5.0出现错误:Failed to load platform plugin "xcb".

    当你安装QT 5 0 时 xff0c 启动的时候会出现如下错误 xff1a Failed to load platform plugin 34 xcb 34 Available platforms are linuxfb minimal x
  • 获取Android设备的序列号(SN号)

    方法 xff08 一 xff09 通过反射获取sn号 public static String getDeviceSN String serial 61 null try Class lt gt c 61 Class forName 34
  • Python smtplib.SMTP()和smtplib.SMTP_SSL() 登录邮箱并发送邮件比较

    一 邮件发送流程 邮件的发送是主动行为 xff1a 主要通过 MUA 邮件客户端软件 xff0c 将邮件内容发送给对应的服务器 暂存到投递服务区 xff0c 然后由当前运营商根据邮件特征信息将邮件转发给目标服务器的投递服 务区 xff0c
  • mysql limit 使用规范

    在我们使用查询语句的时候 xff0c 经常要返回前几条或者中间某几行数据 xff0c 这个时候怎么办呢 xff1f 不用担心 xff0c mysql 已经为我们提供了上面这样一个功能 xff08 0 xff09 mysql不支持select
  • 【Proteus仿真】【STM32单片机】智能电饭煲系统设计

    文章目录 一 功能简介二 软件设计三 实验现象联系作者 一 功能简介 本项目使用Proteus8仿真STM32单片机控制器 xff0c 使用继电器加热 保温模块 数码管模块 按键模块 LED指示灯 蜂鸣器模块等 主要功能 xff1a 系统运
  • Kurento-6.7.1 媒体服务器搭建详细教程(Kurento-Media-Server)

    Kurento 6 7 1 媒体服务器搭建详细教程 关于 Kurento 媒体服务器 Kurento 架构的核心是媒体服务器 xff0c 它被命名为Kurento媒体服务器 xff0c 即 KMS Kurento 媒体服务器所有的媒体处理模
  • 什么是jsp?

    什么是JSP JSP全称Java Server Pages xff0c 是一种动态网页开发技术 它使用JSP标签在HTML网页中插入Java代码 标签通常以 lt 开头以 gt 结束 JSP是一种Java servlet xff0c 主要用
  • Echarts实现自定义图标——风向图

    上图用了两种模式表示风向图 xff0c 第一种是自定义系列 xff0c 第二种使用了折线图 xff0c 给折线图添加自定义图标 两者的区别在于给options series设置不同的type值 xff0c 如下图 xff1a 那么我们来一步
  • 最大公约数的四种方法

    最大公约数的四种方法 前言1 暴力穷举法2 辗转相除法步骤原理证明 xff1a 3 更相减损法步骤原理证明 xff1a 比较 4 stein算法比较原理步骤 前言 求两数的最大公约数 xff0c 一共有四种方法 xff1a 暴力穷举法 更相
  • Codeblocks配合gfortran作为fortran开发环境的配置方法

    xff08 以前在bmy bbs发过一次 xff09 这个方法试过在64位win7和32位winxp上可用 1 xff0c 首先安装codeblockes xff0c 必须选完全安装 xff08 Full All plugins xff09
  • Mysql jdbc URL连接参数useSSL、serverTimezone 相关问题

    MySQL 8 0 以下版本 JDBC 驱动名及数据库 URL span class token keyword static span span class token keyword final span span class toke
  • Week8 CSP-M2

    T1 HRZ的序列 题目 相较于咕咕东 xff0c 瑞神是个起早贪黑的好孩子 xff0c 今天早上瑞神起得很早 xff0c 刷B站时看到了一个序列aa xff0c 他对这个序列产生了浓厚的兴趣 他好奇是否存在一个数KK xff0c 使得一些
  • 如何在linux环境下启动时打开numlock

    如何在linux环境下启动时打开numlock 技巧管理员 2000 12 24 10 23 返回 转发 想在系统启动时自动打开NumLock xff0c 可以在 etc rc d rc local中加入以下内容 xff1a for t i
  • 【洛谷】每日一题-P1786 帮贡排序

    原题链接 P1786 帮贡排序 解析 实现方法 一看题 xff1a 这不就是道排序吗 xff1f 但是 用啥办法呢 xff1f 这自带的排序方法 xff0c 肯定是不能用了 那么我们就来写一个cmp排序函数吧 xff01 但是 输出排序呢
  • CCF 201609-3炉石传说 (100分)

    xff08 1 xff09 题目描述 xff08 2 xff09 算法思想 题目看起来很长 xff0c 但是只要玩过游戏阅读起来很容易理解 xff0c 充分理解后按照要求模拟即可没有什么难度 需要注意的一点就是从者的位置 xff0c 可以选
  • Mac Tesseract 4.1.1 样本训练超详细教程

    安装 Mac直接安装tesseract的话无法附带安装training tools 如果已经安装了没有training tools的tesseract xff0c 请先卸载 brew uninstall tesseract 先安装一些依赖的
  • 从 VHDX 文件恢复 (导入) WSL 2 安装

    Microsoft 官方以及常见的 WSL 导入导出方式 都是通过 wsl export 生成 tar 文件而使用 wsl import 命令完成导入 但是 有时候出于某些意外 比如系统出现严重问题需要重装 或者其他导致注册表丢失的情况 W