Linux系统启动流程


从11月底报名马哥的Linux培训班,12月初真正开始学习,已经过去一个多月的时间了,从学习Linux的发展史开始、跟着学习命令行、文件系统挂载与管理、目录、Bash Shell的基本特性等等,Linux真的是博大精深,今天以CentOS 5,CentOS 6的启动过程进行一下简单的总结。由于才疏学浅,知识所限,有些地方分析不妥之处还请各位高手不吝赐教。


系统启动过程主要经过以下几个流程:

POST》BootSequence(BIOS)》Bootloader(MBR)》Kernel(Ramdisk)》Rootfs(只读)》INIT

Linux系统管理(二):Linux系统启动流程_第1张图片

通过上述流程大概的了解了Linux从按下电源器开始,到用户登录界面的整个流程,接下来我们再补充几个比较重要的概念,它们是启动过程当中不可或缺的部分:

启动第三步:Boot loader


Boot Loader 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核做好一切准备。
系统读取内存中的grub配置信息(一般为menu.lst或grub.lst),并依照此配置信息来启动不同的操作系统。


启动第五步:
1)Linux的运行级别(用户层init依据inittab文件设置运行级别)

功能:它是为了系统的运行或维护等应用目的而设定的:
0-6:7个级别
0 : 关机
1 : 单用户模式式(root,无需登录),single,维护模式
2 : 多用户模式,会启动网络功能,但不会启动NFS:维护模式
3 : 多用户模式,正常模式,文本界面
4 : 预留级别,功能跟级别3一样,通过不使用
5 : 多用户模式,正常模式,图形界面
6 : 重启
默认级别
3,5
切换级别
init # (#代表对应的级别号)
查看级别
[root@jimjimlv ~]# runlevel
 N 5
 [root@jimjimlv ~]# who -r
          run-level 5  2016-01-15 17:07

2)不同运行级别的脚本程序
系统会运行rc0.d到rc6.d中的相应的脚本程序,来完成相应的初始化工作和启动相应的服务
存储位置

[root@jimjimlv ~]# ls /etc/rc.d/
init.d  rc0.d  rc1.d  rc2.d  rc3.d  rc4.d  rc5.d  rc6.d  rc.local

3)执行/etc/rc.d/rc.sysinit: 系统初始化脚本

(1)设置主机名
(2)设置欢迎信息
(3)激活udev和selinux
(4)挂载/etc/fstab文件中定义的文件系统
(5)检测根文件系统,并以读写方式重新挂载根文件系统
(6)设置系统时钟
(7)激活swap设备
(8)根据/etc/sysctl.conf文件设置内核参数
(9)激活lvm及software raid设备
(10)加载额外设备的驱动程序
(11)清理操作

它的整个流程为:/sbin/init --> (/etc/inittab)-->设置默认运行级别-->运行系统初始脚本,完成系统初始化-->>关闭对应下需要关闭的服务,启动需要启动服务-->设置登录终端


以上总结只是描述Linux在启动过程中涉及的几大模块,每个大模块下还有很多的小模块,以下附上一张不错的Linux系统启动流程图:

Linux系统管理(二):Linux系统启动流程_第2张图片

参考文献:
http://blog.chinaunix.net/uid-23069658-id-3142047.html
http://blog.itpub.net/8111049/viewspace-680043

http://blog.chinaunix.net/uid-26495963-id-3066282.html

http://baike.baidu.com/subview/9485/9079238.htm