CentOS 启动流程

发布时间:2020-06-26 17:28:30 作者:Jonews
来源:网络 阅读:368

流程图:

   系统初始化流程:

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

  用户空间初始化流程:

 /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等;


推荐阅读:
  1. Centos7系统怎么启动?
  2. 简述centos6和centos7开机过程

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

硬件 流程图 空间

上一篇:java和c语言有什么不同

下一篇:java怎么判断字符是否为日期格式

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》