无忧启动论坛

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

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

    [复制链接]
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 文件提取工具,以确保文件的正确性和兼容性。

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

使用道具 举报

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的启动界面,但是显示
回复

使用道具 举报

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 无关。
回复

使用道具 举报

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

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

使用道具 举报

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 ...

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

使用道具 举报

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

使用道具 举报

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。

回复

使用道具 举报

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 一样
回复

使用道具 举报

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”
这就是原因。
回复

使用道具 举报

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

使用道具 举报

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
回复

使用道具 举报

372#
发表于 2023-6-16 14:35:38 | 只看该作者
多谢分享
回复

使用道具 举报

373#
 楼主| 发表于 2023-6-16 15:05:03 | 只看该作者
本帖最后由 wintoflash 于 2023-6-16 15:06 编辑
amwdi 发表于 2023-6-16 14:32
bios启动正常,uefi启动提示如图

ntloader和initrd.lz1是否在同一ESP分区?分区结构是什么样的?

点评

ntloader和initrd.lz1是在同一个分区,但是分区类型不是ESP,是普通的fat32分区 wim文件也在同一个分区,分区结构如图 [attachimg]528067[/attachimg]  详情 回复 发表于 2023-6-16 15:28
回复

使用道具 举报

374#
发表于 2023-6-16 15:28:30 | 只看该作者
wintoflash 发表于 2023-6-16 15:05
ntloader和initrd.lz1是否在同一ESP分区?分区结构是什么样的?

ntloader和initrd.lz1是在同一个分区,但是分区类型不是ESP,是普通的fat32分区
wim文件也在同一个分区,分区结构如图


点评

不能重现。我这里用的目录结构和你的完全一样,启动 WinPE 正常。 你用的 GRUB 是从哪里下的? [attachimg]528177[/attachimg]  详情 回复 发表于 2023-6-18 19:49
回复

使用道具 举报

375#
发表于 2023-6-16 23:28:21 | 只看该作者
本帖最后由 liuzhaoyzz 于 2023-6-17 07:30 编辑

用linuxefi+initrdefi的话,提示kernel too old。

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
linuxefi ($bd)/boot/grub/ntloader uuid=$uuid file=/boot/imgs/WePE64_V2.2/WEPE/WEPE64.WIM hires=1
initrdefi ($bd)/boot/grub/initrd.lz1
}



GPT-TEST-2023-06-16-23-27-17.png (4.46 KB, 下载次数: 262)

GPT-TEST-2023-06-16-23-27-17.png
回复

使用道具 举报

376#
发表于 2023-6-17 15:50:43 | 只看该作者
使用界面,我是 这么记了(真实 情况 分不清)

引导win的,  用 chainloader  

引导 linux的 ,用 kernel  (现在 支持 --loadfile2)
回复

使用道具 举报

377#
 楼主| 发表于 2023-6-18 19:49:48 | 只看该作者
本帖最后由 wintoflash 于 2023-6-18 19:51 编辑
amwdi 发表于 2023-6-16 15:28
ntloader和initrd.lz1是在同一个分区,但是分区类型不是ESP,是普通的fat32分区
wim文件也在同一个分区 ...

不能重现。我这里用的目录结构和你的完全一样,启动 WinPE 正常。
你用的 GRUB 是从哪里下的?ntloader 校验码和我的是否一致?


点评

感谢 grub在这下载的ftp.gnu.org/gnu/grub/grub-2.06-for-windows.zip ntloader校验码一样 由于没有uefi硬件 之前者是用OVMF固件测的 packages.debian.org/bookworm/ovmf 现在换成三叶草里的uefi来启动可以了  详情 回复 发表于 2023-6-19 09:20
回复

使用道具 举报

378#
发表于 2023-6-19 09:20:28 | 只看该作者
wintoflash 发表于 2023-6-18 19:49
不能重现。我这里用的目录结构和你的完全一样,启动 WinPE 正常。
你用的 GRUB 是从哪里下的?ntloader  ...

