Systemd引导过程在Linux中的近距离观察

本文详细介绍了Systemd作为Linux系统初始化和服务管理器的作用原理及引导流程。Systemd通过并发和并行处理提升启动效率,同时支持SysVInit的启动脚本以确保向后兼容性。此外,文章还探讨了Systemd在系统关闭过程中的角色及其提供的系统分析工具。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Linux 系统的启动方式相当复杂,一直需要优化它的工作方式。Linux系统的传统引导过程主要由众所周知的init进程(也称为SysV init引导系统)来处理。

另一方面,Systemd 是由Lennart Poettering 和 Kay Sievers编写的初始化系统和服务管理器。许多主要的 Linux 发行版现在都采用 systemd 作为默认的 init 系统。

在本教程中,我将使用 systemd 完成 Linux 系统引导过程。

了解系统

Systemd(系统管理器守护程序)最初是在 GNU 通用公共许可证下开发的,现在是在 GNU 宽通用公共许可证下。减少启动时间和计算开销是开发 Systemd 的主要目标。

Systemd 的核心特性之一是它支持 SysV Init 的启动后脚本,即向后兼容 SysV init 脚本。

与传统的基于 init 的系统相比,systemd 处理启动过程的方式非常简洁和优化。

让我们回顾一下 Systemd 的一些核心特性。

  • 与 init 相比,引导过程要简单得多
  • Systemd 提供系统启动的并发和并行过程,因此它可以确保更好的启动速度
  • 使用控制组而不是 PID 来跟踪进程
  • 改进了处理启动和服务依赖项的方法。
  • 系统快照和恢复能力
  • 监控启动的服务;还能够重新启动任何崩溃的服务
  • 包括 systemd-login 模块来控制用户登录。
  • 能够添加和删除组件
  • 低内存占用和作业调度能力
  • 用于事件记录的 Journald 模块和用于系统日志的 syslogd 模块。

Systemd 也以组织良好的方式处理系统关闭过程。它在 '/usr/lib/systemd/' 目录中有三个脚本,分别命名为 systemd-halt.service、systemd-poweroff.service、systemd-reboot.service。当用户选择关闭、重新启动或暂停 Linux 系统时,将执行这些脚本。

在关机的情况下,systemd 首先卸载所有文件系统并禁用所有交换设备,分离存储设备,并杀死剩余的进程。

使用 Systemd 的引导过程

让我们检查一下使用 systemd 作为引导和服务管理器时的 Linux 系统引导过程。

为简单起见,我们按以下步骤列出该过程:

01.  启动系统的第一步是 BIOS 初始化。BIOS 读取引导设备设置,定位并将控制权移交给 MBR(假设硬盘被设置为第一引导设备)。

02.  MBR 从 Grub 或 LILO 引导加载程序中读取信息并初始化内核。一旦内核加载到初始 RAM 磁盘中,它就会开始 systemd 初始化。

Systemd 使用“目标”处理启动和服务管理过程。systemd 中的“target”文件用于对不同的引导单元进行分组并启动同步过程。

03.   systemd 执行的第一个目标是default.target。但 default.target 实际上是 graphics.target 的符号链接。linux 中的符号链接就像 Windows 中的快捷方式一样工作。Graphical.target 文件位于 /usr/lib/systemd/system/graphical.target 路径。我们在以下屏幕截图中显示了 graphics.target 文件的内容。

04.在这个阶段,multi-user.target已经被调用,并且这个target 将其进一步的子单元保存在“/etc/systemd/system/multi-user.target.wants”目录中。该目标为多用户支持设置了环境。在启动过程的这个阶段没有启用任何 root 用户。与防火墙相关的服务也在这个引导阶段启动。

“multi-user.target”将控制权传递给另一层“ basic.target ”。

05. “basic.target”单元是启动常用服务的单元,特别是图形管理器服务。它使用 /etc/systemd/system/basic.target.wants 目录来决定需要启动哪些服务, basic.target 将控制权传递给sysinit.target

06. "Sysinit.target" 启动重要的系统服务,如文件系统挂载、交换空间和设备、内核附加选项等。 Sysinit.target 将启动过程传递给local-fs.target。此目标单元的内容显示在以下屏幕截图中。

07. local-fs.target - 此目标单元不启动与用户相关的服务,它只处理核心低级服务。此目标是基于“/etc/fstab”和“/etc/inittab”文件执行操作的目标。

分析系统启动性能

Systemd 提供工具来识别和解决与启动相关的问题或性能问题。Systemd-analyze是一个内置命令,可让您检查启动过程。您可以找出在启动过程中遇到错误的单元,并可以进一步跟踪和纠正启动组件问题。下面列出了一些有用的 systemd-analyze 命令。

systemd-analyze time显示在内核和普通用户空间中花费的时间。

$ systemd-analyze time
Startup finished in 1440ms (kernel) + 3444ms (userspace)

systemd-analyze blame打印所有正在运行的单元的列表,按初始化所需的时间排序,这样您就可以了解哪些服务在启动期间需要很长时间才能启动。

$ systemd-analyze blame
2001ms mysqld.service
234ms httpd.service
191ms vmms.service

systemd-analyze verify显示系统单元中是否存在任何语法错误。 Systemd-analyze plot可用于将整个启动过程写入 SVG 格式文件。整个引导过程读取起来非常冗长,因此使用该命令我们可以将整个引导过程的输出转储到一个文件中,然后可以进一步读取和分析它。以下命令将处理此问题。

systemd-analyze plot > boot.svg
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

太极淘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值