V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
Solitudechn
V2EX  ›  Linux

问一下关于修改 grub2efi 引导文件的事

  •  
  •   Solitudechn · 2015-12-20 20:52:24 +08:00 · 467 次点击
    这是一个创建于 3261 天前的主题,其中的信息可能已经有所发展或是发生改变。

    hp 的笔记本在 efi 模式下是没法修改启动顺序的,无论用什么程序修改都是没人使用 windows 的引导管理器引导,我今天试了一下,将 efi 分区下的 boot 文件夹下的 bootx64.efi 更换成 grub 下的 efi 文件,将我 indows 下的 efi 文件 bootmgfw.efi 也替换成 grub 的 efi 文件,将原本的文件改了个名字为 winbootmgfw.efi ,在 /boot/grub/grub.cfg 下修改了 windows 的引导程序为 chainloader /EFI/Microsoft/Boot/winbootmgfw.efi
    这样的话修改开机引导成功,系统默认使用 grub 引导, windows 引导项也可以正常使用。
    但是根据 grub 的说明显示官方不建议直接修改 grub.cfg 文件,但是我在 defaults 下以及 grub.d 下均没有找到如何修改 chainloader 这个项目的地方,请各位帮忙,谢谢

    12 条回复    2015-12-22 00:32:10 +08:00
    whatot
        1
    whatot  
       2015-12-20 21:07:14 +08:00
    安装 grub 到 efi 里,然后通过 grub-mkconfig 生成 grub.cfg
    styx
        2
    styx  
       2015-12-20 21:14:56 +08:00
    /etc/grub.d/40_custom 最后加上用来启动 windows 的 menuentry ,然后 debian 的话用 update-grub ,其他发行版(如 Gentoo )可以用 grub2-mkconfig -o /boot/grub/grub.cfg ,这样就会自动把 custom 里面的加进去
    Solitudechn
        3
    Solitudechn  
    OP
       2015-12-20 21:38:14 +08:00
    @whatot 抱歉,你可能没有动我的意思,我是正常有 grup.cfg 但是我要修改源文件...
    Solitudechn
        4
    Solitudechn  
    OP
       2015-12-20 21:41:06 +08:00
    @styx 不是,我的意思是,我修改了 efi 下 windows 引导文件的名称,将引导文件的名字改为了 winbootmgfw.efi ,使用默认生成的配置文件,扫描出来的 windows 引导文件为 bootmgfw.efi ,我想问得是在哪里可以修改这个。先说一下我是 debian 系统。
    whatot
        5
    whatot  
       2015-12-21 00:48:03 +08:00
    arch 里面代码在 /etc/grub.d/30_os-prober , debian 可以类推。

    ```
    efi)

    EFIPATH=${DEVICE#*@}
    DEVICE=${DEVICE%@*}
    onstr="$(gettext_printf "(on %s)" "${DEVICE}")"
    cat << EOF
    menuentry '$(echo "${LONGNAME} $onstr" | grub_quote)' --class windows --class os \$menuentry_id_option 'osprober-efi-$(grub_get_device_id "${DEVICE}")' {
    EOF
    save_default_entry | sed -e "s/^/\t/"
    prepare_grub_to_access_device ${DEVICE} | sed -e "s/^/\t/"

    cat <<EOF
    chainloader ${EFIPATH}
    }
    EOF
    ;;
    ```
    pynix
        6
    pynix  
       2015-12-21 01:56:08 +08:00
    直接使用 efi 引导 kernel
    comicfans44
        7
    comicfans44  
       2015-12-21 07:56:28 +08:00
    可以尝试把 64bit efi shell 拷贝到 u 盘 efi/boot/bootx64.efi ,用 u 盘启动,执行 bcfg 命令或可直接修改 efi 启动顺序
    styx
        8
    styx  
       2015-12-21 09:38:33 +08:00
    @Solitudechn 你的意思就是你想要重命名 grub 脚本自动生成的 chainloader 引导文件是吧?那 debian 的话用 os_prober 可以用 @whatot 的方法,也可以我说的 40_custom 的方法,自己手写一个 menuentry ,当然也可以自己手写 chainloader 咯。
    Solitudechn
        9
    Solitudechn  
    OP
       2015-12-21 09:49:03 +08:00 via Android
    @whatot 你好我看见了这段代码,但是我不能知道${EFIPATH}在哪里修改
    Solitudechn
        10
    Solitudechn  
    OP
       2015-12-21 09:49:55 +08:00 via Android
    @styx 也就是说,我可以自己写一个这样的例子?请问有没有范文?
    BOYPT
        11
    BOYPT  
       2015-12-21 10:07:56 +08:00
    其实用 reFind 来做 EFI 引导会比较专业点。
    styx
        12
    styx  
       2015-12-22 00:32:10 +08:00
    @Solitudechn 回复有点晚,不知道你解决没有。就是楼上的代码改一下

    menuentry 'WIndows 10' --class windows --class os {
    insmod part_dos
    insmod ntfs
    insmod part_gpt
    set root='hd0,gpt1'
    chainloader /EFI/Microsoft/Boot/bootmgfw.efi
    }

    insmod 看需要增减, root 的话你可以进 grub rescue 模式下试探一下或者大概也能才出来
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1105 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 18:42 · PVG 02:42 · LAX 10:42 · JFK 13:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.