Red Hat Training

A Red Hat training course is available for RHEL 8

第 18 章 优化 systemd 以缩短引导时间

有一组默认启用的 systemd 单元文件列表。由这些单元文件定义的系统服务会在引导时自动运行,这会影响引导时间。

本节描述:

  • 检查系统引导性能的工具。
  • 默认启用 systemd 单元以及您可以安全禁用 systemd 单元以便缩短引导时间的情况。

18.1. 检查系统引导性能

要检查系统引导性能,可以使用 systemd-analyze 命令。这个命令有很多可用选项。然而,本节只涵盖所选对 systemd 调整很重要以便缩短引导时间的选择。

有关所有选项的完整列表和详细描述,请查看 systemd-analyze man page。

先决条件

在开始检查 systemd 以调整引导时间之前,您可能需要列出所有启用的服务:

$ systemctl list-unit-files --state=enabled

分析整个引导时间

流程

  • 有关最后一次成功引导时间的总体信息,请使用:
$ systemd-analyze

分析单元初始化时间

流程

  • 有关每个 systemd 单元初始化时间的信息,请使用:
$ systemd-analyze blame

输出会根据在上一次成功引导过程中初始化的时间以降序列出。

识别关键单元

流程

  • 要识别在最后一次引导成功时需要花费最多时间的单元,请使用:
$ systemd-analyze critical-chain

输出突出显示使用红色的引导速度非常慢的单元。

图 18.1. systemd-analyze critical-chain 命令的输出

systemd analyze critical

18.2. 为选择可安全禁用的服务提供指导信息

如果系统的引导时间较长,您可以通过禁用引导时启用的一些服务来缩短这个时间。

要列出这些服务,请运行:

$ systemctl list-unit-files --state=enabled

要禁用某个服务,请运行:

# systemctl disable service_name

然而,某些服务必须启用才能确保操作系统安全,并使其可以正常工作。

您可以使用下面的表格来选择可安全禁用的服务。这个表格列出了在 Red Hat Enterprise Linux 8 最小安装中默认启用的所有服务。对于每个服务,它还说明是否可安全禁用这个服务。

该表还提供了关于禁用该服务的情况或不应禁用该服务的原因的更多信息。

表 18.1. 在 RHEL 8 最小安装中默认启用的服务

服务名称它可用被禁用吗?更多信息

auditd.service

仅在不需要内核提供审计信息时禁用 auditd.service。请注意,如果您禁用 auditd.service,则不会生成 /var/log/audit/audit.log 文件。因此,您无法追溯检查一些常见的动作或事件,如用户登录、服务启动或密码更改。还请注意 auditd 有两个部分:内核部分和服务本身。使用 systemctl disable auditd 命令时,您只禁用该服务,而不是禁用内核部分。要禁用系统审核,请在内核命令行中设置 audit=0

autovt@.service

这个服务只在真正需要时才运行,因此不需要禁用它。

crond.service

请注意,如果您禁用 crond.service,则不会运行 crontab 中的项目。

dbus-org.fedoraproject.FirewallD1.service

到的符号链接 firewalld.service

dbus-org.freedesktop.NetworkManager.service

到的符号链接 NetworkManager.service

dbus-org.freedesktop.nm-dispatcher.service

到的符号链接 NetworkManager-dispatcher.service

firewalld.service

仅在不需要防火墙时禁用 firewalld.service

getty@.service

这个服务只在真正需要时才运行,因此不需要禁用它。

import-state.service

仅在不需要从网络存储引导时禁用 import-state.service

irqbalance.service

仅在只有一个 CPU 时禁用 irqbalance.service。不要在有多个 CPU 的系统中禁用 irqbalance.service

kdump.service

仅在不需要内核崩溃报告时禁用 kdump.service

loadmodules.service

除非 /etc/rc.modules/etc/sysconfig/modules 目录存在,否则不会启动该服务。这意味着它不会在最小 RHEL 8 安装中启动。

lvm2-monitor.service

仅在不使用逻辑卷管理器(LVM)时禁用 lvm2-monitor.service

microcode.service

不要禁用该服务,因为它在 CPU 中提供了 microcode 软件的更新。

NetworkManager-dispatcher.service

仅在不需要在网络配置更改时通知时才禁用 NetworkManager-dispatcher.service (例如在静态网络中)。

NetworkManager-wait-online.service

仅在引导后不需要工作网络连接时禁用 NetworkManager-wait-online.service。如果启用该服务,则该系统不会在网络连接正常工作前完成引导。这可能会大大延长引导时间。

NetworkManager.service

仅在不需要连接到网络时禁用 NetworkManager.service

nis-domainname.service

仅在不使用网络信息服务(NIS)时禁用 nis-domainname.service

rhsmcertd.service

 

rngd.service

仅在您的系统不需要很多熵或者您没有任何硬件生成器时禁用 rngd.service。请注意,在需要大量好熵的环境中,比如用于生成 X.509 证书的系统(如 FreeIPA 服务器)中,该服务是必需的。

rsyslog.service

仅在不需要持久性日志或将 systemd-journald 设置为持久模式时禁用 rsyslog.service

selinux-autorelabel-mark.service

仅在不使用 SELinux 时禁用 selinux-autorelabel-mark.service

sshd.service

仅在不需要 OpenSSH 服务器远程登录时禁用 sshd.service

sssd.service

仅在没有通过网络登录系统的用户时禁用 sssd.service (例如,使用 LDAP 或 Kerberos)。如果您禁用了 sssd-*,红帽建议禁用所有 sssd.service 单元。

syslog.service

用于 rsyslog.service

tuned.service

仅在需要使用性能调整时才禁用 tuned.service

lvm2-lvmpolld.socket

仅在不使用逻辑卷管理器(LVM)时禁用 lvm2-lvmpolld.socket

dnf-makecache.timer

仅在不需要自动更新软件包元数据时禁用 dnf-makecache.timer

unbound-anchor.timer

仅在不需要每日更新 DNS 安全扩展(DNSSEC)的根信任基础时禁用 unbound-anchor.timer。Unbound resolver 和 resolver 库使用这个根信任锚器进行 DNSSEC 验证。

要查找有关服务的更多信息,您可以运行以下命令之一:

$ systemctl cat <service_name>
$ systemctl help <service_name>

systemctl cat 命令提供位于 /usr/lib/systemd/system/<service> 下的服务文件的内容,以及所有适用的覆盖。可用的覆盖包括来自 /etc/systemd/system/<service> 文件或对应 unit.type.d 目录中的单元文件覆盖的单元文件。

有关 drop-in 文件的详情请参考 systemd.unit man page。

systemctl help 命令显示特定服务的 man page。