您尚未登录。

#1 2018-04-25 18:03:28

erickwok
会员
注册时间: 2018-04-25
帖子: 6

能否从U盘上的GRUB2启动硬盘上UEFI模式的GRUB2?

参照这个【2017.12.25】deepin安装U盘制作,支持 BIOS+UEFI,deepin_Recovery+Win PE在U盘上安装了多引导,现在想加一条菜单,即让U盘上的GRUB把控制权交让给硬盘上的GRUB,目前想到的是`chainload +1`,以下是我的GRUB配置

menuentry "[d] (实验性) 正常启动"                  --hotkey=d{
    echo "正在启动 chainloader +1,请等待...."
    set root=(hd1,1)
    chainloader +1
    boot
}

但是我遇到了这个错误

错误:invalid EFI file path.

用 grub shell 也不行
_20180425104904.md.jpg

请问有没有办法能做到这样引导呢?
对了,我的硬盘上的GRUB2是UEFI模式

离线

#2 2018-04-25 18:53:27

zsrkmyn
lazy...
注册时间: 2013-05-05
帖子: 285

Re: 能否从U盘上的GRUB2启动硬盘上UEFI模式的GRUB2?

EFI 引导信息怕不是在 +1 block 上吧,那是 MBR 的吧。

https://www.gnu.org/software/grub/manua … ist-syntax
https://bbs.archlinux.org/viewtopic.php?id=169328
https://wiki.archlinux.org/index.php/GR … _UEFI_mode

另外你要做在 U 盘上那应该是比较通用的,在你这台电脑是 (hd1,gpt1),在其他电脑也不一定啊……用 search --set root 更合适吧。

离线

#3 2018-04-25 20:33:01

依云
a.k.a. 百合仙子
所在地: 一个等待妹纸出现的地方
注册时间: 2011-08-21
帖子: 4,638
个人网站

Re: 能否从U盘上的GRUB2启动硬盘上UEFI模式的GRUB2?

如果你是 UEFI 引导的,那么可以,否则不行。不过你可以继续用现在这个 grub 啊,读取那边的配置文件就可以了(configfile 命令)。

离线

#4 2018-04-25 20:33:39

erickwok
会员
注册时间: 2018-04-25
帖子: 6

Re: 能否从U盘上的GRUB2启动硬盘上UEFI模式的GRUB2?

zsrkmyn 说:

EFI 引导信息怕不是在 +1 block 上吧,那是 MBR 的吧。

https://www.gnu.org/software/grub/manua … ist-syntax
https://bbs.archlinux.org/viewtopic.php?id=169328
https://wiki.archlinux.org/index.php/GR … _UEFI_mode

另外你要做在 U 盘上那应该是比较通用的,在你这台电脑是 (hd1,gpt1),在其他电脑也不一定啊……用 search --set root 更合适吧。

啊 所以+1是一个很硬件的操作啊 懂了懂了
现在是

menuentry "[d] (实验性) 正常启动"                  --hotkey=d{
    echo "正在链式启动,请等待...."
    insmod ntfs
    insmod part_gpt
    insmod fat
    set root=(hd1,1)
    chainloader (${root})/EFI/deepin/grubx64.efi
    boot
}

已经能启动了,接下来就啃一啃你说的 search --set root,争取做到通用吧!
十分感谢!!

最近编辑记录 erickwok (2018-04-25 20:36:36)

离线

#5 2018-04-25 20:35:50

erickwok
会员
注册时间: 2018-04-25
帖子: 6

Re: 能否从U盘上的GRUB2启动硬盘上UEFI模式的GRUB2?

依云 说:

如果你是 UEFI 引导的,那么可以,否则不行。不过你可以继续用现在这个 grub 啊,读取那边的配置文件就可以了(configfile 命令)。

U盘是UEFI引导,硬盘也是,已经成功进入系统了
MBR的话……手头没有MBR的设备……没法调

离线

#6 2018-04-26 13:01:16

xtricman
喵了个咪
注册时间: 2012-12-26
帖子: 364

Re: 能否从U盘上的GRUB2启动硬盘上UEFI模式的GRUB2?

你硬盘上的grub是作为UEFI Application存在的,而chainloader +1是直接读磁盘头。

如果目标机器UEFI固件能处理MBR磁盘的话,U盘上建立一个EFI分区(另外的分区自己考虑要不要,如果没有大文件其实一个FAT32也完全可以用,省下很多麻烦)。然后在MBR里写入GRUB2并设定boot-directory为EFI目录,UEFI版安装的时候设定bootloader-id为grub(因为BIOS版的目录名字是写死的grub,UEFI版就只好这么跟着),到时候UEFI Application版本跟BIOS版本就能放到一起利于维护。cfg两版本可以共享一份。

可以用QEMU测试。

离线

#7 2018-04-27 00:48:28

erickwok
会员
注册时间: 2018-04-25
帖子: 6

