由于有一台11代 i5 1135G7 的软路由,听说6.1内核后可以核显SRIOV 这个核显这么好那必须要折腾下,果断格式化以前安装的Esxi 。在网上下载的最新安装包proxmox-ve_8.1-1 iso 无法安装,感觉是包损坏,怀疑是迅雷下载,又迅雷重新下载又让威联通下载,结果得到的文件sha值是一样,但sha512和官网的不一致?
不管了先安装以前下载好的proxmox-ve_8.0-2.iso ,一切顺利。
2024.1.3 更新
恩山论坛https://www.right.com.cn/forum/thread-8313811-1-1.html
1.用rufus写入pve 8.1.iso镜像到u盘,可以正常安装了。
2.用rufus在写入iso时,提示pve 8.1.iso是一个“Hybride镜像,只能用dd方式写入”,猜测可能是8.1引入了安全引导模式造成的。
3.Ventoy无法引导,猜测可能也是第3条的原因。
4.下载新的Ventoy,已解决这个问题:https://github.com/ventoy/Ventoy/actions/runs/7088423200
刚好我就是用Ventoy安装的,版本是1.0.96
一、
首先解决pve联网, 我的路由器是192.168.8.3 在界面中将网关改为192.168.8.3, DNS也改为192.168.8.3
DNS也可以使用 nano /etc/resolv.conf 修改
然后用ssh 连接,ping www.baidu.com 检测是否联网。
二、
接下来更换源,这里我走了弯路,先在PVE节点->更新->存储库 禁用掉系统自带的企业源,然后添加新源,网上找的无法使用,好像不是针对8.0的。有人说存储库是跟版本有关系的,8.0用的是bookworm, 我之前添加的会出现bullseye 、buster什么的 。
然后发现apt update 会有错误出现,安装apt-get install lm-sensors -y也无法找到包Unable to locate package lm-sensors。还以为跟界面上提示的错误“没有启用Proxmox VE存储库,你没有得到任何更新”有关。 还以为是没重启,结果重启也不行
最后找到可行的资料
编辑/etc/apt/sources.list 编辑前最好先备份下
cp /etc/apt/sources.list /etc/apt/sources.list.backup
sources.list 添加以下内容
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free non-free-firmware deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bookworm-security main contrib non-free non-free-firmware deb http://mirrors.ustc.edu.cn/proxmox/debian/pve bookworm pve-no-subscription
下段的deb-src有什么区别
deb-src http://mirrors.tuna.tsinghua.edu.cn/debian bookworm main contrib non-free non-free-firmware deb-src http://mirrors.tuna.tsinghua.edu.cn/debian bookworm-updates main contrib non-free non-free-firmware deb-src http://mirrors.tuna.tsinghua.edu.cn/debian bookworm-backports main contrib non-free non-free-firmware deb-src http://mirrors.tuna.tsinghua.edu.cn/debian-security bookworm-security main contrib non-free non-free-firmware
编辑完后用cat /etc/apt/sources.list 检查下
同理编辑/etc/apt/sources.list.d/ceph.list
内容为
deb https://mirrors.ustc.edu.cn/proxmox/debian/ceph-quincy bookworm no-subscription
添加pve-8软件包仓库,应该已经在上面sources.list最后一行添加了
echo "deb https://mirrors.tuna.tsinghua.edu.cn/proxmox/debian/pve bookworm pve-no-subscription" > /etc/apt/sources.list.d/pve-enterprise.list
然后在pve管理界面中禁用掉企业库
之后
apt update
果然ok
可以执行apt-get upgrade 或apt dist-upgrade -y真正更新,注意区别。先不执行吧
确认版本
pveversion
替换CT Templates
参考http://mirrors.ustc.edu.cn/help/proxmox.html#id5
将 /usr/share/perl5/PVE/APLInfo.pm 文件中默认的源地址 http://download.proxmox.com 替换为 https://mirrors.ustc.edu.cn/proxmox
cp /usr/share/perl5/PVE/APLInfo.pm /usr/share/perl5/PVE/APLInfo.pm_back sed -i 's|http://download.proxmox.com|https://mirrors.ustc.edu.cn/proxmox|g' /usr/share/perl5/PVE/APLInfo.pm
针对 /usr/share/perl5/PVE/APLInfo.pm 文件的修改,执行`systemctl restart pvedaemon`后生效
三、
源更新了下一步安装温度监控并在管理页面中显示。
执行以下命令
apt-get install lm-sensors -y
成功后执行以下命令查看是否可以显示温度
sensors
网上找个脚本,比如我放在了 /root/sensors.sh
然后给它执行权限
chmod +x sensors.sh
然后执行
./sensors.sh
Shift+F5刷新浏览器就可以看到了。
如果你已经用别人的脚本之类的修改过页面,输入apt update && apt reinstall pve-manager回车,恢复官方设置,然后再使用本脚本!
另外:每次pve升级之后都需要执行一次脚本,因为升级后PVE会自己还原文件,
参考https://post.smzdm.com/p/a20lknkn/
https://www.bilibili.com/video/BV1PP411Q7UQ/
四、
设置SRIOV直通核显
安装git和dkms
apt install -y build-* git dkms
克隆代码
git clone https://github.com/strongtz/i915-sriov-dkms.git
复制刚才克隆的文件夹,注意如果/usr/src已经有的话需要强制覆盖不然可能编译成老版本的?
cp -r /root/i915-sriov-dkms/ /usr/src/i915-sriov-dkms-6.5
cd /usr/src/i915-sriov-dkms-6.5
修改dkms.conf
将第一行@_PKGBASE@ 替换为i915-sriov-dkms
第二行@PKGVER@ 替换为6.5
更新headers
apt install pve-headers-$(uname -r)
也可以安装具体版本apt install -y pve-headers-6.2.16-3-pve pve-firmware
编译并安装驱动
dkms install -m i915-sriov-dkms -v 6.5
我会提示这个
Module version for i915.ko
exactly matches what is already found in kernel 6.5.11-4-pve.
DKMS will not replace this module.
You may override by specifying --force.
depmod...
然后加上--force
dkms install --force -m i915-sriov-dkms -v 6.5
编译很快?感觉成功?已经自带了?
检查一下驱动安装情况
dkms status
在未使用--force安装后执行状态检查会有警告
如果有多行或者报错
dkms remove
修改/etc/default/grub文件的GRUB_CMDLINE_LINUX_DEFAULT项, 添加"quiet intel_iommu=on i915.enable_guc=7"
增加虚拟化驱动,加载vifo系统模块
修改 /etc/modules 文件
添加以下内容
vfio vfio_iommu_type1 vfio_pci vfio_virqfd
更新 GRUB 与 initrramfs
update-grub && update-initramfs -u
安装sysfsutils 用来设置虚拟核显的数量(这一步只有宿主机需要执行!!!)
apt install sysfsutils
设置虚拟核显的数量
查找iGPU所在总线
lspci | grep VGA
我的为00:02.0
修改/etc/sysfs.conf
echo "devices/pci0000:00/0000:00:02.0/sriov_numvfs = 3" > /etc/sysfs.conf
上面的数字代表数量
reboot重启
lspci | grep VGA
检查是否成功,成功的话应该会有多个,然而我没有成功!!
在pve8.0.2 的时候内核6.2.16-3 执行上面dkms install -m i915-sriov-dkms -v 6.2 会报错
error: implicit declaration of function ‘drm_dp_mst_hpd_irq_handle_event’ [-Werror=implicit-function-declaration]
3888 | drm_dp_mst_hpd_irq_handle_event(&intel_dp->mst_mgr, esi, ack, &handled);
error: implicit declaration of function ‘drm_dp_mst_hpd_irq_send_new_request’ [-Werror=implicit-function-declaration]
3971 | drm_dp_mst_hpd_irq_send_new_request(&intel_dp->mst_mgr);
在github上找到了这么一段话
这句话的意思就是发现了一个函数的隐式声明,但是在代码的当前位置之前没有提供该函数的显式声明或定义
实际上就可以理解为dkms在编译这个新版本的仓库的时候发现了drm_dp_mst_hpd_irq_handle_event这个函数没有被定义,那么发现了问题我就去查询到了这个函数的定义来源于这个头文件
#include <drm/drm_dp_mst_helper.h>
那么通过find命令可以查询到这个头文件在
/usr/src/你编译仓库时的内核版本/include/drm/display/drm_dp_mst_helper.h
这里,直接vi进去搜索是否存在drm_dp_mst_hpd_irq_handle_event的定义,发现我使用的这个内核版本 6.2.16-3-pve 里面没有定义这个函数
同理我查询了我的debian上的其他几个内核中同样的文件内是否存在这个函数定义,这里包含5.15.104-1-pve/ 6.1.10-1-pve,这两个内核中同样没有定义这个函数,于是我直接安装了最新的6.5.11-6-pve内核,头文件中果然有了这个函数的定义
int drm_dp_mst_hpd_irq_handle_event(struct drm_dp_mst_topology_mgr *mgr, const u8 *esi, u8 *ack, bool *handled);
得出的结论就是其实还是和内核版本强依赖,如果你的内核版本报出了同样的错误,那么请安装比起你当前内核版本更新一点的内核头文件,然后去查看其中是否存在了这个函数的支持,如果没有发现,请继续安装更高版本的头文件,直到发现了合适的版本后
安装这个版本对应的内核,使用proxmox-boot-tool kernel pin工具固定新版本,同时编译命令设置为dkms install --force -m i915-sriov-dkms -v 6.2 -k 6.5.11-6-pve 使用-k来指定你要编译的dkms对应查找的内核版本,如果编译成功那么就没有问题了
于是折腾内核和headers 始终没成功,最后还是重装了8.1 安装完后内核是6.5 于是就有上面的执行步骤了。
查找内核和headers,参考https://foxi.buduanwang.vip/virtualization/pve/2203.html/
apt search pve-kernel|grep pve-kernel- apt install pve-kernel-6.2.16-5-pve apt search pve-headers|grep pve-headers- apt install pve-headers-6.2.16-5-pve
又回购上面哪里有错,在上面github 库看到一句话
The SR-IOV enablement commandline is changed since commit #092d1cf. If you are updating from previous version, please modify i915.enable_guc=7 to i915.enable_guc=3 i915.max_vfs=7 in your kernel command line.
这一句英文还是看得懂,于是改了上面的/etc/default/grub文件的GRUB_CMDLINE_LINUX_DEFAULT项, 改为"quiet intel_iommu=on i915.enable_guc=3 i915.max_vfs=7"
github上还有一句
Creating virtual functions
echo 2 > /sys/devices/pci0000:00/0000:00:02.0/sriov_numvfs
我看上面我的步骤不是在/etc/sysfs.conf里吗,是一个意思? 那直接修改/sys/devices/pci0000:00/0000:00:02.0/sriov_numvfs 我输入了数字3
然后更新下grub
update-grub && update-initramfs -u
重启reboot
重启后lspci看到8个VGA 这个增加的7个具体是哪设置的个数生效。额,我看/etc/sysfs.conf 变成7了 /sys/devices/pci0000:00/0000:00:02.0/sriov_numvfs也变成7了。
添加自启脚本,这步好像不需要,可能上面的sysfsutils实现了
echo '#!/bin/bash' >>/etc/rc.local sysfsutils echo "echo 7 > /sys/devices/pci0000:00/0000:00:02.0/sriov_numvfs" >>/etc/rc.local chmod +x /etc/rc.local
五、
安装Windows
在选择机型时需要选Q35 BIOS 选UEFI
硬盘选SCSI, 网络选Virtio 半虚拟化,CPU类别选host
除了系统光驱外再添加一个光驱用来安装Virtio驱动
调整引导顺序
检查无误就可以开机了,开机按ESC 进BIOS 把安全启动关了,在安全启动那一项按空格,再返回Reset
在windows安装界面的时候需要加载驱动不然会找不到硬盘,选择新添加的那个光驱找到下图的路径
硬件 显示那一项先默认,装好SRIOV和驱动后再设置无,然后再打开远程桌面。
添加SRIOV的时候选原始设备,上面映射的设备是空的。
驱动安装好后关机,将显示设置为无,并将添加的SRIOV勾选主GPU ,设置无后将无法在pve中看到画面,这时候正常是可以从远程桌面连接,但很不幸我连接后是个黑屏界面然后会被退出。如果显示设置为默认,可以进到界面但是核显无法驱动显示错误代码43。怀疑其实不远程连接之前在上面安装jellyfin 应该是可以启用核显的。
另一种方法在上面安装ToDesk软件,远程连接发现比较慢,去设备管理器中发现核显正常,任务管理器也显示GPU了。 设备管理器中只有核显,todesk软件全靠cpu虚拟画面?
凌晨测试显示设置为无、Sriov设置为主GPU jellyfin 能发现有Intel QuickSync 但是无法使用。提示播放错误该客户端与媒体不兼容,服务器未发送兼容的媒体格式。
改为Video Acceleration API 实测为CPU解码, 任务管理器中能看到占用率很高, PVE中看到CPU温度爆炸了。Video4Linux2 没有试, FFmpeg 又是啥,我看网上有的硬件解码会调用这个? 那个Intel QuickSync应该是不管有没有GPU都能显示的,我的下面选项也能全部勾选。
1.14
怀疑是ffmpeg问题,发现10.8.13无法设置ffmpeg路径, 路径就是ffmpeg写死的无法更改,降级10.8.10后可以设置,而且重新安装不需要再进行初始化了?但设置自定义ffmpeg路径后还是该客户端与媒体不兼容,服务器未发送兼容的媒体格式。
我又发现jellyfin安装目录有自带的ffmpeg 所以应该不是ffmpeg引起。
2024.07.13
发现pve tools 显示5800h 和硬盘温度有点问题,今天尝试pve_source 可以正常显示
pve_source 安装
wget -q -O /root/pve_source.tar.gz 'https://bbs.x86pi.cn/file/topic/2023-11-28/file/01ac88d7d2b840cb88c15cb5e19d4305b2.gz' && tar zxvf /root/pve_source.tar.gz && /root/./pve_source
脚本加载成功出现使用协议,输入 Y,然后继续按回车。
启动工具
./pve_source