SUSE 12 内核管理:保留当前和最新内核的正確方法
📋 适用环境
系统:SUSE Linux Enterprise Server 12 SP5 | 场景:内核升级后清理旧版本 | 目标:保留当前运行 + 最新两个内核
系统:SUSE Linux Enterprise Server 12 SP5 | 场景:内核升级后清理旧版本 | 目标:保留当前运行 + 最新两个内核
一、问题背景
SUSE 12 系统长期使用后,/boot 分区会积累多个内核版本,导致空间不足。但清理内核需要谨慎操作,必须保留:
- 当前运行的内核 - 避免系统无法启动
- 最新内核 - 作为备用引导选项
💡 最佳实践:始终保留至少 2 个内核版本,防止单点故障。
二、确认当前内核状态
2.1 查看当前运行的内核
# 当前运行的内核版本
uname -r
# 输出示例:4.12.14-122.231-default
2.2 列出所有已安装的内核
# 列出所有内核包(按版本排序)
rpm -qa | grep kernel-default | sort -V
# 输出示例(版本号由低到高):
kernel-default-4.12.14-122.124.3.x86_64
kernel-default-4.12.14-122.231.1.x86_64 ← 当前运行
kernel-default-4.12.14-122.266.1.x86_64
kernel-default-4.12.14-122.269.1.x86_64
kernel-default-4.12.14-122.275.1.x86_64
kernel-default-4.12.14-122.283.1.x86_64
kernel-default-4.12.14-122.293.1.x86_64 ← 最新版本
2.3 检查 /boot 目录
# 查看 /boot 空间使用情况
df -h /boot
# 查看内核相关文件
ls -lh /boot/vmlinuz* /boot/initrd*
# 输出示例:
# -rw-r--r-- 1 root root 11M Mar 10 10:00 /boot/vmlinuz-4.12.14-122.231-default
# -rw-r--r-- 1 root root 52M Mar 10 10:00 /boot/initrd-4.12.14-122.231-default
# -rw-r--r-- 1 root root 11M Mar 12 14:30 /boot/vmlinuz-4.12.14-122.293-default
# -rw-r--r-- 1 root root 52M Mar 12 14:30 /boot/initrd-4.12.14-122.293-default
三、清理方案(两种方法)
方法一:使用 purge-kernels 服务(推荐⭐⭐⭐⭐⭐)
✅ 推荐理由:自动化、安全、可配置,SUSE 官方工具
步骤 1:配置保留策略
# 编辑 zypp 配置文件
sudo vim /etc/zypp/zypp.conf
# 找到或添加以下配置:
multiversion = provides:multiversion(kernel)
multiversion.kernels = latest,running
配置说明:
| 配置值 | 含义 | 保留数量 |
|---|---|---|
latest,running |
最新内核 + 当前运行内核 | 2 个(可能重复) |
latest,latest-1,running |
最新 + 次新 + 当前运行 | 3 个(推荐) |
latest,latest-1,latest-2,running |
最新 3 个 + 当前运行 | 4 个 |
步骤 2:执行清理
# 手动触发清理
sudo purge-kernels
# 输出示例:
# Purging old kernels...
# Removing: kernel-default-4.12.14-122.124.3
# Removing: kernel-default-4.12.14-122.266.1
# Removing: kernel-default-4.12.14-122.269.1
# Removing: kernel-default-4.12.14-122.275.1
# Removing: kernel-default-4.12.14-122.283.1
# Done. 2 kernels retained.
步骤 3:验证结果
# 确认只剩 2 个内核
rpm -qa | grep kernel-default
# 检查 /boot 空间
df -h /boot
# 输出示例:
# Filesystem Size Used Avail Use% Mounted on
# /dev/sda1 500M 280M 220M 56% /boot
方法二:使用 zypper 手动删除
⚠️ 注意事项:手动操作风险较高,务必先确认当前运行内核
步骤 1:确认不能删除的内核
# 当前运行内核(绝对不能删)
uname -r
# 输出:4.12.14-122.231-default
# 最新内核(建议保留)
rpm -qa | grep kernel-default | sort -V | tail -1
# 输出:kernel-default-4.12.14-122.293.1.x86_64
步骤 2:删除旧内核
# 逐一删除不需要的内核(示例)
sudo zypper remove kernel-default-4.12.14-122.124.3
sudo zypper remove kernel-default-4.12.14-122.266.1
sudo zypper remove kernel-default-4.12.14-122.269.1
sudo zypper remove kernel-default-4.12.14-122.275.1
sudo zypper remove kernel-default-4.12.14-122.283.1
步骤 3:验证删除结果
# 确认剩余内核
rpm -qa | grep kernel-default
# 预期输出(只剩 2 个):
kernel-default-4.12.14-122.231.1.x86_64
kernel-default-4.12.14-122.293.1.x86_64
四、一键清理脚本
📜 自动化脚本(生产环境慎用,先测试)
#!/bin/bash
# 脚本名称:cleanup-kernels.sh
# 功能:SUSE 12 内核清理,保留当前和最新版本
# 作者:szlinux-btc
# 日期:2026-03-13
echo "=== SUSE 12 内核清理脚本 ==="
echo ""
# 获取当前运行内核
CURRENT_KERNEL=$(uname -r | sed 's/-default$//')
echo "当前运行内核:$CURRENT_KERNEL"
# 获取最新版本
LATEST_KERNEL=$(rpm -qa | grep kernel-default | sort -V | tail -1 | sed 's/kernel-default-//' | sed 's/.x86_64//')
echo "最新版本内核:$LATEST_KERNEL"
echo ""
echo "将保留以下内核:"
echo " 1. $CURRENT_KERNEL (当前运行)"
echo " 2. $LATEST_KERNEL (最新版本)"
echo ""
# 获取要删除的内核列表
TO_REMOVE=$(rpm -qa | grep kernel-default | sort -V | head -n -2 | grep -v "$CURRENT_KERNEL" | grep -v "$LATEST_KERNEL")
if [ -z "$TO_REMOVE" ]; then
echo "✅ 无需清理,当前内核数量符合要求"
exit 0
fi
echo "将删除以下内核:"
echo "$TO_REMOVE"
echo ""
read -p "确认继续?(y/N): " confirm
if [ "$confirm" != "y" ] && [ "$confirm" != "Y" ]; then
echo "已取消"
exit 0
fi
# 执行删除
for kernel in $TO_REMOVE; do
echo "正在删除:$kernel"
sudo zypper remove -y $kernel
done
echo ""
echo "✅ 清理完成"
echo ""
echo "剩余内核:"
rpm -qa | grep kernel-default | sort -V
五、常见问题
Q1: purge-kernels 命令不存在?
# 安装 purge-kernels 工具
sudo zypper install purge-kernels
Q2: /boot 空间仍然不足?
# 清理旧内核的残留文件
sudo find /boot -name "*old*" -delete
# 清理 grub 配置
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
Q3: 误删内核后无法启动?
🚨 紧急恢复:使用安装介质进入救援模式,重新安装内核
# 救援模式下挂载根分区
mount /dev/sda2 /mnt
mount /dev/sda1 /mnt/boot
chroot /mnt
# 重新安装内核
zypper install kernel-default
# 更新引导
grub2-mkconfig -o /boot/grub2/grub.cfg
六、最佳实践建议
| 建议 | 说明 | 优先级 |
|---|---|---|
| 保留 3 个内核 | 最新 + 次新 + 当前运行,更安全 | ⭐⭐⭐⭐⭐ |
| 使用 purge-kernels | 自动化工具比手动更安全 | ⭐⭐⭐⭐⭐ |
| 定期清理 | 每月检查一次 /boot 空间 | ⭐⭐⭐⭐ |
| 清理前备份 | 重要系统先做快照备份 | ⭐⭐⭐⭐⭐ |
| 监控告警 | /boot 使用率超过 80% 时告警 | ⭐⭐⭐⭐ |