2.2 系统引导程序GRUB
GRUB(GRand Unified Bootloader)的全称应为GNU GRUB,是一个来自GNU计划的多操作系统引导程序。它可以让用户在安装的多个不同操作系统之间选择启动的操作系统,同时还可以向操作系统内核传递参数。RHEL 8默认使用GRUB作为系统引导程序,本节将介绍GRUB及其应用。
2.2.1 GRUB 2简介
默认情况下,RHEL 8使用GRUB 2作为引导程序,而GRUB 2引导系统使用的分区位于/boot中,称为引导分区。查看引导分区内容,如示例2-7所示。
【示例2-7】
从示例2-7命令的输出中可以看到,/boot中保存的文件主要是Linux内核、内存映像文件等,GRUB 2就是通过这些文件建立最初的内核运行环境的。GRUB 2安装于/boot/grub2目录中,/boot/grub2/grub.cfg就是GRUB 2引导系统时采用的配置文件,其作用与之前版本中的grub.conf文件是一致的。在之前的版本中修改grub.conf就可以配置引导选项,但现在不建议修改grub.cfg。
2.2.2 GRUB 2的启动菜单界面
Linux系统每次启动时都会显示启动菜单界面,以便让用户选择启动的操作系统。启动菜单界面如图2.1所示。
图2.1 GRUB启动菜单界面
在GRUB启动菜单界面中,可以使用上下方向键选择需要启动的选项,按Enter键即可启动对应的选项。默认情况下,RHEL 8.0提供了两个启动选项:第一个为正常启动系统的选项,第二个为启动系统的救援模式。通常只有系统出现问题时才需要启动救援模式进行修复。
除此之外,还可以在启动菜单界面选择一个启动选项,按e键编辑启动选项。编辑启动选项通常是为了向内核传递参数,例如进入紧急模式时,需要向内核传递参数rd.break,内核接收到此参数后会自动进入紧急模式。
在GRUB启动菜单界面中还可以按c键进入GRUB的命令行界面,在命令行界面中使用一些命令自定义启动系统等。
2.2.3 GRUB 2的命令行界面
GRUB内置了一个命令行界面,在某些情况下当GRUB引导系统失败时(例如grub.cfg文件不正确时),GRUB会自动进入命令行界面。GRUB命令行界面如图2.2所示。
图2.2 GRUB命令行界面
GRUB命令行界面以“grub> ”为提示符,同Linux系统一样,用户直接输入命令按Enter键即可执行。同时GRUB命令行界面也提供了命令历史和命令补全功能,用户可以像在Linux系统中那样快捷地输入和执行命令。
2.2.4 GRUB 2的一些常用命令
GRUB提供了一些命令,主要目的是为了让用户在无法进入系统时恢复对操作系统的引导。常用的命令如表2.2所示。
表2.2 GRUB常用命令及作用
以上一些最常见的简单命令通常可以让用户在引导失败时恢复对系统的引导。
2.2.5 理解GRUB 2的配置文件
对于了解grub.conf的人来说,grub.cfg有些难以理解,主要是因为其中加入了一些环境变量。没有关系,因为在GRUB 2中不再需要修改grub.cfg,现在需要修改的内容被统一移到/etc/grub.d中,如示例2-8所示。
【示例2-8】
[root@localhost ~]# ls /etc/grub.d/ 00_header 01_users 20_linux_xen 30_os-prober 41_custom 00_tuned 10_linux 20_ppc_terminfo 40_custom README
在示例2-8中,每一个文件代表grub.cfg引导条目中的一条内容,前面的数字代表优先级,数字越小,优先级越高,表示该条目在引导界面中选项列表的位置越靠前。此处并不建议修改示例2-8中所列举的引导条目,除了40_custom之外。每一个文件其实就是由Shell编写的脚本,用户可以自行添加条目,或直接修改40_custom添加条目。
此处以添加一个Windows引导条目为例,讲解如何向grub.cfg添加一条引导条目。在/etc/grub.d/目录中添加一个11_windows10的条目,其过程如示例2-9所示。
【示例2-9】
完成以上步骤之后,就可以重新启动计算机进行验证了。
注意
如果直接修改grub.cfg,就向其中直接写入引导语句。当操作系统内核更新后,操作系统会自动重新生成新的grub.cfg,则其中写入的引导语句将直接失效。正是因为如此,所以不建议修改grub.cfg文件。