NVIDIA 驱动安装失败问题排查与解决(含离线 GCC 工具链安装全过程)

NVIDIA 驱动安装失败问题排查与解决(含离线 GCC 工具链安装全过程)


一、问题背景

在某台 无网络访问能力的 Ubuntu 22.04 服务器(型号为 xxxxx G5500 V7)上,尝试安装 NVIDIA 官方驱动(NVIDIA-Linux-x86_64-570.124.04.run)时,安装过程报错,无法完成驱动安装,且 nvidia-smi 命令提示找不到。


二、问题现象

  • 执行 nvidia-smi 提示命令不存在;

  • 执行驱动安装脚本时提示:

    ERROR: Unable to load the kernel module 'nvidia.ko'. This happens most frequently when the kernel module was built against the wrong or improperly configured kernel sources
    
  • 查看 /var/log/nvidia-installer.log 日志,发现以下关键错误:

    ERROR: The kernel module failed to load. Please check the output of `dmesg | grep nvidia` for more information.
    
    ERROR: unable to find the kernel source tree for the currently running kernel.
    
    ERROR: unable to determine the path to install the libglx.so module
    
  • 查看 dmesg | grep nvidia,发现如下信息:

    nvidia: module verification failed: signature and/or required key missing - tainting kernel.
    nvidia: Unknown symbol __asan_version_mismatched (err -2)
    nvidia: Unknown symbol __tsan_func_entry (err -2)
    

三、初步分析

从日志来看,驱动安装失败的主要原因集中在以下几点:

  1. 缺少编译工具链:驱动需要编译内核模块,但系统缺少 gcc, g++, make 等工具;
  2. 缺少编译依赖库:驱动安装脚本提示找不到 libglx.so 等文件;
  3. 内核模块加载失败:日志中出现 __asan_version_mismatched__tsan_func_entry 错误,表明缺少 libasan8libtsan2
  4. 系统环境不一致:早期可以正常使用 nvidia-smi,怀疑是某次系统升级后未重建驱动模块。

四、进一步排查

1. 检查当前系统是否已安装 gccg++

gcc --version
g++ --version

输出为:

gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0

说明系统中已有 gcc,但版本较低,且未安装 g++


2. 查看当前驱动安装日志

查看 /var/log/nvidia-installer.log,发现如下关键信息:

Using: nvidia-installer ncurses user interface
-> Installing NVIDIA driver version 570.124.04.
-> Detected 128 CPUs online; setting concurrency level to 128.
-> No precompiled kernel interface was found to match your kernel; this means that the installer will need to compile a new kernel interface.
ERROR: Unable to find the kernel source tree for the currently running kernel.

提示:驱动需要编译内核模块,但系统中缺少必要的编译工具和依赖。


3. 检查系统中是否安装了 libasanlibtsan

ldconfig -p | grep libasan
ldconfig -p | grep libtsan

无输出,说明这两个库未安装。


五、解决方案

✅ 1. 在有网络的 Ubuntu 22.04 环境下载依赖包

在一台有网络连接的 Ubuntu 22.04 环境中,执行以下命令:

apt-get update
apt-get download cpp-12 libasan8 libtsan2 libgcc-12-dev gcc-12 libstdc++-12-dev g++-12

将所有下载的 .deb 文件打包,拷贝到目标服务器的目录中(如 ~/software_backup/gcc12/)。


✅ 2. 在无网络服务器上安装依赖包(顺序不能乱)

sudo dpkg -i cpp-12_12.3.0-1ubuntu1~22.04_amd64.deb
sudo dpkg -i libasan8_12.3.0-1ubuntu1~22.04_amd64.deb
sudo dpkg -i libtsan2_12.3.0-1ubuntu1~22.04_amd64.deb
sudo dpkg -i libgcc-12-dev_12.3.0-1ubuntu1~22.04_amd64.deb
sudo dpkg -i gcc-12_12.3.0-1ubuntu1~22.04_amd64.deb
sudo dpkg -i libstdc++-12-dev_12.3.0-1ubuntu1~22.04_amd64.deb
sudo dpkg -i g++-12_12.3.0-1ubuntu1~22.04_amd64.deb

⚠️ 注意:如果安装失败,提示依赖缺失,请使用 dpkg -I <包名> 查看依赖关系,并手动补充安装。


✅ 3. 设置默认编译器版本(使用 update-alternatives

sudo update-alternatives --remove-all gcc

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 60 \
                         --slave /usr/bin/g++ g++ /usr/bin/g++-12 \
                         --slave /usr/bin/gcc-ar gcc-ar /usr/bin/gcc-ar-12 \
                         --slave /usr/bin/gcc-nm gcc-nm /usr/bin/gcc-nm-12 \
                         --slave /usr/bin/gcc-ranlib gcc-ranlib /usr/bin/gcc-ranlib-12

验证:

gcc --version
g++ --version

输出应为:

gcc (Ubuntu 12.3.0-1ubuntu1~22.04) 12.3.0
g++ (Ubuntu 12.3.0-1ubuntu1~22.04) 12.3.0

✅ 4. 安装 NVIDIA 驱动

进入驱动安装包所在目录,执行:

sudo ./NVIDIA-Linux-x86_64-570.124.04.run

如之前安装失败过,建议先卸载:

sudo ./NVIDIA-Linux-x86_64-570.124.04.run --uninstall || true
sudo rmmod nvidia || true

✅ 5. 验证驱动是否安装成功

nvidia-smi

输出如下内容,表示驱动安装成功:

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 570.124.04   Driver Version: 570.124.04   CUDA Version: 12.4     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| BusId        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  NVIDIA A100 ...     On   | 00000000:00:04.0 Off |                    0 |
| N/A   38C    P0    42W / 400W |      0MiB / 40960MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

六、问题总结与分析

问题点原因分析解决方案
nvidia-smi 找不到驱动未正确安装成功安装驱动后恢复
驱动安装失败缺少编译工具链安装完整 GCC 工具链
__asan_version_mismatched 报错缺少 libasan8安装 libasan8
__tsan_func_entry 报错缺少 libtsan2安装 libtsan2
内核模块加载失败编译环境不一致设置默认 gcc/g++ 版本
系统升级后驱动失效未重新编译驱动手动重新安装驱动

七、扩展建议

✅ 对于运维人员的建议

  1. 定期检查驱动版本与内核兼容性
  2. 使用 dkms 安装 NVIDIA 驱动,实现自动适配新内核;
  3. 在无网络环境中,提前打包好依赖包
  4. 编写自动化安装脚本,便于快速恢复环境;
  5. 保留系统日志和驱动安装日志,便于后续排查。

八、附录:完整依赖包清单(Ubuntu 22.04 x86_64)

包名说明
cpp-12_12.3.0-1ubuntu1~22.04_amd64.debC 预处理器
libasan8_12.3.0-1ubuntu1~22.04_amd64.debAddressSanitizer 库
libtsan2_12.3.0-1ubuntu1~22.04_amd64.debThreadSanitizer 库
libgcc-12-dev_12.3.0-1ubuntu1~22.04_amd64.debGCC 支持库开发文件
gcc-12_12.3.0-1ubuntu1~22.04_amd64.debGCC C 编译器
libstdc++-12-dev_12.3.0-1ubuntu1~22.04_amd64.debC++ 标准库开发文件
g++-12_12.3.0-1ubuntu1~22.04_amd64.debGCC C++ 编译器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老周有AI~算法定制

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值