无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 10248|回复: 26
打印 上一主题 下一主题

[分享] VHDX系统一键还原

[复制链接]
跳转到指定楼层
1#
发表于 2021-8-26 11:55:56 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 天使说请安静 于 2021-9-6 11:39 编辑

前两天看到 2010speedloong 大佬发布的教程
联想到BCDEDIT命令,想要尝试能不能做个隐藏物理分区的方式来启动VHDX系统并实现一键还原
瞎折腾老久实现了.分享一下,如果能给大家新思路更好.
用的是原版的镜像,标卷为Acer的分区没有隐藏,只是删除了盘符.原本的盘符是D,我把它关到文件夹里面去了:(echo select vol D&assign mount=C:\windows\system\vhdx)|diskpart
批处理代码↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
@echo OFF
setlocal enabledelayedexpansion
set FR=%~dP0
SET B=boot1
del %FR%boot1.vhdx
del %FR%boot2.vhdx
if exist %FR%boot1.vhdx set B=boot2
for /f "tokens=2 delims==" %%i in ('bcdedit ^/ENUM ^{ffffffff-0000-0000-0000-ffffffffffff^}^|findstr partition') do set HV=%%i
echo create vdisk file=%FR%%B%.VHDX parent=%FR%beas.VHDX|DISKPART
BCDEDIT /create {ffffffff-0000-0000-1111-ffffffffffff} /d "WINDOWS 10" /application OSLOADER
BCDEDIT /SET {ffffffff-0000-0000-1111-ffffffffffff} device VHD=[%HV%]\%B%.VHDX
BCDEDIT /SET {ffffffff-0000-0000-1111-ffffffffffff} osdevice VHD=[%HV%]\%B%.VHDX
BCDEDIT /SET {ffffffff-0000-0000-1111-ffffffffffff} path \Windows\system32\winload.efi
BCDEDIT /SET {ffffffff-0000-0000-1111-ffffffffffff} description "WINDOWS 10"
BCDEDIT /SET {ffffffff-0000-0000-1111-ffffffffffff} locale zh-CN
BCDEDIT /SET {ffffffff-0000-0000-1111-ffffffffffff} systemroot \Windows
BCDEDIT /SET {ffffffff-0000-0000-1111-ffffffffffff} nx OptIn
BCDEDIT /SET {ffffffff-0000-0000-1111-ffffffffffff} detecthal Yes
BCDEDIT /SET {bootmgr} default  {ffffffff-0000-0000-1111-ffffffffffff}
ECHO 系统将在重启时恢复。
PAUSE

↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
实测 device/osdevice地址如果直接用 C:\windows\system\vhdx 会直接引导失败X^X
for /f "tokens=2 delims==" %%i in ('bcdedit ^/ENUM ^{ffffffff-0000-0000-0000-ffffffffffff^}^|findstr partition') do set HV=%%i 这个命令是为了获取VHDX的路径,我不知道这是啥格式....它不是绝对的,如果接着别的存储设备进系统它会变化.
{ffffffff-0000-0000-0000-ffffffffffff}是我之前手动创建WinRE的SDI路径,它是跟VHDX在同一个目录的.
设备选项
--------------
标识符                  {ffffffff-0000-0000-0000-ffffffffffff}
description             Windows Recovery
ramdisksdidevice        partition=\Device\HarddiskVolume3
ramdisksdipath          \Recovery\WindowsRE\boot.sdi
成品跟这个差不多了,主要是识别隐藏分区的路径
然后如果两个VHDX都有问题导致无法引导的问题可以把WinRE的引导项加进BCD的启动列表:
bcdedit /set {bootmgr} displayorder {current} {winRE的ID}
bcdedit /set {bootmgr} timeout 0
这样如果发生某些不可描述的BUG导致两个VHDX都不见了的话,可以自动引导WinRE,而且不会显示bootmgr菜单.



评分

