一、概述
Linux开机启动流程主要分以下几个步骤:
1、POST加电自检
2、BIOS根据Boot Sequence开始进入下一步引导系统
3、MBR引导系统
4、bootloader引导系统内核
5、加载系统内核
6、init开始执行初始化工作
二、各阶段描述
1、POST加电自检
CPU在通电后会自动查找位于主板上ROM里的指令并执行。这段指令程序通常叫作BIOS,在这个步骤里BIOS程序首先会对主机的硬件设备检查,看各硬件是否完好,是否满足整机运行的基本条件。
2、BIOS根据Boot Sequence开始进入下一步引导系统
BIOS根据启动顺序,选择接下来要查找的存储介质。通常BIOS的指令默认是寻找第一启动项物理存储介质的0磁道0扇区。里面存有MBR系统引导记录,系统能否开机关键的一点就是MBR的引导程序。
3、MBR引导系统
MBR通常位于磁盘的0磁道0扇区,MBR共有512个字节,前446个字节用于存储bootloader程序,接下来的64字节用于存储整个磁盘的分区表,剩下的2字节用于标志磁盘使用情况。
4、bootloader引导系统内核
BIOS查找到MBR后,最开始执行的是bootloader程序。bootloader程序通常是安装系统时自动安装。在Linux中bootloader引导程序以前使用的是LILO(Linux Loader),因为LILO不能引导位于1024 Cylinder(柱面)以后的分区中的操作系统,随着硬件的升级发展,最终被GRUB程序所取带。GRUB(Grand Unified Bootloader)执行流程分三个步骤,1st stage、1.5 stage、2nd stage。
1st stage,这一步的主程序存储于MBR的bootloader中,主要的工作是配合MBR里存储的分区表识别磁盘基本分区信息。接着程序运行1.5 stage,此段程序位于/boot基本磁盘分区中,为了配合第一步用于识别系统内核镜像文件中的特殊文件系统格式。这两步完成后,stage 2开始执行,此段程序位于/boot基本磁盘分区中,在GRUB目录中,是GRUB的引导程序,配合grub.conf配置文件,这时系统会显示一个系统选择菜单。
5、加载系统内核
用户选择菜单后,grub会执行initrd程序,initrd程序将内存的一部分分配为一个分区并作为硬盘来使用,然后把这块分区挂载为原始的根文件系统,开始创建设备,并访问真正的磁盘根系统,加载内核至内存中。系统内核通常是一个一半可执行,一半压缩的映像文件,加载后可以自解压。接着内核会重新挂载系统根目录,把initrd创建的设备复制至自身内存空间。
6、init开始执行初始化工作
当内核被引导并进行初始化之后,内核就可以启动自己的第一个用户空间应用程序了。init会调用/etc/inittab配置文件,执行默认工作:设定默认运行级别、指定系统运行的初始脚本(/etc/rc.d/rc.sysinit)、启动指定级别下要启动的服务并关闭需要停止的服务、定义CtrlAltDel组合的动作、初始化终端。在这些步骤中,指定系统运行的初始脚本/etc/rc.d/rc.sysinit又有许多工作:设置主机名、打印文本欢迎信息、激活SELinux和Udev、激活swap、挂载/etc/fstab定义的本地文件系统、检测根文件系统并对其以读写方式重新挂载、设置系统时钟、装载键盘映射、根据/etc/sysctl.conf设置内核参数、激活软RAID和LVM设备、文件清理操作等。
至此,整个系统的启动工作基本结束。