主要包含2部分内容:
- pve直通核显给vm,如群晖。但是我已经不再使用vm直通核显了。
- 取消vm的直通,改为共享给lxc,原因 pve共享核显给lxc
为什么有第二步?多次使用之后,发现还是单独一个lxc维护nas的周边项目比较合适,nas专注于存储。像jellyfin、emby、tvbox-xiaoya、qt这些东西完全可以放到另一台lxc实例上。并且lxc共享硬件资源比vm直通更省资源,并且性能更强。
修改grub文件,开启iommu
vim /etc/default/grub
将GRUB_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/