无忧启动论坛

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

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

  [复制链接]
跳转到指定楼层
1#
发表于 2017-6-10 18:59:20 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
本帖最后由 2011qt 于 2017-6-12 21:05 编辑

很多主板默认uefi优先引导,U盘插上就从U盘的efi分区启动,然后直接进pe了,
我的想法是能不能有办法从U盘efi启动后可以默认从硬盘系统启动。


在各位热心帮助下,已找到完美方法,感谢各位!!
感谢Pauly的辛苦付出:Pauly大大的  XORBOOT(Uefi 版)
一点点小瑕疵:loading files...... 不能为显示为中文了。



经测试也不怎么完美,有些电脑没法引导XORBOOT(Uefi 版)里导出的efi文件,如果为此还要改主板设置就有点多此一举了。
57#
发表于 2017-6-15 14:14:06 | 只看该作者
2011qt 发表于 2017-6-15 12:58
不想试了,因为对有些主板还要加证书,自己电脑还好说, 经常维护别人的电脑 ,离开我的题目的便利性,就 ...

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

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

使用道具 举报

56#
 楼主| 发表于 2017-6-15 12:58:33 来自手机 | 只看该作者
yjd 发表于 2017-6-15 11:54
感觉是由于U盘在hd0
系统的bootmgr在hd1引起的。grub2又不像g4d那么好可以交换。


不想试了,因为对有些主板还要加证书,自己电脑还好说, 经常维护别人的电脑 ,离开我的题目的便利性,就没必要了。

点评

yjd
grub2区有支持安全启动。不需要导证书的。 用别人的电脑那就没必要测试了。  详情 回复 发表于 2017-6-15 14:14
回复

使用道具 举报

55#
发表于 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那么好可以交换。

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

点评

不想试了,因为对有些主板还要加证书,自己电脑还好说, 经常维护别人的电脑 ,离开我的题目的便利性,就没必要了。  详情 回复 发表于 2017-6-15 12:58
回复

使用道具 举报

54#
 楼主| 发表于 2017-6-15 09:24:47 | 只看该作者
