一 启动过程概览 (keyword: BIOS,BOOTLOADER,KERNEL,INIT)
①加电自检,通过BIOS读取硬件信息,从而确定第一启动设备,找到BOOTLOADER(grub,lino)等
②BOOTLOADER加载内核,内核再次检测硬件与硬件驱动信息,为读取文件系统做准备
③内核调用INIT进程(PID=1),INIT 通过/etc/rc.d/rc.sysinit脚本准备初始化系统环境
④INIT执行许多后续所需要的服务进程(/etc/rc.d/init.d/*)并执行/etc/rc.d/rc.local用户的自定义脚本
⑤最后根据mingetty服务启动登录界面,系统启动完成
二 过程细看
1.第一阶段 BIOS(Basic Input Output System)
①加载CMOS中的硬件信息,并自检POST(Power-on Self Test),也即检测设备是否能正常启动
②读取BIOS中的启动设备
2.第二阶段BOOTLOADER
①硬盘的最前面的446Byte被用作MBR(Master Boot Record,主引导分区),其他各启动分区一般都有自己的BOOTLOADER,而MBR中可能有或没有
多重引导则是由于BOOTLOADER具有转交功能,可以转交给下一个BOOTLOADER处理;确定BOOTLOADER后,系统显示其所设置 的菜单,从而启动自家的内核
3.第三阶段KERNEL(/boot/vmlinuz-NUMBER.el5)
①内核与ramdisk(REDHAT6 ramfs)被加载,后者可以理解为前者的助手,是一个伪文件系统(只读),帮助内核读取文件系统的信息,实现内核自身的任务,如根据一些脚本配置基本服务
而后者对应文件/boot/initrd-NUMBER.el5.img
4.第四阶段INIT进程
① 由于前续的工作已经就位,系统开始创建INIT进程/sbin/init,关于init信息保存在/etc/inittab文件中,涉及到启动的服务,level等级与相应服务,很容易看明白,这里不介绍
备注几个运行level:0:(关机) 1(单用户模式) 2(无NFS的多用户模式) 3(多用户模式) 4(备用) 5(图形化界面) 6(重启)
②系统初始化
由于第一步是负责把level环境设置好,那么这一部分就是根据level环境设置系统初始化任务,/etc/rc.d/rc.sysinit,文件比较大,涉及很多基本服务和模块的添加,以读写重新挂载根文件系统,并挂载其他分区,网络设置,字体设置,raid或lvm初始化,是否启动selinux等。总之,这一步理解为初始环境的搭建,为大环境设置做好准备
③启动各项重要服务与加载模块
第二步初始化了基本的配置,那么这一步则是通过/etc/rc.d/rc N(N为①下的level)加载最重要的服务模块,rc是running-config的缩写,这些其实是链接文件,链接到/etc/rc.d/init.d/PATH/TO/SCRIPTS
chkconfig命令可以把一个SytemV风格的脚本或服务加载到模块的设置目录下,从而并为其自动在/etc/rc.d/rc N创建链接
④自定义服务的装载
文件在/etc/rc.d/rc.local本地自定义设置,自定义希望开机执行的脚本建议放在这
⑤提供登录界面
根据/etc/inittab或者/etc/init/*文件提供界面
至此,系统便可为正常用户所使用。
原文地址:http://qixue.blog.51cto.com/7213178/1635866