一、bios与uefi
BIOS
Basic Input Output System的缩写,即“基本输入输出系统”,是计算机启动时首先加载的程序。它主要负责检测和设置硬件,并启动操作系统。BIOS于1975年首次出现,是一个行业标准的固件接口。
UEFI
Unified Extensible Firmware Interface的缩写,意为“统一可扩展固件接口”,是BIOS的替代方案。其前身是Intel在1998年开始开发的Inter Bot Initiative,后来演变为可扩展固件接口(EFI),并于2005年由统一可扩展固件接口论坛正式命名为UEFI。
UEFI的优势
支持更大硬盘容量:与传统BIOS+MBR只能支持2048G的硬盘分区和4个主分区不同,UEFI+GPT不受硬盘容量和分区数量限制。虽然Windows系统有限制,最多支持128个GPT磁盘分区,最大分区18EB,且GPT格式没有主分区和逻辑分区的概念。
容错特性:UEFI采用模块化构建,具有更强的容错和纠错能力。
鼠标操作:UEFI内置图形驱动,支持原生分辨率的图形环境,用户可以使用鼠标进行操作。
扩展性强:UEFI包含一个可编程的开放接口,厂商可以利用此接口扩展功能,如备份和诊断。
支持联网:无需进入操作系统,即可通过网络进行远程故障诊断。
二、CentOS8启动流程
现代计算机是软件与硬件的复杂组合,从接通电源到系统登录,需要软件和硬件的紧密配合。我们将探讨CentOS8 x86_64系统的启动过程,虚拟机的启动流程大致相同,但某些与硬件相关的步骤由虚拟机软件处理。
接通电源
系统固件(UEFI或BIOS)运行自检,并初始化部分硬件。
系统固件搜索可启动设备
启动设备可能是UEFI启动固件中配置的,也可能是按照BIOS中配置的顺序搜索所有磁盘上的主启动记录(MBR)。
读取启动加载器(boot loader)
系统固件从MBR中读取启动加载器,然后将控制权交给启动加载器。在CentOS8中,启动加载器为GRUB2。
grub.cfg
GRUB2从/boot/grub2/grub.cfg文件中加载配置并显示启动菜单,用户可选择要启动的内核。grub.cfg文件可以通过grub2-mkconfig命令结合/etc/grub.d/目录和/etc/default/grub文件生成。
initramfs
选择内核或到达超时时间后,启动加载器从磁盘加载内核(vmlinuz)和initramfs,并将其放入内存。initramfs包含启动时所需的硬件内核模块(驱动)和初始化脚本等。可以通过lsinitrd和dracut命令结合/etc/dracut.conf.d/目录查看和配置initramfs文件。
启动加载器放权
启动加载器将控制权交给内核。
内核初始化
内核在initramfs中寻找硬件驱动并初始化相关硬件,然后启动/usr/sbin/init(PID=1)。在CentOS8中,/sbin/init是systemd的链接。
启动initrd.target并挂载
systemd执行initrd.target包含的所有单元,并将根文件系统挂载到/sysroot/目录。initrd.target启动时的依赖单元将根据/etc/fstab设置挂载硬盘。
切换根文件系统
内核将根文件系统从initramfs切换到/sysroot(硬盘上的根文件系统),systemd会找到磁盘上安装的systemd并自动重新执行。
启动相应目标
硬盘上安装的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),开启登录界面。
图形界面
豆包AI编程
豆包推出的AI编程助手
483 查看详情
在multi-user.target的基础上执行graphical.target启动所需的服务,开启图形界面。
三、运行级别切换与相关配置文件
CentOS8在启动过程中需要判断对应的运行级别,不同的运行级别会启动不同的单元。运行级别的切换涉及以下命令:
systemctl isolate …/init [0-6]:切换运行级别systemctl get-default:查看当前的默认运行级别systemctl set-default …:设置默认的运行级别runlevel:查看之前的运行级别和当前的运行级别
运行级别对照
runlevel0.target -> poweroff.targetrunlevel1.target -> rescue.targetrunlevel2.target -> multi-user.targetrunlevel3.target -> multi-user.targetrunlevel4.target -> multi-user.targetrunlevel5.target -> graphical.targetrunlevel6.target -> reboot.target
因此,当使用init [0-6]切换运行级别时,系统执行的是systemctl isolate runlevel[0-6].target。
四、Boot Loader与GRUB2
在CentOS8的启动流程中,有一个称为启动加载器(boot loader)的工具。如果没有这个boot loader,就无法加载内核。在CentOS8中使用的启动加载器是Grub2。在了解Grub2之前,先简单介绍一下boot loader。
Boot Loader的两个阶段
boot loader的工作过程分为两步:
stage1:执行boot loader的主程序,必须安装在MBR或启动扇区。由于空间限制,仅存放最小化的boot loader,不包含配置文件。stage2:通过主程序加载配置文件。boot loader的主程序加载所有相关的配置文件,包括定义文件系统类型的和CentOS8中的grub.cfg文件,这些文件通常存放在/boot目录中。
GRUB2
目前,Linux下的启动加载器有两种,一种是LILO,另一种是GRUB。由于GRUB功能更强大,支持的文件系统较多,因此越来越多的操作系统使用GRUB作为boot loader。CentOS从7开始使用功能更为强大的GRUB2。
GRUB2的优点
支持更多的文件系统开机时可以手动调整启动参数动态更新配置文件,修改完配置文件后不需要重新安装GRUB2
GRUB2与硬盘
由于grub2的主要任务是从硬盘中加载内核,所以grub2必须识别硬盘。grub2识别硬盘的方式与Linux系统有所不同。在Linux系统中,硬盘通常被识别为类似sda1的形式,而在grub2中,硬盘统一被识别为hd设备,排序方式全部用数字进行排序,而不是用字母加数字的混合形式。这样做的目的是为了定义grub2查找内核时的顺序。
grub2配置文件
grub2的配置文件建议不要随意更改。grub.cfg文件的内容由grub2-mkconfig命令自动生成,相关模板和设置存放在/etc/grub.d/目录以及/etc/default/grub文件中。如果需要修改,需要通过调整/etc/default/grub文件并使用grub2-mkconfig命令生成新的grub.cfg文件。
/etc/default/grub与/etc/grub.d/
grub2的配置文件grub.cfg内容复杂且不建议手动修改。如果需要修改,需要通过/etc/default/grub文件以及/etc/grub.d/目录内的内容来实现。
/etc/default/grub
GRUB_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:自定义设置。
这些文件会按照数字顺序由小到大加载。

注意:此为紧急模式,用于紧急处理系统错误,无法使用rescue.target时,可以尝试使用此模式。
以上就是CentOS 8启动流程的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/465366.html
微信扫一扫
支付宝扫一扫