文章目录
前言
最近把之前的N5105工程机闲鱼出掉了,就为了准备一台设备,可以更多的PCIE槽可以插显卡做显卡直通解码用,也可以插万兆网卡做万兆内网。
因此,特地重新配了一台电脑,买了Intel X710-DA4的网卡,再把之前淘汰下来的GTX1060显卡插上。
为什么选择台式机,而不是服务器?
服务器吵啊!个人理解,好比家装和工装的区别,台式机就是家装,各个设备都比较好点,尤其是风扇明显声音小得多,服务器图一个便宜,扩展性能会更强一点,但是台式机主板能满足我的个人需求就行了。
关于直通
对于ESXI8.0来说,直通其实非常简单,仅需在设备管理页面切换直通即可,而且无需重启。
过程
如上所示,在列表中设备已经切换为直通状态。
但是在实际给虚拟机安装驱动时,驱动反复安装不上。
Part.1
第一次是直接给Ubuntu Server安装驱动,Ubuntu的驱动安装网上教程也很多,无非就是
配置虚拟机配置文件:
hypervisor.cpuid.v0 = FALSE
屏蔽nouveau:
vim /etc/modprobe.d/blacklist-nouveau.conf
添加:
blacklist nouveau
options nouveau modeset=0
更新内核并重启:
sudo update-initramfs -u
sudo reboot
接着正常安装下载的Nvidia驱动。
安装完成后,正常情况下通过 nvidia-smi
可以查看到显卡相关的信息。
但是我的提示是: No Device Found
或者 NVIDIA-SMI has failed because it couldn‘t communicate with the NVIDIA driver
。
Part.2
根据显示的错误,在网上搜索了一大堆的文章,有使用 dkms
的,也有匹配内核版本的,始终无法解决问题。
实际排查问题过程中,重新安装了 Ubuntu Server 22.04
Ubuntu Server 24.04
Debian
以及 Ubuntu Desktop
,在Debian和Ubuntu Desktop这种有图形界面中,可以看到驱动安装上了,但是通过 nvidia-smi
始终报错。
Part.3
之后又猜想是不是下载的驱动版本不对,于是又在官网下载了各种不同版本:555,550,535,470等,每个版本都试着安装一遍。
可惜的是,问题依旧!
Part.4
后来,又在Bilibili中搜索相关视频的时候在想,干脆在Windows虚拟机中试试能不能安装驱动,毕竟Windows使用的最多,安装驱动这么简单的事情,步骤肯定不会错。
于是又装了Windows虚拟机,在其中装上驱动后,在设备管理界面可以正常看到显卡了,但是任务管理器中并没有GPU栏目,而且重启之后,设备管理器界面的显卡有个黄色感叹号,显示 错误代码43
。
崩溃了。
Part.5
当时实在太晚了就躺床上想,猜测还有一个可能是不是 PCIE插槽的通道和NVME插槽的通道共享带宽,导致显卡无法正常被识别。
这里我排除了显卡供电不足的问题。
于是干脆再从床上爬起来,卸掉了一条M.2硬盘,问题又来了,不知道是不是拿掉硬盘导致ESXI系统无法启动了(猜测,未排查)。只能重装系统再来一遍!
最后的结果真的是Shit!!!问题依旧!
Part.6
最后的最后,实在没办法了,想换PVE,但是我觉得问题应该还是一样。
难道是因为GTX1060是消费级显卡,无法被直通使用吗?
甚至搞得我想搞个专业级的显卡了。。。
最后,不知道看了多少篇文章之后,看到一篇文章,里面提到:
核显直通后在Win10下驱动错误,代码43(据说其它系统可以直通,但不能显示)
想直通独显,需要在bios屏蔽核显,否则可能无法启动或蓝屏(有的主板没这个限制)
NVIDIA显卡直通需要配置hypervisor.cpuid.v0 = FALSE,否则驱动错误,代码43
ESXi7.0以后切换显卡直通不需要重启,但是已经直通显卡再重启会导致直通失败,手动切换两次可恢复。这个BUG导致直通显卡的虚拟机是无法开机自动启动的。
作者:Rakutens
对于我来说,最重要的一条就是:想直通独显,需要在bios屏蔽核显,否则可能无法启动或蓝屏(有的主板没这个限制)
Part.7
重新连接显示器,进入BIOS把iGPU给屏蔽了。
问题终于得到解决。
最后
就这一个小问题,把我折腾的不要不要的。家里的网络被我搞得家人意见非常大。
网上查下来的各种方法大多都是没有用的,不得不感叹我国的网络环境真的是太差了。大部分内容都是照抄搬运,都不是自己测试使用过的就往上面搬。
中间走了太多弯路,心累,写篇文章记录一下这个事情。
附:完整直通流程(以Ubuntu Server为例)
第一步:显卡直通
(提前屏蔽iGPU就不说了)
ESXI主机界面-管理-硬件-PCI设备,选择需要直通的设备,切换直通。
第二步:创建虚拟机
正常的创建流程,在【编辑设置】界面,添加需要直通的PCIE设备,内存选项勾选【预留所有客户机内存(全部锁定)】,创建后再次编辑虚拟机,在虚拟机选项-高级-编辑配置,添加以下参数:
hypervisor.cpuid.v0 False #必须
pciPassthru.use64bitMMIO True #非必须
pciPassthru.64bitMMIOSizeGB 32 #非必须,张显卡,值为32;如果是多张显卡,设置值为64
第三步:安装驱动
一、正常安装完系统后更新:
apt update
apt upgrade
二、屏蔽nouveau:
vim /etc/modprobe.d/blacklist-nouveau.conf
添加:
blacklist nouveau
options nouveau modeset=0
三、更新内核并重启:
sudo update-initramfs -u
sudo reboot
四、安装依赖
这一部分网上很少涉及,不安装的安装过程中会出现一些警告或者错误。
sudo apt install build-essential pkg-config xorg-dev xorg libvulkan1 libglvnd-dev
五、安装Nvidia驱动
官网搜索相对应的显卡型号并下载驱动,一般为 .run
格式。
上传至系统,赋予权限:
chmod +x NVIDIA-Linux-x86_64-xxx.xx.run
运行安装:
bash NVIDIA-Linux-x86_64-xxx.xx.run
安装完成后即可通过 nvidia-smi
查看显卡信息。
对于网上一堆乱七八糟的教程,说什么安装需要添加一些参数:
-no-x-check
-no-nouveau-check
-no-opengl-files
-m=kernel-open
我只能说:一个都不要加!
第四步:安装NVIDIA Container Toolkit(非必须)
NVIDIA Container Toolkit 是一个包的集合,它将容器运行时(如 Docker)与主机上 NVIDIA 驱动程序的接口包装在一起,允许用户构建和运行 GPU 加速的容器。它包括一个容器运行时库和一些工具,可以自动配置容器来利用 NVIDIA GPU3。
也就是如果想让Docker也能使用显卡相关功能,需要安装。
具体配置参考:Installing the NVIDIA Container Toolkit
输入几条命令即可:
-
配置生产存储库:
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \ && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \ sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \ sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
(可选)将存储库配置为使用实验包:
sed -i -e '/experimental/ s/^#//g' /etc/apt/sources.list.d/nvidia-container-toolkit.list
-
从存储库更新软件包列表:
sudo apt-get update
-
安装 NVIDIA Container Toolkit 软件包:
sudo apt-get install -y nvidia-container-toolkit
-
配置 Docker
sudo nvidia-ctk runtime configure --runtime=docker
-
重启 Docker
sudo systemctl restart docker
-
使用以下
sudo nvidia-ctk
命令进行配置/etc/nvidia-container-runtime/config.toml
sudo nvidia-ctk config --set nvidia-container-cli.no-cgroups --in-place
Over~