RHEL系统启动流程
POST(加电自检):检测硬件
在CPU的控制下,将RAM芯片中的某个程序映射到ROM地址空间,并执行其中的指令完成系统硬件健康状况检查,例如存储设备、网卡、CPU、声卡等硬件设备是否完好。当检查完成后,所有硬件或基本硬件、核心硬件没有问题,则下一个启动流程BIOS
BIOS(Boot Sequence):决定启动介质
按照BIOS所设定的系统启动流程,根据引导次序(Boot Sequence)自上而下的寻找对应存储设备上操作系统的MBR(全称为Master Boot Record即硬盘的主引导记录),如果MBR存在,则会读取MBR中的bootloader
MBR(bootloader):寻找 grub,读取配置文件/etc/grub.conf,决定默认启动项
根据MBR所指引的活动分区上寻找系统分区中的 bootloader,bootloader称为是一段程序,占据446字节。在bootloader当中配置了所要引导操作系统的内核所在的位置,因此BIOS被载入内存以后,当它实现将控制权限转交给bootloader以后,bootloader接收整个系统的控制权限,而后根据用户的选择去读取相应操作系统中的内核,并将内核装载入内存的某个空间位置,解压缩,这时kernel就可以在内存中活动,并根据kernel本身功能在内存当中探索硬件并加载硬件驱动程序并完成内核初始化,bootloader会将控制权限转交给内核。
Kernel(初始化):内核会主动调用init进程,读取配置文件 /etc/inittab,决定启动级别,运行初始化脚本/etc/rc.d/rc.sysinit
探测硬件->加载驱动(initrd)->挂载根文件系统->rootfs(/sbin/init)
initrd就是一个虚拟的文件系统,里面有/、lib、bin、sbin、usr、proc、sys、var、dev、boot等一些目录,我们称之为虚拟的根文件系统,作用就是将kernel和真的根文件系统建立关联关系,让kernel去initrd中加载根文件系统所需要的驱动程序,并以读写的方式挂载根文件系统,并让执行用户当中第一个进程init。
/etc/inittab
/sbin/init启动会用到/etc/inittab所定义的条目,如:默认登陆级别id:3:initdefault:,
/etc/inittabt运行级别:
0 | halt | |
1 | single user mode(单用户维护模式) | |
2 | multi user mode, without NFS(不支持NFS功能) | |
3 | multi user mode, text mode(字符界面) | |
4 | reserved (系统保留) | |
5 | multi user mode, graphic mode (图形化界面) | |
6 | reboot (重启) |
系统初始化(/etc/rc.d/rc.sysinit)
检测,并以读写方式挂载根文件系统
设定主机名
检测并挂载/etc/fstab中其它文件系统
启动swap分区
初始化外围硬件设备驱动
根据/etc/sysctl.conf设定内核参数
激活udev和selinux
激活LVM和RAID设备
清理过期锁文件和PID文件
装载键映射-->键盘上每个键的功能
/etc/grub.conf文件说明
本文转自 justin_peng 51CTO博客,原文链接:http://blog.51cto.com/ityunwei2017/1310465,如需转载请自行联系原作者