引导过程和服务控制

引导过程和服务控制

 
1. Linux的引导过程
1.1 引导过程总览
1.开机自检
       服务器主机开机以后,将根据主板BIOS(Basic Input/Output System,基本输入输出系统)中的设置对CPU、内存、显卡、键盘等设备进行初步检测,检测成功后根据预设的启动顺序移交系统控制权,大多数时候会移交给本机硬盘。
 
2. MBR 引导
       当从本机硬盘中启动系统时,首先根据硬盘第1个扇区中MBR(Master Boot Record主引导记录)的设置,将系统控制权传递给包含操作系统引导文件的分区;或者直接根据MBR记录中的引导信息调用启动菜单(GRUB) 。
 
3. GRUM菜单
       对于Linux系统来说,GRUB算是使用最为广泛的多系统引导器程序了。系统控制权传递给GRUB以后,将会显示启动菜单提供给用户选择,并根据所选项(或采用默认值)加载Linux内核文件,然后将系统控制权转交给内核。
 
4.加裁Linux内核
       Linux内核是一个预先编译好的特殊二进制文件,介于各种硬件资源与系统程序之间,负责资源分配与调度。内核接过系统控制权以后,将完全掌控整个Linux操作系统的运行过程。在RHEL5系统中,默认的内核文件位于“/boot/vmlinuz-2.6.18-8. el5" 。
 
