CentOS7启动流程

系统

第一步 硬件启动阶段

这一阶段流程:打开电源;POST自检;BIOS逐一排查设备启动顺序;如果是硬盘启动,读取硬盘的MBR的BootLoader。(这里默认MBR分区,暂不考虑GPT分区)

这里主要有三个需要了解的地方:BIOS启动顺序、MBR和BootLoader。

(1)BIOS启动顺序,一般含有光驱、U盘、硬盘A、硬盘B。按次序查找各引导设备,第一个有引导程序的设备即为本次启动用到设备。

(2)MBR(Main Boot Record),是硬盘的0柱面,0磁道、1扇区(第一个扇区),称为主引导扇区,也称为主引导记录。它由三部分组成(BootLoader)、硬盘分区表DPT(Disk Partition table)和硬盘有效标志(55AA)。

注:硬盘默认一个扇区大小为512字节。

第一部分:主引导程序(BootLoader)占446个字节,负责从活动分区中装载,并运行系统引导程序。

第二部分:硬盘分区DPT占64个字节,有4个分区表项,每个分区表项占16个字节,硬盘中分区有多少以及每一个分区的大小都记录在其中。

第三部分:硬盘有效标志,占2个字节,固定位55AA。如果这个标志位0xAA55,就认为这个是MBR。

(3)BootLoader

不同的系统有不同的主引导程序(BootLoader)。Windows使用的是NTLDR(NT Loader,Windows NT系列操作系统)、Bootmgr(Boot Manager,Windows Vista,7,8,10),Linux一般使用的是grub(也叫grub legacy)和grub2。

第二步 GRUB2引导阶段

从这一步开始,CentOS6和CentOS7的启动流程区别开始展现出来。CentOS7的主引导程序使用的是grub2。

这一步流程:显示加载两个镜像,再加载MOD模块文件,把grub2程序加载执行,接着解析配置文件/boot/grub2/grub.cfg,根据配置文件加载内核镜像到内存,之后构建虚拟根文件系统,最后转到内核。

在这里grub.cfg配置文件已经比较复杂了,但并不用担心,到了CentOS7种一般是使用命令进行配置,而不直接去修改配置文件。不过我们可以看到grub.cfg配置开头:

# It is automatically generated by grub2-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub

说明了由/etc/grub.d目录下文件和/etc/default/grub文件组成。

一般修改好配置后,都需要使用命令 grub2-mkconfig -o /boot/grub2/grub.cfg,将配置文件重新生成。

第三步 内核引导阶段

这一步流程:通过内存中的虚拟根文件系统,加载驱动,然后切换到真正的根文件系统,并执行/sbin/init程序。

第四步 systemd初始化阶段(又叫系统初始化阶段)

CentOS7中,初始化进程变为了systemd。执行默认target配置文件/etc/systemd/system/default.target(这是一个软链接,与默认运行级别有关)。然后执行sysinit.target(/usr/lib/systemd/system/sysinit.target)初始化系统和basic.target(/usr/lib/systemd/system/basic.target)来准备操作系统。接着启动multi-user.target(/usr/lib/systemd/system/multi-user.target)下的本机与服务器服务,并检查/etc/rc.d/rc.local文件是否有用户自定义脚本需要启动。最后执行multi-user下的getty.target及登录服务,检查default.target是否有其他的服务需要启动。

注意:/etc/systemd/system/default.target指向了/lib/systemd/system/目录下的graphical.target或multi-user.target。而graphical.target依赖multi-user.target,multi-user.target依赖basic.target,basic.target依赖sysinit.target,所以倒过来执行。

System概述:systemd即为system daemon,是Linux下的一种init软件,开发目标是提供更优秀的框架以表示系统服务间的依赖关系,并依此实现系统初始化时服务的并行启动,同时达到降低Shell系统开销的效果,最终代替现在常用的System V与BSD风格的init程序。

与多数发行版使用的System V风格的init相比,systemd采用了一下新技术:① 采用Socket激活式与总线激活式服务,以提高相互依赖的各服务的并行运行性能;② 用Cgroup代替PID来追踪进程,即使是两次fork之后生成的守护进程也不会脱离systemd的控制。

unit对象:unit表示不同类型的systemd对象,通过配置文件进行标识和配置;文件主要包含了系统服务、监听socket、保存的系统快照以及其他init相关的信息。(也就是CentOS6中的服务器启动脚本)

  1. /etc/systemd/system/default.target

这是一个软链接,和默认运行级别有关

[root@k8s-master ~]# ll /etc/systemd/system/default.target
lrwxrwxrwx. 1 root root 37 Mar 7 2019 /etc/systemd/system/default.target -> /lib/systemd/system/multi-user.target

我们可以到这个目录下看看

