BIOS-UEFI-启动流程

知识点

BIOS与UEFI介绍

UEFI的优势

CentOS8启动流程解析

课程目标

能够知道BIOS与UEFI的差异

能够知道UEFI的优势

能够说出CentOS8的启动过程

9.1.1 BIOS与UEFI

BIOS

Basic Input Output System的缩写,翻译过来就是“基本输入输出系统”,是一种业界标准的固件接口,第一次出现在1975年,是计算机启动时加载的第一个程序,主要功能是检测和设置计算机硬件,引导系统启动。

UEFI

Unified Extensible Firmware interface的缩写,翻译过来为统一可扩展固件接口,是BIOS的替代方案,前身是Intel在1998年开始开发的Inter Bot Initiative,后来被命名为可扩展固件接口(Extensible Firmware Interface EFI),2005年交由统一可扩展固件接口论坛,并更名为UEFI

UEFI的优势

1、支持硬盘容量更大:相比于传统BIOS+MBR只能支持2048G的硬盘和4个主分区相比,UEFI+GPT支持18EB的磁盘和128个主分区

2、容错特性:UEFI是模块化构建,比BIOS容错和纠错特性强。

3、鼠标操作:UEFI内置图形驱动,可以提供原生分辨率的图形环境,用户进入后可以使用鼠标调整。

4、扩展性强:UEFI包含一个可编程的开放接口,厂商利用这个接口可以对功能进行扩展,如:备份和诊断

5、支持联网:在不进入操作系统的前提下就可以通过网络进行远程故障诊断

9.1.2 CentOS8启动流程

现代计算机是软件与硬件的复杂组合,从接通电源开始,到可以登录到系统中,需要大量的软件和硬件的配合,我们一起来了解一下CentOS8的x86_64系统在启动过程中所涉及的任务,虚拟机的流程也是大致相同的,但是某些与硬件相关的步骤是由虚拟机的相关程序在软件中处理的。

1、接通电源

系统固件(UEFI或BIOS初始化)运行开机自检,并初始化部分硬件

2、系统固件搜索可启动设备

启动设备可能是UEFI启动固件中配置的,也可能是按照BIOS中配置的顺序搜索所有磁盘上的主启动记录(MBR),使用grub2-install

3、读取启动加载器(boot loader)

系统固件会从MBR中读取启动加载器,然后将控制权交给启动加载器,在CentOS8中启动加载器为GRUB2

4、grub.cfg

GRUB2将从/boot/grub2/grub.cfg文件中加载配置并显示一个菜单,在这个菜单中可以选择要启动的内核,我们可以使用grub2-mkconfig命令配合/etc/grub.d/目录和/etc/default/grub文件生成grub.cfg文件。

[root@localhost ~]# cd /boot/grub2/[root@localhost grub2]# lsdevice.map fonts grub.cfg grubenv i386-pc[root@localhost grub2]# pwd/boot/grub2

5、initramfs

在选择内核或到达超时时间后,启动加载器会从磁盘加载内核(vmlinuz)和initramfs,并将它们放入内存中,initramfs中包含启动时所有必要硬件的内核模块(驱动)和初始化脚本等,使用lsinitrd和dracut命令配合/etc/dracut.conf.d/目录可以查看和配置initramfs文件

[root@localhost grub2]# lsinitrd | moreImage: /boot/initramfs-4.18.0-80.el8.x86_64.img: 27M##可以在回显中看到系统的主要目录,包括/etc /usr /dev /lib /lib64等

6、启动加载器放权

启动加载器将控制权交给内核

7、内核初始化

内核会在initramfs中寻找硬件的相关驱动并初始化相关硬件,然后启动/usr/sbin/init(PID=1),在CentOS8中/sbin/init是systemd的链接

[root@localhost grub2]# ll /sbin/init lrwxrwxrwx. 1 root root 22 5月 23 2019 /sbin/init -> ../lib/systemd/systemd[root@localhost grub2]# find / -name systemd/usr/lib/systemd/systemd

8、启动initrd.target并挂载

systemd会执行initrd.target包含的所有单元,并将根文件系统挂载到/sysroot/目录,在initrd.target启动时的依赖单元,会按照/etc/fstab设置对硬盘进行挂载

9、切换根文件系统

内核将根文件系统从initramfs切换为/sysroot(硬盘上的根文件系统),systemd会找到磁盘上安装的systemd并自动重新执行

10、启动相应目标

硬盘上安装的systemd会查找从内核命令行传递的目标或是系统中配置的默认目标并启动对应单元后就可以进入到对应的登录界面。默认目标是/etc/systemd/system/default.target,

注意:

字符界面:

如果默认目标为multi-user.target(字符界面),systemd会先执行sysinit.target初始化系统之后执行basic.target与getty.target准备基本系统环境和终端,再启动multi-user.target下的相关应用,同时执行/etc/rc.d/rc.local(需要执行权限)与与登录服务(systemd-logind.service),开启登录界面

[root@localhost ~]# systemctl list-dependencies multi-user.target | grep targetmulti-user.target● ├─basic.target● │ ├─paths.target● │ ├─slices.target● │ ├─sockets.target● │ ├─sysinit.target● │ │ ├─cryptsetup.target● │ │ ├─local-fs.target● │ │ └─swap.target● │ └─timers.target● ├─getty.target● ├─nfs-client.target● │ └─remote-fs-pre.target● └─remote-fs.target● └─nfs-client.target● └─remote-fs-pre.target

图形界面:

在multi-user.target的基础上执行graphical.target启动所需要的服务,开启图形界面

[root@localhost ~]# systemctl list-dependencies graphical.target | grep targetgraphical.target● └─multi-user.target● ├─basic.target● │ ├─paths.target● │ ├─slices.target● │ ├─sockets.target● │ ├─sysinit.target● │ │ ├─cryptsetup.target● │ │ ├─local-fs.target● │ │ └─swap.target● │ └─timers.target● ├─getty.target● ├─nfs-client.target● │ └─remote-fs-pre.target● └─remote-fs.target● └─nfs-client.target● └─remote-fs-pre.target

总结

BIOS和UEFI

对硬件进行检测,引导系统启动

UEFI的优势

支持大容量硬盘,容错,支持联网和鼠标操作,扩展性强

CentOS8的启动流程

接通电源–>搜索启动设备–>读取启动加载器–>读取grub配置文件–>加载vmlinuz和initramfs文件–>初始化内核–>启动initrd.target–>切换根文件系统–>启动相应目标

重点:UEFI的优势,CentOS8的启动流程

难点:CentOS8在启动过程中都做了哪些操作