您的位置:首页 > 运维架构 > Linux

Linux启动过程解析

2013-06-11 22:07 211 查看
Linux启动流程:



第一步:开机加电后固件先进行自检,自检设备信息通过BIOS可以查看包括CPU、硬盘等信息,如果新增设备在BIOS中没有显示,则该设备在系统启动后无法使用。常用的固件设置包括:安全设置、设备启动顺序、电源管理等。

第二步:读取硬盘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目录中相对应的脚本。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: