• 开机启过程

  • POST—>BOOT     SEQUENCE—> BOOTLOADER—>KERNEL +     INITRAMFS(INITRD)—>ROOTFS—>/sbin/init

  • POST:加电自检

    • 当开机按下电源按钮后,计算机开始加电,主板上的BIOS或UEFI基本输入输出程序开始对硬件进行检查,检查内存,CPU等等吧,当检测到错误的时候机器会中断或者启动不了,这个做过电脑维护的人都知道,内存氧化可导至开不了机,还有的机器如果没插鼠标键盘自检也不会通过卡在那里了,不会继续往下走。

  • Boot     sequence:选择引导顺序

    • 当自检通过后,接着就要选择引导介质或方式,是通过光盘启动,硬盘启动,网络启动,还是U盘启动,这些也是在BIOS中设定的,所以设定的第一启动项是哪个就从那个开始引导,这个装过WINDOWS的都很熟悉了。

  • Bootloader:引导加载器

    • 确定引导介质后便开始从介质中装载引导程序如grub2,这个是一个微小程序,我们知道MBR引导记录大小为512字节,其中前446个字节就是Bootloader,主要用来引导用户选择要启动的系统或不同的内核版本,把用户选定的内核装载到RAM中的特定空间中,解压,展开,而后把系统控制权移交给内核。

    • grub2就是Linux中Bootloader程序,由于MBR记录限制,所以grub2分为两个部分:

    • 1.在MBR引导记录中,大小为446字节,主要功能是引导启动介质的grub主体文件

    • 2.partition,/boot/grub[2],此为grub的主体。

  • KERNEL +     INITRAMFS(INITRD)—>ROOTFS :加载内核

    • 这时候kernel开始初始化,探测可识别的硬件设备,加载硬件启动程序。以只读方式加载根文件系统

    • kernel在内存中加载时,为了模拟系统环境,会生成一个ramdisk文件,来进行下一步操作,等到加载到真正的根文件系统时,就会退出ramdisk,切换到真正的根文件系统中去。

    • ramdisk:内存上临时虚拟的系统

    • ramdisk(虚拟磁盘,双缓冲,双缓存)---->      ramfs(虚拟文件系统)

    • centos5:initrd

    • 工具程序:mkinitrd

    • centos6,7:initramfs

    • 工具程序:dracut,mkinitrd

  • /sbin/init:运行用户空间的第一个应用程序

    • init:

    • Centos 5: SysV init       配置文件:/etc/inittab

    • Centos 6: Upstart              配置文件:/etc/inittab;/etc/init/*.conf(主要)

    • Centos 7: systemd             配置文件:/etc/systemd/system;/usr/lib/systemd/system

  • 至此,内核空间就已经启动完毕,内核启动完成接着开始启动用户态启动过程。systemd是个守护进程,pid号为1,后面所有启动的服务或进程都是systemd的子进程及子进程的子进程。

  • 那么用户态的启动顺序又是什么样的呢?

    • 设置默认允许级别—>初始化脚本,完成系统初始化--->关闭及启动对应级别下的服务----->设置登录终端----->[启动图形终端]

  • Systemd新特性:

    • 系统引导时实现服务并行启动,没有顺序之分

    • 按需激活进程

    • 支持系统状态快照

    • 基于依赖关系定义服务控制逻辑

  • 关键特性:

    • 基于socket的激活机制:socket与服务程序分离;按需激活程序或服务,可并行启动

    • 基于bus的激活机制:

    • 基于device的激活机制:当某个硬件设备变得可用时就可激活某设备

    • 基于path的激活机制

    • 系统快照:保存各unit的当前状态信息于持久存储设备中

    • 向后兼容sysv      init脚本

  • 不兼容:

    • systemctl命令固定不变,非由systemd启动的服务,systemctl无法与之通信

  • 核心概念:unit

    • 配置文件进行标识和配置,文件中主要包含了系统服务,监听socket,保存的系统快照以及其它与init相关的信息,保存至:

    • /usr/lib/systemd/system

    • /run/systemd/system

    • /etc/systemd/system

  • unit的类型

    • Service      unit:文件扩展名为.service 无需执行权限,用于定义系统服务

    • Target      unit:文件扩展名为.target,用于模拟实现“运行级别”

    • Device      unit:文件扩展名为.device,用于定义内核识别的设备

    • Mount      unit:文件扩展名为.mount,定义文件系统挂载点

    • Socket      unit:文件扩展名为.socket,用于标识进程间通信用的socket文件

    • Snapshot      unit:文件扩展名为.snapshot,管理系统快照

    • Swap      unit:文件扩展名为.swap,用于标识swap设备

    • Automount      unit:文件扩展名为.automount,文件系统的自动挂载点

    • Path      unit:文件扩展名为.path,用于定义文件系统中的一个文件或目录

  • 管理系统服务

    • 启动:systemctl      start name.service

    • 停止:systemctl      stop name .service

    • 重启:systemctl      restart name.service

    • 重载:systemctl      reload name.service

    • 条件式重启:systemctl      try-restart name.service

    • 查看某服务当前是否运行:systemctl      is-active name.service

    • 查看所有已经激活的服务:systemctl      list-units –type service systemctl list-units –type service –-all

    • 开机自启动:systemctl      enable name.service

    • 开机不启动:systemctl      disable name.service

    • 查看所有服务开机自启动状态:systemctl      list-unit-files –-type service

    • 查看服务是否开机自启:systemctl      is-enabled name.service

    • 查看服务的依赖关系:systemctl      list-dependencies name.service

    • 禁止设定为开机自启:systemctl      mask name.service

    • 取消禁止设定为开机自启:systemctl      unmask name.service

  • Target     units:(模拟运行级别)

    • unit配置文件,以.target后辍名结尾

    • 关机:runlevel0.target,poweroff.target

    • 救援:runlevel1.target,rescue.target

    • 多用户:multi-user.target

    • 图形:graphical.target

    • 重启:reboot.target

    • 级别切换:systemctl      isolate name.target

    • 查看级别:systemctl      list-units –-type target       systemctl      get-default

    • 设置级别:systemctl      set-default name.target

    • 切换至紧急救援模式:systemctl      rescue

    • 切换至emergency模式:systemctl      emergency(服务不加载不启动,驱动不加载,更彻底)

  • 其它常命令

    • 关机:systemctl      halt,systemctl poweroff

    • 重启:systemctl      reboot

    • 挂起:systemctl      suspend

    • 快照:systemctl      hibernate

    • 快照并挂起:systemctl      hybrid-sleep

  • 常规启动流程

用粗体下划线标识的目标单元经常被用作启动目标。有两种方法可以指定启动目标:
(1)使用 systemd.unit= 内核命令行参数(参见systemd手册);

(2)使用 default.target 软连接。
因为 timers.target 以异步方式包含在 basic.target 中,所以 timer 单元可以依赖于在 basic.target 之后才启动的服务。

local-fs-pre.target
             |
             v
     (各个 mounts 与       (各个 swap       (各个加密块设备
      fsck services)        devices)            devices)        (各个底层服务        (各个底层API虚拟
             |                  |                  |             services: udevd,     文件系统 mounts:
             v                  v                  v             tmpfiles, random     mqueue, configfs,
      local-fs.target      swap.target     cryptsetup.target     seed, sysctl ...)      debugfs ...)
             |                  |                  |                    |                    |
             \__________________|_________________ | ___________________|____________________/
                                                  \|/
                                                   v
                                            sysinit.target
                                                   |
              ____________________________________/|\________________________________________
             /                  |                  |                    |                    \
             |                  |                  |                    |                    |
             v                  v                  |                    v                    v
       (各个 timers)      (各个 paths)             |             (各个 sockets)        rescue.service
             |                  |                  |                    |                    |
             v                  v                  |                    v                    v
       timers.target      paths.target             |             sockets.target        rescue.target
             |                  |                  |                    |
             v                  \_________________ | ___________________/
             .                                    \|/
             . . . . . . . . . . . . . . . . . . . v
                                             basic.target
                                                   |
              ____________________________________/|                                 emergency.service
             /                  |                  |                                         |
             |                  |                  |                                         v
             v                  v                  v                                 emergency.target
         display-        (图形界面所必须    (各个系统服务)
     manager.service      的各个系统服务)          |
             |                  |                  v
             |                  |         multi-user.target
             |                  |                  |
             \_________________ | _________________/
                               \|/
                                v
                       graphical.target

  • initrd 启动流程

basic.target
                                                   |                                 emergency.service
                            ______________________/|                                         |
                           /                       |                                         v
                           |                  sysroot.mount                          emergency.target
                           |                       |
                           |                       v
                           |             initrd-root-fs.target
                           |                       |
                           |                       v
                           v            initrd-parse-etc.service
                    (各个自定义的                  |
                   initrd services)                v
                           |            (sysroot-usr.mount 以及
                           |            fstab 中带有 x-initrd.mount
                           |               标记的各个挂载点)
                           |                       |
                           |                       v
                           |                initrd-fs.target
                           \______________________ |
                                                  \|
                                                   v
                                              initrd.target
                                                   |
                                                   v
                                         initrd-cleanup.service
                                (使用 isolates 启动 initrd-switch-root.target)
                                                   |
                                                   v
                            ______________________/|
                           /                       v
                           |        initrd-udevadm-cleanup-db.service
                           v                       |
                   (各个自定义的                   |
                  initrd services)                 |
                           \______________________ |
                                                  \|
                                                   v
                                       initrd-switch-root.target
                                                   |
                                                   v
                                       initrd-switch-root.service
                                                   |
                                                   v
                                         切换到主机上的操作系统

  • 关机流程

systemd 系统在关机时同样遵循固定的流程,具体如下图

(与所有系统服务互斥)   (与所有文件系统 mounts, swaps, cryptsetup devices 互斥)
                              |                                      |
                              v                                      v
                       shutdown.target                         umount.target
                              |                                      |
                              \______________________   _____________/
                                                     \ /
                                                      v
                                             (各个底层 services)
                                                      |
                                                      v
                                                final.target
                                                      |
                _____________________________________/ \_________________________________
               /                         |                        |                      \
               |                         |                        |                      |
               v                         v                        v                      v
    systemd-reboot.service   systemd-poweroff.service   systemd-halt.service   systemd-kexec.service
               |                         |                        |                      |
               v                         v                        v                      v
        reboot.target           poweroff.target          halt.target          kexec.target

用粗体下划线标识的目标单元经常被用作关机目标。

本文转自 喵来个鱼 51CTO博客,原文链接:http://blog.51cto.com/m51cto/1958856,如需转载请自行联系原作者

centos7的启动过程相关推荐

  1. U盘安装Centos7启动过程中出现:starting dracut initqueue hook

    使用U盘安装Centos7启动过程出现了以下报错:starting dracut initqueue hook 这个问题是因为安装程序没有找到安装文件的位置.所以我们需要在启动过程中找到对应启动盘的U ...

  2. centos7 启动流程图_Linux启动过程详解

    Linux启动过程详解 作者:江远航 一.启动流程图如下 图1 Linux启动流程图 BIOS ---> MBR ---> Kernel---> Init 二.Linux启动顺序 一 ...

  3. Liunx操作系统的引导过程(系统操作引导过程,模拟MBR,GRUB故障,root密码遗忘解决,优化启动过程 ,运行级别的分类)

    文章目录 Liunx操作系统的引导过程 引导过程 Blos自检 MBR 引导 grub引导菜单(Boot Loader) 内核启动 启动init进程,依据inittab文件设定运行级别 系统初始化进程 ...

  4. 用Dockerfile构建MySQL镜像并实现容器启动过程中MySQL数据库系统的初始化

    前一段时间就在研究用Dockerfile构建MySQL镜像并实现容器启动过程中MySQL数据库系统的初始化,但被一些无关紧要的事儿给耽误了,经过查阅<dockerfile最佳实践>及MyS ...

  5. 菜鸟 Linux系统学习1简介 安装 云服务器 启动过程

    Linux 是一种 自由和开放源码的类 UNIX 操作系统. Linux 英文解释为 Linux is not Unix. Linux 是在 1991 由 林纳斯·托瓦兹 在赫尔辛基大学上学时创立的, ...

  6. 通过修改 initrd.img 来实现 PXE 启动过程中进行硬盘 RAID 初始化

    文章目录 解压/压缩命令 思路 实际操作步骤 总结 环境:CentOS 7.6 解压/压缩命令 # 解压原始文件 mkdir ./test xz -dc initrd.img | cpio -id# ...

  7. Linux-Linux启动过程

    Linux的启动过程 Linux的启动过程分为" 第一大阶段:硬件启动引导 第一步:通电,BIOS BIOS包括POST(初始化硬件)和查找启动介质 POST:初始化硬件,内存,显卡,时间, ...

  8. VMware安装Centos7超详细过程(图文)

    原文:https://www.jianshu.com/p/ce08cdbc4ddb?utm_source=tuicool&utm_medium=referral 本篇文章主要介绍了VMware ...

  9. Android系统的启动过程

    Android系统的启动过程可以简单地总结为以下几个流程: 加载BootLoader -> 初始化内核 -> 启动init进程 -> init进程fork出Zygote(孵化器)进程 ...

最新文章

  1. 如何理解jdk8通过行为参数化传递代码
  2. Codeforces Round #482 (Div. 2)
  3. java堆内存与栈内存区别
  4. scala为什么需要函数
  5. linux读取扇区内容,linux-device-driver
  6. php如何安装,php如何安装freetype
  7. xmemecached中的一致性hash算法
  8. 配置并初始化oracle的网络环境
  9. 小米系统wifi服务器,如何将小米8se(MIUI10系统)设置wifi仅连2.4赫兹
  10. 批量发送邮件的软件——邮件群发机器人
  11. windows下db2创建数据库
  12. 使用tornado如何实现请求异步非阻塞?
  13. 易臣督查督办全覆盖 过程全留痕 政令全通达
  14. java-No route to host 解决办法
  15. 2D Pose人体关键点实时检测(Python/Android /C++ Demo)
  16. iPad 3发布在即,各平板优势大比拼
  17. 怎样给证件照快速改底色?告诉大家一个简单方法
  18. 用MFC做漂亮界面之美化对话框
  19. android sd卡数据恢复,手机sd卡受损怎么办 手机内存卡数据恢复方法【详解】
  20. 傲梅轻松备份linux,傲梅轻松备份专业版怎么用?轻松备份的使用教程

热门文章

  1. net.sf.ehcache.util.UpdateChecker
  2. WP7之LongListSelector控件
  3. 值类型和引用类型的区别[转]
  4. 用mysqlslap对MySQL进行压力测试
  5. 小程序代理创业成功的五个条件
  6. 企业私有云解决方案(基于桌面与服务器虚拟化技术)
  7. 使用java9的uuid生成方式,让uuid生成速度提升一个档次
  8. shell打印正三角形
  9. JavaScript-在当前显示区范围内实现点不到的小方块
  10. 第12课:HA下的Spark集群工作机制解密