ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Ubuntu 24.04 + RTX 5090:NVIDIA 595.71.05 被 unattended-upgrades 自动升级到 595.84,导致驱动版本漂移的排查与恢复

2026/8/14 23:59:32 拓冰建站 浏览量
Ubuntu 24.04 + RTX 5090:NVIDIA 595.71.05 被 unattended-upgrades 自动升级到 595.84,导致驱动版本漂移的排查与恢复

背景

之前我已经遇到过一次 RTX 5090 在 Ubuntu 24.04 下的 NVIDIA 驱动稳定性问题。

当时的结论是:

  • 595.84-open下出现过 PCIe AER Fatal、Xid 79、GPU fallen off the bus
  • 回退到595.71.05-open后恢复稳定
  • 原计划对 NVIDIA 相关包执行apt-mark hold
  • 但后来发现,当时实际上并没有真正执行 HOLD

这次系统再次出现异常迹象后,最终确认:Ubuntu 的 unattended-upgrades 在后台把 NVIDIA 595.71.05 自动升级到了 595.84。

更有意思的是,由于机器一直没有重启,因此出现了一个非常典型的状态:

RAM 中正在运行的 NVIDIA 驱动:595.71.05 磁盘上下一次准备加载的驱动:595.84

这篇记录完整整理一下排查和恢复过程。


一、发现 unattended-upgrades 自动升级了 NVIDIA 驱动

首先检查:

/var/log/unattended-upgrades/unattended-upgrades.log

发现 2026-08-12 的日志:

2026-08-12 06:15:34,945 INFO Starting unattended upgrades script 2026-08-12 06:15:34,960 INFO Allowed origins are: o=Ubuntu,a=noble, o=Ubuntu,a=noble-security, o=UbuntuESMApps,a=noble-apps-security, o=UbuntuESM,a=noble-infra-security 2026-08-12 06:15:40,568 INFO Packages that will be upgraded: libnss-systemd libnvidia-cfg1-595 libnvidia-common-595 libnvidia-compute-595 libnvidia-decode-595 libnvidia-encode-595 libnvidia-extra-595 libnvidia-fbc1-595 libnvidia-gl-595 libpam-systemd libsystemd-shared libsystemd0 libudev1 nvidia-compute-utils-595 nvidia-dkms-595-open nvidia-driver-595-open nvidia-kernel-common-595 nvidia-kernel-source-595-open nvidia-utils-595 systemd systemd-dev systemd-resolved systemd-sysv systemd-timesyncd udev xserver-xorg-video-nvidia-595 2026-08-12 06:18:21,652 INFO All upgrades installed

这已经可以直接确认:

不是手工执行apt upgrade导致,而是 unattended-upgrades 自动升级了整套 NVIDIA 595 驱动。

其中最关键的包包括:

nvidia-driver-595-open nvidia-dkms-595-open nvidia-kernel-source-595-open nvidia-kernel-common-595 nvidia-utils-595 libnvidia-compute-595 libnvidia-gl-595

二、最关键的现象:RAM 是 595.71.05,磁盘已经变成 595.84

执行:

cat/proc/driver/nvidia/version modinfo-Fversion nvidia

得到:

NVRM version: NVIDIA UNIX Open Kernel Module for x86_64 595.71.05 ... 595.84

这两个结果看似矛盾,其实非常关键。

/proc/driver/nvidia/version

表示:

当前已经加载进内核、正在运行的 NVIDIA 模块版本。

当前结果:

595.71.05

modinfo -F version nvidia

表示:

磁盘上当前modinfo能找到的 NVIDIA 内核模块版本。

当前结果:

595.84

于是当时机器的真实状态其实是:

当前 RAM: 595.71.05 磁盘: 595.84

原因很简单:

  1. 系统原本启动时加载的是 595.71.05
  2. unattended-upgrades 在机器运行期间升级了 NVIDIA 软件包
  3. 磁盘文件已经被替换成 595.84
  4. 但 Linux 不会自动把正在运行的内核模块替换掉
  5. 所以 RAM 中仍然保留 595.71.05

这个时候最重要的一件事情就是:

不要急着 reboot。

如果直接重启,当前 RAM 中最后还在工作的 595.71.05 会消失,系统下一次就会加载磁盘上的 595.84。


三、确认 Ubuntu 仓库已经只提供 595.84

执行:

apt-cachemadison\nvidia-driver-595-open\nvidia-dkms-595-open\nvidia-kernel-source-595-open\nvidia-kernel-common-595\nvidia-compute-utils-595\nvidia-utils-595\libnvidia-compute-595\libnvidia-gl-595

得到的版本全部已经是:

595.84-0ubuntu0.24.04.1

来源包括:

noble-updates noble-security

说明旧的:

595.71.05-0ubuntu0.24.04.1

已经不能直接从当前 APT 仓库重新安装。


四、幸运的是:APT 缓存里还保留完整的 595.71.05

执行:

find/var/cache/apt/archives-maxdepth1\-typef-name'*595.71.05*.deb'\-printf'%f\n'|sort