yjd 发表于 2017-6-13 19:15
进入grub2命令行打 ls ( 按下下tab,看看能不能看到系统硬盘。

用grub2 2.02版,在第一次u盘启动导入证书后可以找到bootmgr,但仍不能启动提示;
not a valid root device

点评

yjd
感觉是由于U盘在hd0 系统的bootmgr在hd1引起的。grub2又不像g4d那么好可以交换。 或先关闭安全启动看看是否这个问题。  详情 回复 发表于 2017-6-15 11:54
回复

使用道具 举报

53#
 楼主| 发表于 2017-6-13 19:24:23 | 只看该作者
yjd 发表于 2017-6-13 19:15
进入grub2命令行打 ls ( 按下下tab,看看能不能看到系统硬盘。

现在不在那台电脑旁,当时测试时提示找不到bootmgr,有机会再试吧
回复

使用道具 举报

52#
发表于 2017-6-13 19:15:34 | 只看该作者
2011qt 发表于 2017-6-13 18:57
这个去掉试过了,找不到bootmgr(硬盘是mbr的)

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

点评

用grub2 2.02版,在第一次u盘启动导入证书后可以找到bootmgr,但仍不能启动提示; not a valid root device  详情 回复 发表于 2017-6-15 09:24
现在不在那台电脑旁,当时测试时提示找不到bootmgr,有机会再试吧  详情 回复 发表于 2017-6-13 19:24
回复

使用道具 举报

51#
 楼主| 发表于 2017-6-13 18:57:31 | 只看该作者
yjd 发表于 2017-6-13 13:11
是因为这个判断不成立。所以后面代码就跳过去了。

if [ 'pc' == $grub_platform -a -d /Boot/de-DE  ...

这个去掉试过了,找不到bootmgr(硬盘是mbr的)

点评

yjd
进入grub2命令行打 ls ( 按下下tab,看看能不能看到系统硬盘。  详情 回复 发表于 2017-6-13 19:15
回复

使用道具 举报

50#
发表于 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

我没测试过,你可以试试

点评

这个去掉试过了,找不到bootmgr(硬盘是mbr的)  详情 回复 发表于 2017-6-13 18:57
回复

使用道具 举报

49#
 楼主| 发表于 2017-6-13 12:01:15 | 只看该作者
yjd 发表于 2017-6-13 11:52
找硬盘的那不用。我理解错了。。。

这个是判断grub2的环境。你U盘efi引导。grub2环境就已经是efi了。 ...

不加判断应该可以,不过不能找mbr磁盘的文件会不会是主板的安全设置问题,还是grub2在uefi环境下无法搜索mbr磁盘的文件?

点评

yjd
是因为这个判断不成立。所以后面代码就跳过去了。 if [ 'pc' == $grub_platform -a -d /Boot/de-DE ] ; then 你如果真要bios启动。但U盘引导时候选uefi。那可以把这个判断去掉。直接优先搜索bootmgr  详情 回复 发表于 2017-6-13 13:11
回复

使用道具 举报

48#
发表于 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。功能弱太多。

点评

不加判断应该可以,不过不能找mbr磁盘的文件会不会是主板的安全设置问题,还是grub2在uefi环境下无法搜索mbr磁盘的文件?  详情 回复 发表于 2017-6-13 12:01
回复

使用道具 举报

47#
 楼主| 发表于 2017-6-13 11:40:07 | 只看该作者
yjd 发表于 2017-6-13 11:07
1,本来就是用于bios引导方式。只是com写在一起。通用。省得写成2个菜单。

2,你要是zip模式需要去掉  ...

找硬盘上的系统也要去掉--no-floppy ?

点评

yjd
找硬盘的那不用。我理解错了。。。 这个是判断grub2的环境。你U盘efi引导。grub2环境就已经是efi了。第一段就已经跳过去了。 只能bios模式,你U盘也是用的mbr引导。 感觉第一种用处不大了。bios模式引导有g  详情 回复 发表于 2017-6-13 11:52
回复

使用道具 举报

46#
发表于 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

点评

找硬盘上的系统也要去掉--no-floppy ?  详情 回复 发表于 2017-6-13 11:40
回复

使用道具 举报

45#
 楼主| 发表于 2017-6-13 10:59:47 | 只看该作者
yjd 发表于 2017-6-12 23:47
对,
通常U盘启动efi。uefi直接找efi/boot/bootx64.efi文件。不加判断应该不会错。除非有人在U盘里放 ...

菜单还是有问题,1,'pc' == $grub_platform 这个在mbr引导的硬盘(u盘uefi引导的情况下)上并不能识别为mbr,2,不加这些判断直接找文件又找不到文件(文件确实存在)。
看来用这个通用性不够。

点评

yjd
1,本来就是用于bios引导方式。只是com写在一起。通用。省得写成2个菜单。 2,你要是zip模式需要去掉 --no-floppy  详情 回复 发表于 2017-6-13 11:07
回复

使用道具 举报

44#
发表于 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
复制代码


点评

菜单还是有问题,1,'pc' == $grub_platform 这个在mbr引导的硬盘(u盘uefi引导的情况下)上并不能识别为mbr,2,不加这些判断直接找文件又找不到文件(文件确实存在)。 看来用这个通用性不够。  详情 回复 发表于 2017-6-13 10:59
回复

使用道具 举报

43#
 楼主| 发表于 2017-6-12 23:31:29 来自手机 | 只看该作者
yjd 发表于 2017-6-12 22:30
你说的没错。efi和系统windows不是一个分区。。。
bios的我倒是经常装在同一个分区。


似乎U盘的efi里的bootmgfw.efi和硬盘efi里的bootmgfw.efi的路径不同或者说硬盘efi里多了一个不同路径下的bootmgfw.efi,通过这个区别,所以就不用再加多余的判断了

点评

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

使用道具 举报

42#
发表于 2017-6-12 22:30:04 | 只看该作者
2011qt 发表于 2017-6-12 22:06
comzhongwy的原菜单可以,加了你的那个条件就不行了,你的这个条件的是不是找包含Windows目录的盘?硬盘e ...

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

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

点评

似乎U盘的efi里的bootmgfw.efi和硬盘efi里的bootmgfw.efi的路径不同或者说硬盘efi里多了一个不同路径下的bootmgfw.efi,通过这个区别,所以就不用再加多余的判断了  详情 回复 发表于 2017-6-12 23:31
回复

使用道具 举报

41#
 楼主| 发表于 2017-6-12 22:06:25 | 只看该作者
yjd 发表于 2017-6-12 21:25
你试过了?
我没纯uefi环境和装了win7以上系统。所以没测。可能语法要改改。

comzhongwy的原菜单可以,加了你的那个条件就不行了,你的这个条件的是不是找包含Windows目录的盘?硬盘efi分区里也不会有Windows目录。

点评

yjd
你说的没错。efi和系统windows不是一个分区。。。 bios的我倒是经常装在同一个分区。 要准确不好判断不好办了。 比如找到bootmgfw.efi再找windows目录,判断他们的位置是否是紧挨的。  详情 回复 发表于 2017-6-12 22:30
回复

使用道具 举报

40#
发表于 2017-6-12 21:25:14 | 只看该作者
2011qt 发表于 2017-6-12 21:08
加了这个条件后好像就不是从efi分区启动了

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

点评

comzhongwy的原菜单可以,加了你的那个条件就不行了,你的这个条件的是不是找包含Windows目录的盘?硬盘efi分区里也不会有Windows目录。  详情 回复 发表于 2017-6-12 22:06
回复

使用道具 举报

39#
 楼主| 发表于 2017-6-12 21:21:43 | 只看该作者
comzhongwy 发表于 2017-6-12 11:32
UEFI 的 BCD 是启动不了 GRUB2 等等的,不用试了,反过来是可以的,我这个帖子里常用的引导转换都弄了, ...

你链接里的菜单对我有点复杂了,我只想要从硬盘启动和从U盘的原bootX64.efi启动这两项,用你的试了下从U盘转到gpt磁盘启动后,server2008 r2被显示成未激活状态(因为用的bootX64.efi模拟slic激活),当然重启直接从硬盘启动后又恢复激活状态,关于此问题的影响不大。
回复

使用道具 举报

38#
 楼主| 发表于 2017-6-12 21:08:56 | 只看该作者
yjd 发表于 2017-6-12 12:11
这个知道。
我是说需要增加另一个条件。不然误判。

加了这个条件后好像就不是从efi分区启动了

点评

yjd
你试过了? 我没纯uefi环境和装了win7以上系统。所以没测。可能语法要改改。  详情 回复 发表于 2017-6-12 21:25
回复

使用道具 举报

37#
发表于 2017-6-12 12:11:33 | 只看该作者
comzhongwy 发表于 2017-6-12 11:34
你是说: if [ 'pc' == $grub_platform ] ; then 这个?这个是判断 BIOS 还是 UEFI 固件启动

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

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

点评

加了这个条件后好像就不是从efi分区启动了  详情 回复 发表于 2017-6-12 21:08
回复

使用道具 举报

36#
发表于 2017-6-12 11:34:10 | 只看该作者
yjd 发表于 2017-6-11 10:57
多一个判断的语法是什么,编程上的and。感觉应该再增加判断window文件夹。
不然在维护的时候U盘一般是 ...

你是说: if [ 'pc' == $grub_platform ] ; then 这个?这个是判断 BIOS 还是 UEFI 固件启动

点评

yjd
这个知道。 我是说需要增加另一个条件。不然误判。 我前面有增加了。我这里没纯uefi +系统测试可测试。  详情 回复 发表于 2017-6-12 12:11
回复

使用道具 举报

35#
发表于 2017-6-12 11:32:34 | 只看该作者
2011qt 发表于 2017-6-11 22:34
明天再试试在U盘efi里的bcd添加grub2,然后grub2的菜单只添加comzhongwy的菜单应该就可以满足我的要求了 ...

UEFI 的 BCD 是启动不了 GRUB2 等等的,不用试了,反过来是可以的,我这个帖子里常用的引导转换都弄了,如果有补充,可以告诉我

简单手动制作BIOS+UEFI的syslinux+grub+boomgr+grub2互转U盘
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=370578

点评

你链接里的菜单对我有点复杂了,我只想要从硬盘启动和从U盘的原bootX64.efi启动这两项,用你的试了下从U盘转到gpt磁盘启动后,server2008 r2被显示成未激活状态(因为用的bootX64.efi模拟slic激活),当然重启直接从  详情 回复 发表于 2017-6-12 21:21
回复

使用道具 举报

34#
 楼主| 发表于 2017-6-11 22:34:28 来自手机 | 只看该作者
123456789op 发表于 2017-6-11 18:29
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=386189&extra=page%3D1&mobile=2

明天再试试在U盘efi里的bcd添加grub2,然后grub2的菜单只添加comzhongwy的菜单应该就可以满足我的要求了。又可以解决加载pe时loading files...的中文显示问题。感谢各位的指导!谢谢。

点评

UEFI 的 BCD 是启动不了 GRUB2 等等的,不用试了,反过来是可以的,我这个帖子里常用的引导转换都弄了,如果有补充,可以告诉我 简单手动制作BIOS+UEFI的syslinux+grub+boomgr+grub2互转U盘 http://bbs.wuyou.ne  详情 回复 发表于 2017-6-12 11:32
回复

使用道具 举报

33#
发表于 2017-6-11 18:29:16 来自手机 | 只看该作者
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=386189&extra=page%3D1&mobile=2

点评

明天再试试在U盘efi里的bcd添加grub2,然后grub2的菜单只添加comzhongwy的菜单应该就可以满足我的要求了。又可以解决加载pe时loading files...的中文显示问题。感谢各位的指导!谢谢。  详情 回复 发表于 2017-6-11 22:34
回复

使用道具 举报

32#
 楼主| 发表于 2017-6-11 14:24:18 | 只看该作者
2012yjgsz 发表于 2017-6-11 12:46
https://bbs.deepin.org/forum.php?mod=viewthread&tid=139552
帖子中grub(MBR)和grub2(UEFI)的模 ...

改起来头疼,还是把Pauly大的工具拿来用算了。
回复

使用道具 举报

31#
 楼主| 发表于 2017-6-11 14:21:40 | 只看该作者
wintoflash 发表于 2017-6-11 08:05
chainloader +1 不会破坏slic激活
chainloader /ntldr 或chainloader /bootmgr才会

明白了,谢谢!
回复

使用道具 举报

30#
发表于 2017-6-11 12:46:38 | 只看该作者
本帖最后由 2012yjgsz 于 2017-6-11 12:51 编辑
2011qt 发表于 2017-6-10 20:30
不知有没有grub的模板可以套套?


https://bbs.deepin.org/forum.php?mod=viewthread&tid=139552
帖子中grub(MBR)和grub2(UEFI)的模板都在里面了。
配置文件分别为:menu.lst、grub.cfg,自行修改一下就行了。

点评

改起来头疼,还是把Pauly大的工具拿来用算了。  详情 回复 发表于 2017-6-11 14:24
回复

使用道具 举报

29#
发表于 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
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-30 17:19

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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