无忧启动论坛

 找回密码
 注册
搜索
最纯净的「微PE装机优盘」UEPON大师作品系统gho:最纯净好用系统下载站数据恢复、数据保护、视频编辑
Win To Go 极致利器(IXUNCIS固态U盘)无忧启动网成立20周年!广告联系 QQ:184822951 微信:wuyouceo
查看: 20452|回复: 195

[原创] NTBOOT & wimboot for UEFI GRUB2

    [复制链接]
发表于 2019-11-20 17:40:12 | 显示全部楼层 |阅读模式
本帖最后由 wintoflash 于 2020-7-16 20:35 编辑

本帖内容不再更新,项目中止。愿意接手的可以到GitHub发PR和issue。
----------------------------

wimboot
根据 ipxe wimboot 移植的模块,适用于 BIOS/UEFI,可以启动并修改 Windows NT6+ WIM。
使用方法
  1. wimboot [BOOT_OPTIONS] [BCD_OPTIONS] @:NAME1:FILE1 @:NAME2:FILE2 ...
  2. BOOT OPTIONS (启动参数)
  3. -g, --gui 显示图形启动界面 (不推荐开启)
  4. -p, --pause 显示调试信息并在启动过程中暂停
  5. -b, --rawbcd 禁用 BCD 自动修改 (.exe 改为 .efi)
  6. -w, --rawwim 禁用 WIM 自动修改
  7. -i, --index=n 指定要启动的WIM卷号
  8. -p, --pause 启动前暂停
  9. -j, --inject=WIN32_PATH 指定射入文件夹,默认为 \Windows\Syatem32

  10. @:NAME:FILE
  11. 指定要加载的文件 FILE,其被射入虚拟盘后文件名为 NAME。若未射入 BCD 或 boot.sdi,将使用内置 BCD 和 boot.sdi

  12. BCD OPTIONS (BCD 内部启动选项,仅当使用内置 BCD 时才有效。在使用 yes|no 的地方,也可以使用 on|off, true|false, 1|0):
  13. --testmode=yes|no 测试模式 (testsigning)。
  14. --highest=yes|no 强制使用最高分辨率。
  15. --nx=OptIn|OptOut|AlwaysOff|AlwaysOn 指定 NX 策略。
  16. --pae=Default|Enable|Disable 指定 PAE 策略。
  17. --detecthal=yes|no 检测 HAL 和 kernel。
  18. --winpe=yes|no 启动到 WinPE 模式 (/MININT)。
  19. --timeout=n 设定超时。
  20. --novesa=yes|no 禁用 VESA BIOS 调用。
  21. --novga=yes|no 禁用 VGA 模式。
复制代码

示例1: 启动 WIM
  1. wimboot --rawwim @:bootmgfw.efi:/boot/grub/bootmgfw.efi @:boot.wim:/wim/wepe.wim
复制代码

示例2: 启动 WIM,关闭测试模式,启用 PAE
  1. wimboot --testmode=no --pae=Enable --rawwim @:bootmgfw.efi:/boot/grub/bootmgfw.efi @:boot.wim:/wim/wepe.wim
复制代码

示例3: 启动 WIM 的第二卷,并射入替代 explorer
  1. wimboot --index=2 @:bootmgfw.efi:/boot/bootmgfw.efi @:explorer.exe:/boot/explorer.exe \
  2.             @:WinXShell.exe:/boot/WinXShell.exe @:WinXShell.jcfg:/boot/WinXShell.jcfg \
  3.             @:winpeshl.ini:/boot/winpeshl.ini @:boot.wim:(loop)/sources/boot.wim
复制代码

注意事项
wim 文件体积不得超过 4GB。