参与人数 3无忧币 +9 收起 理由
yang77 + 5 很给力!
2011xiongdeyuan + 3
wwb1234567 + 1 赞一个!

查看全部评分

2#
发表于 2021-8-26 15:32:28 | 只看该作者
好想法
回复

使用道具 举报

3#
发表于 2021-8-27 07:13:46 | 只看该作者
谢谢分享
回复

使用道具 举报

4#
发表于 2021-8-27 08:42:46 | 只看该作者
感谢楼主 分享
回复

使用道具 举报

5#
发表于 2021-8-29 12:09:03 | 只看该作者
好想法
回复

使用道具 举报

6#
发表于 2021-8-29 16:22:14 | 只看该作者
#在这谢谢分享里快速回复#
回复

使用道具 举报

7#
发表于 2021-8-31 14:06:09 | 只看该作者
谢谢无私分享
回复

使用道具 举报

8#
发表于 2021-8-31 17:49:31 | 只看该作者
有没有成品的文件可以提供了参考一下?

点评

成品跟这个差不多了,主要是识别隐藏分区的路径 然后如果两个VHDX都有问题导致无法引导的问题可以把WinRE的引导项加进BCD的启动列表: bcdedit /set {bootmgr} {current} {winRE的ID} bcdedit /set {bootmgr} timeo  详情 回复 发表于 2021-9-6 10:17
回复

使用道具 举报

9#
发表于 2021-9-4 22:09:50 | 只看该作者
copy \\?\GLOBALROOT\device\harddisk0\partition2\BAK.VHDX \\?\GLOBALROOT\device\harddisk0\partition2\B1.VHDX /y
copy \\?\GLOBALROOT\device\harddisk0\partition2\BAK.VHDX \\?\GLOBALROOT\device\harddisk0\partition2\B2.VHDX /y
bcdedit /default {current}
bcdedit /set {7428976e-0d1a-11ec-b4ce-ce53c9e10877} description "Huan Yuan"
bcdedit /set {1ee23a8a-9e37-40a7-a272-3a587777ec76} description "Huan Yuan"
bcdedit /set {current} description "Qi Dong"
回复

使用道具 举报

10#
发表于 2021-9-4 22:10:37 | 只看该作者
本帖最后由 q2811121939 于 2021-9-4 22:18 编辑

真麻烦,以上内容建立bat,加开机启动,修改路径和启动菜单id,需要还原手动选择“Huan Yuan”启动项即可,唯一缺陷是efi分区不能还原,可手动打包7z,出问题去pe还原efi分区。

点评

首先,"真麻烦"三个字已经可以确定你是过来找优越感的了. 其次,原作者希望实现的功能是"每次开机还原",不用手动选择引导项. 再者,我原意是给大家分享一下思路而不是让大家必须怎样去做,你有更好的建议完全可以正常  详情 回复 发表于 2021-9-6 11:46
回复

使用道具 举报

11#
 楼主| 发表于 2021-9-6 10:17:28 | 只看该作者
本帖最后由 天使说请安静 于 2021-9-6 11:35 编辑
nsdbc 发表于 2021-8-31 17:49
有没有成品的文件可以提供了参考一下?

成品跟这个差不多了,主要是识别隐藏分区的路径
然后如果两个VHDX都有问题导致无法引导的问题可以把WinRE的引导项加进BCD的启动列表:
bcdedit /set {bootmgr} displayorder {current} {winRE的ID}
bcdedit /set {bootmgr} timeout 0
回复

使用道具 举报

12#
 楼主| 发表于 2021-9-6 11:46:27 | 只看该作者
q2811121939 发表于 2021-9-4 22:10
真麻烦,以上内容建立bat,加开机启动,修改路径和启动菜单id,需要还原手动选择“Huan Yuan”启动项即可, ...

