背景知识介绍
Linux操作系统的启动过程首先从BIOS(Basic Input/Output System)开始启动,进而从磁盘加载MBR(Master Boot Record), 接下来进入bootloader,载入内核(Kernel), 完成内核的初始化。内核初始化的最后一步,需要产生第一个进程,负责产生其他的用户进程,这个特殊的进程就是pid为1的init进程。
init进程负责组织和运行许多独立的或相关的初始化工作,因此也被称为init系统。init系统可以定义,管理和控制init进程的各种行为,从而让计算机系统进入某种用户所需的运行模式。Linux的初始化init系统主要包括三种:Sysvinit, Upstart, Systemd。
Sysvinit
Sysvinit就是system V风格的init系统,它源于System V系列UNIX。
运行过程
init程序是Sysvinit的主要程序,一般位于Linux系统/sbin目录下。
内核启动init程序后,init程序首先读取/etc/inittab文件,分析文件内容,获得以下的配置信息:
- 系统需要进入的运行级别(runlevel)
- 捕获组合键的定义
- 定义电源fail/restore脚本
- 启动getty和虚拟控制台
获取系统运行级别之后,根据运行级别顺序的执行以下位置的启动脚本,从而将系统初始化为预设的运行级别
- /etc/rc.d/rc.sysinit 重要的系统初始化服务
- /etc/rc.d/rc 和 /etc/rc.d/rcX.d X为运行级别
- /etc/rc.d/rc.local 用户个性化服务
这样,整个系统就启动起来了。
inittab文件分析
/etc/inittab文件最重要的工作就是确定系统的runlevel。这个文件中定义的格式如下:
id:runlevels:action:process
id
登记项标识符,最多为4个字符.用于惟一地标识/etc/inittab文件中的每一个登记项
runlevel
系统运行级别