无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
楼主: wintoflash
打印 上一主题 下一主题

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

    [复制链接]
371#
发表于 2023-6-16 14:32:42 | 只看该作者
bios启动正常,uefi启动提示如图
  1. menuentry "Boot Windows NT6+ PE" {
  2.     probe -s dev_uuid -u ($root);
  3.     if [ "${grub_platform}" = "efi" ];
  4.     then
  5.         chainloader /ntloader initrd=/initrd.lz1 uuid=${dev_uuid} file=/sources/boot.wim;
  6.     else
  7.         linux16 /ntloader uuid=${dev_uuid} file=/sources/boot.wim;
  8.         initrd16 /initrd.lz1;
  9.    fi;
  10. }
复制代码




点评

ntloader和initrd.lz1是否在同一ESP分区?  详情 回复 发表于 2023-6-16 15:05
回复

使用道具 举报

370#
发表于 2023-6-16 14:21:55 | 只看该作者
按照软件的说明来做自然是对的,只是感觉有点奇怪。
回复

使用道具 举报

369#
 楼主| 发表于 2023-6-16 13:04:44 | 只看该作者
本帖最后由 wintoflash 于 2023-6-16 13:12 编辑
liuzhaoyzz 发表于 2023-6-16 07:41
大佬,我还是有疑虑,没有搞懂,友请深入解释下。

#UEFI下面,g4e+kernel+ntloader方案可以启动pe.wim ...

首先,你得看文档。

文档上怎么用,你依葫芦画瓢就行了。
我看了你的介绍,UEFI下面,g4e启动linux kernel用的是handover/loadfile2协议,grub2用的是传统的32位boot protocol
g4e下面的kernel命令感觉跟grub2下面的linux命令,功能效果上来说,看起来差不太多啊?

你不觉得这两句话之间有矛盾吗?
我只是想知道为啥不成功,看了很多帖子,不明白其所以然,望解释答疑。

你自己前面已经把原因说了。
“UEFI下面,g4e启动linux kernel用的是handover/loadfile2协议,grub2用的是传统的32位boot protocol”
这就是原因。
回复

使用道具 举报

368#
发表于 2023-6-16 12:15:55 | 只看该作者
4月份 那会 烦恼过,http://bbs.wuyou.net/forum.php?m ... 059&pid=4878630

ntloader v2 不支持 x64(即 平台代码x86-64启动)  支持 efi handle和 loadfile2

现在来说 grub2的chainloader 是 使用 efi handle为主流 (据 wintoflsh说 将来什么 grub212会用  loadfile2;  或者 特殊版本的 linux内自带的grub2支持loadfile2 如:susea提到过的Archlinux )

坚持用 linux的话,可以试 linuxefi
————————
linux16:在efi平台 ,应该是不能用
linux: x64的方式启动 (这个 的grub 自己造 的,不是主板带的,移植 难,g4e体积会大)
linuxefi:估计和 chainloader 一样

点评

用linuxefi+initrdefi的话,提示kernel too old。  详情 回复 发表于 2023-6-16 23:28
回复

使用道具 举报

367#
发表于 2023-6-16 07:41:06 | 只看该作者
本帖最后由 liuzhaoyzz 于 2023-6-16 10:16 编辑
wintoflash 发表于 2023-5-14 22:27
因为是单独打包,所以可以减少版权方面的顾虑。 GRUB2 下也只要 bootmgfw.efi/bootmgr.exe 一个文件就 ...

大佬,我还是有疑虑,没有搞懂,友请深入解释下。

#UEFI下面,g4e+kernel+ntloader方案可以启动pe.wim:
title /boot/imgs/WePE64_V2.2/WEPE/WEPE64.WIM-kernel ntloader
find --ignore-floppies --ignore-cd /boot/grub/ntloader | set bd= ;; echo bd=%bd%
find --ignore-floppies --ignore-cd --set-root /boot/imgs/WePE64_V2.2/WEPE/WEPE64.WIM
uuid ()
kernel %bd%/boot/grub/ntloader uuid=%?_UUID% file=/boot/imgs/WePE64_V2.2/WEPE/WEPE64.WIM hires=1
initrd %bd%/boot/grub/initrd.lz1


#UEFI下面,grub2+linux+ntloader方案不能启动pe.wim:
menuentry "/boot/imgs/WePE64_V2.2/WEPE/WEPE64.WIM" "/boot/imgs/WePE64_V2.2/WEPE/WEPE64.WIM" {
search -n -s bd -f /boot/grub/ntloader
search --no-floppy --set --file $2;probe -u ($root) -s uuid;echo $uuid
linux ($bd)/boot/grub/ntloader uuid=$uuid file=/boot/imgs/WePE64_V2.2/WEPE/WEPE64.WIM hires=1
initrd ($bd)/boot/grub/initrd.lz1
}


