0

0

CentOS 8启动流程

星夢妙者

星夢妙者

发布时间:2025-07-15 09:48:41

|

598人浏览过

|

来源于php中文网

原创

一、bios与uefi

BIOS

Basic Input Output System的缩写,即“基本输入输出系统”,是计算机启动时首先加载的程序。它主要负责检测和设置硬件,并启动操作系统。BIOS于1975年首次出现,是一个行业标准的固件接口。

UEFI

Unified Extensible Firmware Interface的缩写,意为“统一可扩展固件接口”,是BIOS的替代方案。其前身是Intel在1998年开始开发的Inter Bot Initiative,后来演变为可扩展固件接口(EFI),并于2005年由统一可扩展固件接口论坛正式命名为UEFI。

UEFI的优势

  1. 支持更大硬盘容量:与传统BIOS+MBR只能支持2048G的硬盘分区和4个主分区不同,UEFI+GPT不受硬盘容量和分区数量限制。虽然Windows系统有限制,最多支持128个GPT磁盘分区,最大分区18EB,且GPT格式没有主分区和逻辑分区的概念。

  2. 容错特性:UEFI采用模块化构建,具有更强的容错和纠错能力。

  3. 鼠标操作:UEFI内置图形驱动,支持原生分辨率的图形环境,用户可以使用鼠标进行操作。

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

  5. 支持联网:无需进入操作系统,即可通过网络进行远程故障诊断。

二、CentOS8启动流程

现代计算机是软件与硬件的复杂组合,从接通电源到系统登录,需要软件和硬件的紧密配合。我们将探讨CentOS8 x86_64系统的启动过程,虚拟机的启动流程大致相同,但某些与硬件相关的步骤由虚拟机软件处理。

  1. 接通电源

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

  1. 系统固件搜索可启动设备

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

  1. 读取启动加载器(boot loader)

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

  1. grub.cfg

GRUB2从/boot/grub2/grub.cfg文件中加载配置并显示启动菜单,用户可选择要启动的内核。grub.cfg文件可以通过grub2-mkconfig命令结合/etc/grub.d/目录和/etc/default/grub文件生成。

  1. initramfs

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

  1. 启动加载器放权

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

  1. 内核初始化

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

  1. 启动initrd.target并挂载

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

  1. 切换根文件系统

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

  1. 启动相应目标

硬盘上安装的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),开启登录界面。

图形界面

PHP房产程序[BBWPS]
PHP房产程序[BBWPS]

[PHP房产程序|BBWPS]功能介绍 1、5种信息类别发布:出租、求租、出售、求购、楼盘信息,支持会员发布信息审核; 2、灵活的信息参数设置; 3、充足的信息字段; 4、简单易用的发布/编辑功能,支持配图上传; 5、灵活的信息管理功能; 6、信息输出伪静态,方便搜索引擎抓取数据; 7、支持RSS输出; 8、内置数据高速缓冲技术,可灵活设置缓冲功能是否启动及过期时间; 9、支持 Google 地图

下载

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

三、运行级别切换与相关配置文件

CentOS8在启动过程中需要判断对应的运行级别,不同的运行级别会启动不同的单元。运行级别的切换涉及以下命令:

  • systemctl isolate .../init [0-6]:切换运行级别
  • systemctl get-default:查看当前的默认运行级别
  • systemctl set-default ...:设置默认的运行级别
  • runlevel:查看之前的运行级别和当前的运行级别

运行级别对照

  • runlevel0.target -> poweroff.target
  • runlevel1.target -> rescue.target
  • runlevel2.target -> multi-user.target
  • runlevel3.target -> multi-user.target
  • runlevel4.target -> multi-user.target
  • runlevel5.target -> graphical.target
  • runlevel6.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:自定义设置。

这些文件会按照数字顺序由小到大加载。

CentOS 8启动流程

注意:此为紧急模式,用于紧急处理系统错误,无法使用rescue.target时,可以尝试使用此模式。

相关专题

更多
硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1022

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

65

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

415

2025.12.29

go中interface用法
go中interface用法

本专题整合了go语言中int相关内容,阅读专题下面的文章了解更多详细内容。

76

2025.09.10

console接口是干嘛的
console接口是干嘛的

console接口是一种用于在计算机命令行或浏览器开发工具中输出信息的工具,提供了一种简单的方式来记录和查看应用程序的输出结果和调试信息。本专题为大家提供console接口相关的各种文章、以及下载和课程。

412

2023.08.08

console.log是什么
console.log是什么

console.log 是 javascript 函数,用于在浏览器控制台中输出信息,便于调试和故障排除。想了解更多console.log的相关内容,可以阅读本专题下面的文章。

489

2024.05.29

default gateway怎么配置
default gateway怎么配置

配置default gateway的步骤:1、了解网络环境;2、获取路由器IP地址;3、登录路由器管理界面;4、找到并配置WAN口设置;5、配置默认网关;6、保存设置并退出;7、检查网络连接是否正常。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

220

2023.12.07

点击input框没有光标怎么办
点击input框没有光标怎么办

点击input框没有光标的解决办法:1、确认输入框焦点;2、清除浏览器缓存;3、更新浏览器;4、使用JavaScript;5、检查硬件设备;6、检查输入框属性;7、调试JavaScript代码;8、检查页面其他元素;9、考虑浏览器兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

182

2023.11.24

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

41

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.3万人学习

Git 教程
Git 教程

共21课时 | 2.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号