Linux启动流程:
第二步:读取硬盘MBR区域中的自举程序。MBR(Master Boot Record)即硬盘的主引导区域,MBR包括引导程序、分区表和分割标示(Magic Number),MBR总共512个字节,主引导程序占446个字节,分区表占64个字节,分割标示(Magic Number)占2个字节。
Linux的自举程序GRUB的配置文件存放在/boot/grub/grub.conf,配置文件的内容如下图,其中红色部分表示当前引导程序将载入的内核为vmlinuz-2.6.9-78.ELsmp。
第三步:引导程序GRUB载入Linux内核,内核通常放在/boot目录下,内核的源码通常放在/usr/src目录下,linux内核版本号中第二个数字如果为偶数则表示该版本为稳定版本,如果为奇数表示该版本为测试版。内核中大部分为驱动程序。
第四步:启动init的进程, init进程启动后读取inittab文件(/etc/inittab),执行缺省运行级别,从而继续引导过程。init进程的PID始终未1,PPID始终为0。PID为0的是内核调度器(Kernel scheduler)。
inittab文件剖析
inittab文件如下:
[root@localhost etc]# cat inittab
#
# inittab This file describes how the INIT processshould set up
# the system in a certainrun-level.
#
# Author: Miquel van Smoorenburg,<miquels@drinkel.nl.mugnet.org>
# Modified for RHS Linux by MarcEwing and Donnie Barnes
#
# Default runlevel. The runlevels usedby RHS are:
# 0 - halt (Do NOT set initdefault to this)
# 1 - Single user mode
# 2 - Multiuser, without NFS (The same as 3, if you do not havenetworking)
# 3 - Full multiuser mode
# 4 - unused
# 5 - X11
# 6 - reboot (Do NOT set initdefault to this)
#
id:5:initdefault:
# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6
# Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown-t3 -r now
# When our UPS tells us power hasfailed, assume we have a few minutes
# of power left. Schedule a shutdown for 2 minutes from now.
# This does, of course, assume you havepowerd installed and your
# UPS connected and working correctly.
pf::powerfail:/sbin/shutdown-f -h +2 "Power Failure; System Shutting Down"
# If power was restored before theshutdown kicked in, cancel it.
pr:12345:powerokwait:/sbin/shutdown-c "Power Restored; Shutdown Cancelled"
# Run gettys in standard runlevels
1:2345:respawn:/sbin/mingettytty1
2:2345:respawn:/sbin/mingettytty2
3:2345:respawn:/sbin/mingettytty3
4:2345:respawn:/sbin/mingettytty4
5:2345:respawn:/sbin/mingettytty5
6:2345:respawn:/sbin/mingettytty6
# Run xdm in runlevel 5
x:5:respawn:/etc/X11/prefdm-nodaemon
[root@localhost etc]#
在inittab中,所有条目采取以下格式:
id:run-levels:action:process
id:标示符,一般为两位字母或数字。没有实际意义。
run-levels:指定允许级别,可以指定多个运行级别。
action:指定运行状态。
process:指定要运行的脚步或命令。
action常用取值:
initdefault: 指定系统缺省的运行级别。
sysinit:系统启动执行process中指定的命令。
wait:执行process中指定的命令,并等待其结束再运行其他命令。
once:执行process中指定的命令,但不等待其结束。
ctrlaltdel:按下Ctrl+Alt+Del时执行process中指定的命令。
powerfail:当出现电源错误时执行process指定的命令,不等待其结束。
powerokwait:当电源恢复时执行process指定的命令。
respawn:一旦process指定的命令中止,便重新运行该命令。
id:5:initdefault:
设置当前系统运行级别,修改当前系统级别init [0,1,2,3,4,5,6,S,s]或者telinit [0,1,2,3,4,5,6,S,s]。
# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit
启动脚本/etc/rc.d/rc.sysinit完成系统服务程序启动,如系统环境变量、设置系统时钟、加载字体、检查加载文件系统、生成系统启动信息日志文件等。
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6
根据当前运行级别调用/etc/rc.d/rc脚本,执行相应运行级别目录中的服务程序,完成相应运行级别的初始化设置。
/etc/rc.d/init.d目录下包含各个运行级别的服务程序脚本。
/etc/rc.d/rc[0123456].d目录下分别存放对应运行级别的服务程序脚本的符号链接,链接到init.d目录中相对应的脚本。