系统启动流程介绍
一、主要的启动流程
1、BIOS
检测所有外置设备:如显示器,内存的数量,硬盘等;
寻找启动磁盘:接着会依据
BIOS的设置,去寻找启动磁盘,通常是cdrom-硬盘-PXE
2、启动加载器
寻找硬盘的第一个扇区,也就是主要启动记录(
Master Boot Record,MBR)如果主要启动扇区中没有存储都操作系统,则寻找磁盘中标注为启动分区(Boot Partition)的第一个扇区中的操作系统。
不管是主要启动记录扇区,还是启动分区中的第一个扇区,存储操作系统的空间都只有
446字节。
3、启动内核
如果启动的是
Linux系统,那么启动加载器可以在启动Linux内核时,传递一些参数参linux内核,以便内核能够改变启动方式,或者取得启动时要的信息。
Linux内核启动时会执行如下操作:
a、检测所有硬件设备
b、驱动硬件设备
c、以只读的方式挂载根文件系统
根文件系统中至少需包含下面几个目录:
/etc/:存储重要的配置文件
/bin/:存储常用且开机时必须用到的执行文件
/sbin/:这个目录存储着开机过程中所需的系统执行文件
/lib/:存储
/bin与 /sbin的执行文件所需的链接库,以及Linux内核模块
/dev/:存储设备文件
/etc/、
/bin/、/sbin/、/lib/、/dev/ 5大目录必须存储在根文件系统上,缺一不可
挂载根文件系统的目的有以下两个:
a、安装适当的内核模块,以便驱动某些硬件设备或启用某些功能
b、启存储于根文件系统中的
init服务,以便让init服务接手后续的启动工作
4、启动
init服务
a、找
/sbin里否有init 服务
b、
/etc/init
c、
/sbin/init
d、如果都找不到,最后就执行
/bin/sh
如果到最后内核还是找不到
init服务,rhel内核就会显示”Kernel panic not syncing:Attempted to kill init !”然后中止工作,内核再悄悄地死去。
5、执行
init服务
启动
init服务的目的,是让服务来初始化rhel系统环境,init启动后,就代表rhel已经顺利地启动了Linux内核,接着就由init服务来建立rhel的使用环境,整个系统启动工作就进入了另外一个阶段,初始化系统环境。
二、初始化系统环境
1、
/etc/rc.d/rc.sysinit
/etc/rc.d/rc/sysinit主要的工功能是设置系统的基本环境,当
init服务执行rc.sysinit时,会执行下面几项工作:
Udev与
selinux 子系统:
udev负责管理/dev/中的设备文件,selinux则可以增强rhel系统的安全性;
设置内核参数:
rc.sysinit会执行sysctl –p,以便从/etc/sysctl.conf设置rhel内核参数;
设置系统时间:
rc.sysinit会将硬件时间设置成rhel的系统时间;
加载键盘对应表:
rc.sysinit会加载键盘对应表,以便让你可以正确地输入文件,符号;
启用置换内存空间:
rc.sysinit会执行swapon –a –e命令,以便根据/etc/fstab设置启用所有的交换内存空间
设置主机名:会根据
/etc/sysconfig/network的HOSTNAME参数设置rhel的主机名
检查并挂载所有文件系统:
rc.sysinit会检查所有需要挂载的文件系统,以确保这些文件系统的完整性
初始化硬件设备:定义
/etc/modprobe.conf的模块,ISA Pnp的硬件设备,USB等
启用软件磁盘阵列与
LVM:
rc.sysinit也会启用所有的磁盘阵列,以及LVM磁盘设备
如有必要,卸载
/initrd/:
rc.sysinit会视情况卸载除始化内存磁盘,以节省更多的内存空间
清除过期的锁定文件与
IPC文件:
重新设置磁盘参数:根据
/dev/sysconfig/harddisk device配置文件重新设置该device设备的磁盘参数
2、
/etc/rc.d/rc
/etc/rc.d/rc这个
Script则用来建立Runlevel的环境, rhel借助/etc/rc.d/rc来启动或者停止不同Runlevel中的服务。
3、
/etc/rc.d/rc.local
/etc/rc.d/rc.local是整个启动过程中唯一一个可以修改的
RC Script,如果你希望在rhel启动过程中执行某些命令,或者执行某些工作的话,那么你就可以把这些工作的命令写在这个文件里
三、执行等级
自定义的
runlevel:
Runlevel0 :runlevel0 代表要开始关闭
rhel了,会进行关闭所有可登录的虚拟控制台,
结束所有启动的服务,卸载所有文件系统,停止所有的外围设备;
Runlevel1:runlevel1 会进行关闭所登录的虚拟控制台,关闭网络,关闭大部分的服务与应该程序;
Runlevel 2:runlevel2 会启动网络,以及大部分的网络服务,并开启所有的白控制台,允许本机用户登录
rhel,但是不允许域用户登录你的rhel,不会启动网域功能的服务器和客户端服务;
Runlevel 3:runlevel3 开启可登录虚拟控制台,启用本机帐号与域帐号,开启网络联机,启动所需的网络服务,不会启动
X windows System
Runlevel 4:runlevel4 目前为保留,你可以自行定义
runlevel4
Runlevel5: runlevel5 相当于
runlevel3 加上图开模式,也就是说会执行runlevel3相同的工作,加上启动X windows System
Runlevel6 :runlevel6 代表
rhel需要重启
各种
runlevel 比较表:
Runlevel
简述
可登录用户数
网络
图形模式
0
关机
无
1
单人模式
只有
root
2
多人模式
只有本机用户
ü
3
完整多人模式
本机用户
+域用户
ü
4
保留
本机用户
+域用户
ü
5
图形模式
本机用户
+域用户
ü
6
重启
无
ü
ü
1、查看目前系统的
runlevel
[root@linux ~]#runlevel
现在我处于
runlevel3中
2、切换至不同的
runlevel
在启动引导器中加载
开机后使用
init切换
使用
telinit工具切换
四、管理
init服务
1、init服务的介绍
建立系统使用环境
确保系统正常运行
监控串行端口的周边设备
拦截并处理【
ctrl+Alt+delete】事件
PID永远为
1
无法被系统管理者中止
2、配置
init服务
Init服务的配置文件
/etc/initab
字段说明
字段
说明
ID
Init服务参数的识别名称,由
1~4个字符组成
RUNLEVELS
代表在哪些
runlevel要调用这个参数
ACTIONS
Init服务执行程序的方法
PROCESS
要执行的程序文件迪,这个字段定义的名称必须是绝对路径
Inittab中的
4个字段,比较重要的是ID字段,如表:
字段
说明
Id
Rhel默认的
runlevel,当rhel启动时,没有指定进入那个runlevel时,或者结束runlevel shell时,rhel会自动进入默认的runlevel
Si
系统初始化要执行的程序,
rhel启动时会执行rc.sysinit,就是si参数定义的
10~16
进入不同的
runlevel时要执行的动作,10代表runlevel0,11代表runlevel1,依次类推
Ca
当拦截【
ctrl+alt+del】事件是要做什么,默认是重新启动的
Pf
电源失效时要执行的动作
Pr
电源恢复时要执行的动作
N
配置第
N号控制台的方法,N为虚拟控制台的编号
X
启动
X windows system的显示管理员DM的方法
3、重新启动
init服务
有
3种方法可以重新启动init服务:
重新启动
redhat enterprise linux,init服务启动时会读取/etc/inittab配置文件,以调用新的配置数据
传送
SIGhUP信号给init进程,当init接收到SIGHUP信号时会重新读取配置文件
执行
init q或telinit q进程
五、管理启动加载器
1、关于
grub
GRUB是
GNU的一项诚品,其设计的目标是作为GNU操作系统的启动加载器,GRUB除了可以用来启动GNU操作系统外,还可以启动员各种操作系统,当然也包括rhel系统。
GRUB具备下列几项特性:
修改过配置文件后,无须重新安装
可存储
MD5加密过的密码
2、使用
grub
当你使用
grub作为系统的启动加载器启动rhel时,将看到如图:
Grub默认倒数
5秒后,自动启动默认的操作系统,如果你要启动非默认的操作系统,那么一定要在这个画面按下任意键,才能中止grub的倒数计时。
中止了
grub操作后, grub会在屏幕上显示如下图所示的菜单,让你选择你要启动那一个操作系统,你可以使用前头键,移动菜单中的光标到要启动的操作系统后。然后按下【enter】键,grub就会启动你所选择的操作系统,不过当你中止grub启动默认操作系统后,grub会静静等待你的选择,直到你按下【enter】键
在
grub的菜单画面中,你可以使用下表中的按键修改grub的操作系统参数
按键
说明
e
编辑选择操作系统的相关设置
使用
e按键时,GRUB会让你编辑该操作系统的全部设置
a
在启动该操作系统前,让你修改操作系统的启动参数
与
e键不同的是,a按键只会让你修改加在操作系统内核image的启动参数
c
直接开启一个指令列,来编辑操作系统的设置
下图是我编辑我的
rhel操作系统的画面:
在图所示的下方,提醒你可以使用下表中的按键:
按键
说明
b
启动这个操作系统
e
编辑光标所在位置
c
直接开启一个命令行来编辑该设置
o
新增一行设置
d
删除选择的位置
esc
回到上一级菜单
3、配置
grub
Grub的配置文件在
/boot/grub/grub.conf中而非/etc,因为grub在启动操作系统时才会读取配置文件,如果不小心删除了,会导致grub在启动时找不到配置文件,面造成rhel启动失败,以下是我的/boot/grub/grub.conf文件
常见的
GRUB全局参数
参数
说明
Default=NUM
默认的操作系统编号
NUM为操作系统的索引值
(index),也就是从0开始数字,因此第一个操作系统的NUM为0,第二个为1…
Timeout=SECONDS
用户选择操作的超时时间,
SECONDS单位为秒,如果用户没有选择操作系统,在SECONDS时间到达时,GRUB将会直接启动默认的操作系统
Splashimage=FILE
指定
GRUB后台图文件
Hidemenu
要求
GRUB启动的时候隐藏菜单
如果你希望
GRUB启动时显示操作系统的菜单,可以把这个参数注释掉
Grub配置文件定义的参数:
参数
说明
Title TITLESTR
用来作为显示名称,
TITLESTR则是显示名称
Root DEVICE
启动的磁盘设备,注意必须是内核存放的分区,
rhel会把linux内核安装到/boot/目录中,因此,DEVICE通常为存储在/boot/目录的分区
Kernel FILENAME
Linux内核镜像文件名,
FILENAME为内核镜像文件名
Initrd FILENAME
内核的初始化内存磁盘镜像文件名,
FILENAME为初始化内存磁盘镜像文件名
4、安装
grub
重新安装
grub请使用grub-install工具:
grub-install DEVICE 其中
DEVICE要安装的设备,如果DEVICE是一个硬盘,则GRUB就会被安装到该硬盘的主要启动记录扇区(Master Boot Recond,MBR),如果DEVICE是一个分区,GRUB就会被安装到该分区的启动扇区(Boot Sector)
以下是我把
grub安装到我的/dev/sda硬盘分区上
5、设置
grub密码
密码的类型:
启动参数密码:当用户试图去修改
GRUB启动参数时,GRUB会要求用户提供此密码,只有密码正确时,GRUB才会开启修改GRUB启动参数的菜单
操作系统启密码:当用户启动某一个操作系统时,
GRUB会要求用户提供密码,如果密码不正确,GRUB就不会启动该操作系统
这是我用
grub-md5-crypt工具产生的一个经MD5加密后的密码文字
把用
grub-md5-crypt工具产生的md5加密密码粘到这里,这是GRUB启动参数密码,password后必须批定是md5
启动该操作系统所需的密码
这里需要输入刚才生成的
md5密码
启动系统时需要输入密码