软重启的引入
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-reboot 或 soft-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
类别: 博客
标签