我看了你的介绍,UEFI下面,g4e启动linux kernel用的是handover/loadfile2协议,grub2用的是传统的32位boot protocol
http://bbs.wuyou.net/forum.php?m ... 3224&fromuid=298214

然后呢?为什么UEFI下面,g4e+kernel+ntloader方案可以启动pe.wim,grub2+linux+ntloader方案不能启动pe.wim?
g4e下面的kernel命令感觉跟grub2下面的linux命令,功能效果上来说,看起来差不太多啊?

因为我发现,用下面的菜单,当search找到的/boot/grub/ntloader位于其他UEFI固件不认识的NTFS盘符,grub2+chainloader+ntloader方案会卡住,这也正常,因为你说过,initrd.lz1需要借助UEFI固件读盘,为了规避这个问题,我添加了-h $cmddevice,参数,希望优先找到FAT32/ESP分区里面的ntloader,所以我想在UEFI下面,尝试grub2+linux+ntloader方案,我只是想知道为啥不成功,看了很多帖子,不明白其所以然,望解释答疑。
#UEFI下面,grub2+chainloader+ntloader方案能启动pe.wim:
menuentry "/boot/imgs/WePE64_V2.2/WEPE/WEPE64.WIM-chainloader-ntloader" "/boot/imgs/WePE64_V2.2/WEPE/WEPE64.WIM" {
search -n -s bd -h $cmddevice, -f /boot/grub/ntloader
search --no-floppy --set --file $2;probe -u ($root) -s uuid;echo $uuid
chainloader ($bd)/boot/grub/ntloader initrd=/boot/grub/initrd.lz1 uuid=$uuid file=$2 hires=1
}

当然UEFI下面,用grub2+ntboot方案也可以,这是另外一回事了。我的疑惑没搞懂,为啥UEFI下面,grub2+linux+ntloader方案不能启动pe.wim。

点评

首先,你得看文档。 [attachimg]528063[/attachimg] 文档上怎么用,你依葫芦画瓢就行了。 你不觉得这两句话之间有矛盾吗? 你自己前面已经把原因说了。  详情 回复 发表于 2023-6-16 13:04
回复

使用道具 举报

366#
发表于 2023-6-9 17:01:26 | 只看该作者
这个学不会啊,全是代码、脚本之类......
只能马马虎虎使用个一键制作类的。
回复

使用道具 举报

365#
发表于 2023-5-22 16:51:02 | 只看该作者
wintoflash 发表于 2023-5-19 19:14
set root=(hd1,3)
probe -u --set=dev_uuid (hd1,3)
chainloader (hd1,1)/ntloader initrd=/initrd.lz1 ...

试了下果然可行了!!谢谢大佬!!!
回复

使用道具 举报

364#
发表于 2023-5-22 16:28:47 | 只看该作者
wintoflash 发表于 2023-5-21 18:20
非常抱歉听到您在尝试启动 WIM 文件时遇到了问题。根据您的描述,如果在 ISO 文件中可以成功启动 WIM 文 ...

这个回答,好像是chatGPT的回答?
很官方啊。
回复

使用道具 举报

363#
 楼主| 发表于 2023-5-21 19:41:46 | 只看该作者
2010linlance 发表于 2023-5-21 19:24
==== update 更新成功了。。。
原来。。。我忘记放WIM文件了,囧。。。
只用了老大的文件启动,怪不得进 ...
另外,问问,因为WIM可以被压缩成ESD,体积会小超级多,以后会不吹支持?哈哈。。

不能。ESD 是固实压缩。
老大的这俩文件,是不是还可以启动Linux或Linux-LiveCD呀?
有些 Linux的ISO貌似直接用Grub4Dos启动不起来。

看正文。与 Linux 无关。
回复

使用道具 举报

362#
发表于 2023-5-21 19:24:44 | 只看该作者
本帖最后由 2010linlance 于 2023-5-21 19:34 编辑

==== update 更新成功了。。。
原来。。。我忘记放WIM文件了,囧。。。
只用了老大的文件启动,怪不得进入了下面的黑色错误平面。

忘记放WIM文件了,目前测试了两个WIM都顺利启动。
Win8PE的俩,这些太好了,在做WIM的时候,不需要放入ISO了。

另外,问问,因为WIM可以被压缩成ESD,体积会小超级多,以后会不吹支持?哈哈。。
这个胡乱想想,并wim是最原始了。

