GRUB2:如何记住GRUB的最后选择


11

我目前正在尝试各种发行版,因此在启动笔记本电脑时,我可以选择几种操作系统。通常,所有这些发行版都会安装grub2并定位在列表的顶部,因此它们是安装完成后默认启动的发行版。

但是曼贾罗做了些不同的事情。它安装了该版本的某个版本,grub2该版本会记住我上次启动的发行版,并一直启动该发行版(重新启动时),直到我选择了另一个发行版(然后它将启动该发行版,依此类推)。

我想像过吗?Manjaro真的这样做吗?如果是这样,如何将那个版本grub系统安装到我的系统上?干杯。


这是我的/etc/grub.d/40_custom文件:

#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.

这是我的/etc/default/grub文件:

# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
#   info -f grub -n 'Simple configuration'

GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=true
#GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=3
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""

# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtains
# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"

# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console

# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
#GRUB_GFXMODE=640x480

# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true

# Uncomment to disable generation of recovery mode menu entries
#GRUB_DISABLE_RECOVERY="true"

# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE="480 440 1"

我按照该问题的指示进行操作(主要是在我的这两行中添加了内容grub),但是它没有用。即使我之前选择了另一个发行版,顶部发行版也会在重新启动时启动。
加百利

我按照已接受答案中的指示进行操作。我进行了编辑/etc/default/grub,将行更改为GRUB_DEFAULT=0GRUB_DEFAULT=saved并添加了GRUB_SAVEDEFAULT=true不需要的行。然后我sudo update-grub。重新启动并选择了一个发行版来启动,与顶级发行版不同。再次重新启动,默认情况下选择了顶部(而不是我之前选择的)发行版并进行了启动。
加百利

我用这两个文件中的内容更新了我的问题。我应该做什么改变?
加百利

Answers:


11

根据GRUB手册

'GRUB_DEFAULT'

........

如果将其设置为“ saved”,则默认菜单项将是“ GRUB_SAVEDEFAULT”,grub-set-default或grub-reboot保存的菜单项。


'GRUB_SAVEDEFAULT'

如果此选项设置为“ true”,则在选择一个条目时,将其另存为新的默认条目,以供将来的GRUB运行使用。仅在'GRUB_DEFAULT = saved'时才有用。它是一个单独的选项,因为如果不带该选项,并且与grub-set-default或grub-reboot结合使用,则'GRUB_DEFAULT = saved'很有用。默认情况下未设置。此选项取决于环境块,它可能并非在所有情况下都可用(请参阅环境块)。

您必须添加:

GRUB_DEFAULT=saved

GRUB_SAVEDEFAULT=true

给你/etc/default/grub。另外,如果您使用的是自定义菜单文件,则/etc/grub.d/40_custom必须添加选项

savedefault

到该文件中的菜单项/菜单。之后,更新GRUB:

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

要么

update-grub

如果安装了多个发行版,请确保正在配置和更新活动 GRUB。


1

使用Arch作为VirtualBox来宾时,我遇到了麻烦。问题出在我使用LVM。

再次,从GRUB手册

13.2 GRUB环境块

能够记住从一次引导到下一次引导的少量信息通常很有用。例如,您可能想根据上次选择的内容来设置默认菜单项。GRUB故意不实现对写入文件的支持,以最大程度地减少引导加载程序造成文件系统损坏的可能性,因此GRUB配置文件不能仅以常规方式创建文件。但是,GRUB提供了一个“环境块”,可用于保存少量状态。

环境块是一个预先分配的1024字节文件,该文件通常位于/ boot / grub / grubenv中(尽管您不应假定这样做)。在引导时,load_env命令(请参见load_env)从中加载环境变量,而save_env(请参见save_env)命令将环境变量保存到其中。在正在运行的系统中,可以使用grub-editenv实用程序来编辑环境块。

出于安全原因,仅当安装在普通磁盘(无LVM或RAID),使用非校验和文件系统(无ZFS)以及使用BIOS或EFI功能(无ATA,USB或IEEE1275),此存储才可用。

grub-mkconfig使用此工具来实现“ GRUB_SAVEDEFAULT”(请参阅​​简单配置)。

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.