BootLoader的两个阶段
Grub与LILO
Grub2的优点
Grub2的配置文件
课程目标能够了解BootLoader的两个阶段
能够说出Grub2的优点
能够知道Grub2有哪些配置文件
###
9.2 Boot Loader与GRUB2前面的课程我们了解的CentOS8的启动流程,在这个流程中有一个叫启动加载器,也就是boot loader的工具,如果没有这个boot loader就无法加载内核。在CentOS8中使用的是启动加载器是Grub2,在了解Grub2之前,我们先聊一下boot loader
9.2.1 Boot Loader的两个阶段我们知道在BIOS或者UEFI加载完成之后,会到MBR中读取boot loader,这个boot loader可以让用户选择加载的内核并且移交系统的控制权限等,而加载内核只能通过boot 电脑loader,但是boot loader在MBR中,这个MBR是硬盘的第一个扇区,一个扇区的大小是512字节,boot loader的大小只有446字节,即便是GPT磁盘也没有足够的空间存储boot loader所包含的内容,所以为了避免空间的限制,导致无法引导系统正常启动的问题,Linux将boot loader的工作过程分为了两步。
stage1 执行boot loader的主程序
主程序必须安装在MBR或者是启动扇区,由于空间限制,MBR或启动扇区仅存放最小化的boot loader,并不会存放相关的配置文件
stage2 通过主程序加载配置文件
通过boot loader的主程序加载所有相关的配置文件,这些配置文件中包括定义文件系统类型的和CentOS8中的grub.cfg文件,而这些文件通常都存放在/boot当中
[root@localhost ~]# ll -F /boot/grub2/总用量 32-rw-r--r--. 1 root root 64 12月 13 21:50 device.mapdrwxr-xr-x. 2 root root 4096 12月 13 21:50 fonts/-rw-r--r--. 1 root root 5032 12月 13 21:50 grub.cfg-rw-r--r--. 1 root root 1024 12月 13 21:50 grubenvdrwxr-xr-x. 2 root root 12288 12月 13 21:50 i386-pc/device.map 设备对应文件,用来帮助系统判断磁盘与设备文件的对应关系fonts 开机过程中用到的字体文件grub.cfg grub2的主配置文件grubenv grub环境区块文件大小为1K,用来记录GRUB环境变量i386-PC 电脑 针对x86架构的电脑所需要的相关模块,包括电源管理支持,文件系统支持等模块
在这些文件中最重要的就是grub.cfg文件,以及文件系统支持的相关模块
9.2.2 GRUB2GRUB与LILO
目前为止,linux下的启动加载器有两种,一种是LILO另外一种就是GRUB,由于GRUB的功能更强大,支持的文件系统较多,所以越来越多的操作系统使用GRUB做为boot loader,CentOS从7开始使用了功能更为强大的GRUB2
GRUB2的优点
支持更多的文件系统
开机时可以手动调整启动参数
动态更新配置文件,修改完配置文件后不需要重新安装
GRUB2与硬盘
由于grub2的主要任务是从硬盘当中加载内核,所以grub2必须要识别硬盘,但是grub2识别硬盘的方式与linux系统识别的方式还是有些区别的。在Linux系统中,硬盘一般会被识别为类似sda1这种形式,而在grub2中硬盘会统一被识别为hd的设备,排序方式全部是用数字进行排序,而不是用字母加数字的混合形式。这么做的目的是为了定义grub2的查找内核时的顺序。如:
hd0,1 搜索第一块硬盘的第一个分区hd0,msdos1 搜索第一块MBR硬盘的第一个分区hd0,gpt1 搜索第一块GPT磁盘的第一个分区简单来说,两个数字,第一个数字表示硬盘序号,第二个数字表示分区序号
grub2配置文件
了解了grub2中的硬盘识别方式,我们就可以了解一下grub2的配置文件了,这个文件建议各位不要随意更改
## DO NOT EDIT THIS FILE## It is automatically generated by grub2-mkconfig using templates# from /etc/grub.d and settings from /etc/default/grub#此部分内容提示我们不要编辑这个文件,此文件是由grub2-mkconfig命令自动建立的,相关模板与设置存放在/etc/grub.d/目录以及/etc/default/grub中,也就是说grub.cfg文件的内容会调用/etc/grub.d目录下的内容,如果需要修改的话需要调整/etc/default/grub文件
基本上grub2不希望用户去修改grub.cfg这个文件,如果需要调整的话需要通过修改其它文件并配合grub2-mkconfig命令来生成新的grub.cfg文件,但是各位还是要了解一下这个文件的大致格式
9.2.3 /etc/default/grub与/etc/grub.d/在前面的课程中我们知道了grub2的配置文件是grub.cfg,但是此文件内容比较复杂,且官方不建议我们手动修改,如果需要修改的话需要通过/etc/default/grub文件以及/etc/grub.d/目录内的内容来实现,那我们一起来看一下
/etc/default/grub
[root@localhost ~]# vim /etc/default/grubGRUB_TIMEOUT=5 定义在启动菜单默认的等待时间,单位是秒GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)" 定义获取操作系统名称的方式GRUB_DEFAULT=saved 定义开机时默认启动的项目,可以是数字,也可以是标题名称,(这个标题就是开机时看到的那个标题),还可以是saved(表示默认启动上次启动成功的操作系统) GRUB_DISABLE_SUBMENU=true 是否隐藏子菜单GRUB_TERMINAL_OUTPUT="console" 定义启动时的界面使用哪种终端输出,值包含console,serial,gfxterm,vga_text等GRUB_CMDLINE_LINUX="resume=/dev/mapper/cl-swap rd.lvm.lv=cl/root rd.lvm.lv=cl/swap rhgb quiet" 定义额外的启动参数GRUB_DISABLE_RECOVERY="true" 是否启用修复模式GRUB_ENABLE_BLSCFG=true 是否启用bootloader规范修改完成之后需要使用grub2-mkconfig -o /boot/grub2/grub.cfg,重新生成配置文件
/etc/grub.d/
00_header 设置默认参数
00_tuned 额外调整的值
01_menu_auto_hide 与菜单隐藏相关的设置
01_users 与用户相关的设置
10_linux 与内核相关的设置
20_ppc_terminfo 与终端相关的设置
20_linux_xen 与虚拟化相关的设置
30_os-prober 与操作系统检测相关
30_uefi-firmware 与UEFI启动设置相关,需要硬件支持
电脑40_custom&41_custom 自定义设置
注:这些文件会按照数字的顺序由小到大加载
总结
BootLoader的作用
引导系统启动,stage1加载主程序,stage2通过主程序加载配置文件
GRUB2的优点
支持更多的文件系统,可以手动调整启动参数,动态更新配置文件
在GRUB2中如何识别硬盘,及相关的配置文件和命令
grub.cfg /etc/default/grub /etc/grub.d/
grub2-mkconfig
重点:BootLoader的作用及相关文件
难点:/etc/default/grub文件的设置,及设置后如何生成新的配置文件
电脑