(转)CentOS 7系统详细开机启动流程和关机流程

CentOS 7系统详细开机启动流程和关机流程

原文:http://blog.csdn.net/yuesichiu/article/details/51350654

名称

    bootup - 系统启动流程

描述

    在系统启动过程中要涉及多个不同的组件。按下开机按钮后,首先BIOS/UEFI做最基本的硬件自检与初始化,
    然后加载预设/手动选择的磁盘/网络上的引导加载器(例如GRUB2),引导加载器进一步从磁盘/网络上加载操作系统内核(例如Linux)。
    对于Linux来说,内核将会(可选的)解压一个initrd(initial RAM disk)镜像(可以用dracut类的工具生成),
    并执行由"rdinit="内核引导参数指定的init程序(例如systemd)以寻找并挂载根文件系统。    完成根文件系统的挂载之后,内核启动由"init="内核引导参数指定的init程序(例如systemd)以接管系统的控制权。
    该init程序将会负责检测所有其他的硬件设备、挂载必要的文件系统、启动所有必要的服务,等等。

    关机时,init程序将会停止所有服务、卸载所有文件系统、(可选的)返回initrd环境卸载根文件系统,最后关闭电源。

常规启动流程

    当成功挂载了"root="内核引导参数指定的根文件系统之后,内核将启动由"init="内核引导参数指定的init程序,
    从这个时间点开始,即进入了"常规启动流程":检测硬件设备并加载驱动、挂载必要的文件系统、启动所有必要的服务,等等。
    对于systemd系统来说,上述"init程序"就是systemd进程,
    而整个"常规启动流程"也以几个特殊的 target 单元(详见 )作为节点,被划分为几个阶段性步骤。

    在每个阶段性步骤内部,任务是高度并行的,所以无法准确预测其中的单元的顺序,但是不同阶段之间的先后顺序总是固定的。

    当启动系统时,systemd 将会以 default.target 为启动目标,借助单元之间环环相扣的依赖关系,即可完成"常规启动流程"。
    通常,default.target 只是一个指向 graphical.target(图形界面) 或 multi-user.target(文本控制台) 的软连接。
    为了强制启动流程的规范性以及提高单元的并行性,预先定义了一些具有特定含义的 target 单元。

    下面的图表解释了这些具有特定含义的 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

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

    因为 timers.target 以异步方式包含在 basic.target 中,所以 timer 单元可以依赖于在 basic.target 之后才启动的服务。

initrd 启动流程

    在initrd内部,也可以将 systemd 用作init程序(由"rdinit="内核引导参数指定),此时 initrd.target 将是默认目标。
    initrd内部启动流程的上半部分与前一小节 basic.target 之前的部分完全相同,随后的启动流程将如下图所示。
    如果成功的将根文件系统挂载到 /sysroot 目录,那么 sysroot.mount 单元将被激活,然后进一步激活 initrd-root-fs.target 目标。
    initrd-parse-etc.service 将会分析 /sysroot/etc/fstab 文件以挂载 /usr (若需要)与带有 x-initrd.mount 标记的挂载点。
    这些挂载点都将被挂载到 /sysroot 之下,然后流程到达 initrd-fs.target 目标。
    再接下来 initrd-cleanup.service 将会使用
        /usr/bin/systemctl --no-block isolate initrd-switch-root.target
    命令启动 initrd-switch-root.target 目标。因为 isolate 表示立即停止所有在新的目标单元中不需要的进程,
    所以此动作实际上是为接下来切换根目录做预先的准备(也就是清理环境)。
    最后,激活 initrd-switch-root.service 服务,将系统的根目录切换至 /sysroot 目录。

                                    (之前的流程与上一小节完全相同)
                                                   :
                                                   v
                                             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

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

原文地址:https://www.cnblogs.com/liujiacai/p/8306784.html

时间: 2024-12-20 19:00:45

(转)CentOS 7系统详细开机启动流程和关机流程的相关文章

CentOS 7系统详细开机启动流程和关机流程

