CentOS系统启动流程

技术分享  / 倒序浏览   ©

#楼主# 2020-2-12

跳转到指定楼层

马上注册,分享更多源码,享用更多功能,让你轻松玩转云大陆。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
Linux系统的组成部分

内核和根文件系统:

内核:

  进程管理、内存管理、网络协议栈、文件系统、驱动步伐、安全功能

  • 内核设计流派:

    • 单内核设计:把所有功能集成于同一个步伐;
       代表:Linux
    • 微内核设计:每种功能利用一个单独的子系统实现;
       代表:Windows,Solaris

  • Linux内核特点:

    • 支持模块化:.ko(kernel object)
    • 支持模块运行时动态装载或卸载;
    • 利用缓冲和缓存来加速对磁盘上的文件访问;

  • 组成部分:
    焦点文件:/boot/vmlinuz-VERSION-release
    ramdisk:
     CentOS 5:/boot/initrd-VERSION-release.img
     CentOS 6,7:/boot/initramfs/VERSION-release.img
    模块文件:/lib/modules/VERSION-release
运行中的系统环境可分为两层:

内核空间:内核代码(系统调用)
用户空间:应用步伐(进程或线程)
CentOS系统的启动流程


  • POST:加电自检
     ROM:CMOS
      BIOS:Basic Input and Output System
  • Boot Sequence:
      按次序查找各引导设备,第一个有引导步伐的设备即为本次启动要用到的设备;

    • bootloader:引导加载器,步伐;
       GRUB:Grand Uniform Bootloader
        GRUB 0.x:Grub Legacy
        GRUB 1.x:Grub2
      功能:
        提供一个菜单,允许用户选择要启动的系统或不同的内核版本;把用户选定的内核装载到RAM中的特定空间中,解压、展开,而后把系统控制权移交给内核;

      • MBR:Master Boot Record
         512bytes:
          446bytes:启动引导加载器(bootloader),为GRUB第一阶段;
          64bytes:分区表(fat);
          2bytes:标记位(55AA);
      • GRUB:
         bootloader:MBR前446字节,1st stage
         Partition:文件系统驱动,1.5 stage
         Partition:/boot/grub,2nd stage
      • UEFI,GPT:

    • Kernel:

      • 自身初始化:

        • 探测可识别到的所有硬件设备;
        • 加载硬件驱动步伐(有大概会借助于ramdisk加载驱动);
        • 以只读方式挂载根文件系统;
          运行用户空间的第一个应用步伐:/sbin/init

      • ramdisk:
        ramdisk --> ramfs
         CentOS 5:initrd
          工具步伐:mkinitrd
         CentOS 6,7:initramfs
          工具步伐:dracut,mkinitrd


  • 用户空间:/sbin/init

    • init步伐的类型:

      • CentOS 5:SysV init

        • 设置文件:/etc/inittab
           每行定义一种action以及与之对应的process
            id:runlevels:action:process
             id:一个任务的标识符;
             runlevels:在哪些级别启动此任务;#,###,也可以为空,表示所有级别;
             action:在什么条件下启动此任务;
              wait:等待切换至此任务所在的级别时执行一次;
              respawn:一旦此任务终止,就自动重新启动之;
              initdefault:设定默认运行级别;此时,process省略;
              sysinit:设定系统初始化方式,此处一百为指定/etc/rc.d/rc.sysinit脚本;
             process:任务;
        • 运行级别:为了系统的运行或维护等目的而设定的机制;
           0:关机,shutdown
           1:单用户模式(single user),root用户,无须认证;维护模式;
           2:多用户模式(multi user),会启动网络功能,但不会启动NFS;维护模式;
           3:多用户模式(multi user),完全功能模式;文本界面;
           4:预留级别;目前无特别利用目的,但习惯以同3级别功能利用;
           5:多用户模式(multi user),完全功能模式;图像界面;
           6:重启,reboot;
        • 默认级别:3,5
        • 级别切换:init #
        • 级别查看:who -r、runlevel

      • CentOS 6:Upstart
         设置文件:/etc/inittab
              /etc/init/*.conf
      • CentOS 7:systemd
         设置文件:/usr/lib/systemd/system/
              /etc/systemd/system/


系统初始化流程(内核级别):POST --> BootSequence(BIOS) --> BootLoader(MBR) --> Kernel(ramdisk) --> rootfs(readonly) --> /sbin/init()
系统初始化流程(用户空间):/sbin/init(/etc/inittab)
设置默认运行级别 --> 运行系统初始化脚本,完成系统初始化 --> 关闭对应级别下需要停止的服务,启动对应级别下需要开启的服务 --> 设置登录终端[ --> 启动图像终端]
chkconfig命令:管控/etc/init.d/每个服务脚本在各级别下的启动或关闭状态;
查看:chkconfig --list [name]
添加:chkconfig --add name
能被添加的服务的脚本定义格式之一:
#!/bin/bash##chkconfig:LLL NN NN#description:删除:chkconfig --del name
修改指定的链接类型:
chkconfig [--level LEVELS] name
--level LEVELS:指定要控制的级别;默认为2345;
注意:正常级别下,最后启动的一个服务S99local没有链接至/etc/init.d下的某脚本,而是链接至了/etc/rc.d/rc.local(/etc/rc.local)脚本;因此,未便或不需写为服务脚本的步伐期望能开机自动运行时,直接放置于此脚本文件中即可。
分享淘帖
回复

使用道具

您的回复是对作者最大的奖励

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于作者

sumu_5611

新手猿

  • 主题

    7

  • 帖子

    7

  • 关注者

    0

Archiver|手机版|小黑屋|云大陆 | 赣ICP备18008958号-4|网站地图
Powered by vrarz.com!  © 2019-2020版权所有云大陆