标签:centos启动流程
CentOS系统的启动流程:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1、POST加电自检
当计算机的硬件加电后,会进行自检,这个过程通常称为POST(Power On Self Test),加电的过程会检查计算机各部件是否存在以及是否能够正常工作。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2、加载bootloader
自检完成后,主板上的BIOS程序通常是转向第一块硬盘的第一个扇区即主引导记录(MBR)来装载bootloader。
主引导记录MBR(Master Boot Record)在磁盘的第一个扇区中,大小为512字节:前446字节
是bootloader,中间64个字节为DPT即磁盘分区表,最后两个字节为MBR的有效标识,55AA表示MBR有效。
bootloader的作用是允许用户选择要启动的系统或不同的内核版本;把用户选定的内核装载到RAM的特定空间中,解压、展开,而后把系统控制权移交给内核;但由于bootloader的大小只有446字节,意味着其能够实现的代码和任务有限,所以centos使用grub的机制来启动系统的引导过程。
grub将引导的过程分成了1,2两个阶段,第一个阶段加载bootloader,此时bootloader不加载内核,而是用来加载grub的第二阶段至内存中,其后可以在内存中不受MBR的限制可以实现很多复杂的功能以及加载用户选择的内核,并能够传递参数至内核。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3、内核的初始化
内核(kernel)的初始化分为四个步骤:
1、探测可识别到的所有硬件设备;
2、加载硬件驱动程序(有可能会借助于ramdisk加载驱动);由于内核不可能将所有硬件设备的驱动直接编译进内核中,所以当内核无法加载根文件系统所在设备的驱动程序时,便会由特定的工具程序来创建生成ramdisk文件,ramdisk是运行于内存中的一个简装版的根文件系统,其作用在于:
ramdisk会在内存中加载一个虚拟根文件系统去识别真正的根文件系统所需的驱动程序并加载,加载完成后,内核便可识别真正的根文件系统并将其挂载,此时ramdisk再将根切换给真正的根文件系统,自己退出内存
3、以只读方式挂载根文件系统;防止内核有bug导致根文件系统上的数据丢失,在系统初始化时内核会以读写方式重新挂载根文件系统
4、最后将任务转交给init程序来加载运行用户空间的第一个应用程序:/sbin/init
内核级别的系统初始化流程总结:
POST加电自检 --> BootSequence(BIOS) --> Bootloader(MBR) --> Kernel(ramdisk) --> rootfs(readonly) --> /sbin/init()
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4、运行init程序,接管用户空间
以CentOS 5为例,init程序会首先通过读取其配置文件/etc/inittab设定系统的运行级别以及在各级别下要启动的任务
init配置文件:/etc/inittab 决定了系统初始化中启动哪些服务,其每行定义一种action以及与之对应的process
id:runlevels:action:process
id:一个任务的唯一标识符;
runlevel:在哪些级别启动此任务;#,###,也可以为空,表示所有级别
action:在什么条件下启动此任务;
process:具体的任务;
action:启动时的场景
wait:等待切换至此任务所在的级别时执行一次;
respawn:一旦此任务终止,就自动重新启动之;
initdefault:设定默认运行级别;此时,process省略;
sysinit:设定系统初始化方式,此处一般为指定/etc/rc.d/rc.sysinit系统初始化脚本
运行级别:是为了系统的运行或维护等目的而设定的机制,默认运行的是3,5级别
0-6:7个级别;
0:关机,shutdown
1:单用户模式(single user),root用户,无需认证;维护模式
2:多用户模式(multi user),会启动网络功能,但不会启动NFS;维护模式
3:多用户模式(multi user),完全功能的模式,文本界面
4:预留级别:目前无特别使用目的,但习惯以同3级别功能使用
5:多用户模式(multi user),完全功能模式,图形界面
6:重启模式,reboot
1、指定运行级别
例如id:3:initdefault: 表示默认运行3级别
2、运行系统初始化脚本
例如si::sysinit:/etc/rc.d/rc.sysinit
表示在所有级别下都会运行/etc/rc.d/rc.sysinit脚本完成系统初始化
系统初始化完成后,init程序会运行/etc/init.d/*(/etc/rc.d/init.d/*)下的脚本决定系统启动时要开启或关闭哪些服务。
/etc/init.d/*(/etc/rc.d/init.d/*)脚本可以接受一个运行级别数字为参数设定对应级别下需要开启或停止的服务
/etc/rc.d/rc#.d/中的S*:表示要启动的服务;K*:表示要停止的服务
3、定义启动终端,
例如:
tty1:2345:respawn:/usr/sbin/mingetty tty1
... ...
tty6:2345:respawn:/usr/sbin/mingetty tty6
表示当系统运行级别为2345中任何一种时,会自动运行/usr/sbin/mingetty程序启动tty1-6的虚拟终端,/usr/sbin/mingetty文件会调用login程序让用户登录
总结(用户空间的启动流程):
读取/sbin/init(/etc/inittab)设置默认运行级别 --> 运行系统初始化脚本,完成系统初始化 --> 关闭对应级别下需要停止的服务(K*),启动对应级别下需要开启的服务(S*) --> 设置登录终端 [--> 启动图形终端]
当启动登录终端完成后,系统即启动完成
标签:centos启动流程
原文地址:http://coffeeyep.blog.51cto.com/8089974/1729973