logind.conf `IdleAction=kexec` 到底是做什么的?

logind.conf `IdleAction=kexec` 到底是做什么的?

logind.conf 手册页说:

空闲动作=

配置系统空闲时要执行的操作。采用“忽略”、“断电”、“重新启动”、“停止”、“kexec”、“挂起”、“休眠”、“混合睡眠”、“挂起然后休眠”和“锁定”之一。默认为“忽略”。

我还没有kexec在任何地方看到这个值的解释。这里到底kexec做什么?

有同等的吗kexec(8)它运行的命令行?

在什么情况下在系统空闲时热重启到新内核会有用?

答案1

是的,有一个kexec命令行工具可以用来kexec进入新内核。

从用户的角度来看, usingkexec与 using 大致相同reboot,只是它往往更快,因为当前内核加载新内核并开始执行它(绕过 BIOS、固件、引导加载程序等)

登录提供诸如“kexec”(或“重新启动”)之类的空闲操作的目的是帮助您的系统始终保持最新状态,这对于内核升级通常需要重新启动。空闲检测有助于找出什么时候现在是重新启动系统的好时机(希望在不会造成太大干扰的时候),并且经常重新启动系统(假设它足够频繁地空闲)将确保它在不久后启动到新内核包管理器会安装更新的包管理器。

当然,并非所有用户都会同意这一设置,因此它当然不是此选项的默认设置(默认值是“忽略”,它不执行任何操作...)


要了解该kexec操作到底触发了什么,您可以开始查看systemctl kexec,与 平行systemctl reboot。它的文档说:

通过以下方式关闭并重新启动系统执行程序。这相当于systemctl start kexec.target --job-mode=replace-irreversible --no-block

所以这要经过一个特殊的过程kexec.目标,通常配置为要求Asystemd-kexec.service,然后来电/usr/lib/systemd/systemd-shutdown带有参数的工具(kexec通过 a systemctl --force kexec,事实证明......)。

要更进一步,您需要查看源代码,您会发现这systemd-shutdown kexec将简单地尝试重新启动使用kexec -e,如果失败,则逻辑会回退到“正常”重新启动。

看着kexec(8)手册页,你会看到kexec -e所需要的一切执行kexec 重新启动,这就是 systemd 集成的全部内容。

缺少的另一部分是将引导内核加载到内存中的部分,即执行的部分,kexec -l以便实际执行能够正常工作。这是另一个需要遵循的兔子洞。我建议将其作为读者的练习(或者可能非常适合 U&L 的一个单独问题!)

相关内容