kexec¶
kexec是一个系统调用,能够从当前运行的内核直接加载和启动另一个内核。这种方式在内核开发或者生产环境需要快速重启(无需等待BIOS启动漫长过程)。需要注意,kexec可能对于设备必须完全重初始化才能工作的情况不适用,虽然这种情况较为少见。
安装¶
软件包
kexec-tools
sudo dnf install kexec-tools
使用kexec¶
虽然通常我们不需要执行 kexec
,一般都是系统crash时候,通过 Linux内核Kdump 服务自动调用 kexec
来保存内核转储。不过,我们可以通过 kexec
来快速切换内核
例如,当前在 Fedora ,内核版本:
uname -r
显示:
5.15.6-200.fc35.x86_64
使用 sudo dnf update
更新整个系统后,最新安装的内核位于 /boot
目录下:
vmlinuz-5.17.8-200.fc35.x86_64
initramfs-5.17.8-200.fc35.x86_64.img
对于物理服务器,重启需要进行硬件初始化,特别是对于大内存服务器以及大量磁盘设备的存储服务器,初始化时间非常漫长,而且重复启动容易引发硬件异常。所以,我们可以通过 kexec
来跳过硬件初始化,直接加速启动
指定内核
kexec
:
kexec -l /boot/vmlinuz-5.17.8-200.fc35.x86_64 --initrd=/boot/initramfs-5.17.8-200.fc35.x86_64.img --reuse-cmdline
kexec -e
警告
使用 kexec -e
直接启动内核,不会将挂载的目录 umount
,也不会非常优雅地停止任何运行服务,所以,还是推荐下文使用 Systemd进程管理器 来处理 kexec
建议采用 Systemd进程管理器 来里
kexec -l /boot/vmlinuz-5.17.8-200.fc35.x86_64 --initrd=/boot/initramfs-5.17.8-200.fc35.x86_64.img --reuse-cmdline
systemctl kexec