目录
启动总览
1、BIOS加电自检和初始化
计算机会首先加载BIOS信息,这是因为BIOS中包含了CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息等等。
2、加载主引导加载程序(MBR)
Master Boot Record,即主引导记录,它的大小是512字节,里面却存放了预启动信息、分区表信息。主引导程序的任务就是查找并且加载处在硬盘分区上的次引导程序。通过分区表查找活动分区,并将处在活动分区的次引导加载程序读取到内存里面运行。
3、Boot loader/GRUB
boot loader就是在操作系统内核运行之前执行的的一段小程序。通过这段小程序,可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,为加载内核做准备。常见的boot loader有Grub、Lilo和spfdisk
4、加载linux内核映像
用户选择要加载的内核之后,次引导加载程序(GRUB)就会根据/boot/grub.conf配置文件中所设置的信息,从/boot/所在的分区上读取Linux内核映像,然后把内核映像加载到内存中并把控制权交给Linux内核。
linux内核获得控制权之后开始做一下事情:
- (1)检测硬件
- (2)解压缩自己并安装必要驱动
- (3)初始化与文件系统相关的虚拟设备
- (4)装载根文件系统,挂在根目录下面
- (5)完成之后,linux在进程空间里面加载systemd程序
5、运行INIT进程(RHEL7为systemd进程)
这也是个初始化过程,在硬件和驱动加载完成后,内核会主动呼叫systemd程序,systemd是所有进程的发起者和控制者,所有的进程都由此衍生。systemd进程获得控制权之后,它会执行/etc/rc.d/rc.sysinit脚本,根据里面的代码设置环境变量、网络、启动swap、检查并挂载文件系统、执行其他初始化工作。
INIT进程:
是由Linux内核加载运行/sbin/init 程序;是系统中第一个进程,PID(进程标记)永远为1。
配置文件为:/etc/inittab
id:3:initdefault:sisysinit:/etc/rc.d/rc.sysinit
I0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
#以下6行定义了6个终端,通过/sbin/minggetty程序提供服务。
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
Inittab文件结构:该文件的结构如下所示,
ID:Runlevel:Action:Process
ID:用于在Inittab文件中唯一表示一个配置记录,对于Getty和或minggetty等其他login程序项,要求ID与tty编号相同,否则Getty程序将不能正常工作。
Runlevel:用来指定该记录在那些运行级别上运行·,一般使用0一6以及S或s。S和s意义相同,表示单用户模式,且无需inittab文件,因此也不在inittab中出现,实际上,进入单用户模式时,init直接在控制台(/dev/console)上运行/sbin/sulogin。
- 0:关机
- 1:单用户模式
- 2:无网络支持的多用户模式
- 3:有网络支持的多用户模式
- 4:保留,未使用
- 5:有网络支持有X-Window支持的多用户模式
- 6:重新引导系统,即重启
Action:用来描述将用来执行哪种类型的动作
Process:用于设置启动进程所执行的命令。
rc.sysinit文件
/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脚本文件
/etc/rc.d/rc脚本文件;由Init进程调用执行,根据指定的运行级别,加载或终止相应的系统服务
I0: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/rc4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6
rc.local脚本文件
/ect/rc.local;由rc脚本执行,保存用户自定义的开机后自启的的命令
6、自定制启动程序
/etc/rc.localrc.local就是在一切初始化工作后,Linux留给用户进行自己定制开机启动的地方。你可以把你想设置和启动的东西放到这里。