V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
Solitudechn
V2EX  ›  Linux

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

  •  
  •   Solitudechn · Dec 20, 2015 · 1062 views
    This topic created in 3793 days ago, the information mentioned may be changed or developed.

    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 replies    2015-12-22 00:32:10 +08:00
    whatot
        1
    whatot  
       Dec 20, 2015
    安装 grub 到 efi 里,然后通过 grub-mkconfig 生成 grub.cfg
    styx
        2
    styx  
       Dec 20, 2015
    /etc/grub.d/40_custom 最后加上用来启动 windows 的 menuentry ,然后 debian 的话用 update-grub ,其他发行版(如 Gentoo )可以用 grub2-mkconfig -o /boot/grub/grub.cfg ,这样就会自动把 custom 里面的加进去
    Solitudechn
        3
    Solitudechn  
    OP
       Dec 20, 2015
    @whatot 抱歉,你可能没有动我的意思,我是正常有 grup.cfg 但是我要修改源文件...
    Solitudechn
        4
    Solitudechn  
    OP
       Dec 20, 2015
    @styx 不是,我的意思是,我修改了 efi 下 windows 引导文件的名称,将引导文件的名字改为了 winbootmgfw.efi ,使用默认生成的配置文件,扫描出来的 windows 引导文件为 bootmgfw.efi ,我想问得是在哪里可以修改这个。先说一下我是 debian 系统。
    whatot
        5
    whatot  
       Dec 21, 2015
    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  
       Dec 21, 2015
    直接使用 efi 引导 kernel
    comicfans44
        7
    comicfans44  
       Dec 21, 2015
    可以尝试把 64bit efi shell 拷贝到 u 盘 efi/boot/bootx64.efi ,用 u 盘启动,执行 bcfg 命令或可直接修改 efi 启动顺序
    styx
        8
    styx  
       Dec 21, 2015
    @Solitudechn 你的意思就是你想要重命名 grub 脚本自动生成的 chainloader 引导文件是吧?那 debian 的话用 os_prober 可以用 @whatot 的方法,也可以我说的 40_custom 的方法,自己手写一个 menuentry ,当然也可以自己手写 chainloader 咯。
    Solitudechn
        9
    Solitudechn  
    OP
       Dec 21, 2015 via Android
    @whatot 你好我看见了这段代码,但是我不能知道${EFIPATH}在哪里修改
    Solitudechn
        10
    Solitudechn  
    OP
       Dec 21, 2015 via Android
    @styx 也就是说,我可以自己写一个这样的例子?请问有没有范文?
    BOYPT
        11
    BOYPT  
       Dec 21, 2015
    其实用 reFind 来做 EFI 引导会比较专业点。
    styx
        12
    styx  
       Dec 22, 2015
    @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 模式下试探一下或者大概也能才出来
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2680 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 15:49 · PVG 23:49 · LAX 08:49 · JFK 11:49
    ♥ Do have faith in what you're doing.