首先,"真麻烦"三个字已经可以确定你是过来找优越感的了.
其次,原作者希望实现的功能是"每次开机还原",不用手动选择引导项.
再者,我原意是给大家分享一下思路而不是让大家必须怎样去做,你有更好的建议完全可以正常跟帖或者另开教程.
然后,我这个批处理一样可以直接开机启动/WinRE/PE环境运行,哪怕硬件环境变了,只要SDI文件还在,都能找回引导路径.
最后,我们都是站在前辈的经验上的,谦虚一点没错的.
回复

使用道具 举报

13#
发表于 2021-9-8 21:28:19 来自手机 | 只看该作者
本帖最后由 q2811121939 于 2021-9-9 02:55 编辑

你厉害
回复

使用道具 举报

14#
发表于 2021-10-29 11:26:24 | 只看该作者
那不是要占两份空间?

点评

看使用强度咯,一般正在用的虚拟盘是5-6GB吧,新创建的是4MB,母盘应该是23GB左右  详情 回复 发表于 2021-10-30 15:56
回复

使用道具 举报

15#
 楼主| 发表于 2021-10-30 15:56:10 | 只看该作者
opq 发表于 2021-10-29 11:26
那不是要占两份空间?

看使用强度咯,一般正在用的虚拟盘是5-6GB吧,新创建的是4MB,母盘应该是23GB左右
回复

使用道具 举报

16#
发表于 2022-2-20 19:45:05 来自手机 | 只看该作者
需要这个,谢谢
回复

使用道具 举报

17#
发表于 2022-3-14 20:39:31 | 只看该作者
看了8遍还是没看懂 ,,怎么能快速看懂呢
回复

使用道具 举报

18#
 楼主| 发表于 2022-3-15 13:59:36 | 只看该作者
likeyouli 发表于 2022-3-14 20:39
看了8遍还是没看懂 ,,怎么能快速看懂呢

隔了这么久我自己都看不是很懂了
回复

使用道具 举报

19#
发表于 2022-3-15 14:22:54 | 只看该作者
天使说请安静 发表于 2022-3-15 13:59
隔了这么久我自己都看不是很懂了

请教大神一个问题,我原来安装多系统,都是硬盘格式化后分多个分区,分别安装了win10专业(主系统),win10企业,win8专业,win8企业,最近才接触vhdx,感觉不错,于是有了这么一个想法:我电脑960g固态,就分成一个区,进微pe,vhdx后先安装win10专业作为母盘系统(因为win10专业用着最舒服),再差分多系统,您看这种方案最佳吗 或者您能帮忙提供一个最佳方案
回复

使用道具 举报

20#
 楼主| 发表于 2022-3-16 09:50:54 | 只看该作者
likeyouli 发表于 2022-3-15 14:22
请教大神一个问题,我原来安装多系统,都是硬盘格式化后分多个分区,分别安装了win10专业(主系统),win ...

我不是大神....你可以做多个VHDX啊,引导多做几个对应的就好,如果不需要还原功能可以不做差分.
做差分最好把父级VHDX属性改成只读,防止哪天不小心PE里挂载了差分就废了.
但是长久使用VHDX不知道会不会影响固态硬盘的寿命,垃圾回收和磨损均衡之类的功能.
回复

使用道具 举报

21#
发表于 2022-3-16 09:59:43 | 只看该作者
我也有个想法:
事先准备好3个一模一样但名字不同的  子vhdx ,0.vhdx  , a.vhdx ,   b.vhdx
设置好 开机 就运行一个批处理,三个 子vhdx 中都要有。
批处理功能:
1.判断当前系统对应的 子vhdx  a.vhdx 或者 b.vhdx
2.用备份好的  0.vhdx 替换 另外的 子vhdx ,b.vhdx 或者 a.vhdx
3.修改 bcd 指向 另一个 子vhdx ,b.vhdx 或者 a.vhdx

这样 ,重新启动,bcd 调用的永远是 干净的  子 vhdx .

点评