Re: 能否从U盘上的GRUB2启动硬盘上UEFI模式的GRUB2?

erickwok 说:
zsrkmyn 说:

EFI 引导信息怕不是在 +1 block 上吧,那是 MBR 的吧。

https://www.gnu.org/software/grub/manua … ist-syntax
https://bbs.archlinux.org/viewtopic.php?id=169328
https://wiki.archlinux.org/index.php/GR … _UEFI_mode

另外你要做在 U 盘上那应该是比较通用的,在你这台电脑是 (hd1,gpt1),在其他电脑也不一定啊……用 search --set root 更合适吧。

啊 所以+1是一个很硬件的操作啊 懂了懂了
现在是

menuentry "[d] (实验性) 正常启动"                  --hotkey=d{
    echo "正在链式启动,请等待...."
    insmod ntfs
    insmod part_gpt
    insmod fat
    set root=(hd1,1)
    chainloader (${root})/EFI/deepin/grubx64.efi
    boot
}

已经能启动了,接下来就啃一啃你说的 search --set root,争取做到通用吧!
十分感谢!!

自己琢磨出了一个解决方案

menuentry "[d] (实验性) 正常启动"                  --hotkey=d{
      echo "正在链式启动,请等待...."
      insmod part_gpt
      insmod fat
      set root=(hd1,1)
      search --label --no-floppy --set=root EFI
      search --file --no-floppy --set=root /EFI/ubuntu/grubx64.efi
      search --file --no-floppy --set=root /EFI/Microsoft/Boot/bootmgfw.efi
      #若存在深度安装的grub则引导
      if [ -e /EFI/deepin/grubx64.efi ]; then
          chainloader (${root})/EFI/deepin/grubx64.efi
      #否则,若存在Ubuntu安装的grub则引导
      elif [ -e /EFI/ubuntu/grubx64.efi ]; then
          chainloader (${root})/EFI/ubuntu/grubx64.efi
      #否则,若存在Windows则引导
      elif [ -e /EFI/Microsoft/Boot/bootmgfw.efi ]; then
          chainloader (${root})/EFI/Microsoft/Boot/bootmgfw.efi
      else 
          echo "找不到主硬盘中的grub2,请拔下U盘,按Ctrl+Alt+Del重启电脑!"
          echo "Couln't find Grub2 in HDD, please remove the flash disk and press CTRL+ALT+DEL to reboot!"
      fi
      boot
}

BTW,记得把U盘上的 efi/microsoft 改名为 efi/ms,grub 的 search 似乎不区分大小写,在搜索硬盘上的efi分区的时候可能会错误地把U盘设置为root,最终结果就是chainloader引导了U盘上的bootloader……

离线

#8 2018-04-27 08:55:04

依云
a.k.a. 百合仙子
所在地: 一个等待妹纸出现的地方
注册时间: 2011-08-21
帖子: 4,638
个人网站

Re: 能否从U盘上的GRUB2启动硬盘上UEFI模式的GRUB2?

erickwok 说:

grub 的 search 似乎不区分大小写

是 UEFI 分区用的 FAT32 文件系统不区分大小写。

离线

#9 2018-04-28 00:13:22

erickwok
会员
注册时间: 2018-04-25
帖子: 6

Re: 能否从U盘上的GRUB2启动硬盘上UEFI模式的GRUB2?

依云 说:
erickwok 说:

grub 的 search 似乎不区分大小写

是 UEFI 分区用的 FAT32 文件系统不区分大小写。

soga!

离线

#10 2018-04-28 00:27:41

erickwok
会员
注册时间: 2018-04-25
帖子: 6

Re: 能否从U盘上的GRUB2启动硬盘上UEFI模式的GRUB2?

更新:使用configfile代替了chainloader,避免重新载入grub,并且大幅减少了代码量

#########################
# 06_pc.cfg
# UEFI 模式启动
if [ 'efi' == $grub_platform ] ; then
    menuentry "[b] (实验性) 正常启动"                  --hotkey=b{
        configfile "${prefix}/Config/NormalBootList.cfg"
    }
fi

#############################
# NormalBootList.cfg
set timeout=10
set default=0

search --file --no-floppy --set=root /efi/deepin/grub.cfg
search --file --no-floppy --set=root /efi/Microsoft/Boot/bootmgfw.efi

if [ -e /efi/deepin/grub.cfg ] ; then
    menuentry "[g] 启动 grub" --hotkey=g{
        configfile ($root)/efi/deepin/grub.cfg
    }
fi
if [ -e /efi/Microsoft/Boot/bootmgfw.efi ] ; then
    menuentry "[w] 启动 Windows" --hotkey=w{
        chainloader ($root)/efi/Microsoft/Boot/bootmgfw.efi
        boot
    }
fi

最近编辑记录 erickwok (2018-04-28 01:17:54)

离线

页脚