
🔧 Ubuntu Server 升级后 NVIDIA 驱动失效?一文搞定!(附完整修复 + 长期预防方案)
适用场景:Ubuntu Server / Ubuntu Desktop(无图形界面) + 使用 .run 安装 CUDA 或 NVIDIA 驱动 + apt upgrade 后 nvidia-smi 报错
✅ 快速解决方案(直接复制粘贴)
如果你正面临 nvidia-smi 报错,且系统刚升级过内核,请按以下步骤操作:
# 1. 安装必要工具
sudo apt update
sudo apt install -y dkms build-essential linux-headers-$(uname -r)
# 2. 查看驱动版本(通常在 /usr/src/nvidia-*)
ls /usr/src | grep nvidia
# 假设输出为 nvidia-575.57.08,则执行:
sudo dkms add -m nvidia -v 575.57.08
sudo dkms build -m nvidia -v 575.57.08 -k $(uname -r)
sudo dkms install -m nvidia -v 575.57.08 -k $(uname -r)
# 3. 加载驱动
sudo depmod -a
sudo modprobe nvidia
# 4. 验证
nvidia-smi
✅ 如果 nvidia-smi 正常输出 GPU 信息,恭喜你,驱动已恢复!
💡 提示:如果你不知道驱动版本,跳到下文“如何查找原始驱动版本”一节。
📚 详细教程:为什么升级后会“掉驱动”?如何彻底解决?
❓ 问题现象
你在 Ubuntu Server 上使用 apt upgrade 后重启,发现:
nvidia-smi
# 输出:
# NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver.
但你记得之前明明装好了驱动,这是为什么?
🔍 根本原因:内核升级导致驱动模块失效
当你执行 apt upgrade 时,系统可能升级了 Linux 内核(例如从 6.14.0-27-generic → 6.14.0-28-generic)。
而 NVIDIA 驱动是一个 内核模块.ko 文件),它必须为当前运行的内核版本专门编译。
如果你是通过 NVIDIA 官方 .run 文件 安装的驱动:
它只会在安装时的内核上编译模块;
它不自动注册到 DKMS(Dynamic Kernel Module Support);
因此,内核一升级,旧模块无法加载,新内核没有模块 → 驱动“消失”。
🧩 修复原理:把 .run 驱动“纳入”DKMS 管理
虽然 .run 安装默认不使用 DKMS,但它通常会在 /usr/src/ 留下驱动源码和 dkms.conf 文件。
我们可以通过手动命令,将这些源码注册到 DKMS,并为当前内核重新构建模块。
这样,未来再升级内核,DKMS 会自动为你重建驱动!
🛠️ 详细操作步骤(含容错处理)
Step 1:确认问题
# 查看当前内核
uname -r
# 输出示例:6.14.0-28-generic
# 检查 nvidia-smi 是否失败
nvidia-smi
# 如果报错,继续
Step 2:安装 DKMS 和编译依赖
sudo apt update
sudo apt install -y dkms build-essential linux-headers-$(uname -r)
✅ dkms:动态重建内核模块
✅ build-essential:编译工具链(gcc, make 等)
✅ linux-headers-$(uname -r):当前内核的头文件(必须!)
Step 3:查找原始 NVIDIA 驱动版本
如果你不知道自己的驱动版本,执行:
ls /usr/src | grep nvidia
输出可能类似:
nvidia-575.57.08
nvidia-535.161.07
✅ 这就是你的驱动模块目录名,也是版本号。
📌 命名规则nvidia-<驱动版本号>,如 nvidia-575.57.08
Step 4:使用 DKMS 重建驱动模块
假设你查到的版本是 nvidia-575.57.08,执行:
# 注册模块
sudo dkms add -m nvidia -v 575.57.08
# 为当前内核构建模块
sudo dkms build -m nvidia -v 575.57.08 -k $(uname -r)
# 安装模块
sudo dkms install -m nvidia -v 575.57.08 -k $(uname -r)
📌 参数说明:
- -m nvidia:模块名
- -v 575.57.08:驱动版本
- -k $(uname -r):目标内核版本
Step 5:加载驱动并验证
# 更新模块依赖
sudo depmod -a
# 加载 NVIDIA 驱动
sudo modprobe nvidia
# 验证
nvidia-smi
✅ 如果看到 GPU 信息,说明成功!
Step 6:检查 DKMS 状态(可选)
sudo dkms status
你应该看到类似:
nvidia, 575.57.08, 6.14.0-28-generic, x86_64: installed
这表示驱动已成功注册并为当前内核安装。
🛡️ 长期预防:避免未来再“掉驱动”
✅ 方法一:确保 dkms 和 linux-headers 始终安装
# 检查是否安装
dpkg -l | grep linux-headers-$(uname -r)
dpkg -l | grep dkms
# 如果没有,安装
sudo apt install -y dkms linux-headers-$(uname -r)
✅ 一旦驱动被 DKMS 管理,每次内核升级后系统会自动重建模块。
✅ 方法二:改用 .deb 包安装(推荐)
避免使用 .run 文件,改用 NVIDIA 官方 .deb + APT 安装,完全自动化:
# 添加 CUDA 仓库(Ubuntu 24.04 兼容)
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt update
# 安装驱动(自动依赖 DKMS)
sudo apt install -y nvidia-driver-575
✅ 从此以后apt upgrade 不再怕!
✅ 方法三:禁用 Secure Boot(避免签名问题)
如果系统提示 kmodsign 或 MOK 相关错误:
重启进入 BIOS
找到 Secure Boot 选项
设置为 Disabled
✅ 否则每次重建模块都需要手动签名。
🧰 实用脚本:一键检查 & 修复
创建脚本 /usr/local/bin/nvidia-fix.sh:
#!/bin/bash
# nvidia-fix.sh - 一键修复 NVIDIA 驱动
set -e
echo "🔧 正在修复 NVIDIA 驱动..."
# 查找最新 nvidia-xxx 目录
NVIDIA_SRC=$(ls /usr/src/ | grep nvidia | head -n1)
if [ -z "$NVIDIA_SRC" ]; then
echo "❌ 未找到 /usr/src/nvidia-* 目录"
exit 1
fi
VERSION=$(echo $NVIDIA_SRC | cut -d'-' -f2)
echo "📦 检测到驱动版本: $VERSION"
# 安装依赖
sudo apt install -y dkms build-essential linux-headers-$(uname -r) >/dev/null 2>&1
# DKMS 操作
sudo dkms add -m nvidia -v $VERSION >/dev/null 2>&1 || true
sudo dkms build -m nvidia -v $VERSION -k $(uname -r)
sudo dkms install -m nvidia -v $VERSION -k $(uname -r)
# 加载
sudo depmod -a
sudo modprobe nvidia
# 验证
echo "✅ 驱动修复完成!"
nvidia-smi | head -5
赋予执行权限:
sudo chmod +x /usr/local/bin/nvidia-fix.sh
以后只需:
sudo nvidia-fix.sh
📝 写在最后
这个问题在使用 .run 安装 CUDA 的用户中非常普遍,但官方文档并未强调“内核升级风险”。
通过本文的方法,你不仅快速修复了问题,还建立了长期稳定的驱动管理机制。
希望这篇教程能帮助更多人少走弯路!
如果你觉得有用,欢迎点赞、收藏、转发!也欢迎在评论区分享你的修复经验。
📬 作者:Geek XiaoCheng
🗓️ 发布日期:2025年8月21日
🏷️ 标签Ubuntu NVIDIA CUDA dkms Linux 深度学习 服务器维护
✅ 本文适用系统:Ubuntu 20.04 / 22.04 / 24.04 / 25.04(Server 或 Desktop)
✅ 适用显卡:NVIDIA GeForce / RTX / Tesla / A100 等所有支持 Linux 驱动的型号