NTBOOT
根据 chenall 的 GRUB4DOS NTBOOT 移植的模块,适用于 BIOS/UEFI,可以启动 Windows 系统/WIM/VHD。
使用方法
  1. ntboot [-g] [-p] -e FILE [-s FILE] [BOOT_TYPE] [BCD_OPTIONS] FILE
  2. -g, --gui 显示图形启动界面 (不推荐开启)
  3. -p, --pause 显示调试信息并在启动过程中暂停
  4. -e, --efi=FILE 指定 bootmgfw.efi / bootmgr.exe 的路径。
  5. -s, --sdi=FILE 指定 boot.sdi 的路径。若无此参数,则使用内部生成的 boot.sdi。

  6. BOOT TYPE (指定启动文件类型,默认情况下根据文件扩展名自动判断):
  7. -w, --wim 指定启动类型为 wim。
  8. -n, --win 指定启动类型为 Windows 系统。
  9. -v, --vhd 指定启动类型为 VHD。
  10. -r, --ramvhd 指定启动类型为 RamOS VHD (此选项仅供测试)

  11. BCD OPTIONS (BCD 内部启动选项,在使用 yes|no 的地方,也可以使用 on|off, true|false, 1|0):
  12. --testmode=yes|no 测试模式 (testsigning)。
  13. --highest=yes|no 强制使用最高分辨率。
  14. --nx=OptIn|OptOut|AlwaysOff|AlwaysOn 指定 NX 策略。
  15. --pae=Default|Enable|Disable 指定 PAE 策略。
  16. --detecthal=yes|no 检测 HAL 和 kernel。
  17. --winpe=yes|no 启动到 WinPE 模式 (/MININT)。
  18. --imgoffset=n 指定内存盘偏移 (RamOS VHD)。
  19. --timeout=n 设定超时。
  20. --novesa=yes|no 禁用 VESA BIOS 调用。
  21. --novga=yes|no 禁用 VGA 模式。
复制代码

示例1: 启动WIM
  1. ntboot --efi=/xxx/bootmgfw.efi --wim /xxx/xxx.wim
复制代码

示例2: 启动VHD
  1. ntboot --efi=/xxx/bootmgfw.efi --vhd /xxx/xxx.vhd
复制代码

示例3: 启动 Windows 系统
  1. ntboot --efi=/xxx/bootmgfw.efi --win (hd0,4)
复制代码

示例4: 启动WIM,禁用测试模式,启用 PAE
  1. ntboot --efi=/xxx/bootmgfw.efi --wim /xxx/xxx.wim --testmode=no --pae=Enable
复制代码

深度录屏_vmware_20191120170611.gif
注意事项
只支持硬盘 mbr/gpt 分区表 FAT/NTFS 分区上的文件。
启动 VHD 可能会有个错误(如下图),不过不要慌,按两遍回车就可以了。
深度截图_plasmashell_20191120170659.png

下载
https://github.com/a1ive/grub/releases/tag/latest

技术细节
wimboot 可以生成一个 bootmgfw.exe/bootmgr.exe 可识别的单分区 FAT32 虚拟盘, 将 bootmgfw.efi, bcd 等文件放入其中即可启动。BCD 文件为 bootmgfw.efi 读取的启动配置文件,其格式为 REGF (Windows 注册表)。关于 REGF,可以到这里了解更多。boot.sdi 文件为 bootmgfw.efi 启动 WIM 必须的 System Deployment Image 文件,可以到这里了解更多。wimboot 内置了一个 REGF/BCD 解析器,可以解析并自动修改 BCD 的内容;同时也内置了 boot.sdi 生成工具,可以自动生成所需的 boot.sdi。wimboot 启动方式与 NTBOOT 启动方式的主要区别是 wimboot 启动时,WIM 文件也放入FAT32虚拟盘中,而 NTBOOT 启动时,WIM 不在启动盘中。因此,wimboot 方式可以虚拟修改 WIM 内容,向其中插入文件而不用改变实际文件内容,NTBOOT 则不可以。wimboot 会将除了 bcd, boot.sdi, WIM 自身之外的所有文件都射入 WIM 的 \Windows\System32 目录下。但是由于 VHD 启动过程中需要从真实硬盘读取 VHD,所以 wimboot 方式无法启动 VHD。


  1. grub-mkimage -d x86_64-efi -p /boot/grub -o grubx64.efi -O x86_64-efi acpi all_video bitmap bitmap_scale blocklist boot cat chain cmp commandline configfile cpio date datehook dd disk echo efi_gop efi_uga efifwsetup exfat expr ext2 extcmd fat fb file font fshelp getenv getkey gfxmenu gfxterm gfxterm_background gfxterm_menu gzio halt hashsum help hexdump iso9660 jfs jpeg keystatus linux linuxefi loadenv loopback ls lua lzopio memdisk minicmd multiboot multiboot2 newc normal ntfs part_gpt part_msdos partnew parttool png probe progress random read reboot regexp sbpolicy search sleep squash4 tar terminal terminfo test tga time udf vhd video video_colors video_fb videoinfo xzio map wimboot ntboot
复制代码


参考
参考了以下项目的代码或文档,感谢开源
iPXE wimboot
NTBOOT by chenall
quibble
REGF Spec
BCD Elements
SDI Spec

源码
https://github.com/a1ive/grub 许可协议 GPLv3

评分

