查看原文
其他

服务管理和启动流程(4)-启动流程

Cloud研习社 Cloud研习社 2023-06-06


每周二、四、六定期更新!


企业面试题:

    请口头描述linux系统的开机到登录页面的启动过程。

我们针对上面这个问题开始本节的知识讲解。

了解开机过程可以帮助我们在操作系统启动出问题的时候更好的去定位问题所在并针对问题进行解决。

按下电源开机键以后,计算机会自动的读取BIOS来加载硬件信息并对硬件进行检查,在这之后,计算机会根据BIOS指定的第一个引导设备(即启动设备,通常为硬盘)去该设备上查找开机管理程序。开机管理程序中指定使用哪个文件来开机并加载内核到内存中解压缩、执行,这个内核的执行动作就是检查硬件、加载驱动程序,这样就准备好了操作系统,随后,操作系统会根据配置启动需要开机启动的应用程序,这个动作完成后,我们就可以看到系统的登录页面了。我们汇总一下这个流程:

1.开机BIOS自检

开机以后,计算机自动读取BIOS加载硬件信息并检查计算机硬件,检查完成后找到第一个引导设备

2.MBR引导

    从第一引导设备的MBR中找到开机引导程序(英文叫boot loader)【一般是硬盘0柱面0磁道1扇区的前446byte】。centos7里用的引导程序是grub2

3.加载内核kernel

根据BootLoader的配置加载内核,然后内核开始识别硬件设备并加载相应的驱动。

4.启动systed进程

   驱动加载完成后,kernel会启动systemd进程(这也是系统的第一个守护进程),并根据默认的运行级别(default.target)开机:

  • 执行sysinit.target和basic.target准备操作系统
  • 启动default.target的其他相关服务
  • 启动getty.target,这是系统登录服务
  • 如果有图形页面,这时候还需要启动graphical服务
    下面我们看看每个阶段到底做了什么,用一张图表示:


硬件启动流程


硬件启动阶段和centos6基本一致。简单说一下这一步的流程:打开电源;POST自检;BIOS逐一排查设备启动顺序;如果是硬盘启动,读取硬盘的MBR的BootLoader。(这里默认MBR分区,暂不考虑GPT分区)  这里主要有两个需要了解的地方MBR和BootLoader。(1).MBR  MBR(Main Boot Record),是硬盘的0柱面,0磁道、1扇区(第一个扇区),称为主引导扇区,也称为主引导记录。它由三部分组成:主引导程序(BootLoader)、硬盘分区表DPT(Disk Partition table)和硬盘有效标志(55AA)。  注:硬盘默认一个扇区大小为512字节。  第一部分,主引导程序(BootLoader)占446个字节,负责从活动分区中装载,并运行系统引导程序。  第二部分,硬盘分区表DPT占64个字节,有4个分区表项,每个分区表项占16个字节,硬盘中分区有多少以及每一个分区的大小都记录在其中。  第三部分,硬盘有效标志,占2个字节,固定为55AA。如果这个标志位0xAA55,就认为这个是MBR。(2).BootLoader  不同的系统有不同的主引导程序(BootLoader)。Linux一般使用的是grub(也叫grub legacy)和grub2。  CentOS6一般使用的是grub。GRUB(GRand Unified Bootloader)是一个来自GNU项目的多操作系统启动程序。


grub2引导阶段



从这一步开始,CentOS6和CentOS7的启动流程区别开始展现出来了。CentOS7的主引导程序使用的是grub2。  简单说一下这一步的流程:首先加载两个镜像,再加载MOD模块文件,把grub2程序加载执行,接着解析配置文件/boot/grub/grub.cfg,根据配置文件加载内核镜像到内存,之后构建虚拟根文件系统,最后转到内核。  在这里grub.cfg配置文件已经比较复杂了,但并不用担心,到了CentOS7中一般是使用命令进行配置,而不直接去修改配置文件了。不过我们可以看到grub.cfg配置文件开头注释部分说明了由/etc/grub.d/目录下文件和/etc/default/grub文件组成。  一般修改好配置后都需要使用命令grub2-mkconfig -o /boot/grub2/grub.cfg,将配置文件重新生成。


内核加载阶段



加载驱动,切换到真正的根文件系统,然后执行初始化程序/usr/lib/systemd/systemd


systemd初始化阶段



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

新手应知:

    尝鲜Rocky Linux

《Linux基础及进阶》:

    043 - 进程管理与计划任务(4)-uptime\free\htop    044 - 进程管理与计划任务(5)-crontab    045 - 服务管理和启动流程(1)-systemctl启动服务、查看服务    046 - 服务管理和启动流程(2)-target unit、systemd、运行级别    047 - 服务管理和启动流程(3)-服务依赖、创建自己的systemd配置文件


看完本文有收获?请分享给更多人


推荐关注「Cloud研习社」,带你从零开始掌握云计算技术!

微信号|bjdream-1


Cloud研习社 · 

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存