内核升级后GRUB启动菜单出现重复项,本质是GRUB配置未清理旧内核条目或内核包卸载不完整;需通过命令检查已安装内核、菜单条目及/boot文件一致性,再用grub2-mkconfig或update-grub刷新配置,并清理残留内核与镜像文件。

内核升级后 GRUB 启动菜单出现重复项,本质是 GRUB 配置未及时清理旧内核条目 或 内核包卸载不完整 导致的。这不是严重故障,但影响选择体验,也暗示系统残留冗余文件,可能占用 /boot 空间。
确认重复项来源
先查看当前实际安装的内核版本和 GRUB 菜单显示是否一致:
- 运行 rpm -q kernel(CentOS/RHEL)或 dpkg -l | grep linux-image(Debian/Ubuntu),列出所有已安装的内核包
- 运行 ls /boot/vmlinuz* 和 ls /boot/initramfs*,核对文件是否存在、命名是否匹配已安装内核
- 运行 grep "menuentry" /boot/grub2/grub.cfg | cut -d "'" -f2(RHEL/CentOS)或 grep "menuentry" /boot/grub/grub.cfg | cut -d "'" -f2(Ubuntu/Debian),查看菜单中实际显示的条目
若菜单条目数 > 已安装内核数,说明配置里残留了已卸载内核的入口;若数量一致但有明显重复命名(如两个“CentOS Linux (5.10.0-123.el7.x86_64) kernel”),可能是升级脚本异常或手动修改过配置。
刷新 GRUB 配置文件
不要手动编辑 /boot/grub2/grub.cfg(RHEL系)或 /boot/grub/grub.cfg(Debian系),它是自动生成的。应通过标准命令重建:
- RHEL/CentOS 7+:执行 grub2-mkconfig -o /boot/grub2/grub.cfg
- Ubuntu/Debian:执行 update-grub(本质是调用 grub-mkconfig)
该操作会重新扫描 /boot 下所有可用内核和 initramfs,按规则生成新菜单。执行前建议备份原配置:cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.bak。
清理残留内核与镜像文件
重复项常伴随未卸载的旧内核包或残留的 vmlinuz/initramfs 文件:
- RHEL/CentOS:用 package-cleanup --oldkernels --count=2 自动保留最新 2 个内核并删除其余;或手动 yum remove kernel-3.10.0-1127.el7.x86_64(替换为具体旧版本)
- Ubuntu/Debian:用 apt autoremove --purge 清理自动安装且不再需要的包(包括旧内核);也可用 sudo apt remove linux-image-5.4.0-xx-generic
- 清理后务必再执行一次 grub2-mkconfig 或 update-grub,否则菜单不会更新
检查 /etc/default/grub 中的生成逻辑
某些定制化设置可能导致重复生成,例如:
- GRUB_DISABLE_SUBMENU=y 被注释或设为 no,而系统检测到多个内核时可能错误展开子菜单
- GRUB_ENABLE_BLSCFG=true(启用 BootLoaderSpec)在部分 RHEL 8+/Fedora 中启用后,若 /boot/loader/entries/ 下有重复 entry 文件,也会导致菜单重复
- 检查 /etc/default/grub 是否有多余的 GRUB_MENU_ENTRY 类自定义行(非标准参数,属误加)
修改后必须运行对应平台的配置更新命令才生效。


