参与人数 19无忧币 +98 收起 理由
wuxin9712 + 5
879792799 + 5 大大是独一无二的高手!
zhczf + 5 很给力!
brook + 5 很给力!
cuicongyuan + 5 赞一个!
johnyou + 3 赞一个!
sghihor + 5
2011yaya2007777 + 5 很给力!
Climbing + 5 赞一个!
826773297 + 5 很给力!
chenall + 5 很给力!
liuzhaoyzz + 10 很给力!
liaonf + 5 赞一个!
2010sya + 5 赞一个!
hilsonma + 5 很给力!
freesoft00 + 5
ksafei + 5 很给力!
江南一根葱 + 5 努力秒杀xorboot 踏平udm
bardlet + 5 赞一个!

查看全部评分

发表于 2019-11-20 17:51:59 | 显示全部楼层
前排支持一下
回复

使用道具 举报

发表于 2019-11-20 18:01:40 | 显示全部楼层
LZ最近移植的功能多,要升仙封神了

点评

红毛改个磁盘驱动出来,让瘟哆撕能认到grub2的内存盘  详情 回复 发表于 2019-11-20 19:18
回复

使用道具 举报

发表于 2019-11-20 18:49:54 | 显示全部楼层
支持一下支持一下支持一下
回复

使用道具 举报

发表于 2019-11-20 19:18:39 | 显示全部楼层
红毛樱木 发表于 2019-11-20 18:01
LZ最近移植的功能多,要升仙封神了

红毛改个磁盘驱动出来,让瘟哆撕能认到grub2的内存盘
回复

使用道具 举报

发表于 2019-11-20 19:25:25 | 显示全部楼层
期待支持 差分及VHDX

点评

同求  详情 回复 发表于 2020-1-11 21:09
如果bootmgfw.efi能直接启,那就行,否则,不行.  详情 回复 发表于 2019-11-20 21:27
回复

使用道具 举报

发表于 2019-11-20 20:36:16 | 显示全部楼层
很给力!
回复

使用道具 举报

发表于 2019-11-20 20:52:48 | 显示全部楼层
可以写一个,UEFI GRUB2  PXE引导 的事例吗?

点评

@江南一根葱  详情 回复 发表于 2019-11-20 21:27
回复

使用道具 举报

发表于 2019-11-20 21:01:49 | 显示全部楼层
本帖最后由 wuwuzz 于 2019-11-20 21:03 编辑

启动U盘上的固定wtg.vhd成功。

红毛说的没错,LZ最近功劳很大,要升仙
封神了。

下一步,需要有人写识别虚拟盘的win驱动,
以充分发挥MAP的作用。



回复

使用道具 举报

发表于 2019-11-20 21:04:37 来自手机 | 显示全部楼层
某些绕过安全打包的grub2版本为2.02,楼主的grub2为2.05版,且某些模块还是特制的,请问如何兼容?如果出现某mod已加载的提示,该如何处理?

点评

没看我的帖子? http://bbs.wuyou.net/forum.php?mod=viewthread&tid=416924  详情 回复 发表于 2019-11-20 21:21
回复

使用道具 举报

发表于 2019-11-20 21:20:42 | 显示全部楼层
谢谢W大,期待grub2能有更广泛的应用!
回复

使用道具 举报

 楼主| 发表于 2019-11-20 21:21:48 | 显示全部楼层
本帖最后由 wintoflash 于 2019-11-20 21:23 编辑
2012kwy 发表于 2019-11-20 21:04
某些绕过安全打包的grub2版本为2.02,楼主的grub2为2.05版,且某些模块还是特制的,请问如何兼容?如果出现 ...

没看我的帖子?
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=416924都能绕过安全启动了,直接chainload这个grub不就行了
回复

使用道具 举报

 楼主| 发表于 2019-11-20 21:27:19 | 显示全部楼层
2010up 发表于 2019-11-20 20:52
可以写一个,UEFI GRUB2  PXE引导 的事例吗?

@江南一根葱
回复

使用道具 举报

 楼主| 发表于 2019-11-20 21:27:50 | 显示全部楼层
minmax 发表于 2019-11-20 19:25
期待支持 差分及VHDX

如果bootmgfw.efi能直接启,那就行,否则,不行.

点评

bootmgfw.efi能直接启,可以,透過引導BCD ?  详情 回复 发表于 2019-11-22 16:08
能给一个模板么  详情 回复 发表于 2019-11-20 21:54
回复

使用道具 举报

发表于 2019-11-20 21:54:13 | 显示全部楼层
wintoflash 发表于 2019-11-20 21:27
如果bootmgfw.efi能直接启,那就行,否则,不行.

