无忧启动论坛

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

[原创] NTloader: BIOS/UEFI 下用 GRUB 启动 VHD/WIM

    [复制链接]
跳转到指定楼层
#
发表于 2021-1-31 16:08:47 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
本帖最后由 wintoflash 于 2025-4-8 21:58 编辑

适用范围:
BIOS, x64 UEFI, ia32 UEFI, arm64 UEFI 均可使用。
支持 FAT, NTFS, exFAT 文件系统 (VHD 不能位于 FAT 分区,老版本 Windows VHD 只能位于 NTFS 分区)
文件路径最好是不带空格的英文字母/数字。带空格的话传递参数时用冒号":"代替空格。
命令行长度不得超过 4096。
使用方法:
GNU GRUB 2 (>=2.12)
  1. menuentry "Boot Windows NT6+ WIM" {
  2.     search -s -f /path/to/ntloader
  3.     search -s dev -f /path/to/winpe.wim
  4.     probe -s dev_uuid -u $dev
  5.     if [ "${grub_platform}" = "efi" ]; then
  6.         linux /path/to/ntloader uuid=${dev_uuid} wim=/path/to/winpe.wim
  7.         initrd /path/to/initrd.cpio
  8.     else
  9.         linux16 /path/to/ntloader uuid=${dev_uuid} wim=/path/to/winpe.wim
  10.         initrd16 /path/to/initrd.cpio
  11.    fi;
  12. }

  13. menuentry "Boot Windows NT6+ VHD/VHDx" {
  14.     search -s -f /path/to/ntloader
  15.     search -s dev -f /path/to/windows.vhd
  16.     probe -s dev_uuid -u $dev
  17.     if [ "${grub_platform}" = "efi" ]; then
  18.         linux /path/to/ntloader uuid=${dev_uuid} vhd=/path/to/windows.vhd
  19.         initrd /path/to/initrd.cpio
  20.     else
  21.         linux16 /path/to/ntloader uuid=${dev_uuid} vhd=/path/to/windows.vhd
  22.         initrd16 /path/to/initrd.cpio
  23.    fi;
  24. }

  25. menuentry "Boot Windows NT6+ on (hdx,y)" {
  26.     search -s -f /path/to/ntloader
  27.     probe -s dev_uuid -u (hdx,y)
  28.     if [ "${grub_platform}" = "efi" ]; then
  29.         linux /path/to/ntloader uuid=${dev_uuid}
  30.         initrd /path/to/initrd.cpio
  31.     else
  32.         linux16 /path/to/ntloader uuid=${dev_uuid}
  33.         initrd16 /path/to/initrd.cpio
  34.    fi;
  35. }
复制代码

GRUB4DOS / GRUB4EFI
  1. title Boot Windows NT6+ WIM
  2. find --set-root /path/to/winpe.wim
  3. uuid ()
  4. find --set-root /path/to/ntloader
  5. kernel /path/to/ntloader uuid=%?_UUID% wim=/path/to/winpe.wim
  6. initrd /path/to/initrd.cpio

  7. title Boot Windows NT6+ VHD
  8. find --set-root /path/to/windows.vhd
  9. uuid ()
  10. find --set-root /path/to/ntloader
  11. kernel /path/to/ntloader uuid=%?_UUID% vhd=/path/to/windows.vhd
  12. initrd /path/to/initrd.cpio
复制代码

下载:
https://github.com/grub4dos/ntloader/releases/latest
源码:
https://github.com/grub4dos/ntloader

点评

辛苦了  发表于 2024-5-11 18:36

评分

参与人数 20无忧币 +105 收起 理由
ksafei + 5 赞一个!
smartcowboy + 5 很给力!
yyz2191958 + 2 赞一个!
diskmans + 2 很给力!
有阴也有阳 + 5 很给力!
cuicongyuan + 5 很给力!
gutaiping2006 + 5 很给力!
2012chenyuwen + 5 很给力!
f111 + 5 很给力!
zhczf + 5 很给力!
lookerJ + 5
蓝星明月 + 10 赞一个!
2011yaya2007777 + 5 赞一个!
2011cwj6958 + 5 很给力!
amita + 5
liuzhaoyzz + 10 很给力!
piazini + 1 很给力!
sunsea + 10 很给力!
hilsonma + 5 很给力!
freesoft00 + 5

查看全部评分