老大的这俩文件,是不是还可以启动Linux或Linux-LiveCD呀?
有些 Linux的ISO貌似直接用Grub4Dos启动不起来。


  1. #For ntloader
  2. set NTLOAD=/BOOT/NTLOAD/ntloader
  3. set NTINIT=/BOOT/NTLOAD/initrd.lz1

  4. title Boot X86Win8.WIM-hd00
  5. uuid (hd0,0)
  6. kernel %NTLOAD% uuid=%?_UUID% file=%ISO%/X86Win8.WIM
  7. initrd %NTINIT%

  8. title Boot X86Win8.WIM-hd
  9. uuid ()
  10. kernel %NTLOAD% uuid=%?% file=%ISO%/X86Win8.WIM
  11. initrd %NTINIT%
复制代码


我用这两个命令测试的,结果失败了(因为没有放WIM文件,会出现下面的错误,已经成功了。)
能进入windows的启动界面,但是显示

点评

不能。ESD 是固实压缩。 看正文。与 Linux 无关。  详情 回复 发表于 2023-5-21 19:41
回复

使用道具 举报

361#
 楼主| 发表于 2023-5-21 18:20:01 | 只看该作者
2010linlance 发表于 2023-5-21 17:18
我刚才测试了下,启动不了WIM,会出错,是WINPE里面提取的WIM,在ISO中就顺利启动,直接用ntload不行。。。

非常抱歉听到您在尝试启动 WIM 文件时遇到了问题。根据您的描述,如果在 ISO 文件中可以成功启动 WIM 文件,但直接使用 ntload 命令无法启动,可能有几个可能的原因:

1. 依赖关系问题:启动 WIM 文件可能依赖于其他组件或文件,这些组件可能在 WINPE 环境中缺失或不兼容。请确保在尝试启动 WIM 文件之前,将所有相关的依赖项和组件正确地配置和准备好。

2. 引导设置问题:ntload 命令可能无法正确识别和处理 WIM 文件的引导设置。在使用 ntload 命令之前,您可能需要配置适当的引导参数和选项,以确保正确加载和启动 WIM 文件。

3. 文件完整性问题:请确保在 WINPE 环境中提取的 WIM 文件与 ISO 文件中的完全一致,包括文件的完整性和正确性。验证 WIM 文件的哈希值或使用其他文件完整性校验方法,确保文件未损坏或被篡改。

针对您遇到的具体问题,建议您尝试以下解决方案:

1. 检查引导设置:仔细检查 ntload 命令的参数和选项是否正确,并确保使用了适当的引导设置来启动 WIM 文件。可能需要查阅相关文档或资源,以获取正确的引导设置。

2. 使用其他启动工具:如果直接使用 ntload 命令无法启动 WIM 文件,您可以尝试其他启动工具或方法。例如,您可以考虑使用引导管理器(如GRUB)或其他启动管理工具,以便更好地管理和启动 WIM 文件。

3. 更新或修复 WIM 文件:如果问题仍然存在,您可以尝试重新提取或修复 WIM 文件。确保使用最新版本的 WINPE 工具和相应的 WIM 文件提取工具,以确保文件的正确性和兼容性。

如果以上解决方案仍然无法解决问题,强烈建议您咨询相关技术专家或寻求操作系统或软件提供商的支持,他们可能能够为您提供更具体和个性化的帮助。

点评

这个回答,好像是chatGPT的回答? 很官方啊。  详情 回复 发表于 2023-5-22 16:28
回复

使用道具 举报

360#
发表于 2023-5-21 17:18:02 | 只看该作者
我刚才测试了下,启动不了WIM,会出错,是WINPE里面提取的WIM,在ISO中就顺利启动,直接用ntload不行。。。

点评

非常抱歉听到您在尝试启动 WIM 文件时遇到了问题。根据您的描述,如果在 ISO 文件中可以成功启动 WIM 文件,但直接使用 ntload 命令无法启动,可能有几个可能的原因: 1. 依赖关系问题:启动 WIM 文件可能依赖于  详情 回复 发表于 2023-5-21 18:20
回复

使用道具 举报

359#
发表于 2023-5-21 10:35:30 | 只看该作者
wintoflash 发表于 2023-4-1 09:51
我怀疑是 map 出来的 vdf 镜像有问题。
如果 vdf 里面有 ESP 分区 (能直接启动) 的话,map 直接启动试试 ...

好消息!
http://bbs.wuyou.net/forum.php?m ... &fromuid=298214
306楼菜单,g4e2023-5-20+ntloader2023-03-11,成功启动Primo双镜像win10.vdf!
回复

