简述
开机BIOS自建
MBR引导
grub引导菜单
加载内核kernel
启动第一个进程
centos5.x 6.x init
centos7.x systemd
麒麟 systemd
unbuntu init
执行运行级别对应数字下的脚本
进入登录
详述
一、固件初始化
BIOS/UEFI
当你按下电源键后,首先行动的是主板上的固件,它可能是传统的 BIOS,也可能是更现代的 UEFI。
核心任务:进行上电自检,检测CPU、内存、硬盘等关键硬件是否正常工作。然后,它会根据预设的启动顺序(如硬盘、U盘、光盘)来寻找可引导的设备。
关键区别:
BIOS:会读取硬盘的第一个扇区(512字节),即主引导记录。如果该扇区的最后两个字节是魔数 0x55AA,BIOS便认为它是有效的MBR,随后将其加载到内存地址 0x7C00处执行。
UEFI:则直接从硬盘上一个特殊的EFI系统分区中读取并执行扩展名为(.efi)的引导程序,如grubx64.efi。
二、引导程序
GRUB2
控制权交给GRUB2后,它会显示一个引导菜单,让你可以选择要启动的操作系统或不同的内核版本 。
核心任务:GRUB2的主要职责是定位并加载你选择的Linux内核映像(通常是/boot/目录下的 vmlinuz-文件)以及一个名为 initramfs 的临时根文件系统到内存中。
initramfs 的作用:这个临时的文件系统包含了启动早期所必需的核心模块(例如用于访问真正根文件系统的硬盘控制器驱动、文件系统驱动等)。内核需要这些模块才能成功挂载真正的根文件系统。
三、内核初始化
内核被加载到内存后,会进行一系列复杂的初始化工作:
解压与架构初始化:如果是压缩的内核映像,会先解压。然后进行CPU架构相关的底层初始化,如设置内存分页。
核心初始化:调用 start_kernel函数,初始化系统调度器、内存管理、中断处理、设备驱动等所有核心子系统。
挂载根文件系统:内核会使用initramfs中的驱动和工具,挂载真正的根文件系统。之后,它会卸载initramfs并释放资源。
四、启动第一个用户进程
内核最后会尝试启动一个位于用户空间的初始化程序,现代Linux系统中通常是 /sbin/init。至此,内核的启动任务完成,控制权完全交给用户空间。
五、用户空间初始化
init vs systemd
这是启动流程的最后一个阶段,也是不同Linux发行版和版本差异最大的地方,如CentOS5或6使用init,而CentOS7、麒麟、Ubuntu(新版本)使用 systemd。
对于 init(如 CentOS 5.x/6.x):
系统会根据 /etc/inittab 文件中指定的默认运行级别,进入对应的目录(如 /etc/rc.d/rc3.d/),然后按顺序依次启动(S开头)或关闭(K开头)其中的服务脚本。
对于 systemd(如 CentOS 7.x、麒麟、新版本Ubuntu):
systemd作为一号进程,会并行启动服务,大大加快启动速度。它通过读取.target文件(如 graphical.target代表图形界面模式)来启动一系列依赖的服务。
| 特性 | System V init | systemd |
| 运行理念 | 顺序、串行启动 | 并行启动,依赖关系管理 |
| 管理方式 | 通过运行级别定义系统状态 | 通过target概念组织服务 |
| 配置目录 | /etc/rc.d/rc[0-6].d/ | /usr/lib/systemd/system/ /etc/systemd/system/ |
| 主要命令 | service chkconfig | systemctl |
五、登录系统
当所有针对指定运行级别或target的服务启动完毕后,系统会启动getty或登录管理器,你就能看到熟悉的登录界面,输入用户名和密码后,就完成了整个启动过程。

评论