能给一个模板么
回复

使用道具 举报

发表于 2019-11-20 22:31:26 | 显示全部楼层
顶一个捞点分
回复

使用道具 举报

发表于 2019-11-20 22:56:08 | 显示全部楼层
本帖最后由 ksafei 于 2019-11-20 23:00 编辑

虚拟机测试可以,实体机还未成功,继续测试....

发现此版grubx64.efi不兼容wimboot方式启动wim了,是不是参数有变?
loopback wimboot /boot/grub/wimboot.gz
wimboot @:bootmgfw.efi:(wimboot)/bootmgfw.efi @:bcd:(wimboot)/bcd @:boot.sdi:(wimboot)/boot.sdi @:boot.wim:/test/test.wim

点评

我这边可以啊  详情 回复 发表于 2019-11-21 07:59
回复

使用道具 举报

 楼主| 发表于 2019-11-21 07:59:57 | 显示全部楼层
ksafei 发表于 2019-11-20 22:56
虚拟机测试可以,实体机还未成功,继续测试....

发现此版grubx64.efi不兼容wimboot方式启动wim了,是不 ...

我这边可以啊

点评

我这里的测试结果: 1.如采用绕过UEFI安全启动,然后用 chainloader /efi/boot/grubx64.efi引导 则ntboot和wimboot均报错; 2.如关闭安全启动,将grubx64.efi 改为 bootx64.efi 引导,则ntboot和wimboot正常; 3.  详情 回复 发表于 2019-11-22 14:12
回复

使用道具 举报

发表于 2019-11-21 12:01:42 | 显示全部楼层
希望能够加上wim分卷启动功能,这样可以节省空间,另外虚拟盘能否在光盘下运作wim,每次量产后grub2都只能调用shell来启动pe太麻烦

点评

那你应该用wimboot啊,支持指定启动分卷。 ntboot本来就是用于硬盘启动的。 现在新一代wimboot比前一代速度快了,而且不再像前一代那样占用两倍内存。  详情 回复 发表于 2019-11-21 13:00
回复

使用道具 举报

 楼主| 发表于 2019-11-21 13:00:27 | 显示全部楼层
826773297 发表于 2019-11-21 12:01
希望能够加上wim分卷启动功能,这样可以节省空间,另外虚拟盘能否在光盘下运作wim,每次量产后grub2都只能 ...

那你应该用wimboot啊,支持指定启动分卷。
ntboot本来就是用于硬盘启动的。
现在新一代wimboot比前一代速度快了,而且不再像前一代那样占用两倍内存。

点评

好的,有空试试  详情 回复 发表于 2019-11-21 15:01
回复

使用道具 举报

发表于 2019-11-21 15:01:21 来自手机 | 显示全部楼层
wintoflash 发表于 2019-11-21 13:00
那你应该用wimboot啊,支持指定启动分卷。
ntboot本来就是用于硬盘启动的。
现在新一代wimboot比前一代 ...

好的,有空试试
回复

使用道具 举报

发表于 2019-11-22 14:12:42 | 显示全部楼层

我这里的测试结果:
1.如采用绕过UEFI安全启动,然后用 chainloader /efi/boot/grubx64.efi引导 则ntboot和wimboot均报错;
2.如关闭安全启动,将grubx64.efi 改为 bootx64.efi 引导,则ntboot和wimboot正常;
3.wimboot 如用loopback wimboot /boot/grub/wimboot.gz  
                       ........     (报错)
如下方式则正常:
wimboot @:bootmgfw.efi:"${prefix}"/wimboot/bootmgfw.efi \
                        @:bcd:"${prefix}"/wimboot/bcd \
                        @:boot.sdi:"${prefix}"/wimboot/boot.sdi \
                        @:boot.wim:"${wimroot}"$2
4.用11.21版文件管理器生成的grubfmx64.efi,在安全启动和关闭两种模式使用 ntboot和wimboot引导wim均报错

或许是我使用不当产生错误,还请wintoflash大指点

点评

这一段没太看懂,能详细些吗?  详情 回复 发表于 2019-11-22 15:09
回复

使用道具 举报

 楼主| 发表于 2019-11-22 15:09:42 | 显示全部楼层
ksafei 发表于 2019-11-22 14:12
我这里的测试结果:
1.如采用绕过UEFI安全启动,然后用 chainloader /efi/boot/grubx64.efi引导 则ntboo ...
3.wimboot 如用loopback wimboot /boot/grub/wimboot.gz  
                       ........     (报错)
