引导过程和服务控制
引导过程和服务控制
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 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:关闭 |