软重启的引入

2024年6月13日 | Thorsten Kukuk | 无许可

简介

systemd v254 引入了一种新的重启方法:systemctl soft-reboot。软重启类似于常规重启,但仅影响用户空间。此命令执行

  • 关闭所有正在运行的服务和其他单元
  • 可选:切换到新的根文件系统
  • 重新执行 systemd
  • 再次启动所有 systemd 服务

此方法的优点是重启速度非常快

  • 不涉及硬件、固件和引导加载程序
  • 不涉及内核
  • 不涉及 initrd

但仍有一些挑战需要解决

  • 内核表不会被刷新(可能会破坏 firewalld+podman 等服务)。
  • 没有 initrd 意味着通常在 initrd 中执行的所有操作都不会执行。对于 MicroOS 而言,这将导致无法挂载 /etc 的 overlayfs 进行事务更新,或为新的 SELinux 策略重新标记系统。
  • /run 不会被清除,这意味着触发重启的需求不会被移除。这可能会影响许多不期望 /run 中的文件保留下来的服务。

尽管如此,此方法对于使用事务更新进行快速重启来说是理想的,例如,如果您只是安装了另一个软件包。

当前状态

软重启的支持已完全集成到事务更新和 rebootmgr 中。已解决已知的、可重现的软重启问题。

目前,软重启在事务更新中仍然被禁用,但将在不久的将来默认启用。

如何使用

  • 管理员可以使用以下命令触发立即软重启:systemctl soft-reboot
  • 可以通过 rebootmgr 触发计划的软重启:rebootmgrctl soft-reboot
  • 使用 transactional-update 时,如果启用了软重启,则无法强制执行软重启,transactional-update reboot 将根据软件包更新列表选择最合适的重启方法。有关更多详细信息和配置方法,请参阅 man zypp-boot-plugin

可以使用 last 命令检查是执行了软重启还是硬重启。条目 s-rebootsoft-reboot 表示执行了软重启,reboot 表示这是正常重启。检测仅在使用 systemd v256 或更高版本时才能可靠工作。

安装和配置

此功能的先决条件是安装了 patterns-microos-base-zypper 软件包。此模式可能在仅定期更新的旧安装中缺失。

zypper 插件 zypp-boot-plugin 分析将要安装或更新的软件包列表,并确定是否需要硬重启或软重启就足够了。/usr/etc/zypp/zypp-boot-plugin.conf 包含默认配置,可以通过在 /etc/zypp/zypp-boot-plugin.conf.d/*.conf 中创建 drop-in 文件来覆盖该配置。

配置文件 /usr/etc/tukit.conf 定义了系统默认值。变量 REBOOT_ALLOW_SOFT_REBOOT 要么设置为 false,这意味着默认情况下禁用软重启,要么设置为 true,这意味着如果请求重启,则始终执行硬重启。

如何启用

要在事务更新中启用软重启支持,请创建目录 /etc/tukit.conf.d/ 并创建一个文件

echo "REBOOT_ALLOW_SOFT_REBOOT=true" > /etc/tukit.conf.d/soft-reboot.conf

如何禁用

要在事务更新中禁用软重启支持,请创建目录 /etc/tukit.conf.d/ 并创建一个文件

echo "REBOOT_ALLOW_SOFT_REBOOT=false" > /etc/tukit.conf.d/soft-reboot.conf

类别: 博客

标签

分享这篇文章