LINUX系统的启动过程可以用下图来概述:
一、BIOS加电自检
加载bios的硬件信息,根据设定取得第一个可开机的引导。如:光驱、硬盘、网络、USB。
二、读取MBR中的bootloader就是grub引导
GRUB(GRand Unified Bootloader)是一个来自GNU项目的多操作系统启动程序。
MBR是硬盘的0柱面,0磁头,1扇区。称为主引导扇区(也叫主引导记录MBR)
MBR(512) = bootloader(446)+ 分区表(64) + 标示符 ‘55AA’(2)
为什么MBR分区表,只能分4个主分区?
答:分区表为64字节,一个分区占16个字节。刚好16*4=64
三、加载内核
依据bootloader中的设定,到主引导分区加载内核,内核会开始侦测硬件并加载驱动程序。
下图的步骤就停留在加载内核这一步.(还未加载)
四、执行init初始化程序
在硬件驱动成功后,内核会主动执行init程序,而init会获得run-level信息。
1、读取/etc/inittab配置文件
2、/etc/rc.d/rc.sysinit 文件来准软件执行的作业环境
/etc/rc.d/rc.sysinit shell脚本
作用:系统初始化。主机名、/etc/fstab、swap都在这里指定,完成了包括mount分区,激活swap 加载module等重要工作。
3、执行/etc/rc.d/rc#.d/下的脚本
init执行run-level下各个服务并启动(script 方式)
rc#.d(#为1到6)是对应不同的runlevel下起不同的服务,这些目录下都是一些符号连接,连接到/etc/rc.d/init.d下的一些文件。
以K开头表示开机不启动,以S开头开机启动。后面的数字代表启动的顺序。
init是顺序启动系统,需要一个一个服务启动成功,再执行下一步操作。centos7中的systemd可以并行启动多个服务,启动快。
4、执行开机后自动运行脚本/etc/rc.d/rc.local文件