使用道具 举报

358#
发表于 2023-5-21 02:41:06 | 只看该作者
我暂时都没看懂怎么用。。囧。。。
回复

使用道具 举报

357#
发表于 2023-5-20 22:37:01 | 只看该作者
新人还是没看懂NTloader是什么,这个跟grub4dos是什么关系
回复

使用道具 举报

356#
 楼主| 发表于 2023-5-19 19:14:33 | 只看该作者
本帖最后由 wintoflash 于 2023-5-19 19:16 编辑
johnnyzhao328 发表于 2023-5-19 16:12
大佬,请教一下我拿 ventoy 的 grub2.04 通过 chainloader 引导 ntloader,会报错:Could not open simple  ...

set root=(hd1,3)
probe -u --set=dev_uuid (hd1,3)
chainloader (hd1,1)/ntloader initrd=/initrd.lz1 uuid=${dev_uuid} file=/win7.vhd
boot
改为
set root=(hd1,1)
probe -u --set=dev_uuid (hd1,3)
chainloader (hd1,1)/ntloader initrd=/initrd.lz1 uuid=${dev_uuid} file=/win7.vhd
boot
=============
ventoy的grub2 chainloader 代码有点问题,它向 efi 程序传递的路径是 root 分区而非文件所在分区。
所以在执行chainloader命令前要把root设为ntloader所在分区。
回复

使用道具 举报

355#
发表于 2023-5-19 16:12:36 | 只看该作者
大佬,请教一下我拿 ventoy 的 grub2.04 通过 chainloader 引导 ntloader,会报错:Could not open simple file system。其中,ntloader 和 initlz1 在 Fat32 分区,vhd 镜像在 ntfs 分区。
我的引导指令如下:
set root=(hd1, 3)
probe -u --set=dev_uuid (hd1,3)
chainloader (hd1,1)/ntloader initrd=/initrd.lz1 uuid=${dev_uuid} file=/win7.vhd
boot
其中,(hd1,3) 为 存放 vhd 镜像的 ntfs 分区,(hd1,1) 为存放 ntloader 和 initrd.lz1 的 fat32 分区
使用该指令,在 Ubuntu18.06(grub2.04) 和 ubuntu 22.04(grub2.06) 上都可以正常引导,但是在 ventoy 中就报错了。
是不是需要打什么 patch 或者做什么修改呢?

点评

set root=(hd1,3) probe -u --set=dev_uuid (hd1,3) chainloader (hd1,1)/ntloader initrd=/initrd.lz1 uuid=${dev_uuid} file=/win7.vhd boot 改为 set root=(hd1,1) probe -u --set=dev_uuid (hd1,3) chain  详情 回复 发表于 2023-5-19 19:14
回复

使用道具 举报

354#
发表于 2023-5-19 08:19:20 | 只看该作者
gutaiping2006 发表于 2023-5-18 13:08
因目前ntloader不支持,所以只能改用bootmgfw启动。

W大,昨又测试反馈一下,按以下代码,启动成功。感谢您的辛苦付出

2023-05-19_081443.png (16.71 KB, 下载次数: 112)

2023-05-19_081443.png
回复

使用道具 举报

353#
发表于 2023-5-18 18:40:04 | 只看该作者
wintoflash 发表于 2023-5-18 16:28
为什么不看README.md?
不是写了uefi下启动的方法吗?

好吧,之前的1.0.4好像linuxefi可以直接启动就用了看来是一直错误用法
回复

使用道具 举报

352#
 楼主| 发表于 2023-5-18 16:28:59 | 只看该作者
