了解系统的引导程序

   linux操作系统的引导过程一般包括以下几个阶段:开机自检、MBR引导、GRUB菜单、加载Linux内核、INIT进程初始化。
其中INTI进程初始化过程涉及的操作最多,也不好理解。
如下下图:引导过总览

1

1、开机自检
服务器主机开机后,将根据主板的BIOS中的设置对CPU、内存、显卡、键盘等设备进行初步检测,检测成功后根据预设的启动顺序移交系统控制权,大多数时候会移交给本机硬盘。
2、MBR引导
当从本机硬盘中启动系统时,首先根据硬盘的第一个扇区中的MBR的设置,将系统控制权传递给包好操作系统的引导文件的分区。
3、GRUB菜单
对于linux系统来说,GRUB算是使用最为广泛的多系统引导器程序了。系统控制权移交给GRUB菜单以后,将会显示启动菜单提供给用户选择,并根据所选项加载linux内核文件,然后将系统控制权移交给内核。
4、加载Linux内核
linux内核是一个预先编译好的特殊二级制文件,介入各种硬件资源一系统程序之间,负责资源分配与调度。内核接过系统控制权之后,将完全掌控整个linux操作系统的运行过程,默认内核在“/boot/”下。
5、INIT进程初始化
当内核接过系统的控制权之后,它首先将系统中的“/sbin/init”程序加载运行。init进程负责完成一系列的系统初始化过程,包括:读取配置文件“inittab”,根据配置内容首先负责执行初始化脚本文件“/etc/rc.d/rc.sysinit”,接着通过脚本文件“/etc/rc.d/rc”控制开机启动的服务,最后运行终端程序“/sbin/mingetty”,等待用户登录。

   通过上述引导过程可以看出,决定系统初始化过程的关键在于init进程及其配置文件“/etc/inittab”。在“inittab”配置文件中记录了系统启动后运行那些服务,以及系统默认的运行级别。init进程是系统运行的第一个进程,所以它是所有进程的父进程,对应的PID号总是“1”。(PID每个进程的身份标记,在系统中是唯一的)

管理“inittab”配置文件
   inittab文件位于“/etc”下,是init程序的配置文件。当init程序运行后,将按照“/etc/inittab”文件指定的配置一次启动系统中对应的脚本和程序。
如下:使用“grep”命令过滤掉注释和空行的inittab配置文件。

2 

在“/etc/inittab”文件中。除了以“#”号开头的注释信息和空行以外,每一行都视为一条有效的配置记录。每条记录都有四个字段,使用“:”好分割。格式如下:
标记:运行级别:动作类型:程序或脚本
1)标记字段:标记字段可以由1~4个字符组成,用于区别其他行的配置,在inittab文件中不可以出现标记相同的配置。
2)运行级别字段
0:关机状态,使用该级别时将会关闭主机。
1:单用户模式。(不用密码登陆系统,多用于维护)
2:字符界面的多用户模式。(不支持网络)
3:字符界面的完整多用户模式,大多数服务器主机运行在此级别。
4:未分配使用(保留)。
5:图形界面多用户模式,提供了图形桌面操作环境。
6:重新启动,使用该级别时将会重启主机。
可使用“runlevel”命令查看当前系统运行的级别,使用“init *”切换到任意级别。
4)动作类型字段
initdefault:设置初始化系统后默认进入的运行级别。
sysinit:设置系统初始化的操作脚本。
wait:init进程等待该行配置所对应的脚本操作完成后,再继续执行其他操作。
ctrlaltdel:设置当用户按下“Ctrl+Alt+Delete”组合键后的操作。
powerfail:设置当系统受到断电信号时采取何种操作。(使用不间断电源)
powerokwait:设置当系统受到恢复供电信号时采取何种操作。
respawn:一旦该行配置所对应的进程被终止,则重新启动该进程。
5)程序或脚本字段:此字段用于指定该行配置所对应的实际操作,可以是具体的命令,脚本程序等。

rc.sysinit脚本
  该脚本位于“/etc/rc.d/rc.sysinit”,是init进程所调用的系统初始化脚本。此脚本程序主要完成包括设置网络,主机名,加载文件系统,设置时钟,检测文件系统等一系列初始化工作。

rc脚本文件
rc脚本同样由init进程进行调用,文件位于“/etc/rc.d/rc”。rc脚本通过使用不同的级别参数,分别加载及终止不同的系统服务,进入到相应的系统运行级别。如下:查看inittab文件中“rc”脚本的行。

3

在“/etc/rc.d/rc0.d/”~“/etc/rc.d/rc6.d/”目录中,保存了一些特殊的符号链接,rc脚本根据这些目录下的链接文件调用对应的服务控制程序,进行启动或终止相关程序的操作。在这些目录中的链接文件具有以下规律:文件名以S或K开头,(S表示开启服务,K表示终止服务)中间是数字序号,最后是系统中的服务本命:所链接的原始服务脚本位于“/etc/rc.d/init.d/”目录中。如下:查看“/etc/rc.d/rc”中的文件。

rc.local脚本文件
rc.local脚本是一个额外的启动控制文件,位于“/etc/rc.d/rc.local”,由rc脚本在最后时进行加载。rc.local脚本用于管理员自行设置开机启动任务,运行级别“2-5”。如下:使用“vi /etc/rc.d/rc.local”命令在rc.local文件末行添加一行执行语句。(执行语句的含义是:每次开机自动开启ftp服务)

4

mingetty脚本
  mingetty脚本位于“/sbin/mingetty”,在系统中“tty1”~“tty6”等终端都是“/sbin/mingetty”程序提供服务的。
如下:对应的初始化操作也是在inittab文件中设置的。

5