CentOS启动流程-创新互联

流程图:

  系统初始化流程:

POST --> Boot Sequence(BIOS) --> Boot Loader (MBR) --> Kernel(ramdisk) --> rootfs --> switchroot --> /sbin/init

创新互联是一家专业提供铁山企业网站建设,专注与网站设计、成都网站设计、H5页面制作、小程序制作等业务。10年已为铁山众多企业、政府机构等服务。创新互联专业网站制作公司优惠进行中。

 用户空间初始化流程:

 /sbin/init [/etc/inittab或/etc/init/*.conf]--> /etc/rc.d/rc.sysinit --> /etc/rc.d/rc0-9.d --> /etc/rc.local

 设置默认运行级别 --> 运行系统初始化脚本,完成系统初始化 --> 关闭对应级别下需要停止的服务,启动对应级别下需要开启的服务 --> 设置登录终端 --> 启动图形终端

概述启动流程:

  一:post加电自检,将BIOS映射进CPU可以查找的线性地址空间,使得cpu可以读取主板上rom设备中的BIOS程序,通过rom加载内存(ram)并检查当前设备硬件是否存在

  二:BootSequence按次序查找各引导设备,根据BIOS中设置的启动次序去加载对应设备的MBR

  三:bootloader根据MBR的分区表,查找操作系统所在的分区,并通过grub加载操作系统的内核,此时将内核装载入内存,在内存中解压缩

  四:kernel进行自身初始化,探测可识别的硬件设备,并借助ramdisk加载boot目录下的initrd或initramfs文件中装载驱动模块(ramdisk中包含着initrd或initramfs)

  五:以只读方式挂载根文件系统

  六:运行/etc/inittab中的程序设定默认运行级别

  七:运行/etc/rc.d/rc.sysinit系统初始化脚本

  八:运行/etc/rc.d/rc0-9.d 关闭或启动对应级别下的服务

  九:运行/etc/rc.local系统初始化完成以后,程序自动加载的最后一个脚本

详细剖析:

   一:POST加电自检将BIOS映射进CPU可以查找的线性地址空间,使得cpu可以读取主板上rom设备中的程序BIOS,通过rom加载内存(ram)并检查当前设备硬件是否存在

 二:BootSequence按次序查找各引导设备,根据BIOS中设置的启动次序去加载对应设备的MBR

        MBR:Master Boot Record (512bytes)

        446bytes:存放bootloader

        64bytes:存放分区表

        2byte:判断MBR是否有效的标识55AA为有效

    CentOS 启动流程

 三: bootloader:引导加载器,程序

         提供一个菜单,允许用户选择要启动的系统或不同的内核版本; 把用户选定的内核装载到RAM中的特定空间中,解压、展开,而后把系统控制权移交给内核;

         (1)Windows上引导加载器:ntloader

          (2)Linux上引导加载器:

             LILO:古老的linux加载器,1024柱面之后无法加载,继而被grub所取代,现在多用于安卓手机启动

              grub:提供一个菜单,允许用户选择要启动的系统或不同的内核版本, 把用户选定的内核装载到RAM中的特定空间中,解压、展开,而后把系统控制权移交给内核;

                  stage1:grub第一阶段存在MBR中,用于引导stage2

                 stage1_5:在MBR之后的扇区中,识别常见的不同的文件系统的

                 stage2:位于/boot/grub目录下,配置文件是/etc/grub.conf,功用:向上看

                     CentOS 启动流程

四:内核初始化:

   当stage2被载入系统执行时,它首先会去解析grub的配置文件/boot/grub/grub.conf,然后加载内核镜像到内存中,并将控制权转交给内核,内核会立即初始化系统中各设备并做相关的配置工作,其中包括CPU、I/O、存储设备等,并且以读写的方式挂载根文件系统,此时涉及到一个"先有鸡还是先有蛋的问题"

    要想访问根文件系统(rootfs),首先就得加载根文件系统中的驱动程序,而加载驱动程序需要先挂载根文件系统。为了解决这个问题:Linux设备驱动程序的加载,有一部分驱动程序直接被编译进内核镜像中,另一部分则是以模块的形式存放在initrd(ramdisk)中。内核启动被分成了两个阶段,第一阶段先执行initrd文件系统中的init,完成加载驱动模块等任务,第二阶段才会执行真正的根文件系统中的/sbin/init进程

五:/etc/inittab:设定默认运行级别

  init程序在不同CentOS版本上的类型:

    CentOS-5 SysV init 配置文件:/etc/inittab

    CentOS-6 Upstart  配置文件:/etc/inittab /etc/init/*.conf

    CentOS-7 Systemd  配置文件:/usr/lib/systemd/system, /etc/systemd/system/

六:运行系统初始化脚本,完成系统初始化

    运行/etc/rc.d/rc.sysinit

       (1) 设置主机名;

   (2) 设置欢迎信息;

   (3) 激活udev和selinux;

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

    (5) 检测根文件系统,并以读写方式重新挂载根文件系统;

   (6) 设置系统时钟;

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

   (8) 激活lvm及软raid设备;

   (9) 激活swap设备;

   (10) 加载额外设备的驱动程序;

   (11) 清理操作;

七:关闭或启动对应级别下的服务/etc/rc.d/rc#.d

     0-6:共7个级别;

  0:关机, shutdown

  1:单用户模式(single user),root用户,无须认证;维护模式;

  2:多用户模式(multi user),会启动网络功能,但不会启动NFS;维护模式;

  3:多用户模式(mutli user),完全功能模式;文本界面;

  4:预留级别:目前无特别使用目的,但习惯以同3级别功能使用;

  5:多用户模式(multi user), 完全功能模式,图形界面;

  6:重启,reboot

   1) 默认级别:3, 5

   2) 级别切换:init #

   3) 级别查看命令:who -r ;  runlevel

八:运行/etc/rc.local系统初始化完成以后,程序自动加载的脚本

      系统启动最后执行的一个脚本

九:启动终端

   tty1:2345:respawn:/usr/sbin/mingetty tty1

   ... ...

   tty6:2345:respawn:/usr/sbin/mingetty tty6

(1)mingetty会调用login程序;

(2)打开虚拟终端的程序除了mingetty之外,还有诸如getty等;

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


本文名称:CentOS启动流程-创新互联
标题来源:http://azwzsj.com/article/ccieoi.html