无忧启动论坛

标题: 关于xorboot引导不能正常关机的问题【已解决】 [打印本页]

作者: 阿非    时间: 2024-11-22 10:21
标题: 关于xorboot引导不能正常关机的问题【已解决】
本帖最后由 阿非 于 2025-4-27 21:38 编辑

用Pauly 大大的XORBOOT(Uefi 版v0.25)引导,我今天遇到了一个非常奇怪的问题。用xorboot 引导后,无法关机,具体表现为,点击关机,提示正在关机中,然后黑屏,立马就进入桌面,就像注销又登录了一样。开始我以为是系统问题,重装了几个不同版本的系统,Windows 10 22H2-19045x64,22H2我还了几个版本都一样。没安装其他软件。改为Windows Boot Manager为第一顺序就好了可以正常关机。能正常重启,就是不能关机。
我之前的硬盘是mbr。新换了块硬盘,分区为GPT的。
同样的系统,我之前在多台笔记本上用xorboot引导都没问题。
请问各位大大,是什么问题,该如何解决

解决方案,26楼yuluo626给出了解决办法,感谢yuluo626的分享
将XORBOOT默认Windows启动项的NT6类型修改成EFI文件类型,然后自己手动添加了EFI分区里boot文件夹的bootx64.efi,可正常关机。
PS 无需关闭快速启动


作者: 阿非    时间: 2024-11-22 10:36
电脑是戴尔OptiPlex 3020
作者: 阿非    时间: 2024-11-22 10:51
反复测试,在系统电源选项中关闭快速启动就能正常关机。只要打开快速启动就无法正常关机
作者: baby1277    时间: 2024-11-22 12:13
引导程序不背这个锅,一般是程序造成,我的也是dell 换了最新版的win11结果关机只关显示器,主机却全力运转,估计是卡死了,排查后发现的VM虚拟机和新系统不兼容造成的,换了个新版本的VM就可以正常关机了。
作者: guong    时间: 2024-11-22 13:13
来看看了
作者: 阿非    时间: 2024-11-22 13:59
baby1277 发表于 2024-11-22 12:13
引导程序不背这个锅,一般是程序造成,我的也是dell 换了最新版的win11结果关机只关显示器,主机却全力运转 ...

呵呵,就是引导引起的。你仔细读题就知道了
作者: lisaustb    时间: 2024-11-22 14:23
来看看
作者: hilsonma    时间: 2024-11-22 17:06
快速启动模式在关机时要写bcd,而xorboot内置的bcd不能写,所以不能关机
关了快速启动就可以

或者xorboot中使用外部bcd,这个bcd与常规win启动的bcd路径一致,可能也可以在快速启动下关机,不过我没有测试证实,楼主可以试试。
作者: zncs520    时间: 2024-11-22 17:53
hilsonma 发表于 2024-11-22 17:06
快速启动模式在关机时要写bcd,而xorboot内置的bcd不能写,所以不能关机
关了快速启动就可以

grub 的ntboot 也许一个情况吧
作者: hilsonma    时间: 2024-11-22 18:27
zncs520 发表于 2024-11-22 17:53
grub 的ntboot 也许一个情况吧

是的,同样的情形。
作者: 音乐与电脑    时间: 2024-11-22 20:08
hilsonma 发表于 2024-11-22 17:06
快速启动模式在关机时要写bcd,而xorboot内置的bcd不能写,所以不能关机
关了快速启动就可以

支持,感谢解答。
作者: 阿非    时间: 2024-11-22 21:27
hilsonma 发表于 2024-11-22 17:06
快速启动模式在关机时要写bcd,而xorboot内置的bcd不能写,所以不能关机
关了快速启动就可以


感谢解惑!我试出了关闭快速启动能解决问题,但不知道原因。
作者: wintoflash    时间: 2024-11-25 20:13
本帖最后由 wintoflash 于 2024-11-25 20:20 编辑
hilsonma 发表于 2024-11-22 17:06
快速启动模式在关机时要写bcd,而xorboot内置的bcd不能写,所以不能关机
关了快速启动就可以

其实不是 BCD 不可写导致的。
而是 BCD 模板里面没有 {resumeobject} 导致的。
快速启动时系统是把信息写入 hiberfil.sys 的。而 BCD 的 {resumeobject} 里面指定了 hiberfil.sys 的路径。
ntboot 创建 BCD 的时候加上 {resumeobject} 就可以了。
https://github.com/grub4dos/ntlo ... 6/utils/bcd.bat#L82



理论上,g4d 的 ntloader 应该已经解决了这个问题。

作者: hilsonma    时间: 2024-11-25 20:53
wintoflash 发表于 2024-11-25 20:13
其实不是 BCD 不可写导致的。
而是 BCD 模板里面没有 {resumeobject} 导致的。
快速启动时系统是把信息 ...

感谢指正。

是根据hiberfil.sys来决定执行{resumeobject}的吗?我以为是要写一次性启动项的。
作者: 2012fengxi    时间: 2024-11-25 20:57
这么奇怪的现象
作者: zncs520    时间: 2024-11-27 19:17
wintoflash 发表于 2024-11-25 20:13
其实不是 BCD 不可写导致的。
而是 BCD 模板里面没有 {resumeobject} 导致的。
快速启动时系统是把信息 ...

ntboot 创建 BCD 的时候加上 {resumeobject} 就可以了

GRBU2的ntboot  咋加?
作者: wintoflash    时间: 2024-11-27 19:38
zncs520 发表于 2024-11-27 19:17
ntboot 创建 BCD 的时候加上 {resumeobject} 就可以了

GRBU2的ntboot  咋加?

