无忧启动论坛

标题: 【已解决】当从U盘efi启动时可不可以有菜单能转到启动硬盘系统? [打印本页]

作者: 2011qt    时间: 2017-6-10 18:59
标题: 【已解决】当从U盘efi启动时可不可以有菜单能转到启动硬盘系统?
本帖最后由 2011qt 于 2017-6-12 21:05 编辑

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


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



经测试也不怎么完美,有些电脑没法引导XORBOOT(Uefi 版)里导出的efi文件,如果为此还要改主板设置就有点多此一举了。
作者: 窄口牛    时间: 2017-6-10 19:08
听不懂你的意思。
作者: 2011qt    时间: 2017-6-10 19:14
窄口牛 发表于 2017-6-10 19:08
听不懂你的意思。

U盘装完系统重启后,默认从U盘efi分区启动又进pe了,人不在电脑边就比较麻烦
作者: parsons    时间: 2017-6-10 19:36
改 [bcd 或 Grub.CFG 或 refind.conf...] 裡面默认从硬盘某分區启动
作者: 2011qt    时间: 2017-6-10 19:38
parsons 发表于 2017-6-10 19:36
改  裡面默认从硬盘某分區启动

能适合不同的电脑吗?
作者: 2011qt    时间: 2017-6-10 19:42
有个法子,可以在装完系统后把系统分区添加进U盘efi里的BCD菜单并设为默认,但这样每次装完系统就会写入U盘一次,感觉不太好
作者: 2012yjgsz    时间: 2017-6-10 19:53
可参考https://bbs.deepin.org/forum.php?mod=viewthread&tid=139552
作者: parsons    时间: 2017-6-10 19:56
2011qt 发表于 2017-6-10 19:38
能适合不同的电脑吗?

适合不同的电脑
但是不同的电脑可能需設定默认从U盘efi启动
作者: 2011qt    时间: 2017-6-10 19:56
2012yjgsz 发表于 2017-6-10 19:53
可参考https://bbs.deepin.org/forum.php?mod=viewthread&tid=139552

谢谢,我试试
作者: 2011qt    时间: 2017-6-10 20:09
似乎用GRUB2可以实现,但我完全不懂,不知有没有现成的模板? 要启动的硬盘系统不一定是gpt的
作者: 窄口牛    时间: 2017-6-10 20:16
把你的优盘菜单默认为启动硬盘系统,有人干预才是启动其它优盘里的项目。
作者: 1904860494    时间: 2017-6-10 20:19
装完后提示重启,在他关机时候直接拔掉U盘
作者: 1904860494    时间: 2017-6-10 20:21
装完后提示重启,在他关机时候直接拔掉U盘
作者: 2011qt    时间: 2017-6-10 20:26
窄口牛 发表于 2017-6-10 20:16
把你的优盘菜单默认为启动硬盘系统,有人干预才是启动其它优盘里的项目。

mbr引导有大大们写的菜单,没找到uefi引导的类似菜单,我等菜鸟离开了大大们就更菜了
作者: 2011qt    时间: 2017-6-10 20:27
1904860494 发表于 2017-6-10 20:21
装完后提示重启,在他关机时候直接拔掉U盘

有这样干过!
作者: 2011qt    时间: 2017-6-10 20:30
parsons 发表于 2017-6-10 19:56
适合不同的电脑
但是不同的电脑可能需設定默认从U盘efi启动

不知有没有grub的模板可以套套?
作者: 窄口牛    时间: 2017-6-10 20:49
grub2教程里看看,抄一个就行
作者: rgy    时间: 2017-6-10 20:50
把uefi的主引导换成GRUB2,添加一个"启动现有 windows 系统"的菜单并设为默认启动项,应该就可以了!
作者: parsons    时间: 2017-6-10 21:17
2011qt 发表于 2017-6-10 20:30
不知有没有grub的模板可以套套?

grub2 xorbooot refind clover 等都是特殊需求時才用

使用bootice 改 BCD 就可以了
作者: 2011qt    时间: 2017-6-10 21:20
parsons 发表于 2017-6-10 21:17
grub2 xorbooot refind clover 等都是特殊需求時才用

使用bootice 改 BCD 就可以了

谢谢帮助,刚到grub区转了一圈,发现XorBoot满足要求,马上行动,经测试完美解决!
作者: rgy    时间: 2017-6-10 21:32
可以看看这个grub2菜单:
  1. if  search --no-floppy -f -s /EFI/Microsoft/Boot/bootmgfw.efi; then
  2. menuentry "启动现有 Windows 系统" --class windows2 --class os{
  3. search --file /EFI/Microsoft/Boot/bootmgfw.efi --set=root
  4. chainloader ($root)/EFI/Microsoft/Boot/bootmgfw.efi
  5. }
  6. fi