[root@k8s-master system]# cd /lib/systemd/system/
[root@k8s-master system]# ls *.target
basic.target           default.target    hibernate.target           kexec.target           network.target          reboot.target             runlevel0.target  shutdown.target   suspend.target
bluetooth.target       emergency.target  hybrid-sleep.target        local-fs-pre.target    nfs-client.target       remote-cryptsetup.target  runlevel1.target  sigpwr.target     swap.target
cloud-config.target    final.target      initrd-fs.target           local-fs.target        nss-lookup.target       remote-fs-pre.target      runlevel2.target  sleep.target      sysinit.target
cloud-init.target      getty-pre.target  initrd-root-fs.target      machines.target        nss-user-lookup.target  remote-fs.target          runlevel3.target  slices.target     system-update.target
cryptsetup-pre.target  getty.target      initrd-switch-root.target  multi-user.target      paths.target            rescue.target             runlevel4.target  smartcard.target  timers.target
cryptsetup.target      graphical.target  initrd.target              network-online.target  poweroff.target         rpcbind.target            runlevel5.target  sockets.target    time-sync.target
ctrl-alt-del.target    halt.target       iprutils.target            network-pre.target     printer.target          rpc_pipefs.target         runlevel6.target  sound.target      umount.target

可以看得到runlevel开头的target文件,对应着CentOS6的启动级别,不过一样是软链接,指向了同目录下的其他文件。

[root@k8s-master system]# ll runlevel*.target
lrwxrwxrwx 1 root root 15 Mar 25 17:04 runlevel0.target -> poweroff.target
lrwxrwxrwx 1 root root 13 Mar 25 17:04 runlevel1.target -> rescue.target
lrwxrwxrwx 1 root root 17 Mar 25 17:04 runlevel2.target -> multi-user.target
lrwxrwxrwx 1 root root 17 Mar 25 17:04 runlevel3.target -> multi-user.target
lrwxrwxrwx 1 root root 17 Mar 25 17:04 runlevel4.target -> multi-user.target
lrwxrwxrwx 1 root root 16 Mar 25 17:04 runlevel5.target -> graphical.target
lrwxrwxrwx 1 root root 13 Mar 25 17:04 runlevel6.target -> reboot.target
  1. /usr/lib/systemd/system/

这个目录存储每个服务的脚本,类似CentOS6的/etc/init.d/。

  1. /run/systemd/system/

系统执行过程中产生的脚本。

总结:

  1. UEFI或BIOS初始化,运行POST开机自检
  2. 选择启动设备,Boot Sequence系统启动次序一般含有:光盘、U盘、硬盘A、硬盘B。按次数查找各引导设备,第一个有引导程序的设备即为本次启动用到设备。
  3. 引导装载程序,加载/boot分区文件系统驱动
  4. 加载装载程序的配置文件:/etc/grub.d/ /etc/default/grub /boot/grub2/grub.cfg
  5. 加载initramfs驱动模块和内核vmlinuz,initramfs是基于内存的文件系统
  6. 内核初始化,centos7使用systemd代替init
  7. 执行initrd.target所有单元,包括挂载/etc/fstab
  8. 从initrd.target跟文件系统切换到磁盘根目录
  9. systemd执行默认target配置,配置文件/etc/systemd/system/default.target
  10. systemd执行sysinit.target初始化系统以及basic.target准备操作系统
  11. systemd启动multi-user.target下的本机与服务器服务
  12. systemd执行multi-user.target下的/etc/rc.d/rc.local
  13. systemd执行multi-user.target下的getty.target及登录服务
  14. systemd执行graphical需要的服务

更简洁的表述:① 加电自检;② BIOS启动引导阶段;③ grub2菜单;④ kernel加载系统内核信息;⑤ 运行systemd进程;⑥ 运行mingetty进程。

补充:CentOS7运行级别,共7个级别

init level级别目标单元
0系统关机级别,系统默认的运行级别不能设置为0,否则不能正常启动。init 0 进行关机。poweroff.target
1单用户模式级别。root 权限,用于系统维护(或修复系统,或重置系统密码信息),禁止远程登录。该运行级别是没有网络的。rescue.target
2多用户模式级别。该级别下没有NFS和网络的支持。multi-user.target
3完整的多用户文本模式级别。登录后进入到控制台命令行模式。multi-user.target
4预留级别。该级别系统未使用。multi-user.target
5图形化模式级别。登录后进入图形GUI模式。graphical.target
6系统重启级别。默认运行级别不能设置为6,否则系统不能正常启动。init 6 系统会重启。reboot.target

参考链接:

https://zhuanlan.zhihu.com/p/579714305

https://blog.csdn.net/weixin_42688499/article/details/127905081

https://blog.csdn.net/qq_40880022/article/details/119839142

https://www.cnblogs.com/diantong/p/10745372.html

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注