5.INIT进程初始化
       为了完成进一步的系统引导过程,Linux内核首先将系统中的“/sbin/init”程序加载到内存中运行(运行中的程序称为进程) ,init进程负责完成一系列的系统初始化过程:读取配置文件/etc/inittab,根据配置内容首先执行初始化脚本文件etc/rc.d/rc.sysinit,并通过脚本文件/etc/rc.d/rc控制应该启动哪些程序和服务,最后运行终端程序”/sbin/mingetty”等待用户进行登录(登录过程由“/bin/login"程序负责验证) 。
       通过上述引导过程可以看出,决定系统初始化过程的关键在于init进程及其配置文件/etc/inittab;而决定Linux系统启动后自动运行哪些程序的关键在于/etc/rc.d/rc脚本,rc脚本将根据不同的系统运行级别选择执行不同目录(rc0.d、rc1.d、rc6.d)中的服务控制脚本。
 
1.2 系统初始化进程及文件
1.init进程
       与使用数字标记用户账号、组账号类似,Linux系统中的进程(运行中的程序)使用数字进行标记,每个进程的身份标记号称为PID。在引导Linux系统的过程中,"/sbin/init”是内核第一个加载的程序,因此init进程对应的FID号总是为“1"。
       init进程运行以后将陆续执行系统中的其他程序,不断生成新的进程,这些进程称为init进程的子进程,反过来说init进程是这些进程的父进程。当然,这些子进程也可以进一步生成各自的子进程,依次不断繁衍下去,最终构成一棵枝繁叶茂的进程树,共同为用户提供服务。
       从以上描述可以看出,init进程正是维持整个Linux系统运行的所有进程的"始祖",因此init进程是不允许被轻易终止的。需要切换不同的系统运行状态时,可以向init进程发送正确的执行参数,由init自身来完成相关操作。
 
2.inittab配置文件
inittab文件位于/etc目录中,是init程序的配置文件。当init程序运行后,将按照etc/inittab文件指定的配置依次启动系统中对应的脚本和程序。若要查看inittab文件中的有效配置,可以结合grep命令和管道操作进行过滤。例如执行以下操作。
vINIT进程
     ■ 由Linux内核加载运行 /sbin/init 程序
     ■ 是系统中第一个进程,PID(进程标记)号永远为1
     ■ 配置文件:/etc/inittab
[root@localhost ~]# grep -v "^#" /etc/inittab | grep -v "^$"      <==去除注释行、空行
id:5:initdefault:
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
…… 
在引导Linux系统的过程中,“/sbin/init”是内核第一个加载的程序,因此init进程对应的PID号永远为“1”
init进程启动后会启动其它程序,生成新的进程,这些由init启动的进程称之为init进程的子进程,而init进程是这些进程的父进程
同样的这些子进程有可能启动其它程序生成新的进程,这些子进程与新进程之间也互为父子进程关系
 
inittab文件的结构
id:也称标记字段,由1~4个字符组成,用以区别于其他行的配置,所以id标记字段必须是唯一的
runlevels:运行级别字段,用于指定该记录在哪些运行级别中运行,取值数字0~6
➣   0:关机状态,使用该级别是将会关闭主机
➣   1:单用户模式,不需要密码验证即可登录系统,多用于系统维护
➣   2:字符界面的多用户模式(不支持访问网络)
➣   3:字符界面的完整多用户模式,大多数服务器主机运行在此级别
➣   4:未分配使用
➣   5:图形界面的多用户模式,提供了图像桌面操作环节
➣   6:重新启动,使用该级别时将会重启系统
action:动作类型字段,动作类型字段描述了该行配置所对应的操作类别,一般为固定值,较常用的类型如下:
➣   initdefault:设置初始化系统后默认进入的运行级别
➣   sysinit:设置系统初始化的操作脚本
➣   wait:init进程将等待该行配置所对应的脚本操作完成后,再继续执行其他操作
➣   ctrlaltdel:设置当用户按下Ctrl+Alt+Delete组合键后的操作
➣   powerfail:设置当系统收到断电信号(使用不间断电源)时采取何种动作
➣   powerokwait:设置当系统收到恢复供电信号时采取何种动作
➣   respawn:一旦该行配置所对应的进程被终止,则重新启动该进程
process:程序或脚本字段,此字段用于指定该行配置所对应的实际操作,可以是具体的命令、脚本程序等
 
v禁用热键重启功能
[root@localhost ~]# vi /etc/inittab
……
#ca::ctrlaltdel:/sbin/shutdown -t3 -r now
……
[root@localhost ~]# init q       <==重新读取inittab配置
 
v字符控制台
     ■ 通过/sbin/mingetty程序提供服务
[root@localhost ~]# grep "mingetty" /etc/inittab    <==提供6个字符控制台
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
 
v/etc/rc.d/rc.sysinit
     ■ 由init进程调用执行
     ■ 完成设置网络、主机名、加载文件系统等初始化工作 
[root@localhost ~]# grep ":sysinit" /etc/inittab
si::sysinit:/etc/rc.d/rc.sysinit 
[root@localhost ~]# head /etc/rc.d/rc.sysinit
#!/bin/bash
#
# /etc/rc.d/rc.sysinit - run once at boot time
#
# Taken in part from Miquel van Smoorenburg's bcheckrc.
#
HOSTNAME=`/bin/hostname`
HOSTTYPE=`uname -m`
unamer=`uname -r 
在初始化过程中运行的三个脚本文件所承担的角色:
rc.sysinit脚本:是init进程所调用的系统初始化脚本,文件全称是/etc/rc.d/rc.sysinit,rc.sysinit脚本主要完成包括设置网络、主机名、加载文件系统、设置时钟等一系列初始化工作(例如检查并启用磁盘配额功能就是在该脚本中完成的) 
 
vetc/rc.d/rc脚本文件
     ■ 由init进程调用执行
     ■ 根据指定的运行级别, 加载或终止相应的系统服务
[root@localhost ~]# grep "rc.d/rc " /etc/inittab
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
rc脚本:同样由init进程进行调用,文件全称是/etc/rc.d/rc。rc脚本通过指定不同的级别参数分别加载及终止不同的系统服务,进入到相应的系统运行级别。
 
v/etc/rc.local脚本文件
     ■ 由rc脚本调用执行
     ■ 保存用户定义的需开机后自动执行的命令
[root@localhost ~]# vi /etc/rc.d/rc.local
……
/sbin/hwclock --hctosys      <==Linux在每次启动后根据BIOS中的时钟自动校对系统时间
 
2.服务控制及优化启动过程
2.1 系统服务控制
v系统服务控制
     ■ 常用方式:
      ●  service  服务名称  控制类型
      ●  /etc/rc.d/init.d服务名称  控制类型
     ■ 控制类型
      ●  start:启动
      ●  stop:停止
      ●  restart:重新启动
      ●  reload:重新加载
      ●  status:查看服务状态
[root@localhost ~]# service crond     <==显示nfs服务可用的控制类型
Usage: nfs {start|stop|status|restart|reload|condrestart}
[root@localhost ~]# service crond status
crond (pid  3069) is running...      <==crond服务正在运行
 
2.2 切换运行级别
v查看运行级别
     ■ 使用runlevel命令,分别显示:
      ●  切换前的运行级别、当前运行级别
v临时切换运行级别
      ●  使用init命令结合0-6运行级别参数
[root@localhost ~]# runlevel
N 5       <==第一个字符为“N”表示之前未切换过运行级别
[root@localhost ~]# init 3
[root@localhost ~]# runlevel
5 3
[root@localhost ~]# init 6    <==重启系统
[root@localhost ~]# init 0    <==关闭系统
 
2.3 优化启动过程
v系统服务管理工具
     ■ ntsysv工具
      ●  提供一个交互式、可视化窗口
      ●  可以在字符终端运行
      ●  便于集中管理多个服务
     ■ chkconfig工具
      ●  不提供交互式、可视化窗口
      ●  管理单个服务效率更高
 
vntsysv系统服务管理工具
     ■ 格式:ntsysv
                ntsysv  --level  级别列表
ntsysv工具可以集中对所有系统服务进行设置,因此更加便捷
ntstsv操作:操作时按上下箭头键来选择不同的系统服务,按空格键来设置服务的默认启动状态(“[*]”表示启动,“[ ]”表示关闭)。如果想知道所选定服务的说明信息,按F1键可以获取帮助。
1)当需要设置个别服务在不同运行级别的启动状态时,选择使用chkconfig命令要更有效率
2)当需要同时设置大量服务的启动状态时,选择使用ntsysv配置工具要更加适合
 
v查看系统服务的启动状态
     ■ 格式:chkconfig --list
                chkconfig --list 服务名称
     ■ 服务脚本位置:/etc/init.d → /etc/rc.d/init.d
[root@localhost ~]# chkconfig --list network
network         0:关闭  1:关闭  2:启用  3:启用  4:启用  5:启用  6:关闭
[root@localhost ~]# chkconfig --list
acpid           0:关闭  1:关闭  2:关闭  3:启用  4:启用  5:启用  6:关闭
anacron         0:关闭  1:关闭  2:启用  3:关闭  4:启用  5:关闭  6:关闭
apmd            0:关闭  1:关闭  2:启用  3:启用  4:启用  5:启用  6:关闭
……
 
v设置系统服务的启动状态
     ■ 格式:chkconfig  --level  级别列表 服务名  on|off
[root@localhost ~]# chkconfig --level 2345 network on 
[root@localhost ~]# chkconfig --list network
network         0:关闭  1:关闭  2:启用  3:启用  4:启用  5:启用  6:关闭
 
 





posted @ 2015-05-26 19:17  Hello-Sky  阅读(500)  评论(0编辑  收藏  举报