在Fedora 25中修改GRUB 2默认启动项手记

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/silicon_inspecter/article/details/54809958

不知道是官方文档没说清楚还是我理解能力太差,GRUB 2中设置默认启动项的许多细节我在过去的几年里都是云里雾里的。今天重装Fedora,又遇到这个问题,折腾了好久。觉得很有必要记录下来。

操作GRUB 2的默认启动项涉及到以下命令:

grub2-set-default

grub2-mkconfig

vim或者nano或者emacs或者任何你喜欢的文本编辑器

和以下文件:

/etc/default/grub

/boot/grub2/grub.cfg (BIOS)

/boot/efi/EFI/fedora/grub.cfg (UEFI)

/boot/grub2/grubenv(这是一个符号链接)

本文涉及到的绝大多数操作都需要root权限,请自行su或者sudo并谨慎操作,下文不再提示。

让GRUB 2记住上一次启动的操作系统

  1. 修改符号链接/boot/grub2/grubenv

    Wiki上说对于Fedora 20以上的要修改/boot/grub2/grubenv使其以相对路径指向../efi/EFI/fedora/grubenv(原文:The /boot/grub2/grubenv is symbolic linked to /boot/efi/EFI/fedora/grubenv but /boot is not mounted at the time of booting. So grub2 does not have access to the environment variables. To fix this, change /boot/grub2/grubenv to point to ../efi/EFI/fedora/grubenv instead and your chosen default OS will boot without any problems.)才能奏效,我并没有尝试如果不修改此符号链接是否能成功。读者如果有兴趣的话可以尝试不修改此符号链接,直接跳到下一步。

    cd /boot/grub2
    rm grubenv
    ln -s ../efi/EFI/fedora/grubenv grubenv

    修改/etc/default/grub

    原来的/etc/default/grub看起来可能是这样的:

    GRUB_TIMEOUT=5
    GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
    GRUB_DEFAULT=saved
    GRUB_DISABLE_SUBMENU=true
    GRUB_TERMINAL_OUTPUT="console"
    GRUB_CMDLINE_LINUX="rhgb quiet"
    GRUB_DISABLE_RECOVERY="true"
    
    加入一行
    GRUB_SAVEDEFAULT=true

  2. 生成新的配置文件

    BIOS机器上:

    grub2-mkconfig -o /boot/grub2/grub.cfg

    UEFI机器上:

    grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg

指定某个固定的启动项作为默认的启动项


  1. 修改符号链接/boot/grub2/grubenv

    同前,不知道不修改会怎样……


  2. 修改/etc/default/grub

    同样是加入GRUB_SAVEDEFAULT,不过这次值为false

    GRUB_SAVEDEFAULT=false

    注:根据Wiki
    and ensure this line not exists:
    GRUB_SAVEDEFAULT=true
    or ensure this line exists:
    GRUB_SAVEDEFAULT=false

    推测不存在GRUB_SAVEDEFAULT时,认为其值为false。



  3. 指定默认的启动项名称

    运行

    awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg
    确认当前的操作系统有哪些启动项。请注意由于/etc/grub2.cfg是一个符号链接,指向的地方与当前系统的架构有关。如果你是从U盘上启动的,比如说,你启动的是Fedora Live,而你想要修改硬盘上的GRUB 2配置,请将其替换成硬盘上的相应的文件的路径。

    我的机器上得到的是如下结果

    [xzc@localhost ~]$ awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg
    Fedora (4.9.6-200.fc25.x86_64) 25 (Twenty Five)
    Fedora (4.8.6-300.fc25.x86_64) 25 (Twenty Five)
    Fedora (0-rescue-62422599867f4aeebb084a25f2c6634e) 25 (Twenty Five)
    Fedora (0-rescue-ad1448f5d35a46338309e1c12ca15276) 25 (Twenty Five)
    Windows Boot Manager (on /dev/sda1)
    

    如果想要固定启动Windows(固定启动Windows?我想你不会那么做吧?不然你安装Linux的动机是什么?),运行

    grub2-set-default "Windows Boot Manager (on /dev/sda1)"

  4. 生成新的配置文件

    参看前面生成配置文件的方法。


GRUB_DEFAULT和GRUB_SAVEDEFAULT作用小结

当GRUB_DEFAULT=saved时,如果GRUB_SAVEDEFAULT=true,则进入上一次加载的操作系统。上一次加载的操作系统保存在符号链接/boot/grub2/grubenv指向的文件中。如果GRUB_SAVEDEFAULT=false或者GRUB_SAVEDEFAULT不存在,则可以使用grub2-set-default指定默认启动项。如果不指定,则使用grub.cfg中的第一个启动项作为默认启动项。


参考资料

Fedora wiki上的GRUB 2: http://fedoraproject.org/wiki/GRUB_2

Fedora 25 Documention: https://docs.fedoraproject.org/en-US/Fedora/25/html/System_Administrators_Guide/sec-Customizing_the_GRUB_2_Configuration_File.html#sec-Changing_the_Default_Boot_Entry

展开阅读全文

没有更多推荐了,返回首页