无忧启动论坛

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

[求助] 【已解决】当从U盘efi启动时可不可以有菜单能转到启动硬盘系统?

  [复制链接]
1#
发表于 2017-6-10 23:03:28 | 显示全部楼层
2011qt 发表于 2017-6-10 22:14
谢谢,如果硬盘不是gpt格式,是mbr引导的话,这个还需要怎么修改?

搜bootmgr文件。
回复

使用道具 举报

2#
发表于 2017-6-11 10:57:08 | 显示全部楼层
本帖最后由 yjd 于 2017-6-11 20:23 编辑
comzhongwy 发表于 2017-6-10 23:15
grub2可以参考这个写法,支持 BIOS + UEFI 的哦!


多一个判断的语法是什么,编程上的and。感觉应该再增加判断window文件夹。
不然在维护的时候U盘一般是第一个启动,而有的人可能U盘用的bootmgr来引导。这样就会误判。

查了下好像是这个2个:

-d file  [file存在并且是一个目录]
expression1 -a expression2   与(AND)


没环境测试
  1. menuentry '  Windows Boot Manager' {
  2.     if [ $grub_platform == 'efi' -a -d /Windows ] ; then
  3.         if search --file --set --no-floppy /EFI/Microsoft/Boot/bootmgfw.efi ; then
  4.             chainloader /EFI/Microsoft/Boot/bootmgfw.efi
  5.         else
  6.             echo ‘没找到bootmgfw.efi’
  7.             sleep --verbose 5
  8.         fi
  9.     fi
  10. }
复制代码


点评

你是说: if [ 'pc' == $grub_platform ] ; then 这个?这个是判断 BIOS 还是 UEFI 固件启动  详情 回复 发表于 2017-6-12 11:34
回复

使用道具 举报

3#
发表于 2017-6-12 12:11:33 | 显示全部楼层
comzhongwy 发表于 2017-6-12 11:34
你是说: if [ 'pc' == $grub_platform ] ; then 这个?这个是判断 BIOS 还是 UEFI 固件启动

这个知道。
我是说需要增加另一个条件。不然误判。

我前面有增加了。我这里没纯uefi +系统测试可测试。
回复

使用道具 举报

4#
发表于 2017-6-12 21:25:14 | 显示全部楼层
2011qt 发表于 2017-6-12 21:08
加了这个条件后好像就不是从efi分区启动了

你试过了?
我没纯uefi环境和装了win7以上系统。所以没测。可能语法要改改。
回复

使用道具 举报

5#
发表于 2017-6-12 22:30:04 | 显示全部楼层
2011qt 发表于 2017-6-12 22:06
comzhongwy的原菜单可以,加了你的那个条件就不行了,你的这个条件的是不是找包含Windows目录的盘?硬盘e ...

你说的没错。efi和系统windows不是一个分区。。。
bios的我倒是经常装在同一个分区。

要准确不好判断不好办了。
比如找到bootmgfw.efi再找windows目录,判断他们的位置是否是紧挨的。
回复

使用道具 举报

6#
发表于 2017-6-12 23:47:59 | 显示全部楼层
本帖最后由 yjd 于 2017-6-13 09:33 编辑
2011qt 发表于 2017-6-12 23:31
似乎U盘的efi里的bootmgfw.efi和硬盘efi里的bootmgfw.efi的路径不同或者说硬盘efi里多了一个不同路径下的 ...


对,
通常U盘启动efi。uefi直接找efi/boot/bootx64.efi文件。不加判断应该不会错。除非有人在U盘里放一个/EFI/Microsoft/Boot/bootmgfw.efi
但是bios下搜bootmgr,U盘如果用原始微软的没修改过名字的就可能误判了。

  1. menuentry '启动硬盘系统'  {
  2.     if [ 'pc' == $grub_platform -a -d /Boot/de-DE ] ; then
  3.         if [ search -f -s --no-floppy /bootmgr -o search -f -s --no-floppy /ntldr ]; then
  4.             chainloader +1
  5.         else
  6.             echo '没有找到Windows'
  7.             sleep --verbose 5
  8.         fi
  9.     fi

  10.     if [ $grub_platform == 'efi' ] ; then
  11.         if search -f -s --no-floppy /EFI/Microsoft/Boot/bootmgfw.efi ; then
  12.             chainloader /EFI/Microsoft/Boot/bootmgfw.efi
  13.         else
  14.             echo '没找到bootmgfw.efi'
  15.             sleep --verbose 5
  16.         fi
  17.     fi
  18. }
