定期清理旧内核需保留当前及上一个稳定版本,ubuntu用sudo apt autoremove --purge,rhel/centos/fedora用sudo dnf remove $(dnf repoquery --installonly --latest-limit=-2 -q),并定时执行脚本+更新grub。

定期清理旧内核是保障系统安全与磁盘空间的重要操作,尤其在长期运行的服务器上,每次内核更新都会留下旧版本包,不清理容易导致 /boot 分区爆满、启动失败或升级受阻。关键不是“删得越多越好”,而是“只删不用的、保留当前和上一个稳定版本”。
确认当前运行与已安装的内核版本
执行以下命令快速比对:
-
查看当前正在使用的内核:
uname -r(例如输出6.8.0-52-generic) -
列出所有已安装的内核包(Ubuntu/Debian):
dpkg --list | grep 'linux-image-[0-9]' | grep '^ii' -
列出所有已安装的内核包(RHEL/CentOS/Fedora):
rpm -q kernel
注意:不要删除当前 uname -r 显示的版本,也建议至少保留一个前序版本用于故障回滚。
使用包管理器自动清理旧内核(推荐)
这是最安全、最符合发行版规范的方式,无需手动删文件,避免破坏 grub 配置或 /boot 引导项。
-
Ubuntu/Debian 系统:
安装并运行ubuntu-cleaner(图形界面友好)或直接使用命令行:sudo apt autoremove --purge
该命令会自动识别并卸载未被依赖的旧内核包(如linux-image-6.5.0-41-generic),同时清理对应头文件linux-headers-和模块linux-modules-包。 -
RHEL/CentOS/Fedora 系统:
使用dnf自动管理(Fedora/CentOS 8+):sudo dnf autoremove --setopt=install_weak_deps=False --exclude=kernel*
或更稳妥地指定保留数量:sudo dnf remove $(dnf repoquery --installonly --latest-limit=-2 -q)
表示只保留最新的 2 个内核版本,其余全部卸载。
配置定时任务实现自动化
将清理动作封装为脚本,并通过 cron 或 systemd timer 每月执行一次(频率不宜过高,避免误删刚更新但尚未验证的内核)。
- 创建清理脚本(如
/usr/local/bin/clean-old-kernels.sh):
Ubuntu 示例:#!/bin/bash<br> # 仅保留当前及上一个内核,自动卸载其余<br> sudo apt autoremove --purge -y 2>/dev/null
RHEL 示例:#!/bin/bash<br> sudo dnf remove -y $(dnf repoquery --installonly --latest-limit=-2 -q) 2>/dev/null - 赋予执行权限:
sudo chmod +x /usr/local/bin/clean-old-kernels.sh - 添加 cron 定时任务(每月1日凌晨2点执行):
sudo crontab -e,追加一行:0 2 1 * * /usr/local/bin/clean-old-kernels.sh >> /var/log/kernel-cleanup.log 2>&1
补充提醒:清理后务必更新引导配置
部分旧版系统(如 CentOS 7)在卸载内核后需手动更新 GRUB:
- Debian/Ubuntu:
sudo update-grub(通常apt autoremove会自动触发) - RHEL/CentOS 7:
sudo grub2-mkconfig -o /boot/grub2/grub.cfg - Fedora/CentOS 8+:
sudo grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg(UEFI 模式)
建议在脚本末尾加入对应命令,确保引导菜单同步刷新,避免重启后无法选择正确内核。











