主要包含2部分内容:

  1. pve直通核显给vm,如群晖。但是我已经不再使用vm直通核显了
  2. 取消vm的直通,改为共享给lxc,原因 pve共享核显给lxc

为什么有第二步?多次使用之后,发现还是单独一个lxc维护nas的周边项目比较合适,nas专注于存储。像jellyfin、emby、tvbox-xiaoya、qt这些东西完全可以放到另一台lxc实例上。并且lxc共享硬件资源比vm直通更省资源,并且性能更强。

修改grub文件,开启iommu

vim /etc/default/grubGRUB_CMDLINE_LINUX_DEFAULT="quiet" 修改为 GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt video=vesafb:**off** video=**efifb:off video=simplefb:off"

其中video=vesafb:**off** video=**efifb:off video=simplefb:off**和pve引导期间的展示有关,efifb是uefi引导,vesafb是lengcy引导。

改完之后执行update-grub

修改modules文件,加载相应的内核模块

vim /etc/modules 或者用echo: echo “vfio” >> /etc/modules echo “vfio_iommu_type1” >> /etc/modules echo “vfio_pci” >> /etc/modules echo “vfio_virqfd” >> /etc/modules 然后使用update-initramfs -k all -u命令更新内核参数 重启pve(或者稍后一起重启)

有教程说模块会自动按需加载,但是这里暂时还是按这个步骤做吧

验证是否开启iommu(可忽略)

重启之后,在终端输入 dmesg | grep iommu 出现如下例子。则代表成功

[ 1.341100] pci 0000:00:00.0: Adding to iommu group 0  
[ 1.341116] pci 0000:00:01.0: Adding to iommu group 1  
[ 1.341126] pci 0000:00:02.0: Adding to iommu group 2  
[ 1.341137] pci 0000:00:14.0: Adding to iommu group 3  
[ 1.341146] pci 0000:00:17.0: Adding to iommu group 4

此时输入命令 find /sys/kernel/iommu_groups/ -type l,出现很多直通组,就代表成功了。如果没有任何东西,就是没有开启。

开启显卡直通-屏蔽pve的显卡驱动

直通AMD显卡,请使用下面命令

echo “blacklist radeon" >> /etc/modprobe.d/blacklist.conf  
echo “blacklist amdgpu" >> /etc/modprobe.d/blacklist.conf  

直通NVIDIA显卡,请使用下面命令

echo “blacklist nouveau" >> /etc/modprobe.d/blacklist.conf
echo “blacklist nvidia" >> /etc/modprobe.d/blacklist.conf
echo “blacklist nvidiafb" >> /etc/modprobe.d/blacklist.conf

直通INTEL核显,请使用下面命令,注意!如果使用Gvt-G,请不要使用下面的命令

echo “blacklist snd_hda_intel" >> /etc/modprobe.d/blacklist.conf
echo “blacklist snd_hda_codec_hdmi" >> /etc/modprobe.d/blacklist.conf
echo “blacklist i915" >> /etc/modprobe.d/blacklist.conf

接着在控制台输入 update-initramfs -u 来更新内核

重启pve

把显卡绑定到vfio-pci,以便于群晖vm能选中显卡作为硬件

进入控制台,输入 lspci -nn | grep VGA 来查看GPU的ID,系统会显示这样一行内容: 00:02.0 VGA compatible controller [0300]: Intel Corporation GeminiLake [UHD Graphics 600] [8086:3185] (rev 06) 我们需要的是尾部方括号内的8位数字,比如上方的8086:3185。 接着在控制台输入 echo “options vfio-pci ids=8086:3185” >> /etc/modprobe.d/vfio.conf 以此来把需要直通给虚拟机的设备ID写到vfio.conf内。

给虚拟机里添加pci设备

进入虚拟机控制面板-硬件-PCI设备,添加显卡,除了主GPU这个选项不选,其他都打勾,然后点击完成。 PS: 我们在前面查看显卡ID的时候发现,核显的编号是00:02.0,所以这一步我们就选择0002这个设备,其实看设备名也能知道哪个是显卡。

验证群晖是否有显卡

群晖开机,命令行执行ls /dev/dri,如果返回card0 renderD128则为虚拟机显卡驱动成果。

接下来就可以安装jellyfin了,pve lxc容器安装jellyfin,挂载使用NFS资源

参考: https://www.xh86.me/?p=11309 https://post.smzdm.com/p/a4wm655k/ https://foxi.buduanwang.vip/virtualization/1754.html/