527#
发表于 2025-4-16 16:09:38 | 只看该作者
非常好,支持
回复

使用道具 举报

526#
发表于 2025-4-11 15:48:28 来自手机 | 只看该作者
wintoflash 发表于 2025-4-11 09:28
pecmd可以用disp命令设置分辨率吧。你可以看看pecmd自带的文档。

pecmd disp w1366 h768 已解决,感谢指点!谢谢您!
回复

使用道具 举报

525#
 楼主| 发表于 2025-4-11 09:28:19 | 只看该作者
whyqwt 发表于 2025-4-11 07:29
bios启动后,winpe中是咋手动调节分辨率,请指点一下。谢谢!

pecmd可以用disp命令设置分辨率吧。你可以看看pecmd自带的文档。
回复

使用道具 举报

524#
发表于 2025-4-11 07:29:21 来自手机 | 只看该作者
wintoflash 发表于 2025-4-11 06:00
bios启动后,winpe中是可以手动调节分辨率的。
当然也有方法可以继承grub的分辨率,但是你的电脑有花屏 ...

bios启动后,winpe中是咋手动调节分辨率,请指点一下。谢谢!

点评

pecmd可以用disp命令设置分辨率吧。你可以看看pecmd自带的文档。  详情 回复 发表于 2025-4-11 09:28
回复

使用道具 举报

523#
发表于 2025-4-11 06:53:14 来自手机 | 只看该作者
wintoflash 发表于 2025-4-11 06:00
bios启动后,winpe中是可以手动调节分辨率的。
当然也有方法可以继承grub的分辨率,但是你的电脑有花屏 ...

好的,随后用用keep.
目前用的有这两行
set gfxpayload=text
terminal_output console
没用ntloader text参数,就可以的。花屏估计是个案,绝大多数机器应该是不存在这问题的。
感谢指导,学了很多!谢谢!
回复

使用道具 举报

522#
 楼主| 发表于 2025-4-11 06:00:50 | 只看该作者
whyqwt 发表于 2025-4-10 21:59
W大,您实在是厉害,一招制敌,果不其然,加上两行echo ,一切正常!太巧妙了!!
那进入PE后分辨率不是 ...

bios启动后,winpe中是可以手动调节分辨率的。
当然也有方法可以继承grub的分辨率,但是你的电脑有花屏的问题。
set gfxpayload=keep
不使用terminal_output console,且ntloader命令行不要用text参数。
回复

使用道具 举报

521#
发表于 2025-4-10 23:43:16 来自手机 | 只看该作者
真的像您说的,玄,这个方法还不是很稳定,至少在我的机器上还不是很稳定,有时还会花屏,按照您的思路,问deepseek,加了read, sleep -- interruptible 5 两行 让机器此时缓一缓,pause一会儿。(注: 这纯属娱乐哈!)
回复

使用道具 举报

520#
发表于 2025-4-10 22:04:49 来自手机 | 只看该作者
这两行echo,在我看来就像小时候农村不想让鸡随处下蛋时,在鸡窝里放的“引蛋”一样!哈哈!
回复

使用道具 举报