复制代码

  1. menuentry '启动硬盘系统'  {
  2.     if [ 'pc' == $grub_platform -a -d /Boot/de-DE ] ; then
  3.         if search -f -s --no-floppy /bootmgr ; then
  4.             chainloader +1
  5.         elif search -f -s --no-floppy /ntldr ; then
  6.             chainloader +1
  7.         else
  8.             echo '没有找到Windows'
  9.             sleep --verbose 5
  10.         fi
  11.     fi

  12.     if [ $grub_platform == 'efi' ] ; then
  13.         if search -f -s --no-floppy /EFI/Microsoft/Boot/bootmgfw.efi ; then
  14.             chainloader /EFI/Microsoft/Boot/bootmgfw.efi
  15.         else
  16.             echo '没找到bootmgfw.efi'
  17.             sleep --verbose 5
  18.         fi
  19.     fi
  20. }
复制代码


这样不够严谨,应该够用。通常U盘用bootmgr启动,应该没人会丢其他国家的语言文件在U盘里。
或判断
  1.     if [ 'pc' == $grub_platform -a -e /Boot/memtest.exe ] ; then
复制代码


回复

使用道具 举报

7#
发表于 2017-6-13 11:07:34 | 显示全部楼层
2011qt 发表于 2017-6-13 10:59
菜单还是有问题,1,'pc' == $grub_platform 这个在mbr引导的硬盘(u盘uefi引导的情况下)上并不能识别为m ...

1,本来就是用于bios引导方式。只是com写在一起。通用。省得写成2个菜单。

2,你要是zip模式需要去掉 --no-floppy
回复

使用道具 举报

8#
发表于 2017-6-13 11:52:55 | 显示全部楼层
2011qt 发表于 2017-6-13 11:40
找硬盘上的系统也要去掉--no-floppy ?

找硬盘的那不用。我理解错了。。。

这个是判断grub2的环境。你U盘efi引导。grub2环境就已经是efi了。第一段就已经跳过去了。

只能bios模式,你U盘也是用的mbr引导。

感觉第一种用处不大了。bios模式引导有grub4dos这么强的东西可用。实在没必要用啥grub2。功能弱太多。
回复

使用道具 举报

9#
发表于 2017-6-13 13:11:13 | 显示全部楼层
2011qt 发表于 2017-6-13 12:01
不加判断应该可以,不过不能找mbr磁盘的文件会不会是主板的安全设置问题,还是grub2在uefi环境下无法搜索 ...


是因为这个判断不成立。所以后面代码就跳过去了。

if [ 'pc' == $grub_platform -a -d /Boot/de-DE ] ; then

你如果真要bios启动。但U盘引导时候选uefi。那可以把这个判断去掉。直接优先搜索bootmgr

我没测试过,你可以试试

回复

使用道具 举报

10#
发表于 2017-6-13 19:15:34 | 显示全部楼层
2011qt 发表于 2017-6-13 18:57
这个去掉试过了,找不到bootmgr(硬盘是mbr的)

进入grub2命令行打 ls ( 按下下tab,看看能不能看到系统硬盘。
回复

使用道具 举报

11#
发表于 2017-6-15 11:54:45 | 显示全部楼层
2011qt 发表于 2017-6-15 09:24
用grub2 2.02版,在第一次u盘启动导入证书后可以找到bootmgr,但仍不能启动提示;
not a valid root dev ...

感觉是由于U盘在hd0
系统的bootmgr在hd1引起的。grub2又不像g4d那么好可以交换。

或先关闭安全启动看看是否这个问题。
回复

使用道具 举报

12#
发表于 2017-6-15 14:14:06 | 显示全部楼层
2011qt 发表于 2017-6-15 12:58
不想试了,因为对有些主板还要加证书,自己电脑还好说, 经常维护别人的电脑 ,离开我的题目的便利性,就 ...

grub2区有支持安全启动。不需要导证书的。

用别人的电脑那就没必要测试了。
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-6 08:02

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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