复制代码


可以检测磁盘上是否装有Windows系统,有就显示菜单并启动,没有的话就不显示菜单。
作者: 2011qt    时间: 2017-6-10 22:14
rgy 发表于 2017-6-10 21:32
可以看看这个grub2菜单:

谢谢,如果硬盘不是gpt格式,是mbr引导的话,这个还需要怎么修改?
作者: yjd    时间: 2017-6-10 23:03
2011qt 发表于 2017-6-10 22:14
谢谢,如果硬盘不是gpt格式,是mbr引导的话,这个还需要怎么修改?

搜bootmgr文件。
作者: lintrainwy    时间: 2017-6-10 23:15
本帖最后由 comzhongwy 于 2017-6-10 23:18 编辑

grub2可以参考这个写法,支持 BIOS + UEFI 的哦!

  1. menuentry 'Windows Boot Manager 菜单' --unrestricted {
  2.     if [ 'pc' == $grub_platform ] ; then
  3.         if search --file --set --no-floppy /bootmgr ; then
  4.             chainloader +1
  5.         elif search --file --set --no-floppy /ntldr ; then
  6.             chainloader +1
  7.         else
  8.             echo '没有找到Windows'
  9.             sleep --verbose 5
  10.         fi
  11.     fi

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

作者: 2011qt    时间: 2017-6-10 23:52
请问chainloader +1这样会不会破坏win7的破解激活。还有从当前启动U盘的efi启动该怎么写
作者: rgy    时间: 2017-6-11 07:56
2011qt 发表于 2017-6-10 22:14
谢谢,如果硬盘不是gpt格式,是mbr引导的话,这个还需要怎么修改?

mbr引导的话,不推荐用grub2,主流都用GRUB4DOS,用GRUB4DOS的PE一般都带有启动硬盘的选项,比如我这个:


下面是我在uefi上使用之前grub2菜单的测试
1.装有系统:

2.没装系统:


好像还可以用!
作者: wintoflash    时间: 2017-6-11 08:05
2011qt 发表于 2017-6-10 23:52
请问chainloader +1这样会不会破坏win7的破解激活。还有从当前启动U盘的efi启动该怎么写

chainloader +1 不会破坏slic激活
chainloader /ntldr 或chainloader /bootmgr才会
作者: 1904860494    时间: 2017-6-11 09:01
2011qt 发表于 2017-6-10 20:27
有这样干过!

其实pe启动菜单也有呢个选项的,可以加感觉没大用
作者: yjd    时间: 2017-6-11 10:57
本帖最后由 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. }
复制代码



作者: 2012yjgsz    时间: 2017-6-11 12:46
本帖最后由 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,自行修改一下就行了。


作者: 2011qt    时间: 2017-6-11 14:21
wintoflash 发表于 2017-6-11 08:05
chainloader +1 不会破坏slic激活
chainloader /ntldr 或chainloader /bootmgr才会

明白了,谢谢!
作者: 2011qt    时间: 2017-6-11 14:24
2012yjgsz 发表于 2017-6-11 12:46
https://bbs.deepin.org/forum.php?mod=viewthread&tid=139552
帖子中grub(MBR)和grub2(UEFI)的模 ...

改起来头疼,还是把Pauly大的工具拿来用算了。
作者: 123456789op    时间: 2017-6-11 18:29
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=386189&extra=page%3D1&mobile=2
作者: 2011qt    时间: 2017-6-11 22:34
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...的中文显示问题。感谢各位的指导!谢谢。
作者: lintrainwy    时间: 2017-6-12 11:32
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
作者: lintrainwy    时间: 2017-6-12 11:34
yjd 发表于 2017-6-11 10:57
多一个判断的语法是什么,编程上的and。感觉应该再增加判断window文件夹。
不然在维护的时候U盘一般是 ...

你是说: if [ 'pc' == $grub_platform ] ; then 这个?这个是判断 BIOS 还是 UEFI 固件启动
作者: yjd    时间: 2017-6-12 12:11
comzhongwy 发表于 2017-6-12 11:34
你是说: if [ 'pc' == $grub_platform ] ; then 这个?这个是判断 BIOS 还是 UEFI 固件启动

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

我前面有增加了。我这里没纯uefi +系统测试可测试。
作者: 2011qt    时间: 2017-6-12 21:08
yjd 发表于 2017-6-12 12:11
这个知道。
我是说需要增加另一个条件。不然误判。