发现旧版本.deb全部还在:

libnvidia-cfg1-595_595.71.05-0ubuntu0.24.04.1_amd64.deb libnvidia-common-595_595.71.05-0ubuntu0.24.04.1_amd64.deb libnvidia-compute-595_595.71.05-0ubuntu0.24.04.1_amd64.deb libnvidia-decode-595_595.71.05-0ubuntu0.24.04.1_amd64.deb libnvidia-encode-595_595.71.05-0ubuntu0.24.04.1_amd64.deb libnvidia-extra-595_595.71.05-0ubuntu0.24.04.1_amd64.deb libnvidia-fbc1-595_595.71.05-0ubuntu0.24.04.1_amd64.deb libnvidia-gl-595_595.71.05-0ubuntu0.24.04.1_amd64.deb nvidia-compute-utils-595_595.71.05-0ubuntu0.24.04.1_amd64.deb nvidia-dkms-595-open_595.71.05-0ubuntu0.24.04.1_amd64.deb nvidia-driver-595-open_595.71.05-0ubuntu0.24.04.1_amd64.deb nvidia-firmware-595-595.71.05_595.71.05-0ubuntu0.24.04.1_amd64.deb nvidia-kernel-common-595_595.71.05-0ubuntu0.24.04.1_amd64.deb nvidia-kernel-source-595-open_595.71.05-0ubuntu0.24.04.1_amd64.deb nvidia-utils-595_595.71.05-0ubuntu0.24.04.1_amd64.deb xserver-xorg-video-nvidia-595_595.71.05-0ubuntu0.24.04.1_amd64.deb

一共 16 个。

这就给了一个非常好的恢复窗口:

RAM 中还跑着稳定的 595.71.05,同时本地缓存又完整保留了旧版本安装包。


五、先把旧版驱动包单独备份

为了避免以后执行:

aptclean

导致这些旧包被删除,先永久备份:

