Proxmox VE (PVE) 8.3 硬件直通踩坑日记

Posted by LanceLRQ on Tuesday, March 4, 2025

最近自己组了一个服务器,准备用来做NAS,顺便研究机器学习等。由于是学习研究使用,硬件配置不高,属于是能用就行,硬盘也用上了服务器3万小时基本全新拆机的SAS盘。

为了服务器能够物尽其用,实现更多功能,选择了用PVE作为底层虚拟机系统,通过虚拟机的方式安装NAS系统等。期间涉及到了硬件直通,因为大家的设备型号不尽相同,查阅到网络上的教程只能作为参考,也因此踩了不少坑。

本文只作为自己踩坑经历的记录,可以作为参考,切不可盲目抄作业。

设备方案

分类 型号 备注
CPU Intel i3-8100
主板 华擎 Z370-Pro4
内存 金百达 DDR4-3200 16g * 2
SSD 阿斯加特 256G 多年前买的闲置的
阵列卡 LSI 3008 SAS 12Gbps IT模式
硬盘 希捷SAS盘 (6T) * 2
显卡 NVIDIA RTX 2060 super (微星万图师) 闲置显卡
机箱 见方L8
电源 安钛克 550W 自用8年基本全新,总比楼下up主几十块钱的炸弹强

硬件方案来源,

转码,万兆,8盘全部满足!不到千元装台全新机箱的“高性能”NAS (bilibili: 司波图)

开始踩坑

PVE安装

这块没啥好说的,搞个U盘直接装就完事了。

安装完成后可以配置国内源:

# 使用清华的镜像源。修改文件的同时, 会创建一个.bak后缀的备份文件
sed -i.bak 's|^deb http://ftp.debian.org|deb https://mirrors.ustc.edu.cn|g' /etc/apt/sources.list

# 替换企业源
sed -i 's/^deb/#deb/' /etc/apt/sources.list.d/pve-enterprise.list

配置核显直通

基本知识

首先一个非常关键的信息,就是要确定硬件支持的是哪种方式的虚拟化。

目前英特尔核显支持两种虚拟化方式

  1. Intel GVT-g (Graphics Virtualization Technology)
  2. SR-IOV (Single Root I/O Virtualization)

Intel 显卡 SR-IOV 虚拟化支持情况

Intel核显从12代开始,支持SR-IOV,如果CPU是12代以下,则支持的是GVT-g。如果配置不正确,虚拟机将无法启动。

BIOS设置

检查主板 BIOS, 必须开启 VT-D 虚拟化。各家主板的配置方法不一样,具体请参考主板说明书。

PVE安装源配置

然后,无论你是使用SR-IOV还是GVT-g,都得先装个驱动。建议直接使用安装包(需要注意是否适配你的PVE内核版本)

下面开始安装pve的内核头文件,先找到/etc/apt/sources.list,增加以下apt源地址。

deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware
deb https://mirrors.tuna.tsinghua.edu.cn/proxmox/debian/pve bookworm pve-no-subscription

注意,bookworm是PVE 8.x的系统代号,如果是其他版本请自行替换它。

安装内核头文件

apt update
apt install pve-kernel-$(uname -r)
proxmox-boot-tool kernel pin $(uname -r)
apt install pve-headers-$(uname -r)
apt install build-essential git dkms sysfsutils flex bison -y

驱动安装

如果一切顺利,开始安装驱动吧。这里使用的是i915-sriov-dkms

# 安装DKMS驱动包
dpkg -i i915-sriov-dkms_2025.02.03_amd64.deb

# 验证驱动状态
dkms status | grep i915-sriov

驱动安装成功后,配置GURB。由于我的是8代CPU,故使用的是GVT-g方式(12代以前CPU)直通。

打开/etc/default/grub,修改如下内容。

GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt i915.enable_gvt=1 initcall_blacklist=sysfb_init pcie_acs_override=downstream,multifunction video=efifb:off,vesafb:off"

SR-IOV 方式 (12代及以后CPU)

GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on i915.enable_guc=3 i915.max_vfs=3"

i915.max_vfs为虚拟核显数量,目前搜到的资料里边有设置3或者7的,自行判断吧。

以上各个设置项的具体含义如下(AI生成)

 intel_iommu=on  # 启用IOMMU
 iommu=pt        # 仅对直通设备启用IOMMU
 i915.enable_gvt=1  # 启用GVT-g虚拟化
 initcall_blacklist=sysfb_init  # 禁用帧缓冲初始化
 pcie_acs_override=downstream,multifunction  # PCIe拓扑覆盖
 video=efifb:off,vesafb:off"  # 禁用宿主机显卡占用

