26.5. 自定义 GRUB 2 配置文件
GRUB 2 脚本搜索用户的计算机并根据脚本找到的操作系统构建引导菜单。为了反映最新的系统引导选项,当内核更新或添加新内核时,会自动重新构建引导菜单。
但是,用户可能希望构建包含特定条目的菜单,或者按特定顺序拥有条目。GRUB 2 允许基本自定义引导菜单,使用户能够控制屏幕上实际显示的内容。
GRUB 2 使用一系列脚本来构建菜单;它们位于 /etc/grub.d/
目录中。包括以下文件:
-
00_header
,它将从/etc/default/grub
文件中加载 GRUB 2 设置。 -
01_users
,从user.cfg
文件中读取超级用户密码。在 Red Hat Enterprise Linux 7.0 和 7.1 中,该文件仅在安装期间在 kickstart 文件中定义引导密码时创建,并且该文件以纯文本形式包含定义的密码。 -
10_Linux
,在 Red Hat Enterprise Linux 的默认分区中找到内核。 -
30_OS-prober
,为其他分区上的操作系统构建条目。 -
40_custom
,模板,可用于创建额外的菜单条目。
/etc/grub.d/
目录中的脚本按字母顺序读取,因此可重命名为更改特定菜单条目的引导顺序。
要隐藏可引导内核列表,请不要在 /etc/default/grub
中将 GRUB_TIMEOUT
设置为 0。使用此类设置时,系统始终会在默认菜单条目中立即启动,如果默认内核无法引导,则无法引导较早的内核。
相反,为了避免 GRUB 2 在系统启动时显示可引导内核列表,请在 /etc/default/grub
文件中设置 GRUB_TIMEOUT_STYLE
选项,如下所示:
GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT_STYLE=hidden
要在引导时显示列表,请在使用键盘或其他串行控制台显示 BIOS 信息时按 并按住任何字母数字键,并且 GRUB 2 将为您提供 GRUB 2 菜单。
26.5.1. 更改默认引导条目 复制链接链接已复制到粘贴板!
默认情况下,/etc/default/grub
文件中的 GRUB_DEFAULT
指令的键是 保存
的词语。这指示 GRUB 2 将 saved_entry
指令指定的内核加载到位于 /boot/grub2/grubenv
的 GRUB 2 环境文件中。您可以使用 grub2-set-default
命令将另一个 GRUB 2 记录设置为默认值,该命令将更新 GRUB 2 环境文件。
默认情况下,saved_entry
值被设置为软件包类型为内核的最新安装的内核的名称 。这在 /etc/sysconfig/kernel
中由 UPDATEDAULT 和DEFAULT
KERNEL
指令定义。该文件可由 root
用户查看,如下所示:
The DEFAULTKERNEL
指令指定将用作默认软件包类型。安装类型为 kernel-debug 的软件包不会更改默认内核,而 DEFAULTKERNEL
设置为软件包类型 内核。
GRUB 2 支持使用数字值作为 saved_entry
指令的键,以更改载入操作系统的默认顺序。要指定应首先加载的操作系统,请将编号传递到 grub2-set-default
命令。例如:
grub2-set-default 2
~]# grub2-set-default 2
请注意,列表中菜单条目的位置由以零开头的数字表示;因此,在上面的示例中,将加载第三个条目。该值将被要安装的下一个内核的名称覆盖。
要强制系统始终使用特定的菜单条目,请使用菜单条目名称作为 /etc/default/grub
文件中的 GRUB_DEFAULT
指令的密钥。要列出可用的菜单条目,以 root
用户身份运行以下命令:
awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg
~]# awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg
文件名 /etc/grub2.cfg
是指向 grub.cfg
文件的符号链接,其位置取决于架构。出于可靠性的原因,本章中的其他示例不使用该符号链接。最好在写入文件时使用绝对路径,特别是在修复系统时。
对 /etc/default/grub
的更改需要重新构建 grub.cfg
文件,如下所示:
在基于 BIOS 的机器中,以
root
用户身份运行以下命令:grub2-mkconfig -o /boot/grub2/grub.cfg
~]# grub2-mkconfig -o /boot/grub2/grub.cfg
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在基于 UEFI 的机器中,以
root
用户身份运行以下命令:grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
~]# grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
26.5.2. 编辑菜单条目 复制链接链接已复制到粘贴板!
如果需要,使用不同的参数准备新的 GRUB 2 文件,请在 /etc/default/grub
文件中编辑 GRUB_CMDLINE_LINUX
键的值。请注意,您可以为 GRUB_CMDLINE_LINUX
密钥指定多个参数,这与在 GRUB 2 引导菜单中添加参数类似。例如:
GRUB_CMDLINE_LINUX="console=tty0 console=ttyS0,9600n8"
GRUB_CMDLINE_LINUX="console=tty0 console=ttyS0,9600n8"
console=tty0
是第一个虚拟终端,console=ttyS0
是要使用的串行终端。
对 /etc/default/grub
的更改需要重新构建 grub.cfg
文件,如下所示:
在基于 BIOS 的机器中,以
root
用户身份运行以下命令:grub2-mkconfig -o /boot/grub2/grub.cfg
~]# grub2-mkconfig -o /boot/grub2/grub.cfg
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在基于 UEFI 的机器中,以
root
用户身份运行以下命令:grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
~]# grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
26.5.3. 添加新条目 复制链接链接已复制到粘贴板!
执行 grub2-mkconfig
命令时,GRUB 2 根据位于 /etc/grub.d/
目录中的文件搜索 Linux 内核和其他操作系统。/etc/grub.d/10_linux
脚本搜索同一分区上已安装的 Linux 内核。/etc/grub.d/30_os-prober
脚本将搜索其他操作系统。更新内核时,菜单条目也会自动添加到引导菜单中。
位于 /etc/grub.d/
目录中的 40_custom
文件是自定义条目的模板,如下所示:
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.
#!/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.
可以编辑或复制此文件。请注意,一个有效的菜单条目必须至少包含以下项:
menuentry "<Title>"{ <Data> }
menuentry "<Title>"{
<Data>
}
26.5.4. 创建自定义菜单 复制链接链接已复制到粘贴板!
如果您不希望菜单项自动更新,您可以创建自定义菜单。
在继续之前,如果您需要稍后恢复更改,请备份 /etc/grub.d/
目录的内容。
请注意,修改 /etc/default/grub
文件不会影响创建自定义菜单。
-
在基于 BIOS 的机器上,复制
/boot/grub2/grub.cfg
或 UEFI 计算机上的内容,复制/boot/efi/EFI/redhat/grub.cfg
的内容。将grub.cfg
的内容放在现有标题行的/etc/grub.d/40_custom
文件中。必须保留40_custom
脚本的可执行部分。 从放入
/etc/grub.d/40_custom
文件中的内容,仅需要菜单输入
块来创建自定义菜单。/boot/grub2/grub.cfg
和/boot/efi/EFI/redhat/grub.cfg
文件可能会在菜单输入
块的上方、下面包含功能规格和其他内容。如果您将这些不必要的行放在上一步中的40_custom
文件中,请将其清除。这是自定义
40_custom 脚本的示例
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从
/etc/grub.d/
目录中除以下内容外删除所有文件:-
00_header
, -
40_custom
, -
01_users
(如果存在) 和
README
.或者,如果您要将文件保存在
/etc/grub2.d/
目录中,通过运行chmod a-x <file_name>
命令使其不可执行。
-
-
根据需要编辑、添加或删除
40_custom
文件中的菜单条目。 运行
grub
文件,如下所示:2-mkconfig -o 命令重建 grub
.cfg在基于 BIOS 的机器中,以
root
用户身份运行以下命令:grub2-mkconfig -o /boot/grub2/grub.cfg
~]# grub2-mkconfig -o /boot/grub2/grub.cfg
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在基于 UEFI 的机器中,以
root
用户身份运行以下命令:grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
~]# grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
Copy to Clipboard Copied! Toggle word wrap Toggle overflow