学会爱上 systemd( 三 )

  • 能感知分层的文件系统挂载和卸载功能可以更安全地级联挂载的文件系统 。
  • 允许主动的创建和管理临时文件,包括删除 。
  • D-Bus 的接口提供了在插入或移除设备时运行脚本的能力 。这允许将所有设备(无论是否可插拔)都被视为即插即用,从而大大简化了设备的处理 。
  • 分析启动环节的工具可用于查找耗时最多的服务 。
  • 它包括用于存储系统消息的日志以及管理日志的工具 。
  • 架构这些以及更多的任务通过许多守护程序、控制程序和配置文件来支持 。图 1 显示了许多属于 systemd 的组件 。这是一个简化的图,旨在提供概要描述,因此它并不包括所有独立的程序或文件 。它也不提供数据流的视角,数据流是如此复杂,因此在本系列文章的背景下没用 。
    学会爱上 systemd

    文章插图
    图 1:systemd 的架构,作者 Shmuel Csaba Otto Traian (CC BY-SA 3.0)
    如果要完整地讲解 systemd 就需要一本书 。你不需要了解图 1 中的 systemd 组件是如何组合在一起的细节 。只需了解支持各种 Linux 服务管理以及日志文件和日志处理的程序和组件就够了 。但是很明显,systemd 并不是某些批评者所宣称的那样,它是一个单一的怪物 。
    作为 1 号进程的 systemdsystemd 是 1 号进程(PID 1) 。它的一些功能,比老的 SystemV3 init 要广泛得多,用于管理正在运行的 Linux 主机的许多方面,包括挂载文件系统以及启动和管理 Linux 生产主机所需的系统服务 。与启动环节无关的任何 systemd 任务都不在本文讨论范围之内(但本系列后面的一些文章将探讨其中的一些任务) 。
    首先,systemd 挂载 /etc/fstab 所定义的文件系统,包括所有交换文件或分区 。此时,它可以访问位于 /etc 中的配置文件,包括它自己的配置文件 。它使用其配置链接 /etc/systemd/system/default.target 来确定将主机引导至哪个状态或目标 。default.target 文件是指向真实目标文件的符号链接 。对于桌面工作站,通常是 graphical.target,它相当于 SystemV 中的运行级别 5 。对于服务器,默认值更可能是 multi-user.target,相当于 SystemV 中的运行级别 3 。emergency.target 类似于单用户模式 。目标(target)和 服务(service)是 systemd 的 单元(unit) 。
    下表(图 2)将 systemd 目标与老的 SystemV 启动运行级别进行了比较 。systemd 提供 systemd 目标别名以便向后兼容 。目标别名允许脚本(以及许多系统管理员)使用 SystemV 命令(如 init 3)更改运行级别 。当然,SystemV 命令被转发给 systemd 进行解释和执行 。
    学会爱上 systemd

    文章插图
    图 2:SystemV 运行级别与 systemd 目标和一些目标别名的比较
    每个目标在其配置文件中都描述了一个依赖集 。systemd 启动必须的依赖项,这些依赖项是运行 Linux 主机到特定功能级别所需的服务 。当目标配置文件中列出的所有依赖项被加载并运行后,系统就在该目标级别运行了 。在图 2 中,功能最多的目标位于表的顶部,从顶向下,功能逐步递减 。
    systemd 还会检查老的 SystemV init 目录,以确认是否存在任何启动文件 。如果有,systemd 会将它们作为配置文件以启动它们描述的服务 。网络服务是一个很好的例子,在 Fedora 中它仍然使用 SystemV 启动文件 。
    图 3(如下)是直接从启动手册页复制来的 。它显示了 systemd 启动期间一般的事件环节以及确保成功启动的基本顺序要求 。
                                            cryptsetup-pre.target                                                   | (various low-level                                v     API VFS mounts:                 (various cryptsetup devices...)  mqueue, configfs,                                |    |  debugfs, ...)                                    v    |  |                                  cryptsetup.target  |  |  (various swap                                 |    |    remote-fs-pre.target  |   devices...)                                  |    |     |        |  |    |                                           |    |     |        v  |    v                       local-fs-pre.target |    |     |  (network file systems)  |  swap.target                       |           |    v     v                 |  |    |                               v           |  remote-cryptsetup.target  |  |    |  (various low-level  (various mounts and  |             |              |  |    |   services: udevd,    fsck services...)   |             |    remote-fs.target  |    |   tmpfiles, random            |           |             |             /  |    |   seed, sysctl, ...)          v           |             |            /  |    |      |                 local-fs.target    |             |           /  |    |      |                        |           |             |          /  ____|______|_______________   ______|___________/             |         /                               /                                |        /                               v                                 |       /                        sysinit.target                           |      /                               |                                 |     /        ______________________/|_____________________           |    /       /              |        |      |                         |   /       |              |        |      |               |          |  /       v              v        |      v               |          | /  (various       (various      |  (various            |          |/   timers...)      paths...)   |   sockets...)        |          |       |              |        |      |               |          |       v              v        |      v               |          | timers.target  paths.target   |  sockets.target      |          |       |              |        |      |               v          |       v              _______ | _____/         rescue.service   |                              |/                     |          |                               v                      v          |                           basic.target         rescue.target    |                               |                                 |                       ________v____________________             |                      /              |                          |                      |              |              |            |                      v              v              v            |                  display-    (various system   (various system  |              manager.service     services        services)      |                      |         required for        |            |                      |        graphical UIs)       v            v                      |              |            multi-user.target emergency.service    |              |              |         |            _____________ | _____________/         v                          |/ emergency.target                    v                              graphical.target


    推荐阅读