这个批处理改一下放在开机启动可以实现的 子VHDX不用先备份,每次开机都给它差分出来一个用于下次启动就好了  详情 回复 发表于 2022-3-16 12:01
回复

使用道具 举报

22#
发表于 2022-3-16 10:29:41 | 只看该作者
天使说请安静 发表于 2022-3-16 09:50
我不是大神....你可以做多个VHDX啊,引导多做几个对应的就好,如果不需要还原功能可以不做差分.
做差分最 ...

我就想长久使用,需要还原功能,肯定要差分系统,长久使用的话,差分系统和正常硬盘分区的系统有差别吗 ?
性能会不会有损耗? 我用win10专业版
回复

使用道具 举报

23#
 楼主| 发表于 2022-3-16 12:01:20 | 只看该作者
dos时代菜鸟 发表于 2022-3-16 09:59
我也有个想法:
事先准备好3个一模一样但名字不同的  子vhdx ,0.vhdx  , a.vhdx ,   b.vhdx
设置好 开机 ...

这个批处理改一下放在开机启动可以实现的
子VHDX不用先备份,每次开机都给它差分出来一个用于下次启动就好了

点评

现创建 child vhd 不如实现创建好备用,也不占多大体积。 成平 弄了个差不多,另开贴了。  详情 回复 发表于 2022-3-17 09:50
回复

使用道具 举报

24#
 楼主| 发表于 2022-3-16 12:03:15 | 只看该作者
likeyouli 发表于 2022-3-16 10:29
我就想长久使用,需要还原功能,肯定要差分系统,长久使用的话,差分系统和正常硬盘分区的系统有差别吗  ...

我的主系统是用传统分区安装的,VHDX对硬盘性能影响多大我也不确定,稳定性的话,至少我暂时没遇到过是因为VHDX导致的蓝屏.但是网上有说固态硬盘的储存机制是在主控上的跟系统关系不大,所以寿命这边应该影响不大
回复

使用道具 举报

25#
发表于 2022-3-16 17:30:13 | 只看该作者
天使说请安静 发表于 2022-3-16 12:03
我的主系统是用传统分区安装的,VHDX对硬盘性能影响多大我也不确定,稳定性的话,至少我暂时没遇到过是因为V ...

麻烦再请教:BCDEDIT /SET {ffffffff-0000-0000-1111-ffffffffffff} description "WINDOWS 10"  这个命令我咋就一次都没用成功过?  我先 bcdedit /enum 查到我电脑另一系统标识符{b4f5ee6a-9dd8-11ec-9b5f-f3f2b2bb668e}
然后BCDEDIT /SET {b4f5ee6a-9dd8-11ec-9b5f-f3f2b2bb668e}  description "WINDOWS 10ceshiceshi"
就会提示:指定的设置命令无效。
运行 "bcdedit /?" 获得命令行帮助。
参数错误。
但如果我更改我现在正启动的系统 bcdedit /set description  "WINDOWS 10ceshiceshi" 就没问题,真是邪门了~~
回复

使用道具 举报

26#
 楼主| 发表于 2022-3-17 09:39:25 | 只看该作者
likeyouli 发表于 2022-3-16 17:30
麻烦再请教:BCDEDIT /SET {ffffffff-0000-0000-1111-ffffffffffff} description "WINDOWS 10"  这个命令 ...

需要先创建一个ID为 {ffffffff-0000-0000-1111-ffffffffffff} 的启动项
VHDX里面不用EFI分区,你看看是不是这个问题
回复

使用道具 举报

27#
发表于 2022-3-17 09:50:51 | 只看该作者
天使说请安静 发表于 2022-3-16 12:01
这个批处理改一下放在开机启动可以实现的
子VHDX不用先备份,每次开机都给它差分出来一个用于下次启动就 ...

现创建 child vhd 不如事先创建好备用,也不占多大体积。

弄了个差不多,另开贴了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-4-27 18:46

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表