kexec
是一种可以让Linux从当前运行的内核引导进入另一内核的工具,支持在不执行任何硬件初始化的情况下加快系统重引导速度,本文介绍如何使用
使用场景
工具的特点
- 加快系统重引导速度
- 避免不可靠的固件和硬件
- 保存崩溃内核的转储
- 无需 GRUB 2 配置即可引导
安装
# ubuntu
apt install kexec-tools
# fedora
dnf install kexec- tools
[*] kexec system call
检查命令如下:
$ uname -r
5.15.0-46-generic
$ grep CONFIG_KEXEC /boot/config-5.15.0-46-generic
CONFIG_KEXEC=y # 内核启动 kexec 的标志
CONFIG_KEXEC_FILE=y
CONFIG_KEXEC_SIG=y
# CONFIG_KEXEC_SIG_FORCE is not set
CONFIG_KEXEC_BZIMAGE_VERIFY_SIG=y
CONFIG_KEXEC_JUMP=y
CONFIG_KEXEC_CORE=y
sudo systemctl enable kexec-load.service
systemctl status kexec-load.service
systemctl kexec
示例
先执行 apt upgrade
尝试获取新的内核
动态加载内核,包括两个步骤
$ ls /boot/ | grep config
config-5.13.0-25-generic
config-5.15.0-46-generic
config-5.15.0-56-generic
config-5.15.0-57-generic
$ ls /boot/ | grep vmlinuz
vmlinuz
vmlinuz-5.13.0-25-generic
vmlinuz-5.15.0-46-generic
vmlinuz-5.15.0-56-generic # 当前加载的
vmlinuz-5.15.0-57-generic # 期望切换的
kexec -l /boot/vmlinuz-5.15.0-57-generic --append="`cat /proc/cmdline` ro quiet splash" --initrd=/boot/initrd.img-5.15.0-57-generic
# kexec --append="ro quiet splash" --initrd=xxx
kexec -e
$ uname -a
kexec -l /boot/vmlinuz-5.15.0-57-generic --append="`cat /proc/cmdline` ro quiet splash" --initrd=/boot/initrd.img-5.15.0-57-generic