名称 bootup - 系统启动流程 描述 在系统启动过程中要涉及多个不同的组件.按下开机按钮后,首先BIOS/UEFI做最基本的硬件自检与初始化, 然后加载预设/手动选择的磁盘/网络上的引导加载器(例如GRUB2),引导加载器进一步从磁盘/网络上加载操作系统内核(例如Linux). 对于Linux来说,内核将会(可选的)解压一个initrd(initial RAM disk)镜像(可以用dracut类的工具生成), 并执行由"rdinit="内核引导参数指定的init程序(例如sys

Linux系统入门---开机启动流程

目录 Linux系统入门---开机启动流程 一.centos6 二.systemd管理进程 1.查看级别 三.centos7实践案例: 1.案例1:centos7系统,单用户修改root密码 案例2: 如果修改级别 案例3:救援模式 四.修改CentOS7网卡名称为eth0和eth1 1.环境准备 2.用命令配置网卡 方法1: 方法2: 3.系统基本环境优化 五.Systemd 进程管理 1.systemctl管理服务的启动.重启.停止.重载.查看状态等常用命令 2.systemctl设置服务开

Linux系统从开机到正常提供服务的详细开机启动流程

1.BIOS加电自检,检测硬件,找到引导分区2.读取并执行MBR(主引导记录)的bootloader(grub程序)3.根据bootloader中的设备加载kernel,kernel会开始检测硬件与加载驱动/etc/grub.conf 就是bootloader中需要加载kernel的配置文件4.内核启动文件为:/sbin/init,主要是准备软件执行环境5.初始化系统/etc/init/rcS.conf 文件中执行/etc/rc.d/rc.sysinitrc.sysinit脚本的功能:主机名.挂

linux系统下开机启动流程

在了解开机启动流程之前,还是得先了解一些磁盘的基本知识.磁盘主要由盘片,机械手臂,磁头,主轴马达构成.盘片就是存储数据的物理单位了.然后盘片上我们可以分成扇区(sector)和柱面(cylinder),每个扇区sector为512Bytes.如下图所示: 磁盘在分区完成之后,每个分区(文件系统)都有一个启动扇区(boot sector),而开机时用到的则是整个磁盘的第一个扇区,这个扇区非常主要,构成如下: (1)主引导分区(MBR)master boot record:446Bytes:系统安装

CentOS修改系统的默认启动模式为命令号界面

CentOS在安装桌面之后,将图形界面设置为默认模式,给PC内存带来较大压力,所以希望修改系统的默认启动模式为命令号界面,而不启动图形界面.方法如下: 1.以 root用户登录系统:或者 用su切换到超级用户模式: 2.修改/etc/inittab 文件: vi /etc/inittab 将最后一句: id:5:initdefault: 修改为: id:3:initdefault: 保存退出,重启系统即可. 3.原因及解释: Linux有7种运行级别:如下所示 # Default runleve

CentOS 6 系统无法开机故障修复

本文针对grub故障及服务故障导致的开机无法启动的情况进行模拟,并给出修复详细步骤. 一.grub各配置文件问题引起的开机故障 可能出现此故障场景: 当前硬盘没有grub,每次启动都是通过有grub的光盘或U盘启动的当前硬盘上的操作系统 有两块硬盘其中有一块没有安装grub 主机Windows和Linux双系统共存,后来由于Windows坏了重装了Windows此时Linux的bootloader就被覆盖 1.模拟stage1阶段(操作系统所在磁盘分区的前446字节)被破坏导致的开机故障 模拟操

centos 7.x编写开机启动服务

centos 7以上是用Systemd进行系统初始化的,Systemd 是 Linux 系统中最新的初始化系统(init),它主要的设计目标是克服 sysvinit 固有的缺点,提高系统的启动速度.关于Systemd的详情介绍在这里. Systemd服务文件以.service结尾,比如现在要建立nginx为开机启动,如果用yum install命令安装的,yum命令会自动创建nginx.service文件,直接用命令 systemcel enable nginx.service 设置开机启动即可

Debian、Ubuntu系统中开机启动设置

Unix系统使用比较广泛的便是Linux系统,而基于Linux内核下也有很多衍生的其他的系统,其中就有Debian.Ubuntu这类的系统,在Linux系统下平时使用习惯的开机启动/etc/rc.local或/etc/rc.d/rc.local就没有了,那在Debian.Ubuntu下需要开启启动时就需要使用update-rc.d用来定义开机启动的命令 ,举一个简单的例子在Debian.Ubuntu开机启动iptables: 在Debian.Ubuntu中iptables并没有被做成类似Linu

win7 系统下开机启动

1.开机启动查看 运行: msconfig --> 点击"启动"标签 2.开机项添加:将 .exe/.bat 等运行文件(或者快捷方式)放入 开始-->所有程序-->Startup  文件夹 例:开机打开某文件夹 先创建 *.bat文件(名字自创),右击文件--编辑,添加以下代码: 打开本地磁盘: start C:\ 打开局域网共享文件(需IP地址): start \\192.168.1.100\share\ 保存文件,将 *.bat文件放入 Startup 文件夹(