无忧启动论坛

标题: VHDX系统一键还原 [打印本页]

作者: 天使说请安静    时间: 2021-8-26 11:55
标题: VHDX系统一键还原
本帖最后由 天使说请安静 于 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菜单.




作者: liujun2000    时间: 2021-8-26 15:32
好想法
作者: lily9718    时间: 2021-8-27 07:13
谢谢分享
作者: zpwz    时间: 2021-8-27 08:42
感谢楼主 分享
作者: 2011xiongdeyuan    时间: 2021-8-29 12:09
好想法
作者: xuguang    时间: 2021-8-29 16:22
#在这谢谢分享里快速回复#
作者: fhb759123    时间: 2021-8-31 14:06
谢谢无私分享
作者: nsdbc    时间: 2021-8-31 17:49
有没有成品的文件可以提供了参考一下?
作者: q2811121939    时间: 2021-9-4 22:09
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"
作者: q2811121939    时间: 2021-9-4 22:10
本帖最后由 q2811121939 于 2021-9-4 22:18 编辑

真麻烦,以上内容建立bat,加开机启动,修改路径和启动菜单id,需要还原手动选择“Huan Yuan”启动项即可,唯一缺陷是efi分区不能还原,可手动打包7z,出问题去pe还原efi分区。
作者: 天使说请安静    时间: 2021-9-6 10:17
本帖最后由 天使说请安静 于 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
作者: 天使说请安静    时间: 2021-9-6 11:46
q2811121939 发表于 2021-9-4 22:10
真麻烦,以上内容建立bat,加开机启动,修改路径和启动菜单id,需要还原手动选择“Huan Yuan”启动项即可, ...

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

你厉害
作者: opq    时间: 2021-10-29 11:26
那不是要占两份空间?
作者: 天使说请安静    时间: 2021-10-30 15:56
opq 发表于 2021-10-29 11:26
那不是要占两份空间?

看使用强度咯,一般正在用的虚拟盘是5-6GB吧,新创建的是4MB,母盘应该是23GB左右
作者: Myptour    时间: 2022-2-20 19:45
需要这个,谢谢
作者: likeyouli    时间: 2022-3-14 20:39
看了8遍还是没看懂 ,,怎么能快速看懂呢
作者: 天使说请安静    时间: 2022-3-15 13:59
likeyouli 发表于 2022-3-14 20:39
看了8遍还是没看懂 ,,怎么能快速看懂呢

隔了这么久我自己都看不是很懂了
作者: likeyouli    时间: 2022-3-15 14:22
天使说请安静 发表于 2022-3-15 13:59
隔了这么久我自己都看不是很懂了

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

我不是大神....你可以做多个VHDX啊,引导多做几个对应的就好,如果不需要还原功能可以不做差分.
做差分最好把父级VHDX属性改成只读,防止哪天不小心PE里挂载了差分就废了.
但是长久使用VHDX不知道会不会影响固态硬盘的寿命,垃圾回收和磨损均衡之类的功能.
作者: dos时代菜鸟    时间: 2022-3-16 09:59
我也有个想法:
事先准备好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 .
作者: likeyouli    时间: 2022-3-16 10:29
天使说请安静 发表于 2022-3-16 09:50
我不是大神....你可以做多个VHDX啊,引导多做几个对应的就好,如果不需要还原功能可以不做差分.
做差分最 ...

我就想长久使用,需要还原功能,肯定要差分系统,长久使用的话,差分系统和正常硬盘分区的系统有差别吗 ?
性能会不会有损耗? 我用win10专业版
作者: 天使说请安静    时间: 2022-3-16 12:01
dos时代菜鸟 发表于 2022-3-16 09:59
我也有个想法:
事先准备好3个一模一样但名字不同的  子vhdx ,0.vhdx  , a.vhdx ,   b.vhdx
设置好 开机 ...

这个批处理改一下放在开机启动可以实现的
子VHDX不用先备份,每次开机都给它差分出来一个用于下次启动就好了
作者: 天使说请安静    时间: 2022-3-16 12:03
likeyouli 发表于 2022-3-16 10:29
我就想长久使用,需要还原功能,肯定要差分系统,长久使用的话,差分系统和正常硬盘分区的系统有差别吗  ...

我的主系统是用传统分区安装的,VHDX对硬盘性能影响多大我也不确定,稳定性的话,至少我暂时没遇到过是因为VHDX导致的蓝屏.但是网上有说固态硬盘的储存机制是在主控上的跟系统关系不大,所以寿命这边应该影响不大
作者: likeyouli    时间: 2022-3-16 17:30
天使说请安静 发表于 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" 就没问题,真是邪门了~~
作者: 天使说请安静    时间: 2022-3-17 09:39
likeyouli 发表于 2022-3-16 17:30
麻烦再请教:BCDEDIT /SET {ffffffff-0000-0000-1111-ffffffffffff} description "WINDOWS 10"  这个命令 ...

需要先创建一个ID为 {ffffffff-0000-0000-1111-ffffffffffff} 的启动项
VHDX里面不用EFI分区,你看看是不是这个问题
作者: dos时代菜鸟    时间: 2022-3-17 09:50
天使说请安静 发表于 2022-3-16 12:01
这个批处理改一下放在开机启动可以实现的
子VHDX不用先备份,每次开机都给它差分出来一个用于下次启动就 ...

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

弄了个差不多,另开贴了。
作者: 82247888ok    时间: 2024-10-9 10:21

感谢分享!
作者: wn168cn@163.com    时间: 2024-10-9 10:32
感谢分享




欢迎光临 无忧启动论坛 (http://wuyou.net./) Powered by Discuz! X3.3