如何正确设置正确的GRUB 2默认菜单项?


27

我在Gentoo Linux系统上运行GRUB 2.00。

我手动编译自己的内核,然后我在安装它们/bootmake install。我目前有以下内核/boot

# ls -1 /boot/vmlinuz*
/boot/vmlinuz-3.7.4-gentoo-5
/boot/vmlinuz-3.7.4-gentoo-first
/boot/vmlinuz-3.7.4-gentoo-fourth
/boot/vmlinuz-3.7.4-gentoo-third

运行grub2-mkconfig结果如下:

# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-3.7.4-gentoo-third
Found linux image: /boot/vmlinuz-3.7.4-gentoo-fourth
Found linux image: /boot/vmlinuz-3.7.4-gentoo-first
Found linux image: /boot/vmlinuz-3.7.4-gentoo-5
done

如果现在阅读生成的/boot/grub2/grub.cfg文件,则会注意到已创建以下条目:

  • 一个主要的默认条目开始 vmlinuz-3.7.4-gentoo-third
  • 包含所有其他条目(包括恢复条目)的子菜单,其顺序与grub2-mkconfig命令相同

问题是在引导时,我想默认加载内核的第五个修订版(vmlinuz-3.7.4-gentoo-5),而不是第三个修订版(vmlinuz-3.7.4-gentoo-third)。我也不想访问子菜单来选择要加载的正确内核。

我该如何改变这种行为?如何告诉GRUB我默认要运行内核的第五版本而不是旧的第三版本?通常,如何更改默认输入行以匹配所需的内核,而不是GRUB选择的看似随机的行?

我还尝试将以下行放入/etc/default/grub

GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=true

这并不能解决我所希望的问题。但是至少GRUB似乎记得我从中启动的最新内核,并从子菜单中自动选择了它。只是我不喜欢访问子菜单。


我注意到您已指定-o /boot/grub2/grub.cfg为输出文件。该目录/boot/grub/仍然存在吗?
ott--

Answers:


12

要在子菜单“高级选项”下选择菜单项,请设置GRUB_DEFAULT =“ 1> 3”。现在,您可以运行grub2-mkconfig来生成grub配置文件。下次重新启动时,vmlinuz-3.7.4-gentoo-5应该启动。

注意:这不会更改grub菜单中的默认条目,即默认条目仍将指示与您现在拥有的相同的条目。但是默认情况下将引导的映像将是“高级选项”下的第四个映像。要使vmlinuz-3.7.4-gentoo-5成为grub菜单中的默认条目,映像的顺序应确保在运行grub2-mkconfig时vmlinuz-3.7.4-gentoo-5应该是第一个映像。


2
请注意引号很重要。即GRUB_DEFAULT = 1> 3不起作用。
ctuffli

7

如果您的grub.cfg中有一个子菜单,则应使用两个数字,如下所示:

grub-reboot '1>3'

一个是菜单索引,第二个是子菜单索引。

例如,从config这样引导最后一个条目:

grep menu /boot/grub/grub.cfg

