飞牛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 即表示安装成功。
常见问题与注意事项
- /tmp 目录重启后清空:下载完 run 包后请先完成安装,再重启系统。
- modprobe -r 无法卸载内置模块:内置(builtin)模块不能通过 modprobe -r 卸载,会提示 "Module nvidia is in use" 或静默无效。
- 飞牛应用中心更新会覆盖手动安装的驱动:装完 535 后,如果应用中心提示更新 NVIDIA 驱动,请勿点击,否则会重新安装内置 580 版本。
- 必须添加 --no-dkms 参数:不加该参数时安装器会尝试将模块加入 dkms 管理,与飞牛定制内核不兼容,导致安装后 nvidia-smi 无法运行。
- NVIDIA 直链 403:直接 curl 官方链接会被拒,必须带 UA 和 Referer,用步骤 4 那条完整命令。
- 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