Ubuntu 22.04.3下如何彻底黑名单Nvidia相关显卡驱动以实现GPU直通
Ubuntu 22.04.3下如何彻底黑名单Nvidia相关显卡驱动以实现GPU直通
看起来你已经做了基础的黑名单配置,但确实遇到了Nvidia驱动模块“顽固”加载的问题——这种情况在Ubuntu上很常见,主要是因为单纯的blacklist只是降低模块加载优先级,依赖它的其他模块(比如系统的video服务)还是会触发加载。我来帮你一步步解决:
1. 升级你的黑名单配置(最关键的一步)
单纯的blacklist不够彻底,我们要给每个Nvidia模块加上install指令,让系统尝试加载时直接失败。编辑你的黑名单文件:
sudo nano /etc/modprobe.d/blacklist.conf
在原有内容基础上,补充以下行:
# 强制阻止Nvidia模块加载,比blacklist更彻底 install nvidia /bin/false install nouveau /bin/false install nvidiafb /bin/false install nvidia_drm /bin/false install nvidia_uvm /bin/false install nvidia_modeset /bin/false
保存退出(Ctrl+O,回车,Ctrl+X)。
2. 清理冲突的Modprobe配置文件
Nvidia驱动安装时会自动生成自己的配置文件(比如nvidia.conf、nvidia-drm.conf),这些文件会覆盖你的黑名单设置。我们先备份并移除它们:
sudo mv /etc/modprobe.d/nvidia.conf /etc/modprobe.d/nvidia.conf.bak sudo mv /etc/modprobe.d/nvidia-drm.conf /etc/modprobe.d/nvidia-drm.conf.bak # 检查是否有其他相关文件,比如nvidia-modeset.conf,有的话同样备份
3. 彻底更新Initramfs
有时候只执行update-initramfs -u会漏掉某些内核版本,我们直接更新所有内核的initramfs:
sudo update-initramfs -u -k all
4. 禁用Nvidia相关的系统服务
Nvidia的nvidia-persistenced服务会主动保持模块加载,我们需要禁用它:
sudo systemctl stop nvidia-persistenced sudo systemctl disable nvidia-persistenced
5. 终极方案:用PCI Stub接管Nvidia显卡
如果上面几步做完还是有模块加载,说明系统的某些核心服务(比如video模块)在间接调用Nvidia驱动。这时候我们可以用内核参数让系统直接用pci-stub接管Nvidia显卡,彻底阻止驱动加载:
- 首先查Nvidia显卡的PCI ID:
输出会类似:lspci -nn | grep NVIDIA01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GM107GL [Quadro M2000] [10de:13bb] (rev a2),这里的10de:13bb就是我们需要的ID。 - 编辑Grub配置:
找到sudo nano /etc/default/grubGRUB_CMDLINE_LINUX_DEFAULT行,在引号内加入pci-stub.ids=10de:13bb(替换成你自己的PCI ID),比如:GRUB_CMDLINE_LINUX_DEFAULT="quiet splash pci-stub.ids=10de:13bb" - 更新Grub:
sudo update-grub
验证效果
重启系统后,执行以下命令:
lsmod | grep nvidia
如果没有任何输出,说明Nvidia模块已经被彻底禁用了!
关于你提到的Used by数值降低:这其实说明你的黑名单已经起了部分作用,减少了依赖加载的模块数量,但还是有其他系统组件在间接触发Nvidia模块加载,所以需要上面更彻底的方案。
备注:内容来源于stack exchange,提问作者Jimm Chen




