cpu加电自检:power on system test(POST)
按照BIOS中的boot sequence读取磁盘MBR
BIOS中的信息存储在主板的CMOS存储芯片中,系统加电后会读取其中各项数据,包括系统启动后加载硬盘的顺序。
加载硬盘MBR中的boot loader
磁盘的每个扇区为512字节,每个磁盘的第一个扇区为磁盘的MBR,MBR中前446字节记录的是bootloader,bootloader中安装的是grub的stage1,用于指向grub主程序咋磁盘中的位置。开机加电之后,BIOS按照boot sequence找到对应磁盘,然后搜索该磁盘的MBR。
找到位于基本磁盘分区的grub程序,即进入stage2阶段,按照grub.conf配置文件对kernel以及initrd进行引导加载。
initrd解压后在内存中启动引导根目录所在的磁盘进行只读挂载
内核在grub的引导下解压载入内存,内核随即进行硬件探测、驱动程序初始化,然后引导initrd解压载入,initrd其实就是一个小型的linux系统它的作用是将在lvm或raid上根文件系统进行只读性挂载。
运行/sbin/init对系统进行初始化
根文件系统挂载之后,运行/sbin/init程序进行初始化。初始化过程按照其对应配置文件/etc/inittab进行。
/etc/inittab中的配置信息:
格式:
id:runlevel:action:process
id:标示符
runlevel:运行级别
action:对应运行级别所进行的操作
process:执行的命令
action的分类详解:
respawn:表示init程序对此process进行监控,即使此进程被终止也立即被启动;
wait:表示init进程只调用一次此process,并等待其结束后再进行下一步操作;
initdefault:表示系统运行后默认进入的运行级别;由于进入某个级别会默认开始执行对应级别的各种进程,故此处不定义process,如果此条记录不存在,在系统启动时会提示用户键入运行级别;
sysinit:系统启动时准备运行的命令,此命令直接指向系统启动后运行的第一个初始化脚本/etc/rc.d/rc.sysinint;
powerfail:表示当电源被切断后(有ups时)运行后面的process;
powerokwait:当电源监测发现电源恢复则执行后面的process;
ctrlaltdel:控制这三个组合键的功能;
rc.sysinit脚本实现功能介绍:
在init确定默认级别后即运行此初始化脚本,它的作用主要有以下几条:
n 激活udev和selinux;
n 通过读取/etc/sysctl.conf设置内核参数
n 设置系统时间
n 加载键盘映射
n 启用swap分区
n 设置主机名
n 检查根文件系统,并以读写方式重新挂载根文件系统
n 激活LVM和RAID设备
n 启动磁盘限额
n 挂载其他文件系统
n 清理过期文件锁和PID文件
/etc/rc.d/rc.sysinit这个脚本运行完毕,继续按照/etc/inittab中继续开启对应运行级别中的服务,这些服务有inittab中:
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
来定义,对应的rc0~6目录中是各需要开启服务的链接文件,S开头表示开启,K开头表示关闭。
所有服务开启之后,将执行respawn控制的进程:开启控制台。
开启对应运行级别的控制台,并始终监控控制台进程,一旦关闭将立即被开启。