感谢
grub在这下载的ftp.gnu.org/gnu/grub/grub-2.06-for-windows.zip
ntloader校验码一样
由于没有uefi硬件
之前者是用OVMF固件测的
packages.debian.org/bookworm/ovmf
现在换成三叶草里的uefi来启动可以了

点评

试试这个。应该修复了bug。  详情 回复 发表于 2023-6-19 10:42
回复

使用道具 举报

379#
发表于 2023-6-19 09:42:22 | 只看该作者
感谢楼主分享.
回复

使用道具 举报

380#
 楼主| 发表于 2023-6-19 10:42:48 | 只看该作者
amwdi 发表于 2023-6-19 09:20
感谢
grub在这下载的ftp.gnu.org/gnu/grub/grub-2.06-for-windows.zip
ntloader校验码一样

试试这个。应该修复了bug。
ntloader.zip (2.92 MB, 下载次数: 27)

点评

非常感谢,这个在ovmf里可以用了  详情 回复 发表于 2023-6-19 13:55
回复

使用道具 举报

381#
发表于 2023-6-19 13:55:50 | 只看该作者
wintoflash 发表于 2023-6-19 10:42
试试这个。应该修复了bug。

非常感谢,这个在ovmf里可以用了
回复

使用道具 举报

382#
发表于 2023-6-19 16:32:17 | 只看该作者
很给力,支持更新
回复

使用道具 举报

383#
 楼主| 发表于 2023-6-19 20:31:13 | 只看该作者
20230619
更新版本 v2.0.1
回复

使用道具 举报

384#
发表于 2023-6-20 11:33:31 | 只看该作者
感谢分享
回复

使用道具 举报

385#
 楼主| 发表于 2023-6-23 22:12:37 | 只看该作者
本帖最后由 wintoflash 于 2023-6-23 22:30 编辑

写了一个获取文件系统 UUID 的小程序,以方便 rEFInd 等 bootloader 的使用者编写菜单。
fsuuid.zip (152.77 KB, 下载次数: 38)
rEFInd 可以参考以下菜单
  1. menuentry "Windows NT6+ VHD" {
  2. loader /path/to/ntloader
  3. initrd /path/to/initrd.lz1
  4. options "uuid=XXXX file=/path/to/win10.vhd"
  5. }
复制代码

uuid=XXXX 处填入 vhd/wim 所在分区的文件系统 UUID,可以用 fsuuid.exe 来获取。
比如
  1. fsuuid.exe X
  2. fsuuid.exe X:
  3. fsuuid.exe X:\
  4. fsuuid.exe \\?\Volume{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
复制代码

都可以。
fsuuid 也可以编译为 Linux 程序,在 Linux 下运行,如
  1. fsuuid /dev/sda1
复制代码


======
TMD 微软是疯了。如果信不过,可以自己审查代码,自行编译。

  1. i686-w64-mingw32-gcc -Wall -Werror -idirafter . fsuuid.c -o fsuuid.exe
  2. gcc -Wall -Werror -idirafter . fsuuid.c -o fsuuid
复制代码

评分

参与人数 1无忧币 +5 收起 理由
ksafei + 5 很给力!

查看全部评分

回复

使用道具 举报

386#
发表于 2023-6-26 00:31:53 来自手机 | 只看该作者
你好,能不能借一生说话。
回复

使用道具 举报

387#
发表于 2023-6-26 05:33:44 | 只看该作者
        很给力!
回复

使用道具 举报

388#
发表于 2023-6-26 10:10:51 | 只看该作者
        赞一个!
回复

使用道具 举报

389#
发表于 2023-7-11 15:13:41 来自手机 | 只看该作者
Yyds
回复

使用道具 举报

390#
发表于 2023-8-10 08:38:35 | 只看该作者
#在这里快速回复#很给力!
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-25 16:19

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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