加了这个条件后好像就不是从efi分区启动了
作者: 2011qt    时间: 2017-6-12 21:21
comzhongwy 发表于 2017-6-12 11:32
UEFI 的 BCD 是启动不了 GRUB2 等等的,不用试了,反过来是可以的,我这个帖子里常用的引导转换都弄了, ...

你链接里的菜单对我有点复杂了,我只想要从硬盘启动和从U盘的原bootX64.efi启动这两项,用你的试了下从U盘转到gpt磁盘启动后,server2008 r2被显示成未激活状态(因为用的bootX64.efi模拟slic激活),当然重启直接从硬盘启动后又恢复激活状态,关于此问题的影响不大。
作者: yjd    时间: 2017-6-12 21:25
2011qt 发表于 2017-6-12 21:08
加了这个条件后好像就不是从efi分区启动了

你试过了?
我没纯uefi环境和装了win7以上系统。所以没测。可能语法要改改。
作者: 2011qt    时间: 2017-6-12 22:06
yjd 发表于 2017-6-12 21:25
你试过了?
我没纯uefi环境和装了win7以上系统。所以没测。可能语法要改改。

comzhongwy的原菜单可以,加了你的那个条件就不行了,你的这个条件的是不是找包含Windows目录的盘?硬盘efi分区里也不会有Windows目录。
作者: yjd    时间: 2017-6-12 22:30
2011qt 发表于 2017-6-12 22:06
comzhongwy的原菜单可以,加了你的那个条件就不行了,你的这个条件的是不是找包含Windows目录的盘?硬盘e ...

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

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

作者: 2011qt    时间: 2017-6-12 23:31
yjd 发表于 2017-6-12 22:30
你说的没错。efi和系统windows不是一个分区。。。
bios的我倒是经常装在同一个分区。


似乎U盘的efi里的bootmgfw.efi和硬盘efi里的bootmgfw.efi的路径不同或者说硬盘efi里多了一个不同路径下的bootmgfw.efi,通过这个区别,所以就不用再加多余的判断了
作者: yjd    时间: 2017-6-12 23:47
本帖最后由 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
复制代码



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

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

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

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

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

找硬盘上的系统也要去掉--no-floppy ?
作者: yjd    时间: 2017-6-13 11:52
2011qt 发表于 2017-6-13 11:40
找硬盘上的系统也要去掉--no-floppy ?

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

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

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

感觉第一种用处不大了。bios模式引导有grub4dos这么强的东西可用。实在没必要用啥grub2。功能弱太多。
作者: 2011qt    时间: 2017-6-13 12:01
yjd 发表于 2017-6-13 11:52
找硬盘的那不用。我理解错了。。。

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

不加判断应该可以,不过不能找mbr磁盘的文件会不会是主板的安全设置问题,还是grub2在uefi环境下无法搜索mbr磁盘的文件?
作者: yjd    时间: 2017-6-13 13:11
2011qt 发表于 2017-6-13 12:01
不加判断应该可以,不过不能找mbr磁盘的文件会不会是主板的安全设置问题,还是grub2在uefi环境下无法搜索 ...


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

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

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

我没测试过,你可以试试


作者: 2011qt    时间: 2017-6-13 18:57
yjd 发表于 2017-6-13 13:11
是因为这个判断不成立。所以后面代码就跳过去了。

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

这个去掉试过了,找不到bootmgr(硬盘是mbr的)
作者: yjd    时间: 2017-6-13 19:15
2011qt 发表于 2017-6-13 18:57
这个去掉试过了,找不到bootmgr(硬盘是mbr的)

进入grub2命令行打 ls ( 按下下tab,看看能不能看到系统硬盘。
作者: 2011qt    时间: 2017-6-13 19:24
yjd 发表于 2017-6-13 19:15
进入grub2命令行打 ls ( 按下下tab,看看能不能看到系统硬盘。

现在不在那台电脑旁,当时测试时提示找不到bootmgr,有机会再试吧
作者: 2011qt    时间: 2017-6-15 09:24
yjd 发表于 2017-6-13 19:15
进入grub2命令行打 ls ( 按下下tab,看看能不能看到系统硬盘。

用grub2 2.02版,在第一次u盘启动导入证书后可以找到bootmgr,但仍不能启动提示;
not a valid root device
作者: yjd    时间: 2017-6-15 11:54
2011qt 发表于 2017-6-15 09:24
用grub2 2.02版,在第一次u盘启动导入证书后可以找到bootmgr,但仍不能启动提示;
not a valid root dev ...

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

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

作者: 2011qt    时间: 2017-6-15 12:58
yjd 发表于 2017-6-15 11:54
感觉是由于U盘在hd0
系统的bootmgr在hd1引起的。grub2又不像g4d那么好可以交换。


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

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

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




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