本章描述了如何配置 GRUB 2,它是 openSUSE® Leap 中使用的引导加载程序。YaST 模块可用于配置最重要的设置。整个引导过程在 第 9 章,引导过程简介 中概述。有关 UEFI 机器的安全启动支持的详细信息,请参阅 第 14 章,UEFI (统一可扩展固件接口)。
配置存储在不同的文件中。
支持更多文件系统(例如,Btrfs)。
可以直接读取存储在 LVM 或 RAID 设备上的文件。
用户界面可以被翻译并使用主题进行更改。
包含一种加载模块以支持附加功能的机制,例如文件系统等。
自动搜索并生成其他内核和操作系统的引导条目,例如 Windows。
包含一个类似 Bash 的最小控制台。
GRUB 2 的配置基于以下文件
/boot/grub2/grub.cfg此文件包含 GRUB 2 菜单项的配置。它取代了 GRUB Legacy 中使用的 menu.lst。 grub.cfg 不应进行编辑——它由命令 grub2-mkconfig -o /boot/grub2/grub.cfg 自动生成。
/boot/grub2/custom.cfg此可选文件在引导时由 grub.cfg 直接引用,可用于将自定义项添加到引导菜单。从 openSUSE Leap Leap 42.2 开始,这些条目在使用 grub-once 时也会被解析。
/etc/default/grub此文件控制 GRUB 2 的用户设置,通常包括其他环境设置,例如背景和主题。
/etc/grub.d/ 下的脚本在执行命令 grub2-mkconfig -o /boot/grub2/grub.cfg 期间读取此目录中的脚本。它们的指令被集成到主配置文件 /boot/grub/grub.cfg 中。
/etc/sysconfig/bootloader此配置文件保存某些基本设置,例如引导加载程序类型以及是否启用 UEFI 安全启动支持。
/boot/grub2/x86_64-efi, 这些配置文件包含特定于体系结构的可选项。
GRUB 2 可以通过多种方式进行控制。从现有配置中选择的引导条目可以从图形菜单(启动画面)中选择。配置从文件 /boot/grub2/grub.cfg 加载,该文件由其他配置文件编译(如下所示)。所有 GRUB 2 配置文件都被视为系统文件,您需要 root 权限才能编辑它们。
在手动编辑 GRUB 2 配置文件后,您需要运行 grub2-mkconfig -o /boot/grub2/grub.cfg 以激活更改。但是,使用 YaST 更改配置时,这没有必要,因为 YaST 会自动运行此命令。
带有引导菜单的图形启动画面基于 GRUB 2 配置文件 /boot/grub2/grub.cfg,其中包含有关可以由菜单引导的所有分区或操作系统的信息。
每次系统引导时,GRUB 2 都会直接从文件系统加载菜单文件。因此,在更改配置文件后,GRUB 2 不需要重新安装。 grub.cfg 在内核安装或删除时自动重建。
grub.cfg 由文件 /etc/default/grub 和位于 /etc/grub.d/ 目录中的脚本在运行命令 grub2-mkconfig -o /boot/grub2/grub.cfg 时编译而成。因此,您不应手动编辑该文件。相反,编辑相关源文件或使用 YaST 模块来修改配置,如 第 12.3 节,“使用 YaST 配置引导加载程序” 中所述。
GRUB 2 的更多常规选项属于此文件,例如显示菜单的时间或要引导的默认操作系统。要列出所有可用选项,请参阅以下命令的输出
> grep "export GRUB_DEFAULT" -A50 /usr/sbin/grub2-mkconfig | grep GRUB_您可以在 /etc/grub.d 目录中的脚本中引入自定义变量并在以后使用它们。
编辑 /etc/default/grub 后,使用 grub2-mkconfig -o /boot/grub2/grub.cfg 更新主配置文件。
此文件中指定的所有选项都是影响所有引导条目的常规选项。特定于 Xen 超visor 的选项包括 _XEN_ 子字符串。
包含空格的更复杂的选项需要引用,以便将其处理为一个选项。此类内部引号需要正确转义,例如
GRUB_CMDLINE_LINUX_XEN="debug loglevel=9 log_buf_len=5M \"ddebug_query=file drivers/xen/xen-acpi-processor.c +p\""
GRUB_DEFAULT设置引导默认的引导菜单条目。其值可以是数字值、完整的菜单条目名称或 “saved”。
GRUB_DEFAULT=2 引导第三个(从零开始计数)引导菜单条目。
GRUB_DEFAULT="2>0" 引导第三个顶级菜单条目的第一个子菜单条目。
GRUB_DEFAULT="Example boot menu entry" 引导标题为 “Example boot menu entry” 的菜单条目。
GRUB_DEFAULT=saved 引导由 grub2-once 或 grub2-set-default 命令指定的条目。虽然 grub2-reboot 仅为下一次引导设置默认引导条目,而 grub2-set-default 会设置默认引导条目,直到更改。 grub2-editenv list 列出下一个引导条目。
GRUB_HIDDEN_TIMEOUT等待指定的秒数,直到用户按下键。在此期间,除非用户按下键,否则不会显示任何菜单。如果在指定的时间内未按下任何键,则控制权传递给 GRUB_TIMEOUT。 GRUB_HIDDEN_TIMEOUT=0 首先检查是否按下了 Shift 键,如果按下了,则显示引导菜单,否则立即引导默认菜单条目。这是 GRUB 2 识别唯一可引导操作系统时默认设置。
GRUB_HIDDEN_TIMEOUT_QUIET如果指定为 false,则在 GRUB_HIDDEN_TIMEOUT 功能处于活动状态时,将在空白屏幕上显示倒计时计时器。
GRUB_TIMEOUT显示引导菜单的时间段(以秒为单位),然后自动引导默认引导条目。如果按下键,则取消超时,GRUB 2 等待您手动进行选择。 GRUB_TIMEOUT=-1 将导致菜单显示,直到您手动选择引导条目。
GRUB_CMDLINE_LINUX此行中的条目添加到正常模式和恢复模式的引导条目末尾。使用它将内核参数添加到引导条目。
GRUB_CMDLINE_LINUX_DEFAULT与 GRUB_CMDLINE_LINUX 相同,但条目仅附加在正常模式下。
GRUB_CMDLINE_LINUX_RECOVERY与 GRUB_CMDLINE_LINUX 相同,但条目仅附加在恢复模式下。
GRUB_CMDLINE_LINUX_XEN_REPLACE此条目替换所有 Xen 引导条目的 GRUB_CMDLINE_LINUX 参数。
GRUB_CMDLINE_LINUX_XEN_REPLACE_DEFAULT与 GRUB_CMDLINE_LINUX_XEN_REPLACE 相同,但它仅替换 GRUB_CMDLINE_LINUX_DEFAULT 的参数。
GRUB_CMDLINE_XEN这些条目传递给 Xen 超visor Xen 菜单的正常模式和恢复模式。例如
GRUB_CMDLINE_XEN="loglvl=all guest_loglvl=all"
在 https://xenbits.xen.org/docs/unstable/misc/xen-command-line.html 中找到完整的 Xen 超visor 选项列表
GRUB_CMDLINE_XEN_DEFAULT与 GRUB_CMDLINE_XEN 相同,但条目仅附加在正常模式下。
GRUB_TERMINAL启用并指定输入/输出终端设备。可以是 console(PC BIOS 和 EFI 控制台)、serial(串行终端)、ofconsole(Open Firmware 控制台)或默认的 gfxterm(图形模式输出)。也可以通过引用所需的选项来启用多个设备,例如,GRUB_TERMINAL="console serial"。
GRUB_GFXMODE用于 gfxterm 图形终端的分辨率。您只能使用您的显卡(VBE)支持的模式。默认值为“auto”,它尝试选择首选分辨率。您可以通过在 GRUB 2 命令行中键入 videoinfo 来显示 GRUB 2 可用的屏幕分辨率。在显示 GRUB 2 引导菜单屏幕时,通过键入 C 可以访问命令行。
您还可以通过将颜色深度附加到分辨率设置来指定颜色深度,例如,GRUB_GFXMODE=1280x1024x24。
GRUB_BACKGROUND为 gfxterm 图形终端设置背景图像。该图像必须是 GRUB 2 在引导时可读取的文件,并且必须以 .png、.tga、.jpg 或 .jpeg 后缀结尾。如果需要,图像将被缩放以适应屏幕。
GRUB_DISABLE_OS_PROBER如果此选项设置为 true,则禁用自动搜索其他操作系统。仅检测 /boot/ 中的内核镜像和您自己脚本中的选项 /etc/grub.d/。
SUSE_BTRFS_SNAPSHOT_BOOTING如果此选项设置为 true,则 GRUB 2 可以直接引导到 Snapper 快照。有关更多信息,请参阅 第 3.3 节,“通过从快照引导进行系统回滚”。
有关完整选项列表,请参阅 GNU GRUB 手册。
在执行命令 grub2-mkconfig -o /boot/grub2/grub.cfg 期间,将读取此目录中的脚本。它们的指令被合并到 /boot/grub2/grub.cfg 中。 grub.cfg 中菜单项的顺序由此目录中文件的顺序决定。以数字开头的的文件首先执行,从最低数字开始。 00_header 在 10_linux 之前运行,后者在 40_custom 之前运行。如果存在以字母命名的文件,则在数字命名的文件之后执行它们。只有可执行文件在执行 grub2-mkconfig 时才会生成输出到 grub.cfg。默认情况下,/etc/grub.d 目录中的所有文件都是可执行的。
grub.cfg 中的持久自定义内容由于 /boot/grub2/grub.cfg 在每次运行 grub2-mkconfig 时都会重新编译,因此任何自定义内容都会丢失。要将您的行直接插入到 /boot/grub2/grub.cfg 中,而不会在运行 grub2-mkconfig 后丢失它们,请将其插入到
### BEGIN /etc/grub.d/90_persistent ###
和
### END /etc/grub.d/90_persistent ###
之间。90_persistent 脚本可确保保留此类内容。
以下是重要脚本的列表
00_header设置系统文件位置、显示设置、主题和先前保存的条目等环境变量。它还导入存储在 /etc/default/grub 中的首选项。通常您不需要更改此文件。
10_linux识别根设备上的 Linux 内核并创建相关的菜单条目。如果启用,这包括关联的恢复模式选项。仅在主菜单页面上显示最新的内核,并将其他内核包含在子菜单中。
30_os-prober此脚本使用 os-prober 搜索 Linux 和其他操作系统,并将结果放置在 GRUB 2 菜单中。有部分用于识别特定的其他操作系统,例如 Windows 或 macOS。
40_custom此文件提供了一种将自定义引导条目包含到 grub.cfg 中的简单方法。确保不要更改开头的 exec tail -n +3 $0 部分。
处理顺序由前面的数字设置,数字最低的首先执行。如果脚本以前面相同的数字为前缀,则完整的名称的字母顺序决定顺序。
/boot/grub2/custom.cfg如果您创建 /boot/grub2/custom.cfg 并填充内容,则它将在引导时自动包含到 /boot/grub2/grub.cfg 中,紧接在 40_custom 之后。
在 GRUB Legacy 中,device.map 配置文件用于从 BIOS 驱动器号派生 Linux 设备名称。BIOS 驱动器和 Linux 设备之间的映射并不总是可以正确猜测。例如,如果 IDE 和 SCSI 驱动器的引导顺序在 BIOS 配置中交换,GRUB Legacy 可能会得到错误的顺序。
GRUB 2 通过使用设备 ID 字符串(UUID)或文件系统标签来生成 grub.cfg,从而避免了这个问题。GRUB 2 工具会动态创建临时设备映射,这通常足以满足需求,尤其是在单磁盘系统上。
但是,如果您需要覆盖 GRUB 2 的自动设备映射机制,请创建您的自定义映射文件 /boot/grub2/device.map。以下示例将映射更改为使 DISK 3 成为启动磁盘。GRUB 2 分区编号从 1 开始,而不是像 GRUB 2 Legacy 那样从 0 开始。
(hd1) /dev/disk-by-id/DISK3 ID (hd2) /dev/disk-by-id/DISK1 ID (hd3) /dev/disk-by-id/DISK2 ID
即使在启动操作系统之前,GRUB 2 也允许访问文件系统。没有 root 权限的用户可以访问您的 Linux 系统中的文件,而这些文件在系统启动后他们无法访问。为了阻止这种访问或防止用户启动某些菜单条目,请设置启动密码。
如果设置了,则每次启动都需要启动密码,这意味着系统不会自动启动。
使用 grub2-mkpasswd-pbkdf2: 对密码进行加密:
>sudogrub2-mkpasswd-pbkdf2 Password: **** Reenter password: **** PBKDF2 hash of your password is grub.pbkdf2.sha512.10000.9CA4611006FE96BC77A...
将生成的字符串粘贴到文件 /etc/grub.d/40_custom 中,以及 set superusers 命令。
set superusers="root" password_pbkdf2 root grub.pbkdf2.sha512.10000.9CA4611006FE96BC77A...
要将更改导入主配置文件,请运行
>sudogrub2-mkconfig -o /boot/grub2/grub.cfg
重新启动后,GRUB 2 会在尝试启动菜单条目时提示您输入用户名和密码。输入 root 以及在 grub2-mkpasswd-pbkdf2 命令期间键入的密码。如果凭据正确,系统将启动所选的启动条目。
有关更多信息,请参阅 https://gnu.ac.cn/software/grub/manual/grub/grub.html#Security。
您可以配置 GRUB 2,以便根据授权级别允许访问启动菜单条目。您可以配置多个受密码保护的用户帐户,并向他们分配访问不同菜单条目的权限。要配置 GRUB 2 中的授权,请按照以下步骤操作
为要在 GRUB 2 中使用的每个用户帐户创建并加密一个密码。使用 grub2-mkpasswd-pbkdf2 命令,如 第 12.2.6 节,“设置启动密码” 中所述。
删除文件 /etc/grub.d/10_linux。这可以防止输出默认的 GRUB 2 菜单条目。
编辑 /boot/grub2/custom.cfg 文件,并手动添加自定义菜单条目。以下模板是一个示例,请根据您的使用情况进行调整
set superusers=admin
password admin ADMIN_PASSWORD
password maintainer MAINTAINER_PASSWORD
menuentry 'Operational mode' {
insmod ext2
set root=hd0,1
echo 'Loading Linux ...'
linux /boot/vmlinuz root=/dev/vda1 $GRUB_CMDLINE_LINUX_DEFAULT $GRUB_CMDLINE_LINUX mode=operation
echo 'Loading Initrd ...'
initrd /boot/initrd
}
menuentry 'Maintenance mode' --users maintainer {
insmod ext2
set root=hd0,1
echo 'Loading Linux ...'
linux /boot/vmlinuz root=/dev/vda1 $GRUB_CMDLINE_LINUX_DEFAULT $GRUB_CMDLINE_LINUX mode=maintenance
echo 'Loading Initrd ...'
initrd /boot/initrd
}将更改导入主配置文件
>sudogrub2-mkconfig -o /boot/grub2/grub.cfg
在上面的示例中
GRUB 2 菜单有两个条目, 和 。
如果未指定用户,则可以访问这两个启动菜单条目,但没有人可以访问 GRUB 2 命令行或编辑现有的菜单条目。
admin 用户可以访问 GRUB 2 命令行并编辑现有的菜单条目。
maintenance 用户可以选择恢复菜单项。
配置 openSUSE Leap 系统中引导加载程序常规选项的最简单方法是使用 YaST 模块。在 中,选择 › 。该模块显示系统的当前引导加载程序配置,并允许您进行更改。
使用 选项卡查看和更改与类型、位置和高级加载程序设置相关的设置。您可以选择是否以标准或 EFI 模式使用 GRUB 2。
如果您有 EFI 系统,则只能安装 GRUB2-EFI,否则您的系统将无法启动。
要重新安装引导加载程序,请确保在 YaST 中更改一个设置,然后将其改回。例如,要重新安装 GRUB2-EFI,首先选择 ,然后立即切换回 。
否则,引导加载程序可能只会部分重新安装。
要使用除列表中显示的引导加载程序之外的其他引导加载程序,请选择 。在选择此选项之前,请仔细阅读您的引导加载程序的文档。
引导加载程序的默认位置取决于分区设置,要么是主引导记录 (MBR),要么是 / 分区的引导扇区。要修改引导加载程序的位置,请按照以下步骤操作
选择 选项卡,然后选择以下选项之一作为 :
这会将引导加载程序安装到包含目录 /boot 的磁盘的 MBR 中。通常这将是挂载到 / 的磁盘,但如果 /boot 挂载到不同磁盘上的单独分区,则将使用该磁盘的 MBR。
这会将引导加载程序安装到 / 分区的引导扇区。
使用此选项手动指定引导加载程序的位置。
单击 以应用更改。
选项卡包括以下其他选项:
激活包含 /boot 目录的分区。对于 POWER 系统,它激活 PReP 分区。在旧的 BIOS 和/或传统操作系统上使用此选项,因为它们可能无法从非活动分区启动。保持此选项处于活动状态是安全的。
如果 MBR 包含自定义的“非 GRUB”代码,则此选项会将其替换为通用、与操作系统无关的代码。如果您停用此选项,系统可能会变得无法启动。
启动 TrustedGRUB2,它支持受信任计算功能(可信平台模块 (TPM))。有关更多信息,请参阅 https://github.com/Sirrix-AG/TrustedGRUB2。
部分包括以下选项:
这适用于传统的传统 BIOS 启动。
这适用于 UEFI 启动。
如果您有一个已经工作的系统,这通常是最佳选择。
在大多数情况下,YaST 会默认选择适当的选项。
如果您的计算机有多个硬盘,您可以指定磁盘的启动顺序。列表中的第一个磁盘是 GRUB 2 在从 MBR 启动时将安装到的磁盘。它是默认安装 openSUSE Leap 的磁盘。列表的其余部分是对 GRUB 2 的设备映射器的提示(请参阅 第 12.2.4 节,“映射 BIOS 驱动器和 Linux 设备”)。
默认值通常对几乎所有部署都是有效的。如果您错误地更改了磁盘的启动顺序,系统在下次重新启动时可能会变得无法启动。例如,如果列表中的第一个磁盘不是 BIOS 启动顺序的一部分,并且列表中的其他磁盘的 MBR 为空。
打开 选项卡。
单击 。
如果列出了多个磁盘,请选择一个磁盘并单击 或 以重新排序显示的磁盘。
单击 两次以保存更改。
可以通过 选项卡配置高级引导参数。
通过键入新值并使用鼠标单击相应的箭头键来更改 的值。
如果选中,引导加载程序将搜索其他系统,如 Windows 或其他 Linux 安装。
隐藏启动菜单并启动默认条目。
从 “默认启动部分” 列表中选择所需的条目。请注意,“>” 符号在启动条目名称中分隔启动部分及其子部分。
保护引导加载程序和系统使用额外的密码。有关手动配置的详细信息,请参阅 第 12.2.6 节,“设置启动密码”。如果激活此选项,则每次启动都需要启动密码,这意味着系统不会自动启动。但是,如果您更喜欢 GRUB 1 的行为,请另外启用 。使用此设置,任何人都可以选择启动条目并启动系统,而 GRUB 2 root 用户的密码仅需要用于修改启动条目。
在此处指定可选的内核参数,以启用/禁用系统功能、添加驱动程序等。
SUSE 已经发布了一个或多个内核启动命令行参数,用于所有已部署的软件缓解措施,以防止 CPU 侧信道攻击。其中一些可能会导致性能下降。根据您的设置,选择以下选项之一,以在安全性和性能之间取得平衡。
. 启用适用于您的 CPU 型号所需的所有缓解措施,但不保护免受跨 CPU 线程攻击。此设置可能会在一定程度上影响性能,具体取决于工作负载。
. 提供所有可用的安全缓解措施。启用适用于您的 CPU 型号所需的所有缓解措施。此外,它还会禁用同步多线程 (SMT) 以避免跨多个 CPU 线程的侧信道攻击。此设置可能会进一步影响性能,具体取决于工作负载。
. 禁用所有缓解措施。根据 CPU 型号,您的 CPU 可能会受到侧信道攻击。此设置不会影响性能。
. 不设置任何缓解级别。通过使用内核命令行选项手动指定您的 CPU 缓解措施。
选中后,启动菜单将出现在图形启动画面上,而不是文本模式中。启动屏幕的分辨率默认情况下由系统自动设置,但您可以通过 手动设置它。可以使用 文件选择器指定图形主题定义文件。仅当您想要应用自己定制的主题时才更改此设置。
如果您的机器通过串行控制台进行控制,请激活此选项并指定要使用哪个 COM 端口以及使用哪个速度。请参阅 info grub 或 https://gnu.ac.cn/software/grub/manual/grub.html#Serial-terminal
grub2-mkconfig基于 /etc/default/grub 和 /etc/grub.d/ 中的脚本生成新的 /boot/grub2/grub.cfg。
grub2-mkconfig -o /boot/grub2/grub.cfg
在没有任何参数的情况下运行 grub2-mkconfig 会将配置打印到 STDOUT,以便进行查看。在 /boot/grub2/grub.cfg 写入后,使用 grub2-script-check 检查其语法。
grub2-mkconfig 无法修复 UEFI 安全启动表如果您正在使用 UEFI 安全启动,并且您的系统不再正确到达 GRUB 2,您可能需要额外重新安装 Shim 并重新生成 UEFI 启动表。为此,请使用
# shim-install --config-file=/boot/grub2/grub.cfggrub2-mkrescue创建已安装 GRUB 2 配置的可启动救援镜像。
grub2-mkrescue -o save_path/name.iso iso
grub2-script-check检查给定文件是否存在语法错误。
grub2-script-check /boot/grub2/grub.cfg
grub2-once仅为下一次启动设置默认启动项。要获取可用启动项的列表,请使用 --list 选项。
grub2-once number_of_the_boot_entry
grub2-once 帮助不带任何选项调用该程序即可获取所有可能选项的完整列表。
救援模式 是一个特定的 root 用户会话,用于故障排除和修复启动过程失败的系统。它提供了一个单用户环境,其中本地文件系统和核心系统服务处于活动状态。未激活网络接口。要进入救援模式,请按照以下步骤操作。
重新启动系统。启动画面出现,提供 GRUB 2 启动菜单。
选择要启动的菜单项,然后按 e 键编辑启动行。
将以下参数附加到包含内核参数的行
systemd.unit=rescue.target
按 Ctrl+X 键以使用这些设置启动。
输入 root 的密码。
进行所有必要的更改。
通过在命令行中输入 systemctl isolate multi-user.target 或 systemctl isolate graphical.target 再次进入正常运行目标。
有关 GRUB 2 的大量信息可在 https://gnu.ac.cn/software/grub/ 上找到。另请参阅 grub 信息页。