无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 162012|回复: 340
打印 上一主题 下一主题

[原创] NTBOOT & wimboot for UEFI GRUB2

    [复制链接]
跳转到指定楼层
#
发表于 2019-11-20 17:40:12 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本帖最后由 wintoflash 于 2021-3-2 19:10 编辑

本项目已停止开发,不再维护。
----------------------------

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. --sos=yes|no 启用 SOS 模式。
  21. --novesa=yes|no 禁用 VESA BIOS 调用。
  22. --novga=yes|no 禁用 VGA 模式。
  23. --loadoptions=XXX 指定 NT 内核加载参数。
  24. --winload=\\WIN32_PATH 指定 winload 路径。
  25. --sysroot=\\WIN32_PATH 指定系统根目录。
复制代码

示例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. --sos=yes|no 启用 SOS 模式。
  21. --novesa=yes|no 禁用 VESA BIOS 调用。
  22. --novga=yes|no 禁用 VGA 模式。
  23. --loadoptions=XXX 指定 NT 内核加载参数。
  24. --winload=\\WIN32_PATH 指定 winload 路径。
  25. --sysroot=\\WIN32_PATH 指定系统根目录。
复制代码

示例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
复制代码


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


下载
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

评分

参与人数 21无忧币 +108 收起 理由
liangzr1976 + 5 很给力!
anythingsky + 5 赞一个!
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 赞一个!

查看全部评分

316#
发表于 2024-10-9 09:02:09 | 只看该作者
感谢分享
回复

使用道具 举报

315#
发表于 2024-10-9 08:23:43 | 只看该作者
感谢分享
回复

使用道具 举报

314#
发表于 2024-9-17 21:55:03 | 只看该作者
感谢分享
回复

使用道具 举报

313#
发表于 2024-9-15 08:17:55 | 只看该作者
zhangmi 发表于 2024-9-14 21:11
是故意放在这个位置,和系统中的bootmgfw.efi区分开来,难道必须用efi/microsoft/boot/bootmgfw.efi这个 ...

明白了,谢谢
回复

使用道具 举报

312#
发表于 2024-9-15 06:20:22 | 只看该作者
感谢分享了。
回复

使用道具 举报

311#
 楼主| 发表于 2024-9-15 05:50:25 | 只看该作者
zhangmi 发表于 2024-9-14 21:11
是故意放在这个位置,和系统中的bootmgfw.efi区分开来,难道必须用efi/microsoft/boot/bootmgfw.efi这个 ...

你执行了两次search,且把search的结果设为了root。第二次search把第一次设置的root覆盖了。
回复

使用道具 举报

310#
发表于 2024-9-14 21:11:43 | 只看该作者
wintoflash 发表于 2024-9-14 16:19
第二个菜单,bootmgfw.efi的路径写错了。

是故意放在这个位置,和系统中的bootmgfw.efi区分开来,难道必须用efi/microsoft/boot/bootmgfw.efi这个路径?
回复

使用道具 举报

309#
 楼主| 发表于 2024-9-14 16:19:55 | 只看该作者
zhangmi 发表于 2024-9-14 15:34
@wintoflash W大还关注这个帖子吗?有个奇怪的问题烦请看看

第二个菜单,bootmgfw.efi的路径写错了。
回复

使用道具 举报

308#
发表于 2024-9-14 15:34:51 | 只看该作者
本帖最后由 zhangmi 于 2024-9-14 15:37 编辑

@wintoflash W大还关注这个帖子吗?有个奇怪的问题烦请看看

  1. menuentry "WinPE By Wimboot" "/boot/bootmgfw.efi" --unrestricted {
  2.         if search --no-floppy --file --set $2 ; then
  3.             wimboot --rawwim @:bootmgfw.efi:$2 @:boot.wim:/boot.wim;
  4.         fi
  5. }

  6. menuentry "Windows 10 Pro VHDX" "/boot/bootmgfw.efi" --unrestricted {
  7.         if search --no-floppy --file --set $2 ; then
  8.                         search --no-floppy --file --set /Win10.vhdx
  9.                         ntboot --efi=$2 --vhd ($root)/Win10.vhdx
  10.         fi
  11. }
复制代码


启动wim没有问题,启动vhdx出错,显示“bootmgfw.efi不能打开”。然后,很神奇的,这个时候去启动wim,居然可以成功启动vhdx....grub4fei版的ntloader则是长时间亮屏后,自动关机了
回复

使用道具 举报

307#
发表于 2024-6-16 20:57:09 | 只看该作者
回复

使用道具 举报

306#
发表于 2024-6-10 17:17:44 | 只看该作者
回复

