在Linux系统运维和开发工作中,我们经常遇到需要切换不同内核版本的场景。以欧拉25.09操作系统为例,作为一款企业级Linux发行版,它通常会同时安装多个内核版本:可能是为了测试新内核的兼容性,或是保留旧内核作为故障回退方案,亦或是需要特定版本内核来支持某些硬件驱动。
我最近在部署某金融行业系统时就遇到了典型需求:生产环境需要长期稳定运行在5.10 LTS内核上,而开发团队又需要测试6.4内核对新硬件的支持。这就引出了今天要解决的核心问题——如何安全、高效地配置多内核启动顺序。
现代服务器基本都采用UEFI启动方式,其流程可简化为:
重要提示:操作前建议备份现有grub.cfg文件,执行
cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.bak
欧拉25.09采用GRUB2作为引导加载程序,其配置主要涉及:
bash复制rpm -qa | grep kernel
ls /boot/vmlinuz-*
典型输出示例:
code复制kernel-5.10.0-136.12.1.oe2209.x86_64
kernel-6.4.0-0.rc7.oe2209.x86_64
bash复制uname -r
cat /proc/version
bash复制grep ^GRUB_DEFAULT /etc/default/grub
bash复制sudo sed -i 's/GRUB_DEFAULT=.*/GRUB_DEFAULT="1"/' /etc/default/grub
bash复制sudo sed -i 's/GRUB_DEFAULT=.*/GRUB_DEFAULT="CentOS Linux (5.10.0-136.12.1.oe2209.x86_64) 25.09"/' /etc/default/grub
bash复制sudo sed -i 's/GRUB_TIMEOUT=.*/GRUB_TIMEOUT=10/' /etc/default/grub
bash复制sudo sed -i 's/installonly_limit=.*/installonly_limit=5/' /etc/dnf/dnf.conf
bash复制sudo grub2-mkconfig -o /boot/grub2/grub.cfg
bash复制sudo reboot
重启后立即检查:
bash复制uname -r
dmesg | grep "Linux version"
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 启动黑屏 | 显卡驱动不兼容 | 在GRUB菜单按e编辑,在linux行尾添加nomodeset |
| 内核panic | 文件系统损坏 | 进入救援模式执行fsck -y /dev/sdaX |
| 无法找到内核 | /boot分区未挂载 | 检查/etc/fstab配置 |
若配置错误导致无法启动:
c进入命令行code复制set root=(hd0,gpt1)
linux /vmlinuz-5.10.0-136.12.1.oe2209.x86_64 root=/dev/mapper/centos-root
initrd /initramfs-5.10.0-136.12.1.oe2209.x86_64.img
boot
我在某次数据中心迁移项目中就曾遇到这样的案例:将200多台服务器从4.18内核升级到5.10时,发现某型号RAID卡驱动存在兼容性问题。得益于完善的多内核启动配置,我们在15分钟内就全部回退到旧内核,将业务影响降到了最低。