menuentry 'Debian GNU/Linux' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-1ffa16a9-fda2-43b5-91b9-c91a08ff190f' {
submenu 'Advanced options for Debian GNU/Linux' $menuentry_id_option 'gnulinux-advanced-1ffa16a9-fda2-43b5-91b9-c91a08ff190f' {
    menuentry 'Debian GNU/Linux, with Linux 4.6.0-0.bpo.1-amd64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.6.0-0.bpo.1-amd64-advanced-1ffa16a9-fda2-43b5-91b9-c91a08ff190f' {
    menuentry 'Debian GNU/Linux, with Linux 4.6.0-0.bpo.1-amd64 (sysvinit)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.6.0-0.bpo.1-amd64-init-sysvinit-1ffa16a9-fda2-43b5-91b9-c91a08ff190f' {
    menuentry 'Debian GNU/Linux, with Linux 4.6.0-0.bpo.1-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.6.0-0.bpo.1-amd64-recovery-1ffa16a9-fda2-43b5-91b9-c91a08ff190f' {
    menuentry 'Debian GNU/Linux, with Linux 3.16.0-4-amd64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-4-amd64-advanced-1ffa16a9-fda2-43b5-91b9-c91a08ff190f' {
    menuentry 'Debian GNU/Linux, with Linux 3.16.0-4-amd64 (sysvinit)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-4-amd64-init-sysvinit-1ffa16a9-fda2-43b5-91b9-c91a08ff190f' {
    menuentry 'Debian GNU/Linux, with Linux 3.16.0-4-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-4-amd64-recovery-1ffa16a9-fda2-43b5-91b9-c91a08ff190f' {

您应该使用:

grub-reboot '1>5'

然后重启。


奇怪的。子菜单索引从0开始,而主菜单从1开始
VarunAgw

5

您不妨使用GRUB_DEFAULT=saved。在这种情况下,您将使用

$ grub2-set-default -h
Usage: grub2-set-default [OPTION] MENU_ENTRY
Set the default boot menu entry for GRUB.

  -h, --help              print this message and exit
  -v, --version           print the version information and exit
  --boot-directory=DIR    expect GRUB images under the directory DIR/grub2
                          instead of the /boot/grub2 directory

MENU_ENTRY is a number, a menu item title or a menu item identifier.

或仅用于下次启动:

$ grub2-reboot -h
Usage: grub2-reboot [OPTION] MENU_ENTRY
Set the default boot menu entry for GRUB, for the next boot only.

  -h, --help              print this message and exit
  -v, --version           print the version information and exit
  --boot-directory=DIR    expect GRUB images under the directory DIR/grub2
                          instead of the /boot/grub2 directory

MENU_ENTRY is a number, a menu item title or a menu item identifier.

2

尝试

mkdir -p /boot/grub/backup
mv -v /boot/grub/vmlinuz-3.7.4-gentoo-{first,third,fourth} /boot/grub/backup

现在,将所有未使用的内核移动到备份目录:

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

这只会r5为您的菜单添加选择。这样做之后,阅读 链接,然后reame所有的内核比其他的vmlinuz备份目录的东西,如果你坚持让他们


2

使用centos7(或RHEL7)和grub2:

grub使用grubenv中的'saved_entry'条目作为默认引导,从/boot/grub2/grub.cfg中摘录:

if [ "${next_entry}" ] ; then
   set default="${next_entry}"
   set next_entry=
   save_env next_entry
   set boot_once=true
else
   set default="${saved_entry}"
fi

检查什么是“ saved_entry”现在是我的构建:

grub2-editenv list

saved_entry=CentOS Linux (3.10.0-693.2.2.el7.ari.x86_64) 7 (Core)

将其更改为例如我的调试版本:

grub2-editenv - set saved_entry='CentOS Linux 3.10.0-693.2.2.el7.ari.x86_64.debug) 7 (Core)'

1

我要做的是达到想要的结果:

  • 设置帮助中GRUB_DEFAULT=saved概述的grub-set-default

    grub-set-default Menu entry not specified. Usage: grub-set-default [OPTION] MENU_ENTRY Set the default boot menu entry for GRUB. This requires setting GRUB_DEFAULT=saved in /etc/default/grub. -h, --help print this message and exit -V, --version print the version information and exit --boot-directory=DIR expect GRUB images under the directory DIR/grub instead of the /boot/grub directory MENU_ENTRY is a number, a menu item title or a menu item identifier.

  • 设定默认值

    grub-set-default "1>2"

    它在/ boot / grub中创建一个名为grubenv的新文件,其中包含所需的信息。

  • 之后,我重新创建配置文件

    grub-mkconfig > /boot/grub/grub.cfg

而且我已经看到配置已更改为使用保存状态:

if [ "${next_entry}" ] ; then set default="${next_entry}" set next_entry= save_env next_entry set boot_once=true else set default="${saved_entry}" fi


0

您可以通过数值设置默认选项。如果您设定

`GRUB_DEFAULT=3` 

/etc/default/grub
您将设置默认为Gentoo的5项。
GRUB_DEFAULT是零偏移,因此3将根据需要选择第四个条目。


2
我不知道为什么,但是似乎不起作用。我GRUB_DEFAULT=3按照您所说的进行设置,然后重新运行grub2-mkconfig。但是在启动时,默认条目仍然是vmlinuz-3.7.4-gentoo-third
Francesco Turco

1
尝试注释掉GRUB_SAVEDEFAULT=true这没关系,但是数值不需要。
2013年

2
我的/etc/default/grub文件中没有该选项。
Francesco Turco

0

我怀疑grub2-mkconfig以相反的顺序对内核进行排序,假设它们主要包含单调递增的版本号。因此,请开始选择符合该约定的标签。


0

将/ boot中的那些新的/未使用的版本文件转换为备份目录,例如/ boot / back initrd.img-3.13.0-xx-generic
vmlinuz-3.13.0-xx-generic config-3.13.0-xx-generic System.map-3.13.0-xx通用

将系统重启到救援模式,然后在救援对话框中选择grub,一切都会好起来。

我认为这是最合适的方法。我正在使用Ubuntu 14.04。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.