不是很好改。grub2的ntboot写得比较早,bcd是硬编码进去的。
要么直接用ntloader,要么就自己想办法参照ntloader的bcd改一下grub2 ntboot的源码。

作者: wintoflash    时间: 2024-11-27 19:41
hilsonma 发表于 2024-11-25 20:53
感谢指正。

是根据hiberfil.sys来决定执行{resumeobject}的吗?我以为是要写一次性启动项的。

快速启动就是把内存里面的重要数据写到硬盘上,再次启动的时候从硬盘上加载这些数据。
具体地来说,BCD 的 {resumeobject} 这个项目里面指定了把数据具体保存到哪个文件里。
默认是 hiberfil.sys。

作者: zncs520    时间: 2024-12-8 22:22
本帖最后由 zncs520 于 2024-12-8 22:24 编辑
wintoflash 发表于 2024-11-27 19:38
不是很好改。grub2的ntboot写得比较早,bcd是硬编码进去的。
要么直接用ntloader,要么就自己想办法参照 ...

我修改了GRUB的 RUN.CFG

function xntboot {
regexp -s filename '.*/(.*)' "$1"
regexp -s filepath '/(.*)/' "$1"
set winfile="/$filepath/$filename";
search -n -s filedisk -f ${winfile};
probe -s dev_uuid -u ($filedisk);
chainloader $prefix/ntloader/ntloader initrd=$prefix/ntloader/initrd.lz1 uuid=${dev_uuid} file=${winfile};
}
initrd 指向了 (loop)/boot/grub/ntloader/initrd.lz1
后面改成initrd=/boot/grub/ntloader/initrd.lz1

应该是initrd读取失败。。。

提示 Could not open simple file system


是ntloader 不能读取自己所在的loop分区的内容吧?


作者: wintoflash    时间: 2024-12-9 06:30
zncs520 发表于 2024-12-8 22:22
我修改了GRUB的 RUN.CFG

function xntboot {

loop磁盘只在grub2内部有效。
你可以建一个img,把ntloader和initrd放img里面,然后map挂载这个img。
作者: zncs520    时间: 2024-12-10 09:17
wintoflash 发表于 2024-12-9 06:30
loop磁盘只在grub2内部有效。
你可以建一个img,把ntloader和initrd放img里面,然后map挂载这个img。

map --nb "$prefix/ntloader.img"
function xntboot {
regexp -s filename '.*/(.*)' "$1"
regexp -s filepath '/(.*)/' "$1"
regexp -s filedisk '\(([a-zA-Z0-9]+,[a-zA-Z0-9]+)\)' "$1"
set winfile="/$filepath/$filename";
probe -s dev_uuid -u "$filedisk";
chainloader (vd0,msdos1)/ntloader initrd=/initrd.lz1 uuid=${dev_uuid} file=${winfile} quiet;
}


成功启动  ,
但是不能正常关机的问题依旧呀
华硕天选3 笔记本
作者: wintoflash    时间: 2024-12-10 09:55
zncs520 发表于 2024-12-10 09:17
map --nb "$prefix/ntloader.img"
function xntboot {
regexp -s filename '.*/(.*)' "$1"

你这是启动的wim或vhd吗?
这个只对正常系统有效。
对于不支持休眠的系统如wim,vhd,不能关机是另外的问题。
作者: zncs520    时间: 2024-12-10 10:11
wintoflash 发表于 2024-12-10 09:55
你这是启动的wim或vhd吗?
这个只对正常系统有效。
对于不支持休眠的系统如wim,vhd,不能关机是另外的 ...

if search --file --set=winpatch --no-floppy /Windows/Boot/EFI/bootmgfw.efi; then
menuentry "WindowsX" --class win11 {
probe -s dev_uuid -u ($winpatch);
chainloader (vd0,msdos1)/ntloader initrd=/initrd.lz1 uuid=${dev_uuid}
}
fi


启动正常系统也是不能关机

PS 关掉快速启动就正常了


作者: wintoflash    时间: 2024-12-10 20:04
zncs520 发表于 2024-12-10 10:11
if search --file --set=winpatch --no-floppy /Windows/Boot/EFI/bootmgfw.efi; then
menuentry "Windo ...

我这边开快速启动之后也是可以正常关机的。改用grub2的话不行。
作者: zncs520    时间: 2024-12-11 16:54
wintoflash 发表于 2024-12-10 20:04
我这边开快速启动之后也是可以正常关机的。改用grub2的话不行。

grub2的链式加载理论上说应该没这问题

  摸不到头脑了


谢谢大佬点拨~

作者: yuluo626    时间: 2025-4-27 20:35
本帖最后由 yuluo626 于 2025-4-27 20:39 编辑

同样遇到这个问题了,将XORBOOT默认Windows启动项的NT6类型修改成EFI文件类型,然后自己手动添加了EFI分区里boot文件夹的bootx64.efi,可正常关机。
PS 无需关闭快速启动


作者: 阿非    时间: 2025-4-27 21:05
yuluo626 发表于 2025-4-27 20:35
同样遇到这个问题了,将XORBOOT默认Windows启动项的NT6类型修改成EFI文件类型,然后自己手动添加了EFI分区 ...

感谢分享,等我有时间了测试
作者: 阿非    时间: 2025-4-27 21:33
yuluo626 发表于 2025-4-27 20:35
同样遇到这个问题了,将XORBOOT默认Windows启动项的NT6类型修改成EFI文件类型,然后自己手动添加了EFI分区 ...

经过测试,你的方法可行,感谢分享
作者: whyqwt    时间: 2025-4-28 11:08
谢谢分享!




欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/) Powered by Discuz! X3.3