使用道具 举报

305#
发表于 2024-5-3 17:03:03 | 只看该作者
回帖也能设置隐藏可见 ?
回复

使用道具 举报

304#
发表于 2024-4-8 17:12:24 | 只看该作者

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

使用道具 举报

303#
发表于 2024-4-7 08:16:26 | 只看该作者
感谢分享,虽然没有看懂啥意思
回复

使用道具 举报

302#
发表于 2024-4-7 07:54:40 | 只看该作者
6666666
回复

使用道具 举报

301#
发表于 2024-2-22 13:18:10 | 只看该作者
了解一下
回复

使用道具 举报

300#
发表于 2024-2-9 21:15:26 | 只看该作者
感谢楼主分享
回复

使用道具 举报

299#
发表于 2023-10-15 09:19:31 | 只看该作者
多谢分享。多谢分享。多谢分享。
回复

使用道具 举报

298#
发表于 2023-10-14 09:01:43 | 只看该作者
很好!!!
回复

使用道具 举报

297#
发表于 2023-10-14 08:04:23 | 只看该作者
支持大咖!支持!
回复

使用道具 举报

296#
发表于 2023-8-19 09:46:15 | 只看该作者
学习学习,大大交交 ntboot启动wiin完整命令怎么写
回复

使用道具 举报

295#
发表于 2023-7-15 15:34:26 | 只看该作者

LZ最近移植的功能多,要升仙封神了
回复

使用道具 举报

294#
发表于 2023-7-5 19:19:46 | 只看该作者
wintoflash 发表于 2023-7-5 18:43
那你应该向 Ventoy 开发者报告 bug。
这个帖子里面说的是另一个 bootloader。帖子里面已经说明了怎么用 ...

好的好的我知道了谢谢
回复

使用道具 举报

293#
 楼主| 发表于 2023-7-5 18:43:14 | 只看该作者
本帖最后由 wintoflash 于 2023-7-5 18:44 编辑
wlight_ 发表于 2023-7-5 15:53
额,我电脑上用ventoy启动vhd有问题,所以想用您的ntboot

那你应该向 Ventoy 开发者报告 bug。
这个帖子里面说的是另一个 bootloader。帖子里面已经说明了怎么用。
回复

使用道具 举报

292#
发表于 2023-7-5 15:53:58 | 只看该作者
wintoflash 发表于 2023-7-5 15:13
ventoy不是有插件可以启动whd,wim吗???

额,我电脑上用ventoy启动vhd有问题,所以想用您的ntboot

点评

那你应该向 Ventoy 开发者报告 bug。 这个帖子里面说的是另一个 bootloader。帖子里面已经说明了怎么用。  详情 回复 发表于 2023-7-5 18:43
回复

使用道具 举报

291#
 楼主| 发表于 2023-7-5 15:13:20 | 只看该作者
wlight_ 发表于 2023-7-5 12:27
请问有方法使得在ventoy中可以使用ntboot吗?没有就算了。

ventoy不是有插件可以启动whd,wim吗???
回复

使用道具 举报

290#
发表于 2023-7-5 12:27:26 | 只看该作者
本帖最后由 wlight_ 于 2023-7-5 12:50 编辑
wintoflash 发表于 2023-7-5 12:05
用法不正确。GRUB 模块 .mod 是不通用的。

请问有方法使得在ventoy中可以使用ntboot吗?没有就算了。

点评

ventoy不是有插件可以启动whd,wim吗???  详情 回复 发表于 2023-7-5 15:13
回复

使用道具 举报

289#
 楼主| 发表于 2023-7-5 12:05:11 | 只看该作者
wlight_ 发表于 2023-7-5 08:29
您好我只把存放mod的文件夹复制到了ventoy的引导盘,可是在insmod ntboot时,报错,说
symbol ‘grub_strp ...

用法不正确。GRUB 模块 .mod 是不通用的。
回复

使用道具 举报

288#
发表于 2023-7-5 08:29:55 | 只看该作者
您好我只把存放mod的文件夹复制到了ventoy的引导盘,可是在insmod ntboot时,报错,说
symbol ‘grub_strpbrk’not found
请问一下是什么问题呢

点评

用法不正确。GRUB 模块 .mod 是不通用的。  详情 回复 发表于 2023-7-5 12:05
回复

使用道具 举报

287#
 楼主| 发表于 2023-6-24 20:22:58 | 只看该作者
zczc8888 发表于 2023-6-24 19:03
loadfile [OPTIONS] FILE

​ 将文件加载到内存

在 command.lst 里面找一下命令在哪个模块里就行了。
你用它干啥呢。
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-22 20:15

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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