ubuntu显示pending kernel upgrade l
发帖时间:2026-10-17 04:49:57
开机看到“pending kernel upgrade”这行字,显示我第一反应是显示:又来了。Ubuntu 22.04 用了一年多,显示这提示每隔几周就冒出来一次,显示像闹钟一样准时。显示可它到底在催什么?显示我盯着终端里那行黄字,突然意识到自己从没认真查过。显示 这提示来自 `update-notifier` 的显示检查机制。系统检测到 `/boot` 分区里躺着新下载的显示内核镜像,但没完成安装步骤。显示说白了,显示就是显示软件包管理器把内核文件解压到了硬盘,却没执行 `update-grub` 去更新启动菜单。显示你重启后,显示系统还是显示加载旧内核,新内核就永远处于“待命”状态。 为什么会卡住?最常见的场景是:你用 `apt upgrade` 升级系统,中途断了网,或者磁盘空间不够。apt 的事务设计是原子性的——要么全装,要么全不装。但内核更新比较特殊,它拆成了两步:先下载 `linux-image-*` 包,再触发 `postinst` 脚本去生成新的 initramfs。如果第二步没跑完,dpkg 会记下“未配置”状态,于是每次开机都提醒你。 我试过网上流传的“万能解法”——`sudo apt --fix-broken install`。有时候管用,有时候报错说 `/boot` 满了。查了下 `df -h /boot`,果然,只有 200MB 的分区被塞了四个内核版本。每个内核镜像加 initramfs 约 80MB,旧版本不自动清理,新版本装不下,死循环。 手动清理倒是简单:`dpkg --list | grep linux-image` 列出所有内核,删掉老版本,只留当前用的和最新一个。然后 `sudo update-grub` 重新生成菜单。但这里有个坑——如果你用 `apt autoremove` 清理,它可能把正在运行的内核也标记为“可删除”。得先 `uname -r` 看当前版本,再用 `apt remove --purge linux-image-旧版本号` 精确操作。 真正让我烦的是,这提示有时候是误报。比如你手动装了显卡驱动的 DKMS 模块,它依赖内核头文件。驱动更新后,DKMS 要重新编译模块,但没注册到 update-notifier 的检查列表里。系统误以为内核升级没完成,天天提醒你,其实内核好好的。 后来我干脆关掉了这个通知。编辑 `/etc/update-notifier/notifications.conf`,把 `PendingKernelUpgrade` 设为 false。不是逃避问题,是这机制本身设计得粗糙——它只检查 dpkg 状态,不检查实际运行的内核是否匹配。你明明已经手动处理好了,它还追着喊“pending”,像个小学生反复确认作业交了没。 话说回来,这提示在服务器上倒是有用。生产环境里,内核升级后必须重启才能生效,如果忘了重启,系统一直跑着有漏洞的旧内核,那才是真问题。桌面用户反而容易被误伤——你天天关机开机,内核其实早就换了,只是 dpkg 的标记没更新。 最后给个实操建议:看到这提示,先跑 `sudo apt update && sudo apt full-upgrade`。如果还提示,就查 `/boot` 空间,删旧内核,再 `sudo dpkg --configure -a`。要是都没用,八成是某个第三方驱动的 postinst 脚本挂了,看 `/var/log/dpkg.log` 最后几行,找到报错的包,禁用或重装它。别急着搜“ubuntu pending kernel upgrade 怎么解决”,先想想自己最近动了什么——是不是装了某个内核模块?是不是改了 grub 配置?这提示多半是你自己折腾出来的。