无忧启动论坛

标题: VHDX(VHD)镜像文件的差分启动解决方法 [打印本页]

作者: wavelu    时间: 2025-11-12 18:05
标题: VHDX(VHD)镜像文件的差分启动解决方法
VHDX(包括VHD)是微软的虚拟硬盘格式,在Windows 7 企业版和旗舰版开始支持VHD Native Boot引导,在Windows 8之后完善并增加了VHDX格式。

要启动VHDX镜像文件,通常都需要修改BCD文件,然后使用bootmgfw.efi来引导。

市面上其他第三方工具启动VHDX(VHD),原理上都是通过自动修改BCD文件最后调用bootmgfw.efi来引导,并非自身引导VHDX文件。

VHDX镜像文件的最大好处就是整个系统都在一个镜像文件中,同时镜像文件可以支持差分。差分可以快速还原到父镜像所处的系统状态。但是,bootmgfw.efi并不支持启动阶段对镜像文件进行差分。

于是,很多高手开发了多个VHD启动切换到PE,通过Windows内命令实现差分,生成子镜像,重启切换到子镜像启动。
另外的方法,通过复制指定的子镜像文件文件,实现变相的差分。

这些方法,业务逻辑上,都是没有直接方法选择的变相方法。

然而,UEFI作为现代BIOS固件,拥有极强的扩展能力,同时也支持链式引导,只要在bootmgfw.efi启动前,提前把子镜像文件创建出来,差分启动创建出来的子镜像,那么整个启动流程就是非常顺畅的,没有那么多弯弯绕。

但是,在UEFI环境下差分创建子镜像,需要解决VHDX文件格式解析问题、父镜像浏览指定问题、整体业务流程问题,故此这么多年来一直没看到成功方案。

现在,方案来了,云固件就是上面解决方法的落地实现项目。

差分实现过程:
1.通过配置文件,指定父镜像文件;
2.使用图形界面,选择镜像启动选项;
3.选择手动差分动作生成子镜像,并直接调用bootmgfw.efi启动;
4.对于已经生成的子镜像,可以选择直接启动;











作者: 呆萌鼠    时间: 2025-11-12 18:15
知识贴!学习了!
作者: it323    时间: 2025-11-12 18:25
感谢分享!
作者: zz3286979    时间: 2025-11-12 18:37
云固件,值得关注!
作者: sebs512    时间: 2025-11-12 18:44
大佬好,大佬辛苦了,云固件质量好
作者: klinux    时间: 2025-11-12 18:44
云固件,值得关注!方便快捷!
作者: wn168cn@163.com    时间: 2025-11-12 18:50
感谢分享!
作者: 1999    时间: 2025-11-12 18:55
支持支持,非常好用的软件。
作者: a66    时间: 2025-11-12 19:20
支持折腾~~使劲折腾...............
作者: afti    时间: 2025-11-12 19:30
云固件,值得分析研究
作者: 燕飞龙    时间: 2025-11-12 19:38
感谢分享
作者: PCHH    时间: 2025-11-12 20:23
知识贴!学习了!
作者: hzyry2046    时间: 2025-11-12 21:06
谢谢分享
作者: xuan5757    时间: 2025-11-12 21:13
好东西,我顶楼主。
作者: plutoshen    时间: 2025-11-12 21:29
楼主厉害了,真是小白的福音。
作者: promrhxq    时间: 2025-11-12 23:35
感谢分享好东东
作者: 20131234567    时间: 2025-11-13 00:14
这个可以 出个详细教程吧大佬
作者: ebaqiang    时间: 2025-11-13 00:37
知识贴!学习了!
作者: hudielixd    时间: 2025-11-13 06:43
正好需要。
作者: 419545168    时间: 2025-11-13 07:05
感谢分享
作者: yyz2191958    时间: 2025-11-13 07:20
[原创] V
作者: ddnflier    时间: 2025-11-13 08:05
不明觉厉,需要好好向楼主学习
作者: xiaomi1991    时间: 2025-11-13 08:48
感谢分享!
作者: a272121742    时间: 2025-11-13 09:12
感谢分享!
作者: 419545168    时间: 2025-11-13 09:17
感谢分享
作者: jnight    时间: 2025-11-13 09:33
感谢分享
作者: cncecpcy    时间: 2025-11-13 09:49
好。。。。。。。。。。
作者: smile_z    时间: 2025-11-13 11:19
感谢分享
作者: 2010511051330    时间: 2025-11-13 12:45
好工具,好想法

作者: tuice0liu    时间: 2025-11-13 17:22
云固件主要强调“镜像复制即用”的观念,别人制作好的镜像文件,只要下载下来解压镜像目录,并修改对应磁盘根目录的vd.config文件,就能直接在uefi环境启动vhdx、iso、img等系统镜像。某个系统不要了,直接删掉镜像目录就行了,非常方便。
作者: wintoflash    时间: 2025-11-13 19:29
本帖最后由 wintoflash 于 2025-11-13 19:32 编辑
市面上其他第三方工具启动VHDX(VHD),原理上都是通过自动修改BCD文件最后调用bootmgfw.efi来引导,并非自身引导VHDX文件。

