必须精确锁定当前运行内核的所有相关包(如linux-image-6.8.0-45-generic、linux-modules-extra-6.8.0-45-generic等),而非仅hold元包linux-image-generic;同时需禁用无人值守升级并管控交互式升级,否则仍可能意外升级内核导致nvidia驱动失效。

直接禁用自动内核更新是防止 NVIDIA 驱动失效最稳妥的手段之一,但不能只改一两个配置就以为万事大吉——apt-mark hold 错误的包名、漏掉 linux-modules-extra、忽略 DKMS 状态,都会让禁用失效。
怎么用 apt-mark hold 锁定当前内核
锁定必须精确到已安装的具体内核包,不是泛泛地 hold linux-image-generic 就够了。Ubuntu 会继续安装新内核,除非你把当前正在用的每一个相关包都显式 hold。
- 先查清当前运行的内核:
uname -r(比如输出6.8.0-45-generic) - 再查它对应的所有已安装包:
dpkg --get-selections | grep "linux-image-6.8.0-45\|linux-modules-extra-6.8.0-45\|linux-headers-6.8.0-45" - 对每一行结果中的包名执行:
sudo apt-mark hold <package-name></package-name>(例如sudo apt-mark hold linux-image-6.8.0-45-generic linux-modules-extra-6.8.0-45-generic linux-headers-6.8.0-45-generic) -
注意:只 hold
linux-image-generic无法阻止linux-image-6.8.0-45-generic被单独拉进来——后者是实际被安装的包,前者只是元包(metapackage)
为什么改 /etc/apt/apt.conf.d/20auto-upgrades 还是会更新内核
这个文件只控制 unattended-upgrades 服务的行为,而手动运行 sudo apt upgrade 或图形界面的“Software Updater”完全不受它影响。很多用户以为改完就安全了,结果某天手抖敲了 apt upgrade,内核照旧升级。
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- 真正起作用的是
APT::Periodic::Unattended-Upgrade "0";这行,但它只禁用无人值守升级,不禁止交互式升级 - 如果你用 GNOME 或 KDE 自带的更新工具,它们默认调用
apt,不会读这个配置 - 更彻底的做法是:在
/etc/apt/apt.conf.d/下新建一个文件(如99disable-upgrades),写入:APT::Update::Post-Invoke {"false";};(强制每次 update 后失败,避免意外刷新源)
NVIDIA 驱动是 .run 安装的,还需要禁内核更新吗
需要。手动安装的驱动不会被 apt 管理,但它编译时绑定的是当时运行的内核头文件和符号表。一旦内核升级,nvidia.ko 模块根本加载不进新内核——DKMS 不会自动重建,因为 .run 安装默认不注册进 DKMS,除非你安装时明确勾选 “Install DKMS module” 或后续手动导入。
- 检查是否已注册:
sudo dkms status | grep nvidia,无输出即未注册 - 如果没注册,禁内核更新是唯一可靠手段;否则每次重启都要进 recovery mode 手动重装驱动
- 补救办法(不推荐日常用):
sudo /usr/bin/nvidia-uninstall→ 重新运行 .run 文件 → 勾选 DKMS 选项 →sudo dkms install -m nvidia -v <version></version>
禁用后怎么安全升级内核(当真需要时)
禁用不是永久封印,而是把控制权拿回来。升级前必须确认新内核与当前 NVIDIA 驱动兼容,否则等于主动触发故障。
- 先查 NVIDIA 官网的 Driver Support Matrix,确认你的驱动版本支持目标内核(例如驱动 535.161.07 支持内核 6.11,但不支持 6.12)
- 解除 hold:
sudo apt-mark unhold <package-names></package-names>,然后sudo apt install linux-image-xxx单独安装,别用apt upgrade - 安装后立刻验证:
sudo update-grub→ 重启 →sudo modprobe nvidia→nvidia-smi,三步全通才算成功
最常被忽略的一点:即使所有配置都设对了,GRUB 默认启动项仍可能指向新内核。每次内核更新后,update-grub 会把新内核排在第一位。得手动改 /etc/default/grub 里的 GRUB_DEFAULT,设成具体菜单项编号或内核版本名,再跑一遍 sudo update-grub。










