如何让 grub2 记住最后的选择?

Jay*_*van 133 grub2 dual-boot

Grub2 - 社区 Ubuntu 文档说明如下:

如果 /etc/default/grub 中设置了 DEFAULT=saved,则可以通过运行 sudo grub-set-default 来保存操作系统。如果还在 /etc/default/grub 中设置了 GRUB_SAVEDEFAULT=true,也可以保存它。在这种情况下,在从 GRUB 2 菜单手动选择新操作系统或执行 grub-set-default 命令之前,默认操作系统将保持不变。

我将行DEFAULT=savedANDGRUB_SAVEDEFAULT=true放入/etc/default/grub,然后运行sudo grub-set-default. 这是输出:

$ sudo grub-set-default
entry not specified.
Usage: grub-set-default [OPTION] entry
Set the default boot 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/grub
                          instead of the /boot/grub directory

ENTRY is a number or a menu item title.

Report bugs to <bug-grub@gnu.org>.
Run Code Online (Sandbox Code Playgroud)

我没有正确遵循文档吗?这样做的正确方法是什么?

Jor*_*gla 194

这种情况下的文档是错误的。所有变量都以/etc/default/grub开头GRUB_,所以它是GRUB_DEFAULT=saved而不是 DEFAULT=saved。我已经更正了 Ubuntu wiki 以反映这一点。

官方 grub 手册正确地描述了这一点:http : //www.gnu.org/software/grub/manual/grub.html#Simple-configuration

将以下内容放入/etc/default/grub(命令行:)gedit admin:///etc/default/grub

GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=true
Run Code Online (Sandbox Code Playgroud)

然后运行:

sudo update-grub
Run Code Online (Sandbox Code Playgroud)

  • +1 链接,我已经使用对我有用的解决方案编辑了您的答案(我从您提供的链接中得出) (7认同)
  • @user25 是删除`GRUB_DEFAULT=0`,该行应该是`GRUB_DEFAULT=saved` (3认同)

ccp*_*zza 11

在我的情况下,它不适用于通过/etc/grub.d/40_custom缺少该savedefault行定义的条目。

menuentry "Chameleon" {
    savedefault ### <<<< this must be added
    set root="(hd1)"
    chainloader +1
}
Run Code Online (Sandbox Code Playgroud)


小智 5

如果自动生成的 grub.cfg 中没有正确的标头,savedefault 将不起作用

要生成正确的标头,您需要在 /etc/default/grub 中设置

GRUB_DEFAULT=saved
Run Code Online (Sandbox Code Playgroud)

并制作 grub-mkconfig 来替换 grub.cfg 的副本

grub-mkconfig -o /boot/grub.cfg
Run Code Online (Sandbox Code Playgroud)

Grub 2.02 中的 savedefault 不需要任何附加参数

您可以在 grub.cfg 中看到 savedefault 的来源