← 返回首页

SUSE 12 内核管理:保留当前和最新内核的正確方法

📅 2026 年 3 月 13 日 👤 szlinux-btc #SUSE #SLES #内核管理 #zypper
📋 适用环境
系统: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% 时告警 ⭐⭐⭐⭐

七、扩展阅读