跳到主内容
EN

打开命令面板

搜索文章、系列、自习室课程或外接设备…

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

PVE硬件直通虚拟机技术分享

最近自己组了一个服务器,准备用来做 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的解决方法 飞牛论坛
除非另行声明,本文采用 CC BY-NC-ND 4.0 许可:署名 · 非商业 · 禁止演绎。