如下方式则正常:
wimboot @:bootmgfw.efi:"${prefix}"/wimboot/bootmgfw.efi \
                        @:bcd:"${prefix}"/wimboot/bcd \
                        @:boot.sdi:"${prefix}"/wimboot/boot.sdi \
                        @:boot.wim:"${wimroot}"$2

这一段没太看懂,能详细些吗?

点评

一、UEFI安全模式启动,ntboot和wimboot均报错[/backcolor] 1.ntboot报错如下:[/backcolor] [attachimg]405537[/attachimg] 2.wimboot报错如下: 菜单a: loopback wimboot /boot/grub/wimboot.gz wimbo  详情 回复 发表于 2019-11-22 17:20
回复

使用道具 举报

发表于 2019-11-22 16:08:52 | 显示全部楼层
wintoflash 发表于 2019-11-20 21:27
如果bootmgfw.efi能直接启,那就行,否则,不行.

bootmgfw.efi能直接启,可以,透過引導BCD ?
回复

使用道具 举报

发表于 2019-11-22 17:20:22 | 显示全部楼层
本帖最后由 ksafei 于 2019-11-22 17:35 编辑
wintoflash 发表于 2019-11-22 15:09
这一段没太看懂,能详细些吗?

一、UEFI安全模式启动,ntboot和wimboot均报错
1.ntboot报错如下:
1_k_n.png



2.wimboot报错如下:

菜单a:
loopback wimboot /boot/grub/wimboot.gz
wimboot @:bootmgfw.efi:(wimboot)/bootmgfw.efi @:bcd:(wimboot)/bcd @:boot.sdi:(wimboot)/boot.sdi @:boot.wim:"${wimroot}"$2

2_k_w.png


菜单b:
wimboot @:bootmgfw.efi:"${prefix}"/wimboot/bootmgfw.efi \
   @:bcd:"${prefix}"/wimboot/bcd \
   @:boot.sdi:"${prefix}"/wimboot/boot.sdi \
   @:boot.wim:"${wimroot}"$2
3_k_w_f.png


二、关闭安全模式
将grubx64.efi 改名为 bootx64.efi 引导启动

1.ntboot正常

2.wimboot
(1)菜单a BCD报错同上
(2)菜单b 正常

回复

使用道具 举报

发表于 2019-11-22 17:26:53 | 显示全部楼层
通过以上测试对新的 grubx64.efi 有如下疑惑:
一是好像不支持安全启动模式 ;
二是对 loopback wimboot /boot/grub/wimboot.gz 语句好像不支持了

点评

loopback的那个图,你按回车试试?  详情 回复 发表于 2019-11-22 17:34
回复

使用道具 举报

 楼主| 发表于 2019-11-22 17:34:09 | 显示全部楼层
ksafei 发表于 2019-11-22 17:26
通过以上测试对新的 grubx64.efi 有如下疑惑:
一是好像不支持安全启动模式 ;
二是对 loopback wimboot  ...

loopback的那个图,你按回车试试?

点评

按回车显示如下图: [attachimg]405544[/attachimg]  详情 回复 发表于 2019-11-22 17:37
回复

使用道具 举报

发表于 2019-11-22 17:37:53 | 显示全部楼层
wintoflash 发表于 2019-11-22 17:34
loopback的那个图,你按回车试试?

按回车显示如下图:
2-2.png

点评

我这里loopback没问题。 关于安全启动,暂时放弃吧。微软搞事情,证书失效,我也没办法。  详情 回复 发表于 2019-11-22 18:56
回复

使用道具 举报

 楼主| 发表于 2019-11-22 18:56:35 | 显示全部楼层
ksafei 发表于 2019-11-22 17:37
按回车显示如下图:

我这里loopback没问题。
关于安全启动,暂时放弃吧。微软搞事情,证书失效,我也没办法。

点评

明白。wimboot、map和ntboot等模块是对grub2的创新和发展,感谢wintoflash大的辛苦付出和分享。期待有更多更好的成果  详情 回复 发表于 2019-11-22 20:33
回复

使用道具 举报

发表于 2019-11-22 20:33:46 | 显示全部楼层
wintoflash 发表于 2019-11-22 18:56
我这里loopback没问题。
关于安全启动,暂时放弃吧。微软搞事情,证书失效,我也没办法。

明白。wimboot、map和ntboot等模块是对grub2的创新和发展,感谢wintoflash大的辛苦付出和分享。期待有更多更好的成果
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2020-10-24 08:53

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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