centos7系统启动流程:
1.uefi或BIOS初始化,开始post(power on self test)开机自检
开机前硬件检查
这个过程是开机后,BIOS或UEFI进行硬件检查的阶段,检查内存,硬盘,CPU等硬件信息。
2. 加载MBR到内存
加载磁盘主引导记录到内存
自检硬件没有问题时候,这里以BIOS为例,BIOS将会直接找硬盘的第一个扇区,找到前446字节,将MBR加载到内存中,MBR将告诉程序下一阶段去哪里找系统的grub引导。此阶段属于grub第一阶段。grub还有1.5阶段和2阶段。
- MBR概述:全称为Master Boot Record,即硬盘的主引导记录;是位于磁盘最前边的一段引导(Loader)代码。它负责磁盘操作系统(DOS)对磁盘进行读写时分区合法性的判别、分区引导信息的定位,它由磁盘操作系统(DOS)在对硬盘进行初始化时产生的。
1.主引导程序即主引导记录(MBR)(占446个字节)
可在FDISK程序中找到,它用于硬盘启动时将系统控制转给用户指定的并在分区表中登记了的某个操作系统。
2.磁盘分区表项(DPT,Disk Partition Table)
由四个分区表项构成(每个16个字节)。
负责说明磁盘上的分区情况,其内容由磁盘介质及用户在使用FDISK定义分区时决定。(具体内容略)
3.结束标志(占2个字节)(魔数)
其值为AA55,存储时低位在前,高位在后,即看上去是55AA(十六进制)。
3. GRUB阶段
grub引导阶段
grub第1.5和第2阶段,信息默认存放在扇区中,如果使用grub-install生成的第2阶段的文件是存放在/boot分区中的。
为了加载内核系统,不得不加载/boot分区,而加载/boot分区,要有/boot分区的驱动,/boot分区驱动是放在/boot分区中的啊,我们好像进入死循环了,Linux是怎么解决的呢?就是靠放在1.5阶段中的数据,放在第一个扇区后的后续扇区中,第1.5阶段和2阶段总共27个扇区。
第1.5阶段:mbr之后的扇区,识别stage2所在的分区上的文件系统。
第2阶段:开机启动的时候看到Grub选项、信息,还有修改GRUB背景等功能都是stage2提供的,stage2会去读入/boot/grub/grub.conf或者menu.lst等配置文件。
4. 加载内核和initramfs
引导内核阶段
加载内核,核心开始解压,启动一些最核心的程序。
为了让内核足够的轻小,硬件驱动并没放在内核文件里面。
kernel内核开始初始化,用systemd来代替centos6以前的init程序
先执行initrd.target
包括挂载/etc/fstab文件中系统,挂载之后,就可以切换到根目录了。
从initramfs根文件系统切换到磁盘的根目录
systemd执行默认target配置
centos7表面有“运行级别”这个概念,实际是为了兼容以前的系统,每个所谓“运行级别”都有对应的软连接指向,默认的启动级别/etc/systemd/system/default.target,根据它的指向可以找到系统要进入到哪个模式。
模式:
0 ==> runlevel0.target, poweroff.target
1 ==> runlevel1.target, rescue.target
2 ==> runlevel2.target, multi-user.target
3 ==> runlevel3.target, multi-user.target
4 ==> runlevel4.target, multi-user.target
5 ==> runlevel5.target, graphical.target
6 ==> runlevel6.target, reboot.target
5. systemd阶段
systemd阶段开启服务
systemd执行sysinit.target
systemd启动multi-user.target下的本机与服务器服务
systemd执行multi-user.target下面的/etc/rc.d/rc.local
Systemd执行multi-user.target下的getty.target及登录服务
getty.target我们也眼熟,它是启动终端的systemd对象。如果到此步骤,系统没有指定启动图形桌面,到此就可以结束了,如果需要启动图形界面,要在此基础上启动桌面程序。
systemd执行graphical图形化需要的服务
至此系统启动完成,可以正常使用。