不自身实现引导VHD/VHDX的主要原因是,开源项目很难解决Windows驱动的问题。
不借助微软bootmgfw的那一套东西,就要写个Windows驱动来实现VHD/VHDX挂载。
只有EV证书能给Windows驱动/EFI程序签名,这样就卡死了个体开发者的开源/闭源项目。

很多年以前骆辉红的vmlite vboot也实现了VHD差分启动,也是跟你类似的商业逻辑。
作者: fh123456    时间: 2025-11-13 21:17
新东西“云固件”
作者: seekyou2008    时间: 2025-11-14 08:48
wintoflash 发表于 2025-11-13 19:29
不自身实现引导VHD/VHDX的主要原因是,开源项目很难解决Windows驱动的问题。
不借助微软bootmgfw的那一 ...

看说明云里雾里的,又有一种似曾相识的感觉,之前搞过XP VHD 用的就是VBOOT,好像需要驱动注入,当时找官网都找不着了。
作者: fegr    时间: 2025-11-14 13:05
感谢楼主分享
作者: 假大空    时间: 2025-11-14 19:26
学习了

作者: cupidhwm    时间: 2025-11-14 20:02
好厉害的功能,云固件用了很久了,新功能也体验了很长时间,真的不错啊!
作者: cupidhwm    时间: 2025-11-14 20:05
wintoflash 发表于 2025-11-13 19:29
不自身实现引导VHD/VHDX的主要原因是,开源项目很难解决Windows驱动的问题。
不借助微软bootmgfw的那一 ...

你说的那个和这个云固件不是一回事啊?
作者: baolizhu    时间: 2025-11-14 21:55
辛苦了
作者: quan2    时间: 2025-11-15 09:08
感谢分享!
作者: 2010tcds    时间: 2025-12-7 00:32
谢谢楼主分享
作者: 小龙飞    时间: 2026-1-27 11:44
感谢您的分享!
作者: oym2016    时间: 2026-2-7 14:55
本帖最后由 oym2016 于 2026-2-7 15:12 编辑

解开过云固件,其核心是grub2 。即用grub2或grub4dos for uefi 可用其菜单现实差分启动VHD
最新grub2   2.14菜单:
     #如果 以uefi模式启动
if search --no-floppy --file  /Win11Ltsc/Win11Ltsc.vhdx;then
menuentry "Windows 11 Enterprise LTSC (vhdx)"   --class windows   {
       search --set=dev --file /Win11Ltsc/Win11Ltsc.vhdx
       probe --set=dev_uuid -u $dev
       if search -n -s -f /Win11Ltsc/G2Sign_A.iso;then
          linux ${prefix}/ntloader uuid=$dev_uuid vhd=/Win11Ltsc/VhdSub_A.vhdx
          initrd ${prefix}/initrd.cpio
       elif search -n -s -f /Win11Ltsc/G2Sign_B.iso;then
          linux ${prefix}/ntloader uuid=$dev_uuid vhd=/Win11Ltsc/VhdSub_B.vhdx
          initrd ${prefix}/initrd.cpio
      elif search -n -s -f /Win11Ltsc/Win11Ltsc.vhdx;then
          linux ${prefix}/ntloader uuid=$dev_uuid vhd=/Win11Ltsc/Win11Ltsc.vhdx
          initrd ${prefix}/initrd.cpio
      fi   
  }
fi
调整标志文件 即可控制项:

  reG2vdisk.bat...
@ECHO off&PUSHD %~dp0
setlocal enabledelayedexpansion

::设置父文件并显示
echo.&echo 本目录下虚拟文件...
set Sys=Win11Ltsc.vhdx
dir /b *.vhdx
echo ------------------------
echo.&echo 当前:系统父虚拟文件:%Sys%.将创建子虚拟文件:
echo.&pause
::创建差分
if exist VhdSub_A.vhdx (
   set Dif=VhdSub_B.vhdx
   ren G2Sign_A.iso G2Sign_B.iso
   ) else (
   set Dif=VhdSub_A.vhdx
   ren G2Sign_B.iso G2Sign_A.iso
   )
echo create vdisk file=%~dp0!Dif! parent="%~dp0!Sys!"|DISKPART >nul
exit
将批处理放置vhdx目录下 ,想恢复系统,手动运行一下这批处理,重启即可

用grub4dos for uefi 菜单:
iftitle [find --set-root /Win11Ltsc/Win11Ltsc.vhdx] Windows 11 Enterprise (ntboot)  \n  /Win11ProW/Win11Ltsc.vhdx
find /efi/grub/ext/ntboot | set bd=
find --set-root /Win11Ltsc/VhdSub_A.vhdx && %bd%/efi/grub/ext/ntboot /Win11Ltsc/VhdSub_A.vhdx
find --set-root /Win11Ltsc/VhdSub_B.vhdx && %bd%/efi/grub/ext/ntboot /Win11Ltsc/VhdSub_B.vhdx
find --set-root /Win11Ltsc/Win11Ltsc.vhdx && %bd%/efi/grub/ext/ntboot /Win11Ltsc/Win11Ltsc.vhdx
boot






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