定期清理过时linux内核需自动执行、安全保留和配套清理:保留当前及上一个内核,同步删除镜像、头文件、模块包及/boot残留,并校验grub;ubuntu/debian用apt autoremove,rhel/centos/fedora用yum-utils或dnf autoremove;脚本须含空间检查、grub更新与验证,推荐systemd timer统一调度。

定期清理未使用的过时Linux内核组件,核心是“自动执行 + 安全保留 + 配套清理”。不能只删内核镜像,还要同步清理对应的头文件(linux-headers-)、模块包(linux-modules-、linux-image-extra-)和/boot中残留文件,否则仍会占用空间、干扰GRUB。自动化不是写个脚本就完事,得结合发行版机制、保留策略和校验环节。
确认当前运行与已安装的内核组件
清理前必须明确“哪些能删”。关键命令有:
-
当前运行内核:运行
uname -r,输出如6.8.0-52-generic—— 这个版本绝对不可删; -
所有已安装内核镜像:
Ubuntu/Debian 执行dpkg --list | grep 'linux-image-[0-9]' | grep '^ii';
RHEL/CentOS/Fedora 执行rpm -q kernel或dnf list installed | grep kernel; -
配套头文件与模块:用
dpkg --list | grep 'linux-headers\|linux-modules'(Debian系)或rpm -qa | grep -E 'kernel-headers|kernel-modules'(RHEL系)检查是否残留旧版本。
按发行版启用原生自动清理机制
优先使用系统自带策略,比手动脚本更稳定、更兼容升级流程:
-
Ubuntu/Debian:编辑
/etc/apt/apt.conf.d/01autoremove,添加两行:APT::Periodic::AutoremoveInterval "7";APT::Periodic::Autoremove-Kernel-Minimum "2";
保存后,系统每7天自动运行apt autoremove --purge,只删多余内核,保留当前+上一个; -
RHEL/CentOS 7+/Fedora:先装
yum-utils(yum install -y yum-utils),再用package-cleanup --oldkernels --count=2 --assumeyes设置保留数量; -
RHEL/CentOS 8+ / Fedora(DNF):直接运行
dnf autoremove --assumeyes,或组合dnf repoquery --installonly --latest-limit=-2 -q精准生成待删列表。
封装清理动作并加入防护逻辑
单纯定时删内核风险高,脚本需包含空间检查、GRUB校验和错误退出机制:
- 在清理脚本开头加入空间判断,例如:
BOOT_FREE=$(df /boot | awk 'NR==2 {print $4}'); [ "$BOOT_FREE" -lt 2097152 ] && echo "/boot space low" >&2 || exit 1(单位KB,低于2GB则中止); - 清理后必须更新引导配置:
Ubuntu/Debian 执行update-grub > /dev/null;
RHEL/CentOS 执行grub2-mkconfig -o /boot/grub2/grub.cfg > /dev/null; - 最后加一句验证:运行
ls /boot/vmlinuz-* | grep -v "$(uname -r)" | wc -l,确认残留旧镜像个数符合预期(如设保留2个,此处应≤1)。
统一调度与日志跟踪
避免用简单cron跑脚本,推荐 systemd timer(更可靠、可查状态、支持依赖):
- 创建服务单元
/etc/systemd/system/clean-kernels.service,ExecStart指向你的清理脚本; - 创建定时器
/etc/systemd/system/clean-kernels.timer,设OnCalendar=monthly并启用:sudo systemctl daemon-reload && sudo systemctl enable --now clean-kernels.timer; - 后续查执行记录:
journalctl -u clean-kernels.service -n 20,出问题可快速定位。











