CentOS的启动流程

                  一个操作系统的开启与关闭不是我们手动的打开与关闭电源那么简单。这个过程中涉及太多的内部服务的打开与关闭。而在这个过程中如果出现什么问题,那么以后的某些服务就可能被影响。所以我们就需要对CentOS的启动流程了解清楚,这样出现问题之后我们才会去解决它。

    CentOS的启动流程总的顺序如下(这里以CentOS 6为例):

        POST(加电自检相关硬件设备) –> Boot Sequence(BIOS)–> bootloader(MBR) –> 加载Kernel –> 加载rootfs –> switchroot –> /sbin/init –> (配置文件:/etc/inittab, /etc/init/*.conf) –> 根据init配置文件设置默认运行级别 –> 运行系统初始化脚本/etc/rc.d/rc.sysinit,完成系统初始化 –> 开启或关闭用户选定的对应运行级别下所对应的服务 –> 启动终端,打印登录提示符


   这么多步骤里我们可以把它分简单的四大步来介绍: 

第一步:POST加电自检

    主要实现的功能是检测各个外围硬件设备是否存在而且能够正常运行起来,实现这一自检功能的是固化在主板上的ROM(主要代表为CMOS)芯片上的BIOS(Basic Input/Output System)程序;例如BIOS会检测CPU、Memory以及I/O设备是否能够正常运行。而检测完成之后就进行硬件设备的初始化。然后就会加载BIOS,它的主要功能是选择要启动的硬件设备,选择了之后就可以读取这个设备上位于MBR里头的bootloader了。它是根据BIOS中对启动顺序的设定,BIOS自己会依次扫描各个引导设备,然后第一个被扫描到具有引导程序(bootloader)的设备就被作为要启动的引导设备。


第二步:加载bootloader(MBR)

    这一步实现起来的步骤比较多,前面的BIOS通过读取并执行启动设备的MBR中的bootloader,而bootloader要实现的功能就是提供一个菜单给用户,让用户去选择要启动的系统或不同的内核版本,然后把用户选择的内核版本加载至RAM中的特定空间,接着在RAM中解压、展开,而后把系统控制权移交给内核。

    首先,bootloader是一个程序,它的执行肯定依赖于一个硬件之上,这个硬件就是硬盘,准确的说就是第一个可以启动的硬盘的第一个扇区内。就是所说的MBR(Master Boot Record主引导记录)中。

   而grub也是bootloader中的一种,它是为了打破在MBR中只有446Bytes用于存放bootloader这一限制,所以这一步的实现是这样的:grub是通过三个阶段来实现加载内核这一功能的,这三个阶段分别是:stage1, stage1.5以及stage2。其中:

    stage1:存放于MBR的前446Bytes,用于加载stage1.5阶段,目的是为了识别并驱动stage2(或者/boot)所在分区的文件系统;

    stage1.5:存放于MBR之后的扇区,加载stage2所在分区的文件系统驱动,让stage1中的bootloader能识别stage2所在分区的文件系统;

    stage2:存放于磁盘分区之上,具体存放于/boot/grub目录下,grub目录下又有一个/grub.confwenj ,它主要用于加载内核文件(vmlinuz-VERSION-RELEASE)以及ramdisk这个临时根文件系统(initrd-VERSION-RELEASE.img或initramfs-VERSION-RELEASE.img)。

    下面就是grub.conf的配置文件:

CentOS的启动流程

第三步:加载Kernel,执行系统初始化

    Kerenl在得到系统控制权之后,首先要进行自身初始化,而初始化的主要作用是:

    (1)探测可识别到的所有硬件设备;

        bootloader将系统控制权移交给内核就好比如后朝推翻前朝,统治者(内核)当权之后,首先要检查一下有哪些是前朝所留下的,例如有哪些领土、人力、财力、兵力可用等等。

    (2)加载硬件驱动程序,即加载真正的根文件系统所在设备的驱动程序(有可能会借助于ramdisk加载驱动);

        这就像统治者(内核)在得知底下存在的人力、财力之后,开始将可以“为我所用”的人力纳入麾下,听自己使唤,而不听使唤的杀掉;

    (3)以只读方式挂载根文件系统;

        如果有借助于ramdisk这个临时文件系统(虚根),则在这一步之后会执行根切换;否则不执行根切换。

    (4)运行用户空间的第一个应用程序:/sbin/init.

        到这里内核空间的启动流程就结束了,而接下来是用户空间完成后续的系统启动流程。


第四步:执行/sbin/init来管理用户空间服务进程

    这一步的流程是:/sbin/init –> 根据init配置文件设置默认运行级别 –> 运行系统初始化脚本/etc/rc.d/rc.sysinit,完成系统初始化 –> 关闭或启动用户选定的默认运行级别所对应的服务 –> 启动终端,打印登录提示符

    1)init可以理解成是内核用来管理用户空间的,init这个初始化程序会根据其配置文件执行一系列操作。虽然CentOS 5、CentOS 6以及CentOS 7的init配置文件各不相同,但总体的启动流程是不变的。这里它会根据inittab这个文件来定义启动的运行级别

    CentOS的启动流程

    2)运行初始化脚本/etc/rc.d/rc.sysinit,它是为了初始化系统环境,这一步初始化包括:

       ①设置主机名;

       ②设置欢迎信息;

      ③激活udev和selinux;

       ④挂载/etc/fstab文件中定义的所有文件系统;

       ⑤检测根文件系统,以读写方式重新挂载根文件系统;

       ⑥设置系统时钟;

       ⑦根据/etc/sysctl.conf文件来设置内核参数;

       激活lvm及软raid设备;

       ⑨激活swap设备;

       ⑩加载额外设备的驱动程序(因为内核只加载根文件系统所在分区的驱动程序);

      

    3)关闭或启动用户选定的默认运行级别下所对应的服务

      它要实现的功能是:根据前面用户通过init配置文件对默认运行级别的设定,关闭或启动这个运行级别下的服务。

   4)启动终端,打印登录提示符

    根据前面获取的运行级别来启动终端,mingetty程序是用于启动终端的,它会调用登录程序login,这样就能显示出登录提示符了,类似mingetty这种用于打开终端的程序还有getty等。

    如果默认运行级别为5,则会打开图形界面。

    最后用户登录,系统启动完成。

              

原创文章,作者:gong,如若转载,请注明出处:http://www.178linux.com/85783

(0)
gonggong
上一篇 2017-09-01 14:58
下一篇 2017-09-01

相关推荐

  • 全球敏捷运维峰会Gdevops 2017成都站嘉宾主题提前看!

    2017年全球敏捷运维峰会(Gdevops, Global Devops Summit)将于2017年在成都、上海、北京、广州四城全面启动,本次峰会由上海市经济和信息化委员会指导,上海市云计算产业促进中心、DBAplus社群主办,数十家媒体单位共同支持,活动家提供全球敏捷运维峰会在线报名服务。 成都站即将于13日启航,搭车地址:https://www.huo…

    Linux干货 2017-05-11
  • 压缩及归档工具

    常用的有这些: compress/uncompress: .Z gzip/gunzip: .gz bzip2/bunzip2: .bz2 xz/unxz: .xz zip/unzip tar, cpio 现在分别介绍他们的用法: 1、gzip/gunzip/zcat  .gz           &…

    系统运维 2016-09-19
  • 初入Linux世界 —马哥教育网络班N22_第三周课程练习

    一、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。           [root@Alien ~]# who |cut -d ' ' -f1|sort -u       root 二、取出最后登录到当前系统的用户的相关…

    Linux干货 2016-09-19
  • sed

    sed Stream EDitor, 行编辑器 sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非使用重定向存储输出。 Sed主要用来自动…

    Linux干货 2017-04-26
  • ansible配置与应用

    无法上传图片 一、程序主要文件: ansible ansible-playbook ansible-doc 二、程序发布: 要求: 1.不能影响用户体验 2.系统不能停机 3.不能导致系统故障或造成系统完全不可用。 发布路径: /webapps/tuangou /webapps/tuangou-1.1 /webapps/tuangou-1.2. 在调度器上下…

    Linux干货 2016-11-14
  • Linux基础知识总结

    Linux基础知识 计算机系统 计算机硬件组成 1.控制器:计算机系统的控制中心,协调各部分工作,保证计算机按照预先规定的目标和步骤进行操作及处理。 2.运算器:对数据进行算数运算,逻辑判断以及数据的比较、移位等操作。 3.存储器:存取程序和各种数据信息。  4.输入设备:把信息,如数字、文字、图像等转换为数字形式的“编码”的设备(键盘,扫描仪) …

    2017-05-18