CentOS6启动流程
1.加载BIOS的硬件信息,获取第一个启动设备
在通电之后,CentOS6会进行加电自检(Power On Self Test),这个过程主要是由BIOS完成的。在自检完毕,会检查启动设备。
2.读取第一个启动设备MBR的引导加载程序(grub)的启动信息
在检测到启动设置之后,会读取第一个可启动设备MBR(Main Boot Record)中grub的启动信息。 主引导扇区,由MBR(主引导记录,占446byte)、磁盘分区表(DPT,占64Byte)和结束标志(占2Byte)三部分构成。在这一过程中就是读取grub中的启动信息。
3.加载核心操作系统的核心信息,核心开始解压缩,并尝试驱动所有的硬件设备
加载grub程序,从而初始化硬件设备、建立内存空间的映射图。为最终调用操作系统内核做好一切准备。
grub属于Boot Loader中的一种, 其他的loader还有Lilo和spfdisk等。
4.核心执行init程序,并获取默认的运行信息
根据grub设定的内核映像所在路径,系统读取内存映像,并进行解压缩操作。
系统将解压后的内核放置在内存之中,并调用start_kernel()函数来启动一系列的初始化函数并初始化各种设备,完成Linux核心环境的建立。至此,Linux内核已经建立起来了,基于Linux的程序应该可以正常运行了。
5.init程序执行/etc/rc.d/rc.sysinit文件
内核被加载后,第一个运行的程序便是/sbin/init,该文件会读取/etc/inittab文件,并依据此文件来进行初始化工作。
其实/etc/inittab文件最主要的作用就是设定Linux的运行等级,其设定形式是“:id:5:initdefault:”,这就表明Linux需要运行在等级5上。Linux的运行等级设定如下:
0:关机
1:单用户模式
2:默认不支持NFS的多用户模式
3:多用户模式
4:保留,未使用
5:有网络支持有X-Window支持的多用户模式
6:重新引导系统,即重启
除了设置运行等级之外,在该脚本中,还做了一下操作:
(1) 设置主机名
(2) 设置欢迎信息
(3) 激活udev和selinux
(4) 挂载/etc/fstab文件中定义的文件系统
(5) 检测根文件系统,并以读写方式重新挂载根文件系统
(6) 设置系统时钟
(7) 激活swap设备
(8) 根据/etc/sysctl.conf文件设置内核参数
(9) 激活lvm及software raid设备
(10) 加载额外设备的驱动程序
(11) 清理操作
6.启动核心的外挂模块
依据/etc/modules.conf文件或/etc/modules.d目录下的文件来装载内核模块
7.init执行运行的各个批处理文件(scripts)
根据运行级别的不同,系统会运行rc0.d到rc6.d中的相应的脚本程序,来完成相应的初始化工作和启动相应的
8.init执行/etc/rc.d/rc.local
在一切初始化工作后,执行该脚本。Linux留给用户进行个性化的地方,需要进行初始化的文件可以放在此处。
9.执行/bin/login程序,等待用户登录
在该阶段,用户可以使用用户名和密码登录。