飞牛OS 彻底重装 Tesla M40 驱动(580 → 535 降级)

故障背景

机器是 Dell R720 + NVIDIA Tesla M40,系统是 飞牛OS(内核 6.18.18.c1032-trim)。

飞牛这个定制内核把 NVIDIA 580.142 驱动硬编译进了内核镜像——不是 apt 装的、不是 dkms 管的、磁盘上也找不到对应的 .ko 文件。这就导致一个会出现以下现象:

  • lsmod | grep nvidia 能看到模块加载着
  • nvidia-smi 命令不存在
  • /dev/nvidia* 设备文件一个都没有
  • 想装别的版本驱动?一装就冲突;想卸载?apt purge、modprobe -r 全部无效

一句话总结:模块已加载但磁盘上找不到对应文件,用户态也未安装。需要通过内核启动参数将其屏蔽,待系统干净后再手动安装官方 run 包。

为什么不能直接卸载

普通 Ubuntu 上的 NVIDIA 驱动通过 apt 或 dkms 安装,可以正常卸载。但飞牛定制内核不同:

安装方式 能不能卸 怎么管
apt / dkms 外部模块 能 apt purge、dkms remove 就行
飞牛内置 builtin 不能 编译进内核镜像(vmlinuz),只能通过 GRUB 启动参数屏蔽

正确的操作顺序是:GRUB 黑名单屏蔽内置 580 → 重启 → 确认干净 → 装官方 run 版 535。

步骤 1:清掉用户态残留

先把系统里所有可能存在的 NVIDIA 用户态组件删干净。这一步删不掉内置驱动(内置的在镜像里),只是清掉后续可能干扰的东西:

apt purge -y 'nvidia-*' 'libnvidia-*'
apt autoremove --purge -y
/usr/bin/nvidia-uninstall 2>/dev/null
modprobe -r nvidia-drm nvidia-modeset nvidia-uvm nvidia 2>/dev/null
find /lib/modules/$(uname -r) -name "nvidia*.ko*" -delete
rm -rf /usr/lib/x86_64-linux-gnu/nvidia*
rm -rf /usr/lib/nvidia* /usr/lib32/nvidia*
rm -rf /etc/modprobe.d/nvidia*.conf
rm -rf /etc/X11/xorg.conf*
rm -rf /usr/local/cuda*
rm -f /lib/systemd/system/nvidia*.service
depmod -a
update-initramfs -u -k all

步骤 2:GRUB 黑名单屏蔽内置 580

通过 GRUB 启动参数屏蔽内置模块:

nano /etc/default/grub

找到 GRUB_CMDLINE_LINUX_DEFAULT 那一行,在末尾追加(注意是追加,别覆盖原来的参数):

modprobe.blacklist=nvidia,nvidia_modeset,nvidia_drm

保存退出,更新 GRUB:

update-grub
# 如果 update-grub 报错或者没生效,用这条直接生成:
grub-mkconfig -o /boot/grub/grub.cfg

步骤 3:重启并验证屏蔽成功

reboot

重启完重新 SSH 上来,跑这条:

lsmod | grep nvidia

必须无任何输出。如果还能看到 nvidia / nvidia_modeset / nvidia_drm 模块,说明 GRUB 参数没生效,回去检查步骤 2 有没有写对。此步未通过请勿继续后续操作。

步骤 4:下载官方 Tesla 535 驱动

请使用 NVIDIA 官方 Tesla 驱动 535.309.01 稳定版。飞牛应用中心或系统源提供的 580 版本与定制内核不兼容,请勿使用。

NVIDIA 官方直链直接 wget 会返回 403,需要伪装 User-Agent 和 Referer,使用下面这条命令下载:

cd /tmp
curl -L -o NVIDIA-Linux-x86_64-535.309.01.run \
  -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome" \
  -e "https://www.nvidia.cn/" \
  "https://cn.download.nvidia.com/tesla/535.309.01/NVIDIA-Linux-x86_64-535.309.01.run"

下完确认一下大小,应该是 327 MB 左右:

ls -lh /tmp/*.run
# 期望看到:327M ... NVIDIA-Linux-x86_64-535.309.01.run

注意:/tmp 目录重启后会被系统清空,请下载完成后立即执行安装。

步骤 5:安装驱动(服务器无桌面参数)

chmod +x /tmp/NVIDIA-Linux-x86_64-535.309.01.run
/tmp/NVIDIA-Linux-x86_64-535.309.01.run --no-dkms --no-x-check --no-opengl-files

三个参数的含义:

  • --no-dkms:不要走 dkms,飞牛定制内核不兼容 dkms 管理
  • --no-x-check:服务器没装桌面,跳过 X server 检查
  • --no-opengl-files:不装 OpenGL 库,服务器用不到

安装过程中所有交互问题一律选 No:不装 32 位兼容库、不更新 xorg.conf、不用 dkms。

步骤 6:刷新缓存并验证

depmod -a
ldconfig
nvidia-smi

成功的话 nvidia-smi 应该输出类似:

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 535.309.01   Driver Version: 535.309.01   CUDA Version: 12.2  |
|-------------------------------+----------------------+----------------------+
| Tesla M40  On                 | 00000000:03:00.0 Off |                    0 |
| 11520MiB / 11520 MiB  ...    |                    |      

看到 Driver Version: 535.309.01 和 Tesla M40 11520 MiB 即表示安装成功。

常见问题与注意事项

  1. /tmp 目录重启后清空:下载完 run 包后请先完成安装,再重启系统。
  2. modprobe -r 无法卸载内置模块:内置(builtin)模块不能通过 modprobe -r 卸载,会提示 "Module nvidia is in use" 或静默无效。
  3. 飞牛应用中心更新会覆盖手动安装的驱动:装完 535 后,如果应用中心提示更新 NVIDIA 驱动,请勿点击,否则会重新安装内置 580 版本。
  4. 必须添加 --no-dkms 参数:不加该参数时安装器会尝试将模块加入 dkms 管理,与飞牛定制内核不兼容,导致安装后 nvidia-smi 无法运行。
  5. NVIDIA 直链 403:直接 curl 官方链接会被拒,必须带 UA 和 Referer,用步骤 4 那条完整命令。
  6. GRUB 参数务必验证生效:执行 update-grub 后,请运行 lsmod | grep nvidia 确认模块已屏蔽,再继续后续步骤。

最终状态:内核保留飞牛原厂 6.18.18.c1032-trim,内置 580 永久黑名单,跑官方稳定版 535.309.01,Tesla M40 11520 MiB 满血,长期稳定运行。

Rick Chou  |  ale211@foxmail.com

飞牛OS 6.18.18.c1032-trim · Tesla M40 · Driver 535.309.01