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 16:23

相关推荐

  • mysql or条件可以使用索引而避免全表

    在某些情况下,or条件可以避免全表扫描的。 1 .where 语句里面如果带有or条件, myisam表能用到索引, innodb不行。 1)myisam表:  CREATE TABLE IF NOT EXISTS `a` (   `id` int(1)&nb…

    Linux干货 2015-04-13
  • 设定Linux自动登陆

    设定Linux自动登陆 在实验场景中我们可能会经常重新启动Linux,然后反复输入账户密码登陆。为了在每次启动后快速进入系统减少在实验场景中不必要的工作,我们可以设定Linux在启动后自动登陆到指定账户(实验中一般为root账户)。基于Linux一切皆文件的思想,我们可以通过修改配置文本的方式决定是否启用自动登录,以及自动登录的账户是普通用户账户还是root…

    Linux干货 2017-07-15
  • Linux运维学习历程-第六天-Linux重定向和管道

    Linux运维学习历程-第六天-Linux重定向和管道 2 本章内容我们将学习linux中的重定向和管道两大用法   I/O输入与输出设备   重定向   管道   tee命令与tr命令 一、I/O设备   1、什么是I/O设备   管理和控制计算机的所有输入/输出(I/O)设备是操作系统…

    Linux干货 2016-08-03
  • 第三周作业

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。     who | cut -d ' ' -f 1 | uniq 2、取出最后登录到当前系统的用户的相关信息。    egrep "^$(who | tail -1 | cut -d ' …

    Linux干货 2016-12-19
  • mysql编译安装

    MYSQL编译安装:参考(http://v.youku.com/v_show/id_XMjc4MDUwNjYyOA==.html?from=s1.8-1-1.2&spm=a2h0k.8191407.0.0)(http://oldboy.blog.51cto.com/2561410/1917295)     编译安装mysql,最好…

    Linux干货 2017-06-09
  • centos6.9的安装

    先准备一个安装虚拟机的的软件VMware Workstation Pro和光盘centos6.9和光盘 然后打开该软件,点击创建新的虚拟机   然后会出现一个新建虚拟机向导,选择典型,点下一步 继续点下一步   把虚拟机名称改成所装的版本 然后新建一个文件夹,点击浏览,接着点击这个新建的文件夹,这个文件夹就是虚拟机所装入的位置,…

    2017-07-15