如何让grub2记住上次选择的选项?

Grub2 - Community Ubuntu Documentation说:
引用: "如果在/etc/default/grub中设置了DEFAULT=saved,则可以通过运行sudo grub-set-default来保存操作系统。如果在/etc/default/grub中也设置了GRUB_SAVEDEFAULT=true,则也可以保存。在这种情况下,除非手动从GRUB 2菜单中选择一个新的操作系统或执行grub-set-default命令,否则默认操作系统将保持不变。"
我在/etc/default/grub中添加了以下行:DEFAULT=savedGRUB_SAVEDEFAULT=true,然后运行了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>.

我是不是没有正确地遵循文档?这个该怎么正确做呢?

3修改了 grub 文件后,最好总是运行 " sudo update-grub"。 - Julien Chau
2只需运行:sudo grub-set-default saved。就这么简单。 - T. Coles
5个回答

这个案例中的文档是错误的。在 /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

然后运行:
sudo update-grub

7感谢提供链接,我已经根据链接中的解决方案对你的回答进行了编辑,这个方法对我很有效。 - Jay Sullivan
1这个答案中的链接已损坏。'页面404'。 - sdlins
1我应该删除现有的行 GRUB_DEFAULT=0 吗? - user25
3@user25 是的,删掉 GRUB_DEFAULT=0,这一行应该写成 GRUB_DEFAULT=saved - ctrl-alt-delor
我使用上述命令从Linux重新启动到Windows。但是现在当我从Windows重新启动时,默认为Windows,我无法从Windows重新启动到Linux。 - revolutionary
@revolutionary 在启动过程中,你可以通过引导选项(F12)来进行更改。 - VidathD
如果你仍然无法使用,请再次确认你是否有GRUB_SAVEDEFAULT而不是GRUB_SAVEDDEFAULT(注意多出来的“D”,不是“saved_default”,而是“save_default”)。一直在想为什么这对我不起作用。 - GrayedFox
如果您正在使用Ubuntu Studio,软件包'ubuntustudio-lowlatency-settings'会强制优先使用低延迟内核而不是通用内核,所以您可能会看到这个问题。如果您卸载它,问题就会解决,但您也会失去"threadirqs"和其他低延迟优化。我的解决方案是使用GRUB_DEFAULT=1,例如,而不是saved。如果不卸载这个软件包,我无法使用saved功能。 - semitones

在我的情况下,通过`/etc/grub.d/40_custom`定义的条目无法正常工作,这些条目缺少了`savedefault`行。
menuentry "Chameleon" {
    savedefault ### <<<< this must be added
    set root="(hd1)"
    chainloader +1
}

savedefault不起作用,如果在自动生成的grub.cfg中没有正确的标题。
要生成正确的标题,您需要在/etc/default/grub中进行设置。
GRUB_DEFAULT=saved

并使用grub-mkconfig替换您的grub.cfg副本

grub-mkconfig -o /boot/grub.cfg

从Grub 2.02保存默认设置不需要任何额外的参数

你可以在grub.cfg中看到savedefault的源代码


请看来自@ccpizza的回答,也许这会有所帮助:https://askubuntu.com/a/674148/97838 - Hibou57

你忘记了数字(即你文本中的“ENTRY是一个数字或菜单项标题”)。
sudo grub-set-default 1

为了将选项1设置为默认选项。
在修改/etc/default/grub文件后,始终运行sudo update-grub命令以应用更改。

7这对我没有起作用,它只是将GRUB菜单设置为指向第一个条目,而不是最后的选择。 - Jay Sullivan
如果您的菜单选项将被埋在子菜单中,比如在“Ubuntu的高级选项”中,格式为“子菜单索引>子菜单项索引”。因此,您需要指定1>'您选择的索引'。您还可以通过字符串名称为每个选择进行指定。 - Epu

感谢ccpizza,我发现我的Windows-menuentry/etc/grub.d/40_custom中缺少了savedefault属性。
menuentry 'Windows 10' {
    savedefault    # <<<<<<<<<<<< THIS Attribute was missing!
    insmod ntfs
    insmod ntldr
    insmod part_msdos
    insmod search_fs_uuid
    search --fs-uuid --no-floppy --set=root <WINDOWS_SSD_UUID>
    ntldr /bootmgr
}

在我的情况下(Arch Linux,而不是Ubuntu ;)),我找到了一个很棒的GUI工具用于自定义GRUB菜单,它是通过pacman -S grub-customizer安装的(来源:StackOverflow上的这篇帖子,作者为matt-u)。
顺便说一句,因为在这个论坛中没有给予适当的署名,所以我无法对ccpizza的回答点赞或评论,所以我决定提供另一个回答 :(

虽然被接受的答案可能更相关,但这就是让我的配置正常运行的方法。谢谢! - SPRBRN