⚠️安全警示

修改GRUB参数前请做好备份,错误配置可能导致系统无法启动

⚠️应急恢复方案

若配置错误导致无法启动:

  1. 在GRUB界面按e进入编辑模式
  2. 删除intel_iommu=on等新增参数
  3. Ctrl+X以默认参数启动

安装完成后,以下代码应用设置,并重启PVE让设置生效。

update-grub
update-initramfs -u 
reboot

使用命令可以检查IOMMU是否正确启用。

dmesg | grep -i 'IOMMU enabled'   # 确认IOMMU状态
lsmod | grep vfio                 # 检查VFIO模块加载

vfio

配置驱动屏蔽

修改/etc/modules文件,加入

vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
kvmgt

进入/etc/modprobe.d文件夹

  • 创建i915.conf (已存在则修改)
options i915 enable_guc=0
  • 创建(或修改)kvm.conf
options kvm ignore_msrs=1
  • 创建(或修改)pve-blacklist.conf
blacklist i915
blacklist snd_hda_intel
blacklist snd_hda_codec_hdmi

# P.S. 如果要直通NVIDIA显卡的话再加下面几个
blacklist nvidia
blacklist nvidiafb
blacklist nouveau

SR-IOV 方式 (12代及以后CPU,本人未验证这个方式,只是提供一种思路)

如果是需要拆分核显,则需要增加以下操作。其中sriov_numvfs的数量需要和上一步提到的i915.max_vfs值一致。

echo "devices/pci0000:00/0000:00:02.0/sriov_numvfs = 3" > /etc/sysfs.conf

配置成功后通过lspci|grep 00:02可以看到多个虚拟核显。

其中00:02.0是显卡的ID,如果不确定可以通过lspci查看实际的ID

更新配置,重启PVE

update-initramfs -u -k all
reboot

自此,宿主机上的配置就完成了。

虚拟机配置

NAS操作系统我选择了不折腾黑某,直接用飞牛OS,最近B站上吹的挺多的,实际用起来感觉也还不错,基本上能满足我的日常需求。

先创建好虚拟机,参数可以按以下的来设置:

FNOS VM配置

踩坑记录

  1. 飞牛官方文档里边,是不建议使用 OVMF 方式的,其实只是因为PVE 7.x 开始加入了TPM功能导致无法正常启动飞牛OS。在BIOS里边屏蔽掉就好了。具体方法是:
  2. 启动虚拟机,出现Proxmox画面时,按ESC键,进入BIOS。
  3. 依次选择Device Manager——Secure Boot Configuration
  4. 取消勾选Attempt Secure Boot,如下图 PVE关闭安全启动设置
  5. 回到主页面,选择reset即可生效。
  6. 机型方面,部分文档提到使用q35,我使用默认的i440fx也是可以的,这俩区别上就是添加PCI设备那边不能勾选PCI-E了。实际使用上没有发现不稳定的情况,具体的请以自己的机器为准吧。
  7. 处理器类别可以使用host方式虚拟化,据说是性能最好的一种

为虚拟机添加PCI设备,选择对应的设备ID,勾选所有功能,点击确定添加即可。注意不要勾选主CPU

硬件配置

飞牛OS,启动!

自此,全部配置完成。启动虚拟机,安装飞牛OS,完成后可以查看CPU是否能正常工作

GPU状态

可以看到GPU被正常识别,可以在飞牛影视中开启对应的GPU加速。

飞牛影视GPU加速

后记

All-in-One 一时爽,All in boom 了更爽!

整套平台下来大概也就是花了2k左右(不包含旧设备再利用),待机功耗在70W-80W左右,7*24开机一个月大概也就是30来块钱电费。当然作为一台多功能机器,除了NAS,它更多是用来运行深度学习计算的服务器,如果不喜欢折腾或者是在意功耗的话,还是别玩DIY,老实买成品NAS,毕竟维护成本也是成本,品牌NAS的价值更多还是体现在服务质量上。

参考资料

  1. PVE安装飞牛fnOS及核显虚拟化直通硬解指南 知乎
  2. GVT-g 配置指南:实现多虚拟机共享Intel 核显硬件加速 晴耕雨讀
  3. Proxmox VE虚拟机中关闭安全启动 佛西博客
  4. 关于PVE下 gvt-g核显直通飞牛无法调用GPU的解决方法 飞牛论坛