本帖最后由 wintoflash 于 2023-5-18 16:39 编辑
2012路西法 发表于 2023-5-18 16:03
chainloader和linuxefi启动有什么不一样的吗?2.0的ntloader被grub2认为“the kernel is too old”{:1_201: ...

为什么不看README.md?
不是写了uefi下启动的方法吗?
  1. menuentry "Boot Windows NT6+ PE" {
  2.     probe -s dev_uuid -u (hdx,y);
  3.     if [ "${grub_platform}" = "efi" ];
  4.     then
  5.         chainloader /ntloader initrd=/initrd.lz1 uuid=${dev_uuid} file=/path/to/winpe.wim;
  6.     else
  7.         linux16 /ntloader uuid=${dev_uuid} file=/path/to/winpe.wim;
  8.         initrd16 /initrd.lz1;
  9.    fi;
  10. }
复制代码
回复

使用道具 举报

351#
发表于 2023-5-18 16:03:02 | 只看该作者
chainloader和linuxefi启动有什么不一样的吗?2.0的ntloader被grub2认为“the kernel is too old”而且有的机器上linuxefi启动不了win7,只能chain启动

点评

为什么不看README.md? 不是写了uefi下启动的方法吗?  详情 回复 发表于 2023-5-18 16:28
回复

使用道具 举报

350#
 楼主| 发表于 2023-5-18 14:02:06 | 只看该作者

那我不明白为什么ntloader不能启动它。
回复

使用道具 举报

349#
发表于 2023-5-18 13:51:12 | 只看该作者
wintoflash 发表于 2023-5-18 13:49
和普通vhd的bcd启动项有何不同?

没有不同

点评

那我不明白为什么ntloader不能启动它。  详情 回复 发表于 2023-5-18 14:02
回复

使用道具 举报

348#
 楼主| 发表于 2023-5-18 13:49:35 | 只看该作者
gutaiping2006 发表于 2023-5-18 13:46
BCD就是通过bootice手动添加的

和普通vhd的bcd启动项有何不同?

点评

没有不同  详情 回复 发表于 2023-5-18 13:51
回复

使用道具 举报

347#
发表于 2023-5-18 13:46:50 | 只看该作者
wintoflash 发表于 2023-5-18 13:29
看一下是怎么生成 bcd 的

BCD就是通过bootice手动添加的

2023-05-18_134500.png (18.44 KB, 下载次数: 113)

2023-05-18_134500.png

点评

和普通vhd的bcd有何不同?  详情 回复 发表于 2023-5-18 13:49
回复

使用道具 举报

346#
 楼主| 发表于 2023-5-18 13:29:50 | 只看该作者
gutaiping2006 发表于 2023-5-18 12:55
这样做的目的,系统可以娱乐办公兼顾,非常小巧。可以开启开启uwf或primocache缓存,也可以一键备份恢复 ...

看一下是怎么生成 bcd 的

点评

BCD就是通过bootice手动添加的  详情 回复 发表于 2023-5-18 13:46
回复

使用道具 举报

345#
发表于 2023-5-18 13:08:51 | 只看该作者
wintoflash 发表于 2023-5-18 12:07
那是什么,怎么弄?有简单点的教程吗?

因目前ntloader不支持,所以只能改用bootmgfw启动。

2023-05-18_130453.png (20.96 KB, 下载次数: 99)

2023-05-18_130453.png

点评

W大,昨又测试反馈一下,按以下代码,启动成功。感谢您的辛苦付出  详情 回复 发表于 2023-5-19 08:19
回复

使用道具 举报

344#
发表于 2023-5-18 12:55:29 | 只看该作者
wintoflash 发表于 2023-5-18 12:07
那是什么,怎么弄?有简单点的教程吗?

这样做的目的,系统可以娱乐办公兼顾,非常小巧。可以开启开启uwf或primocache缓存,也可以一键备份恢复系统。

2023-05-18_125404.png (8.89 KB, 下载次数: 112)

2023-05-18_125404.png

点评

看一下是怎么生成 bcd 的  详情 回复 发表于 2023-5-18 13:29
回复

使用道具 举报

343#
发表于 2023-5-18 12:46:28 | 只看该作者
wintoflash 发表于 2023-5-18 12:07
那是什么,怎么弄?有简单点的教程吗?

VHD文件是系统wim压缩包释放的指针文件;例如通过如下命令:wimlib-imagex.exe apply "%wimfile%" 1 B:\ --wimboot;其中,wimfile就是系统wim包,B:就是VHD文件的挂载盘。然后通过通过ntloader启动这个vhd文件。
回复

使用道具 举报

342#
 楼主| 发表于 2023-5-18 12:07:16 | 只看该作者
gutaiping2006 发表于 2023-5-18 11:31
测试了一下,好像不支持vhd的wimboot方式启动,不知能否增加这一功能

那是什么,怎么弄?有简单点的教程吗?

点评

因目前ntloader不支持,所以只能改用bootmgfw启动。  详情 回复 发表于 2023-5-18 13:08
这样做的目的,系统可以娱乐办公兼顾,非常小巧。可以开启开启uwf或primocache缓存,也可以一键备份恢复系统。  详情 回复 发表于 2023-5-18 12:55
VHD文件是系统wim压缩包释放的指针文件;例如通过如下命令:wimlib-imagex.exe apply "%wimfile%" 1 B:\ --wimboot;其中,wimfile就是系统wim包,B:就是VHD文件的挂载盘。然后通过通过ntloader启动这个vhd文件。  详情 回复 发表于 2023-5-18 12:46
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-18 20:31

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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