mkdir-p/root/nvidia-595.71.05-debscp-av/var/cache/apt/archives/*595.71.05*.deb\/root/nvidia-595.71.05-debs/

确认:

find/root/nvidia-595.71.05-debs\-maxdepth1-name'*.deb'|wc-l

结果:

16

以后即使 Ubuntu 仓库完全不再提供 595.71.05,也可以直接使用本地包恢复。


六、先模拟降级

不要直接安装,先执行模拟:

apt-sinstall--allow-downgrades\/root/nvidia-595.71.05-debs/*.deb

主要检查两件事:

1. NVIDIA 包是否全部从 595.84 降级到 595.71.05

预期:

595.84-0ubuntu0.24.04.1 ↓ 595.71.05-0ubuntu0.24.04.1

2. 有没有误删除大量无关软件包

如果只是 NVIDIA 595 软件栈的正常 downgrade,就可以继续。


七、真正执行 595.84 → 595.71.05 降级

执行:

aptinstall--allow-downgrades\/root/nvidia-595.71.05-debs/*.deb

这里使用 APT 安装本地.deb,而不是简单执行:

dpkg-i*.deb

主要是为了让 APT 正确处理各包之间的依赖关系。

整个过程中:

不要 reboot 不要 rmmod nvidia 不要 modprobe nvidia 不要 apt upgrade 不要 apt full-upgrade

因为当前内存里还运行着正常的 595.71.05,没有必要主动破坏这个状态。


八、降级后确认 RAM 和磁盘重新一致

再次检查:

cat/proc/driver/nvidia/version modinfo-Fversion nvidia

目标状态:

/proc/driver/nvidia/version 595.71.05 modinfo -F version nvidia 595.71.05

也就是:

RAM = 595.71.05 Disk = 595.71.05

再检查:

dkms status|grep-invidia

以及:

dpkg-query-W-f='${binary:Package}\t${Version}\n'|grep-E'nvidia|libnvidia'|grep595|sort

主要驱动组件应该全部恢复到:

595.71.05-0ubuntu0.24.04.1

九、这次一定执行 HOLD

上一次最大的问题不是没有解决,而是:

解决之后忘了锁版本。

因此这次确认降级完成后立即执行:

apt-mark hold\nvidia-driver-595-open\nvidia-dkms-595-open\nvidia-kernel-source-595-open\nvidia-kernel-common-595\nvidia-compute-utils-595\nvidia-utils-595\libnvidia-cfg1-595\libnvidia-common-595\libnvidia-compute-595\libnvidia-decode-595\libnvidia-encode-595\libnvidia-extra-595\libnvidia-fbc1-595\libnvidia-gl-595\xserver-xorg-video-nvidia-595

验证:

apt-mark showhold|grep595|sort

这一步非常重要。

因为 APT 现在仍然会认为:

Installed: 595.71.05 Candidate: 595.84

但只要处于 HOLD 状态,正常的 unattended-upgrades 就不会再把这些软件包自动更新回 595.84。


十、最终重启验证

所有检查完成后,进行了正常 reboot。

重启之后执行:

cat/proc/driver/nvidia/version modinfo-Fversion nvidia nvidia-smi dkms status|grep-invidia

最终全部正常。

也就是说,系统已经真正完成:

595.84 落盘 ↓ 本地 .deb 降回 595.71.05 ↓ DKMS 恢复 595.71.05 ↓ HOLD NVIDIA 软件包 ↓ reboot ↓ 重新加载 595.71.05 ↓ GPU 正常

至此恢复完成。


十一、一个额外现象:PCIe replay error 累计到 3009,但模型仍稳定

这两天运行大模型时还注意到一个现象:

# gpu rxpci txpci sbecc dbecc pci # Idx MB/s MB/s errs errs errs 0 0 2 - - 3009 0 0 0 - - 3009

这里最后一列:

pci errs

可以理解为 PCIe replay 相关的累计计数。

比较重要的是:

3009 3009 3009

数值虽然不为 0,但已经不继续增长。

这和之前的:

AER: Uncorrectable (Fatal) Xid 79 GPU has fallen off the bus

不是同一个严重程度。

PCIe 本身有链路层重传机制,所以可能出现:

PCIe 传输出现错误 ↓ 链路自动 replay ↓ 重传成功 ↓ CUDA / 大模型任务继续正常

因此,单纯看到一个比较大的累计值,并不等于当前仍然存在持续故障。

相比绝对值,我更关注的是:

这个值是否继续增长。

例如:

3009 3009 3009 3009

比:

3009 3200 3800 5000

健康得多。

后续可以持续观察:

nvidia-smi dmon-i0-set-d10-oT

同时监控内核:

journalctl-k-f|grep--line-buffered-Ei'AER|NVRM|Xid|PCIe|fallen off'

目前实际情况是:

大模型持续稳定运行 PCIe replay 计数没有继续明显上涨 没有新的 Xid 79 没有 GPU fallen off bus

所以目前继续使用 595.71.05。


十二、这次问题的完整时间线

整个过程可以总结为:

最初使用 595.84 ↓ PCIe AER Fatal / Xid 79 GPU fallen off the bus ↓ 回退 595.71.05 ↓ 系统恢复稳定 ↓ 当时忘记执行 apt-mark hold ↓ 2026-08-12 06:15 unattended-upgrades 自动启动 ↓ 整套 NVIDIA 595 被自动升级到 595.84 ↓ 由于机器没有重启 RAM 中仍然是 595.71.05 磁盘已经是 595.84 ↓ 发现: /proc = 595.71.05 modinfo = 595.84 ↓ 幸好 /var/cache/apt/archives 仍保留完整 595.71.05 deb ↓ 本地整套 downgrade ↓ RAM = 595.71.05 Disk = 595.71.05 ↓ apt-mark hold ↓ reboot ↓ 595.71.05 正常加载 ↓ 目前系统和大模型运行稳定

十三、这次最大的经验

1. 驱动回退成功后,一定记得 HOLD

解决问题不代表事情结束。

如果仓库中的 Candidate 仍然是问题版本,而 unattended-upgrades 又正常开启,那么迟早可能再次自动升级。

检查:

apt-mark showhold

应该成为回退驱动之后的固定步骤。


2./procmodinfo同时检查非常有用

只看:

nvidia-smi

可能无法及时发现磁盘上的驱动已经被后台升级。

以后遇到类似情况可以直接:

cat/proc/driver/nvidia/version modinfo-Fversion nvidia

如果两个版本不同:

/proc = old modinfo = new

基本就说明:

驱动软件包已经在运行期间发生变化,但当前内核仍然加载旧模块。

这个状态下尤其要慎重 reboot。


3. 不要随便清理/var/cache/apt/archives

这次能够快速恢复,最大的幸运就是:

595.71.05 的全部 .deb 还在

对于生产环境里已经验证稳定、但仓库可能随时淘汰的 NVIDIA 驱动版本,建议直接另外存一份:

/root/nvidia-595.71.05-debs/

以后恢复会简单很多。


4. 不建议为了锁 NVIDIA 而关闭全部 unattended-upgrades

unattended-upgrades本身仍然负责 Ubuntu 的很多正常安全更新。

更合理的方式是:

系统安全更新继续 + 已知不稳定的 NVIDIA 驱动单独 HOLD

而不是一刀切关闭全部自动安全更新。


最终状态

目前系统:

OS : Ubuntu 24.04 GPU : NVIDIA GeForce RTX 5090 Driver : 595.71.05 Open Kernel Module RAM : 595.71.05 Disk : 595.71.05 DKMS : 595.71.05 APT HOLD : 已配置 Reboot : 已完成 CUDA/LLM : 正常稳定运行

这次问题最终不是一个新的 GPU 硬件故障,而是之前修复之后漏掉了最后一个非常重要的步骤:

HOLD。

导致 unattended-upgrades 在 2026-08-12 又把 595.84 自动装了回来。

好在发现时机器还没有重启,旧的 595.71.05 内核模块仍然存活在 RAM 中,同时 APT cache 里也保留了完整旧包,因此最终顺利恢复。