kexec
kexec 是一个系统调用,允许加载并启动到另一个内核。这对于跳过固件初始化过程和引导加载程序的快速重启非常有用。
准备
在 Alpine 3.19 及更高版本中,使用它所需的用户空间工具可以通过以下方式安装
apk add kexec-tools kexec-tools-doc
但请注意,并非所有内核都编译启用了 kexec 系统调用。您应该检查 /boot/config-* 文件中是否有 CONFIG_KEXEC=y
大多数 Alpine 内核都已强化,如果调用 kexec 时未通过内核引导参数解锁,则会返回 kexec_load failed: Operation not permitted
kexec_load_disabled=0
.
如果没有它,sysctl 设置 kernel.kexec_load_disabled
默认值为 1,并且无法在运行的内核中关闭,因此您需要将此参数添加到您的引导加载程序配置并重启。
用法
手动
在典型的 Alpine 设置中,可以通过以下方式使用
# kexec -l /boot/vmlinuz-edge --initrd \ /boot/initramfs-edge --reuse-cmdline \ && openrc shutdown # kexec -e
每次重启/关机时自动
可以将 kexec 设置为自动运行以实现更快的重启。这在服务器上非常有用。
首先创建两个 openrc 服务,如果未使用默认值,请编辑 BOOTPART
、KERNEL
和 INITRD
变量
/etc/init.d/kexec-load 的内容
/etc/init.d/kexec-exec 的内容
现在给予这些服务执行权限,并将它们分配到适当的运行级别
chmod a+x /etc/init.d/kexec-load chmod a+x /etc/init.d/kexec-exec rc-update add kexec-load default rc-update add kexec-exec shutdown rc-service kexec-load start
kexec 将在您下次 reboot
或 poweroff
时运行,请享用!
poweroff
,系统也会通过 kexec 重启。要临时恢复默认的 poweroff
或 reboot
行为,只需事先运行 rc-service kexec-load stop
。