519#
发表于 2025-4-10 21:59:35 来自手机 | 只看该作者
wintoflash 发表于 2025-4-10 21:13
感觉是grub2的玄学问题。
在menuentry加上几行无意义的echo语句呢?
menuentry ... {

W大,您实在是厉害,一招制敌,果不其然,加上两行echo ,一切正常!太巧妙了!!
那进入PE后分辨率不是cfg全局菜单中设置的1366×768 这个加上一行什么命令呢?
非常感谢指导!!

点评

bios启动后,winpe中是可以手动调节分辨率的。 当然也有方法可以继承grub的分辨率,但是你的电脑有花屏的问题。 set gfxpayload=keep ntloader命令行不要用text参数。  详情 回复 发表于 2025-4-11 06:00
回复

使用道具 举报

518#
 楼主| 发表于 2025-4-10 21:13:42 | 只看该作者
whyqwt 发表于 2025-4-10 07:34
set gfxpayload=text
terminal_output console
linux16 /ntloader/ntloader text ...

感觉是grub2的玄学问题。
在menuentry加上几行无意义的echo语句呢?
menuentry ... {
  echo "TEXT"
  echo "TEXT"
  set gfxpayload=text
  ...
}
回复

使用道具 举报

517#
发表于 2025-4-10 07:41:49 来自手机 | 只看该作者
把全局位置的terminal_output gfxterm改为terminal_output gfxterm console 依然是上面的情况
回复

使用道具 举报

516#
发表于 2025-4-10 07:34:13 来自手机 | 只看该作者
wintoflash 发表于 2025-4-9 07:48
菜单中fi所在的行未注释掉。



set gfxpayload=text
terminal_output console
linux16 /ntloader/ntloader text ...
上述三行全用上,或只用其中一行,或两行都不成功,但是只用前两行,或三行都用,以下面这种方式都能成功引导,即在进入grub2的cfg的图形配置菜单后,选择引导winpewim的menuentry,然后按e键进入命令行编辑模式,不做任何编辑,再按F10就能成功加载winpe.wim进入桌面。区别是,只用前两行的话只显示loading进度条后即显示windows logo然后进入pe桌面,第三行也用上的话,loading进度条后,显示动态滚动条,然后进入pe桌面。
貌似这三行命令都战胜不了cfg配置菜单全局位置的terminal_output gfxterm

点评

感觉是grub2的玄学问题。 在menuentry加上几行无意义的echo语句呢? menuentry ... { echo "TEXT" echo "TEXT" set gfxpayload=text ... }  详情 回复 发表于 2025-4-10 21:13
回复

使用道具 举报

515#
 楼主| 发表于 2025-4-9 17:01:10 | 只看该作者
本帖最后由 wintoflash 于 2025-4-9 17:04 编辑
minmax 发表于 2025-4-9 16:58
感謝您的回應,我再試試

你的这个菜单似乎哪里都不对,我改了也不对。应该获取vhd所在分区的uuid,你这是获取的哪个分区的uuid?
  1. title Boot Windows NT6+ VHD
  2. find --set-root /VHDOS/LTSC2024.VHDX
  3. uuid ()
  4. find --set-root /EFI/g4e/ntloader
  5. kernel /EFI/g4e/ntloader uuid=%?_UUID% vhd=/VHDOS/LTSC2024.VHDX
  6. initrd /EFI/g4e/initrd.cpio
复制代码
回复

使用道具 举报

514#
发表于 2025-4-9 16:58:43 | 只看该作者
wintoflash 发表于 2025-4-9 15:03
没有任何有效信息,我不会隔着网线算命。

感謝您的回應,我再試試

点评

你的这个菜单似乎哪里都不对,我改了也不对。应该获取vhd所在分区的uuid,你这是获取的哪个分区的uuid?  详情 回复 发表于 2025-4-9 17:01
回复

使用道具 举报

513#
 楼主| 发表于 2025-4-9 15:03:24 | 只看该作者
minmax 发表于 2025-4-9 14:44
沒 出現藍屏代碼 全藍色

没有任何有效信息,我不会隔着网线算命。

点评

感謝您的回應,我再試試  详情 回复 发表于 2025-4-9 16:58
回复

使用道具 举报

512#
发表于 2025-4-9 14:44:37 | 只看该作者
wintoflash 发表于 2025-4-9 11:52
这个与本帖无关。

菜单有误。应为:

沒 出現藍屏代碼 全藍色

点评

没有任何有效信息。  详情 回复 发表于 2025-4-9 15:03
回复

使用道具 举报

511#
 楼主| 发表于 2025-4-9 11:52:06 | 只看该作者
本帖最后由 wintoflash 于 2025-4-9 12:56 编辑
minmax 发表于 2025-4-9 10:48
菜單
title 使用外部命令 ntloader 启动 vhdx (chainloader )
uuid ()
出現菜單就報以下錯,
aligned pointer 8e234252

这个与本帖无关。
title 使用外部命令 ntloader 启动 vhdx (chainloader )
uuid ()
find /efi/g4e/ntloader | set bd=
find --set-root /VHDOS/LTSC2024.VHDX | set vhdd=
chainloader %bd%/EFI/g4e/ntloader uuid=%?_UUID% vhd=%vhdd%/LTSC2024.VHDX initrd=%bd%/EFI/g4e/initrd.cpio
boot

菜单有误。应为:
  1. title 使用外部命令 ntloader 启动 vhdx (chainloader )
  2. uuid ()
  3. find /efi/g4e/ntloader | set bd=
  4. find --set-root /VHDOS/LTSC2024.VHDX | set vhdd=
  5. chainloader %bd%/EFI/g4e/ntloader uuid=%?_UUID% vhd=/VHDOS/LTSC2024.VHDX initrd=/EFI/g4e/initrd.cpio
  6. boot
复制代码
不用 chainload 藍屏

菜单是怎么写的?什么蓝屏代码?

点评

沒 出現藍屏代碼 全藍色  详情 回复 发表于 2025-4-9 14:44
回复

使用道具 举报

510#
发表于 2025-4-9 10:48:14 | 只看该作者
本帖最后由 minmax 于 2025-4-9 10:59 编辑
wintoflash 发表于 2025-4-8 18:59
你这根本没用本帖的NTloader啊,跟你前面说的也完全不一样。

菜單
title 使用外部命令 ntloader 启动 vhdx (chainloader )
uuid ()
find /efi/g4e/ntloader | set bd=
find --set-root /VHDOS/LTSC2024.VHDX | set vhdd=
chainloader %bd%/EFI/g4e/ntloader uuid=%?_UUID% vhd=%vhdd%/LTSC2024.VHDX initrd=%bd%/EFI/g4e/initrd.cpio
boot
出現菜單就報以下錯,
aligned pointer 8e234252
執行 報以下錯
found dummy mbr.
part 0 FAT32 1ca6-fa7b
GPT LBA=2048
Could not open (hd0,0)\EFI\g4e\initrd.cpio.
不用 chainload 藍屏
不好意思 不同COMMAND 發錯

点评

这个与本帖无关。 菜单有误。应为:  详情 回复 发表于 2025-4-9 11:52
回复

使用道具 举报

509#
 楼主| 发表于 2025-4-9 07:48:22 | 只看该作者
whyqwt 发表于 2025-4-8 22:42
W大,您好,就一楼ntolader latest 版,请教些问题:无论用nt6.0 主引导加载bcd 中的g2ldr.mbr还是grub4dos ...

菜单中fi所在的行未注释掉。
  1. set gfxpayload=text
复制代码
  1. terminal_output console
复制代码
  1. linux16 /..../ntloader text ...
复制代码


都加上或者排列组合一下试试。
回复

使用道具 举报

508#
发表于 2025-4-8 23:44:45 来自手机 | 只看该作者
就是bios下既能terminal_output gfxterm 使用背景图片,又能正常用ntloader加载winpe.wim
回复

使用道具 举报

507#
发表于 2025-4-8 22:42:47 | 只看该作者
W大,您好,就一楼ntolader latest 版,请教些问题:无论用nt6.0 主引导加载bcd 中的g2ldr.mbr还是grub4dos加载g2ldr.mbr 引导进入grub2.12 然后用如下配置引导wim, 都会出现花屏,在linux16 /ntloader/ntloader uuid=${dev_uuid} wim=/wepe/wepe64.wim  前面加上redme中的terminal_output console 依然花屏,仅当注销:#设置分辨率
下面的 这两行 set gfxmode=auto  terminal_output gfxterm 后,grub2变成纯文本菜单才能恢复正常。因为之前的cfg菜单用的有背景图片,想问问大佬怎么能既使用背景图片又能正常加载wim.非常感谢。

set timeout="5"
set default="0"

insmod all_video
insmod vbe
insmod vga
insmod video_bochs
insmod video_cirrus
insmod font
insmod gfxterm
insmod gfxmenu
insmod gettext
insmod jpeg
insmod png

#加载unicode字体显示中文
font=(memdisk)/boot/grub/fonts/unicode.pf2
if loadfont $font; then
set gfxmode=1366x768
set locale_dir=(memdisk)/boot/grub/locale
set lang=zh_CN
fi

#设置分辨率
set gfxmode=auto
terminal_output gfxterm

#设置主题或背景图片
if search --no-floppy -f /boot/grub/themes/Vimix/theme.txt; then
set theme=/boot/grub/themes/Vimix/theme.txt
else
background_image /boot/grub/background.jpg
set color_normal=red/black
set color_highlight=magenta/black
fi

menuentry "Boot GrubFM" --class ubuntu --class os {
        echo "正在启动 GrubFM 文件管理器"
        linux /loadfm
        initrd /grubfm.iso
        boot
}

menuentry "Boot Grub4Dos" --class ubuntu1 --class os {
        echo "正在启动 Grub4Dos"
        search --file /grldr --set=root
        insmod ntldr
        ntldr /grldr
}
menuentry "Boot Windows NT6+ WEPE64.WIM" --class windows {
        search -s -f /ntloader/ntloader
        search -s dev -f /wepe/wepe64.wim
        probe -s dev_uuid -u $dev
#       if [ "${grub_platform}" = "efi" ]; then
#                chainloader /ntloader/ntloader initrd=/ntloader/initrd.cpio uuid=${dev_uuid} wim=/wepe/wepe64.wim
#                linux /ntloader/ntloader uuid=${dev_uuid} wim=/wepe/wepe64.wim
#                initrd /ntloader/initrd.cpio
#       else
                terminal_output console
                linux16 /ntloader/ntloader uuid=${dev_uuid} wim=/wepe/wepe64.wim
                initrd16 /ntloader/initrd.cpio
        fi;
}

点评

菜单中fi所在的行未注释掉。 都加上或者排列组合一下试试。  详情 回复 发表于 2025-4-9 07:48
回复

使用道具 举报

506#
发表于 2025-4-8 22:25:42 | 只看该作者
感谢分享
回复

使用道具 举报

505#
 楼主| 发表于 2025-4-8 22:00:42 | 只看该作者
whyqwt 发表于 2025-4-8 21:40
W大,您好,GNU GRUB 2 (>=2.12)代码中第9,10,22,23, 34,35行,以及latest下载包中readme.pdf里相应位 ...

已修正,感谢反馈。
回复

使用道具 举报

504#
 楼主| 发表于 2025-4-8 21:43:18 | 只看该作者
whyqwt 发表于 2025-4-8 21:40
W大,您好,GNU GRUB 2 (>=2.12)代码中第9,10,22,23, 34,35行,以及latest下载包中readme.pdf里相应位 ...

是的。但是这都是示例菜单,不能死板。
回复

使用道具 举报

503#
发表于 2025-4-8 21:40:41 | 只看该作者
W大,您好,GNU GRUB 2 (>=2.12)代码中第9,10,22,23, 34,35行,以及latest下载包中readme.pdf里相应位置linux16,initrd16 是不是漏写了/path/to/

点评

已修正,感谢反馈。  详情 回复 发表于 2025-4-8 22:00
是的。但是这都是示例菜单,不能死板。  详情 回复 发表于 2025-4-8 21:43
回复

使用道具 举报

502#
 楼主| 发表于 2025-4-8 18:59:19 | 只看该作者
minmax 发表于 2025-4-8 17:03
不容易上圖 全打字,主要 加載 VHD 下的參數不清楚
菜單
title NTBOOT 启动 VHD

你这根本没用本帖的NTloader啊,跟你前面说的也完全不一样。

点评

菜單 title 使用外部命令 ntloader 启动 vhdx (chainloader ) uuid () find /efi/g4e/ntloader | set bd= find --set-root /VHDOS/LTSC2024.VHDX | set vhdd= chainloader %bd%/EFI/g4e/ntloader uuid=%?_UUID%  详情 回复 发表于 2025-4-9 10:48
回复

使用道具 举报

501#
发表于 2025-4-8 17:03:38 | 只看该作者
本帖最后由 minmax 于 2025-4-8 17:04 编辑
wintoflash 发表于 2025-4-6 14:22
报错照片、启动菜单发一下

不容易上圖 全打字,主要 加載 VHD 下的參數不清楚
菜單
title NTBOOT 启动 VHD
find --set-root /VHDOS/LTSC2024.VHDX | set vhdd=
ntboot %vhdd%/LTSC2024.VHDX winload=/Windows/System32/boot/winload.efi minint=1
boot
出現選單就報以下錯,執行的話也是
aligned pointer 8e234252

点评

你这根本没用本帖的NTloader啊,跟你前面说的也完全不一样。  详情 回复 发表于 2025-4-8 18:59
回复

使用道具 举报

500#
发表于 2025-4-7 13:59:19 | 只看该作者
谢谢分享,辛苦了。
回复

使用道具 举报

499#
发表于 2025-4-6 21:54:47 | 只看该作者
学习一下
回复

使用道具 举报

498#
发表于 2025-4-6 19:11:47 | 只看该作者
啥也不说了,帖子就是带劲!
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2025-5-22 10:44

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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