
本章介绍如何配置 SUSE® Linux Enterprise Desktop 中使用的引导加载程序 GRUB 2。GRUB 是传统 GRUB 引导加载程序(现在称作 “GRUB 2 Legacy”)的后继产品。从 SUSE® Linux Enterprise Desktop 12 版开始,系统中使用 GRUB 2 作为默认的引导加载程序。产品中提供了一个 YaST 模块来配置最重要的设置。第 11 章 “引导 Linux 系统” 中将引导过程作为一个整体进行了介绍。有关 UEFI 计算机的安全引导支持的细节,请参见第 13 章 “UEFI(统一可扩展固件接口)”。
配置储存在不同的文件中。
支持更多的文件系统(例如 Btrfs)。
可以直接读取 LVM 或 RAID 设备上储存的文件。
用户界面可翻译,并可以改变主题。
包含一个用于装载模块的机制,以支持更多功能,例如文件系统等。
自动搜索和生成其他内核与操作系统(例如 Windows)的引导项。
包含一个类似于 Bash 的精简控制台。
GRUB 2 的配置基于以下文件:
/boot/grub2/grub.cfg
此文件包含 GRUB 2 菜单项的配置。它替代了 GRUB Legacy 中的 menu.lst。grub.cfg 由 grub2-mkconfig
命令自动生成,不应对其进行编辑。
/boot/grub2/custom.cfg
此可选文件在引导时由 grub.cfg 直接检索,可用于向引导菜单添加自定义项。从 SUSE Linux Enterprise Desktop 开始,使用 grub-once 时也将分析这些项目。
/etc/default/grub
此文件控制 GRUB 2 的用户设置,通常包含背景和主题等其他环境设置。
/etc/grub.d/ 下的脚本
在执行 grub2-mkconfig
命令期间将读取此目录中的脚本。主配置文件 /boot/grub/grub.cfg 中集成了这些脚本的说明。
/etc/sysconfig/bootloader
在使用 YaST 配置引导加载程序时以及每次安装新内核时会用到此配置文件。它将经过 perl 引导加载程序的评估,该程序会相应地修改引导加载程序配置文件(例如,GRUB 2 对应的配置文件 /boot/grub 2/grub.cfg)。/etc/sysconfig/bootloader 不是特定于 GRUB 2 的配置文件,其值会应用于 SUSE Linux Enterprise Desktop 上安装的任何引导加载程序。
/boot/grub2/x86_64-efi、/boot/grub2/power-ieee1275、/boot/grub2/s390x
这些配置文件包含特定于体系结构的选项。
可以通过多种方式控制 GRUB 2。可以在图形菜单(启动屏幕)中选择现有配置的引导项。配置从文件 /boot/grub2/grub.cfg 装载,而该文件是基于其他配置文件编译的(参见下文)。所有 GRUB 2 配置文件都被视为系统文件,编辑这些配置文件需要拥有 root 特权。
手动编辑 GRUB 2 配置文件后,需要运行grub2-mkconfig
以激活更改。但使用 YaST 更改配置时就不需要如此,因为 YaST 会自动运行 grub2-mkconfig
。
/boot/grub2/grub.cfg #
带有引导菜单的图形启动屏幕内容由 GRUB 2 配置文件 /boot/grub2/grub.cfg 控制,该文件包含有关可以通过菜单引导的所有分区或操作系统的信息。
系统每次引导时,GRUB 2 会直接从文件系统装载菜单文件。因此,在更改配置文件后不需要重新安装 GRUB 2。安装或去除内核后,系统会自动重构建 grub.cfg。
grub.cfg 由 grub2-mkconfig
基于 /etc/default/grub 文件以及 /etc/grub.d/ 目录中的脚本编译。因此,切勿手动编辑该文件,而应该编辑相关的源文件,或者根据第 12.3 节 “使用 YaST 配置引导加载程序”中所述,使用 YaST 模块来修改配置。
/etc/default/grub #此文件包含 GRUB 2 的其他常规选项,例如,显示菜单的时间,或者要引导的默认操作系统。要列出所有可用选项,请查看以下命令的输出:
grep "export GRUB_DEFAULT" -A50 /usr/sbin/grub2-mkconfig | grep GRUB_
除了已定义的变量外,用户还可以引入自己的变量,以后在 /etc/grub.d 目录中的脚本内使用。
编辑 /etc/default/grub 后,请运行 grub2-mkconfig
以更新主配置文件。
此文件中设置的所有选项是会影响所有引导项的常规选项。可通过 GRUB_*_XEN_* 配置选项设置 Xen 内核或 Xen 超级管理程序的特定选项。有关细节,请参见下文。
GRUB_DEFAULT
设置默认会引导的引导菜单项。它的值可以是数字值、菜单项的完整名称或“saved”。
GRUB_DEFAULT=2 引导第三个(从零开始计数)引导菜单项。
GRUB_DEFAULT="2>0" 引导第三个顶级菜单项的第一个子菜单项。
GRUB_DEFAULT="Example boot menu entry" 引导标题为“Example boot menu entry”的菜单项。
GRUB_DEFAULT=saved 引导 grub2-reboot 或 grub2-set-default 命令指定的项。grub2-reboot 只设置下一次重引导的默认引导项,而 grub2-set-default 设置发生更改之前的默认引导项。
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 guest 内核指定内核参数 — 工作原理与 GRUB_CMDLINE_LINUX 相同。
GRUB_CMDLINE_XEN_DEFAULT
与 GRUB_CMDLINE_XEN 一样 — 工作原理与 GRUB_CMDLINE_LINUX_DEFAULT 相同。
GRUB_TERMINAL
启用和指定输入/输出终端设备。可以是 console(PC BIOS 和 EFI 控制台)、serial(串行终端)、ofconsole(开放式固件控制台)或默认值 gfxterm(图形模式输出)。用引号括住所需的选项可以启用多个设备,例如 GRUB_TERMINAL="console serial"。
GRUB_GFXMODE
gfxterm 图形终端使用的分辨率。请注意,您只能使用您的图形卡 (VBE) 支持的模式。默认值为“auto”,即尝试选择首选的分辨率。在 GRUB 2 命令行中键入 vbeinfo 可以显示 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 快照。有关详细信息,请参见第 6.3 节 “通过从快照引导来执行系统回滚”。
所有 *_DEFAULT 参数都可通过手动方式或者使用 YaST 来配置。
有关选项的完整列表,请参见 GNU GRUB 手册。有关可用参数的完整列表,请参见 http://en.opensuse.org/Linuxrc。
/etc/grub.d 中的脚本 #
在执行 grub2-mkconfig
命令期间,将读取此目录中的脚本,并且这些脚本的说明已整合到 /boot/grub2/grub.cfg 中。grub.cfg 中菜单项的顺序由此目录中文件的运行顺序来决定。具有前导编号的文件先执行,从最小的编号开始。00_header 在 10_linux 之前运行,而后者又在 40_custom 之前运行。如果存在采用字母名称的文件,这些文件将在采用编号命名的文件后面执行。在执行 grub2-mkconfig 期间,只有可执行文件才能在 grub.cfg 中生成输出。默认情况下,/etc/grub.d 目录中的所有文件都是可执行文件。最重要的脚本包括:
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 部分。
90_persistent
这是一个特殊脚本,它可以复制 grub.cfg 文件的相应部分,并按原样输出其内容。这样,您便可以直接修改 grub.cfg 的相应部分,并且所做的更改在执行 grub2-mkconfig
后可以保留下来。
处理顺序根据前导编号确定,编号最小的脚本最先执行。如果多个脚本的前导编号相同,则根据整个名称的字母顺序来决定执行顺序。
在 GRUB Legacy 中,device.map 配置文件用于基于 BIOS 驱动器号派生 Linux 设备名称。不一定总能正确猜测出 BIOS 驱动器与 Linux 设备之间的映射。例如,如果 IDE 和 SCSI 驱动器的引导顺序在 BIOS 配置中被交换,则 GRUB Legacy 就会发生顺序错误。
GRUB 2 在生成 grub.cfg 时使用设备 ID 字符串 (UUID) 或文件系统标签,因此避免了此问题。GRUB 2 实用程序会即时创建一个临时设备映射,这通常足以满足需要,在单磁盘系统中尤其如此。
但是,如果您需要覆盖 GRUB 2 的自动设备映射机制,请创建自定义映射文件 /boot/grub2/device.map。以下示例将更改映射,使 DISK 3 成为引导磁盘。请注意,GRUB 2 分区编号以 1 开始,而不是像 GRUB 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 来加密口令:
tux > sudo grub2-mkpasswd-pbkdf2
Password: ****
Reenter password: ****
PBKDF2 hash of your password is grub.pbkdf2.sha512.10000.9CA4611006FE96BC77A...
将生成的字符串连同 set superusers 命令一起粘贴到文件 /etc/grub.d/40_custom 中。
set superusers="root" password_pbkdf2 root grub.pbkdf2.sha512.10000.9CA4611006FE96BC77A...
运行 grub2-mkconfig
将更改导入到主配置文件中。
在重引导后,当您尝试引导某个菜单项时,系统会提示您输入用户名和口令。输入 root 以及您在执行 grub2-mkpasswd-pbkdf2 命令期间键入的口令。如果身份凭证正确,系统将引导选定的引导项。
有关详细信息,请参见https://www.gnu.org/software/grub/manual/grub.html#Security。
在 SUSE Linux Enterprise Desktop 系统中,配置引导加载程序一般选项最简单的方式就是使用 YaST 模块。在 ,选择 › 。该模块会显示您系统的当前引导加载程序配置,并允许您进行更改。
使用选项卡可查看和更改类型、位置和高级加载程序设置的相关设置。您可以选择要在标准模式还是 EFI 模式下使用 GRUB 2。
如果您使用的是 EFI 系统,则只能安装 GRUB2-EFI,否则您的系统不再能够引导。
要重新安装引导加载程序,请务必在 YaST 中更改设置,然后再将其改回来。例如,要重新安装 GRUB2-EFI,请先选择 ,然后立即将其切换回 。
否则,可能只会重新安装引导加载程序的一部分。
要使用此处未列出的引导加载程序,请选择。在选择该选项之前,请仔细阅读您的引导加载程序文档。
要修改引导加载程序的位置,请遵循以下步骤:
选择选项卡,然后为选择以下某个选项:
本操作会在第一个磁盘的 MBR 中安装引导加载程序(根据 BIOS 中预设的引导顺序)。
这将在 / 分区(这是默认分区)的引导扇区中安装引导加载程序。
手动使用此选项来指定引导加载程序的位置。
单击以应用您的更改。
如果您的计算机有多个硬盘,您可以指定磁盘的引导顺序。有关详细信息,请参见第 12.2.4 节 “BIOS 驱动器与 Linux 设备之间的映射”。
打开选项卡。
单击。
如果列出了多个磁盘,请选择一个,然后单击或来对显示的磁盘重新排序。
单击两次以保存更改。
高级引导选项可以通过选项卡来配置。
通过键入新值或者用鼠标单击相应的方向键来更改的值。
如果选择该选项,引导加载程序将会搜索其他系统(例如 Windows)或其他 Linux 安装。
隐藏引导菜单并引导默认项。
从“默认引导部分”列表中选择所需的项。请注意,引导项名称中的“>”符号用于分隔引导部分及其子部分。
使用一个附加的口令保护引导加载程序和系统。有关详细信息,请参见第 12.2.6 节 “设置引导口令”。
“VGA 模式”选项指定引导过程中的默认屏幕分辨率。
可选内核参数添加在默认参数的末尾。有关所有可用参数的列表,请参见 http://en.opensuse.org/Linuxrc。
如果选中该选项,引导菜单会显示在图形启动屏幕中,而不是以文本模式显示。此时,您可以通过列表设置引导屏幕的分辨率,并使用文件选择器指定图形主题定义文件。
如果您的计算机是通过串行控制台控制的,则可激活此选项并指定要使用的 COM 端口及其运行速度。请参见 info grub 或 http://www.gnu.org/software/grub/manual/grub.html#Serial-terminal
激活包含该引导加载程序的分区。一些旧式操作系统(如 Windows)只能从活动分区中引导。
使用通用、独立于操作系统的代码替换当前 MBR。
启动支持可信计算功能(可信平台模块 (TPM))的 TrustedGRUB2。有关详细信息,请参见https://github.com/Sirrix-AG/TrustedGRUB2。
在 3215 和 3270 终端上,光标的移动方式以及在 GRUB 2 中发出编辑命令的方式存在一些差异和限制。
交互性存在严重的限制。键入时通常不能获得直观的反馈。要查看光标所在的位置,请键入下划线 (_)。
与 3215 终端相比,3270 终端在显示和刷新屏幕方面要好得多。
无法进行“传统的”光标移动操作。Alt、Meta、Ctrl 和光标键不起作用。要移动光标,请使用第 12.4.2 节 “组合键”中列出的组合键。
插入符 (^) 用作控制字符。要键入文本 ^ 后再键入一个字母,请键入 ^、^ 和字母。
Enter 键不起作用,请改用 ^–J。
|
常用的替代键 |
^–J |
确认(“Enter”) |
|
^–L |
中止,返回前一“状态” | |
|
^–I |
Tab 键补全(在编辑模式与外壳模式下) | |
|
菜单模式下可用的键: |
^–A |
移到第一项 |
|
^–E |
移到最后一项 | |
|
^–P |
移到上一项 | |
|
^–N |
移到下一项 | |
|
^–G |
上移一页 | |
|
^–C |
下移一页 | |
|
^–F |
引导选定的项或进入子菜单(与 ^–J 相同) | |
|
E |
编辑选定的项 | |
|
C |
进入 GRUB-Shell | |
|
编辑模式下可用的键: |
^–P |
上移一行 |
|
^–N |
下移一行 | |
|
^–B. |
向左移一个字符 | |
|
^–F |
向右移一个字符 | |
|
^–A |
移到行首 | |
|
^–E |
移到行尾 | |
|
^–H |
退格 | |
|
^–D |
删除 | |
|
^–K |
删除光标起当前行 | |
|
^–Y |
复制 | |
|
^–O |
插入空行 | |
|
^–L |
刷新屏幕 | |
|
^–X |
引导项 | |
|
^–C |
进入 GRUB-Shell | |
|
命令行模式下可用的键: |
^–P |
上一个命令 |
|
^–N |
历史中的下一个命令 | |
|
^–A |
移到行首 | |
|
^–E |
移到行尾 | |
|
^–B |
向左移一个字符 | |
|
^–F |
向右移一个字符 | |
|
^–H |
退格 | |
|
^–D |
删除 | |
|
^–K |
删除光标起当前行 | |
|
^–U |
删除行 | |
|
^–Y |
复制 |
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 引导表。要执行此操作,请使用:
root # shim-install --config-file=/boot/grub2/grub.cfggrub2-mkrescue为安装的 GRUB 2 配置创建一个可引导的救援映像。
grub2-mkrescue -o save_path/name.iso iso
grub2-script-check
检查给定文件中有无语法错误。
grub2-check-config /boot/grub2/grub.cfg
grub2-once
仅设置下次引导的默认引导项。要获取可用引导项的列表,请使用 --list 选项。
grub2-once number_of_the_boot_entry
grub2-once 帮助不使用任何选项调用该程序可以获取所有可用选项的完整列表。
http://www.gnu.org/software/grub/ 上提供了有关 GRUB 2 的大量信息。还请参见 grub 信息页面。您也可以在技术信息搜索 (http://www.suse.com/support) 中搜索关键字“GRUB 2”,以获取有关特殊问题的信息。