1. CentOS6/7启动流程简述
1.1 启动流程简述
硬件启动流程 -> GRUB启动引导 -> 内核引导 -> 系统初始化 -> 启动终端。
1.1.1 硬件启动流程
设备上电后,BIOS进行初始化,开始POST自检,自检通过后,BIOS依照设置的启动顺序启动,如果第一启动项是硬盘,则BIOS进行引导并加载MBR中BootLoader。
a.打开电源
b.BIOS初始化
POST自检:检测硬件设备是否有影响正常开机的故障,如果不影响正常开机,则自检通过。
确定启动设备:根据BIOS设置的启动顺序,依次检测启动项,如果硬盘是第一启动项,则BIOS读取硬盘的前512字节(第一扇区-MBR)到内存,引导并加载BootLoader。
c.执行MBR中的BootLoader:(这里只考虑MBR分区,暂不考虑GPT分区)。
MBR:Main Boot Record:主引导记录,共512字节。由BootLoader(主引导程序,446字节),DPT(硬盘分区表,64字节),硬盘有效标志(2字节)组成。
BootLoader:负责从活动分区中装载并运行系统引导程序。CentOS6为grub,CentOS7为grub2,Win10为Bootmgr。
DPT:4个分区表项,每个分区表16个字节,记录每个分区信息,所以MBR分区的硬盘最多四个分区。
硬盘有效标志:MBR分区固定为0xAA55。
1.1.2 GRUB启动引导阶段
grub程序加载执行并引导kernel程序。
CentOS6:
a.Stage1阶段:Stage1阶段是写在BootLoader里的,主要作用是加载硬盘的512-1024字节(第二扇区)到内存中,引导进入Stage1.5或Stage2阶段,该阶段还不能识别文件系统。
b.Stage1.5阶段:Stage1.5阶段是写在硬盘的第二扇区(文件系统格式文件的前512字节),连接Stage1阶段和Stage2阶段,该阶段可以识别文件系统,使得grub程序能够访问/boot/grub目录下的Stage2文件,并将Stage2加载到内存中执行。
c.Stage2阶段:解析并执行/boot/grub目录下的配置文件grub.conf文件,然后将内核镜像加载到内存中,通过initrd程序建立RAMDisk虚拟根文件系统,最后将控制权转交给内核程序。
CentOS7
a.加载boot.img:boot.img也是写在BootLoader里的,主要作用是加载core.img的第一扇区。
b.加载core.img:core.img是由diskboot.img(硬盘启动、core.img的第一扇区)、kernel.img(grub的内核,非OS的内核)和大量动态模块文件组成。
c.加载grub2程序、解析并执行/boot/grub/grub.cfg文件,加载内核镜像到内存中,建立虚拟根文件系统,转交内核引导。
1.1.3 内核引导阶段
通过内存中的虚拟根文件系统,加载驱动,然后加载并切换根文件系统,切换完成后执行系统初始化程序。
a.调用虚拟根文件系统中的init程序。
b.加载基本硬件驱动并配置,是内核能够识别并加载根目录的桥梁。
c.根据grub.conf/grub.cfg中的"root=…"创建一个根设备,将根文件系统以只读方式挂载至根设备,然后加载并切换真正的根文件系统。
CentOS6
d.调用/sbin/init程序。
CentOS7
d.调用/usr/lib/systemd/systemd程序。
1.1.4 系统初始化阶段
通过初始化程序确认运行级别,初始化软件运行环境,加载系统服务。
CentOS6
a.确认登录级别:读取/etc/inittab文件。0-6共7个启动级别,3是文本界面,5是图形界面。
b.初始化用户空间环境:执行/etc/rc.sysinit程序初始化软件运行环境。如挂载所有在/etc/fstab定义的文件系统等。
c.加载系统服务:执行/etc/rc.d/rc${runlevel}.d文件,根据运行级别加载和停止服务;执行/etc/rc.local文件加载用户自定义服务等。
CentOS7
a.执行默认target文件:执行默认target配置文件/etc/systemd/system/default.target,该文件与运行级别相关。
b.执行依赖的target文件:default.target -> graphical.target or multiuser.taret;graphical.target -> multiuser.taret -> basic.target -> sysinit.target。
c.加载系统服务:启动multiuser.taret下本机服务及执行/etc/rc.local文件加载用户自定义服务等。
1.1.5 启动终端
启动终端,用户登录shell。
a.启动终端:默认打开6个shell终端,验证用户名密码,启动用户指定的shell。
b.启动桌面:运行级别为5时,打开X-window。
参考:
https://blog.51cto.com/zhang789/1851675
https://www.cnblogs.com/diantong/p/10745372.html