PVE创建显卡直通HDMI输出信号

其实思路,就这个利用启动时,efi启动显卡,

整机直通USB后,与一般PC机无异。

测试过CPU为四代

4770i、4785T、12400、13400T 都可以使用这个方法

步骤1开iommu

1、nano /etc/default/grub 文件中增加内容

将以下行粘贴到其中,并在旧标签前面添加一个注释标签#,以下为常用的一些写法。
# 对于 Intel CPU
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt initcall_blacklist=sysfb_init pcie_acs_override=downstream,multifunction pci=nommconf"
# 对于 AMD CPU
GRUB_CMDLINE_LINUX_DEFAULT="quiet iommu=pt initcall_blacklist=sysfb_init pcie_acs_override=downstream,multifunction pci=nommconf"



# 其他的一些写法(如果是AMD处理器,将intel改为amd)
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt i915.enable_gvt=1 video=efifb:off" # 这是GVT模式,也就是共享模式,少部分cpu支持,但体验很好
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt video=efifb:off" # 这是独占模式,都支持,但显示器没有pve的控制台输出,也只能直通个一个虚拟机
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt pcie_acs_override=downstream,multifunction"
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on initcall_blacklist=sysfb_init pcie_acs_override=downstream,multifunction"
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on" #本期教程我使用的就是这个

# 参数释义
1.iommu=pt:启用 Intel VT-d 或 AMD-Vi 的 IOMMU。这是一种硬件功能,用于管理设备对系统内存的访问。在虚拟化环境中,启用 IOMMU 后,可以将物理设备直通到虚拟机中,以便虚拟机可以直接访问硬件设备。“iommu=pt”不是必须的,PT模式只在必要的时候开启设备的IOMMU转换,可以提高未直通设备PCIe的性能,建议添加。
2.initcall_blacklist=sysfb_init:禁用 sysfb_init 内核初始化函数。这个函数通常用于在内核启动过程中初始化系统帧缓冲。在使用 GPU 直通的情况下,这个函数可能会干扰直通操作,因此需要禁用它。
3.i915.enable_gvt=1:启用 Intel GVT-g 虚拟 GPU 技术。这个选项用于创建一个虚拟的 Intel GPU 设备,以便多个虚拟机可以共享物理 GPU 设备。启用 GVT-g 需要在支持虚拟 GPU 的 Intel CPU 和主板上运行,并且需要正确配置内核和虚拟机。想开启GVT-g的就添加这条,显卡直通的就不要添加了。
4.initcall_blacklist=sysfb_init:屏蔽掉pve7.2以上的一个bug,方便启动时候就屏蔽核显等设备驱动;
5.pcie_acs_override=downstream,multifunction:便于iommu每个设备单独分组,以免直通导致物理机卡死等问题
6.pci=nommconf:意思是禁用pci配置空间的内存映射,所有的 PCI 设备都有一个描述该设备的区域(您可以看到lspci -vv),访问该区域的最初方法是通过 I/O 端口,而 PCIe 允许将此空间映射到内存以便更简单地访问。


2、/etc/modprobe.d/pve-blacklist.conf 文件中增加内容

把驱动拉入黑名单(防止PVE加载直通设备驱动)

# 在里面加入
blacklist nvidiafb
blacklist nouveau
blacklist nvidia
blacklist snd_hda_codec_hdmi
blacklist snd_hda_intel
blacklist snd_hda_codec
blacklist snd_hda_core
blacklist radeon
blacklist amdgpu
blacklist i915
options vfio_iommu_type1 allow_unsafe_interrupts=1
# 如果有重复项,记得删除,解释:屏蔽三大显卡驱动,屏蔽hdmi声音驱动;options,options vfio_iommu_type1 allow_unsafe_interrupts=1允许不安全的设备中断

该模块如果是amd radon就要把这个一起拉入和名单

执行 lspci -nn 可命令查看需要直通设备,核显一般带VGA,连同核显音频ID也记录,用于确保后续直通核显ID正确。

3、执行下面三个命令

update-grub
update-initramfs -u -k all
reboot

4、新建win虚拟机并修改虚拟机参数(nano /etc/pve/qemu-server/100.conf )为类似下面:(假如虚拟机ID为100)

#对于Intel
args: -set device.hostpci0.addr=02.0 -set device.hostpci0.x-igd-gms=1 -set device.hostpci0.x-igd-opregion=on
#对于AMD例子
args: -cpu host,hypervisor=off 


#对于Intel例子
hostpci0: 0000:00:02,legacy-igd=1,romfile=xx.rom
#对于AMD例子(AMD的加了直通了声卡)
hostpci0: 0000:06:00.0,pcie=1,romfile=xx.rom,x-vga=1
hostpci1: 0000:06:00.1,rombar=0

其实上面的配置文件 使用Q35、UEFI引导都没有问题

现在最新版本8.0版本PVE退件UEFI可以直接引导.rom文件

参考文件

#对于Intel例子
agent: 1
args: -set device.hostpci0.addr=02.0 -set device.hostpci0.x-igd-gms=0x2 -set device.hostpci0.x-igd-opregion=on
bios: ovmf
boot: order=virtio0;ide2;net0
cores: 4
cpu: host
efidisk0: local-lvm:vm-100-disk-0,efitype=4m,size=4M
hostpci0: 0000:00:02.0,legacy-igd=1,romfile=i3_10105_igd_efi.rom
hostpci1: 0000:00:1f.3
ide2: none,media=cdrom
memory: 4096
meta: creation-qemu=8.0.2,ctime=1698238750
name: i44fx
net0: virtio=BA:A1:1D:08:A9:5B,bridge=vmbr0,firewall=1
numa: 0
ostype: l26
scsihw: virtio-scsi-single
smbios1: uuid=b3176867-4e41-4637-b3c1-a68810d70644
sockets: 1
tpmstate0: local-lvm:vm-100-disk-1,size=4M,version=v2.0
vga: none
virtio0: local-lvm:vm-100-disk-2,cache=writeback,discard=on,iothread=1,size=32G
vmgenid: fb5d54dc-02a5-44c2-8a04-2649d69249b2

#对于AMD例子(AMD的加了直通了声卡)
agent: 1
args: -set device.hostpci0.bus=pci.0 -set device.hostpci1.bus=pci.0 -set device.hostpci0.addr=0x01.0 -set device.hostpci1.addr=0x02.0 -cpu host,hypervisor=off -device isa-applesmc,osk="ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc" -smbios type=2 -device usb-tablet -global nec-usb-xhci.msi=off -global ICH9-LPC.acpi-pci-hotplug-with-bridge-support=off -cpu Cascadelake-Server,vendor=GenuineIntel,+invtsc,-pcid,-hle,-rtm,-avx512f,-avx512dq,-avx512cd,-avx512bw,-avx512vl,-avx512vnni,kvm=on,vmware-cpuid-freq=on
bios: ovmf
boot: order=usb1;sata0;virtio1
cores: 4
cpu: Haswell
efidisk0: local-lvm:vm-100-disk-0,efitype=4m,size=4M
hostpci0: 0000:06:00.0,pcie=1,romfile=5700U.rom,x-vga=1
hostpci1: 0000:06:00.1,rombar=0
machine: q35
memory: 4096
meta: creation-qemu=7.2.0,ctime=1685719709
name: macOS
net0: virtio=DA:D8:83:DC:DF:55,bridge=vmbr0
numa: 0
ostype: other
sata0: local-lvm:vm-100-disk-1,size=1436M
scsihw: virtio-scsi-pci
smbios1: uuid=6bea0641-7c93-44b4-af72-409c6649ff38
sockets: 1
tags: imacos.top;macos;sonoma14.4.1_23e224
usb0: host=1-3,usb3=1
usb1: host=2-2,usb3=1
vga: none
virtio1: local-lvm:vm-100-disk-2,discard=on,iothread=1,size=50G
vmgenid: a8e70cbd-61a1-4ec0-9eed-aff32fabdde

本文隐藏内容 登陆 后才可以浏览

Views: 41

PVE便捷脚本

  • 为防止系统没安装curl,使用不了一键命令,使用下面的一键命令之前先执行一次安装curl命令
apt -y update && apt -y install curl wget sudo || yum install -y curl wget sudo || apk add curl bash
  • 使用root用户登录alpine系统,后执行以下命令安装curl
apk add curl bash

集合脚本自用

bash -c "$(curl -fsSL https://cdn.jsdelivr.net/gh/shidahuilang/pve/set.sh)"
  • clash订阅转换docker版
bash -c  "$(curl -fsSL https://raw.githubusercontent.com/shidahuilang/pve/main/docker-clash.sh)"
  • PVE开启直通+CPU硬盘温度显示,风扇转速+一键开启换源,去订阅+CPU睿频模式选择
bash -c "$(curl -fsSL https://cdn.jsdelivr.net/gh/shidahuilang/pve@main/pve.sh)"
bash -c "$(curl -fsSL https://raw.githubusercontent.com/shidahuilang/pve/main/pve.sh)"
  • PVE一键升级PVE,lxc换源,去掉无效订阅
bash -c  "$(curl -fsSL https://cdn.jsdelivr.net/gh/shidahuilang/pve@main/pvehy.sh)"
  • 开启ssh+BBR+root登录+密码设置(默认密码:dahuilang)
bash -c  "$(curl -fsSL https://cdn.jsdelivr.net/gh/shidahuilang/pve@main/lang.sh)"
  • (centos、ubuntu、debian、alpine)一键开启SSH
bash -c  "$(curl -fsSL https://cdn.jsdelivr.net/gh/shidahuilang/pve@main/ssh.sh)"
  • 黑群晖cpu正确识别
wget -qO ch_cpuinfo_cn.sh https://cdn.jsdelivr.net/gh/shidahuilang/pve/ch_cpuinfo_cn.sh && sudo bash ch_cpuinfo_cn.sh
  • 黑群晖自动挂载洗白(挂载目录/tmp/boot)
bash -c "$(curl -fsSL https://cdn.jsdelivr.net/gh/shidahuilang/pve/arpl.sh)"
  • AME3.x激活补丁
# DSM7.1 AME版本3.0.1-2004
curl http://code.imnks.com/ame3patch/ame71-2004.py | python
# DSM7.2 AME版本3.1.0-3005
curl http://code.imnks.com/ame3patch/ame72-3005.py | python
  • 一键设置交换虚拟分区
bash -c "$(curl -fsSL https://cdn.jsdelivr.net/gh/shidahuilang/pve/swap.sh)"
  • PVE升级系统
bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/misc/pve8-upgrade.sh)"
apt update && apt dist-upgrade -y

Views: 5

PVE优化项目

PVE把local-lvm合并到local
合并空间最好是刚刚安装完pve的时候合并,如果你在pve安装了虚拟机,那么我们可以将虚拟机备份到另一个硬盘上,备份完成之后,跟着下面步骤操作即可(其实移动硬盘到其他盘就行)
首先删除local-lvm

lvremove pve/data

接着把local-lvm空间分配给local

lvextend -l +100%FREE -r pve/root

让CPU自动调节频率

pve安装完CPU的模式默认是性能模式,这样子会造成不必要的电费浪费
我们为了环保,所以可以用下面的方法让CPU自动调节频率
首先安装cpufrequtils

apt install cpufrequtils -y

接着我们创建一个文件并编辑

nano /etc/default/cpufrequtils

填写如下内容

GOVERNOR="ondemand"
  • performance:让 CPU 始终运行在最高频率,适合高性能需求。
  • powersave:将 CPU 锁定在最低频率,适合节能需求。
  • ondemand:根据负载动态调整 CPU 频率,适合平衡性能和节能。
  • conservative:类似于 ondemand,但频率调整更加缓和。
  • schedutil:根据系统调度器(scheduler)调整频率,适合较新的内核。

然后重启一下cpufrequtils服务即可

systemctl restart cpufrequtils

在虚拟机里面安装Qemu Guest Agent

Qemu Guest Agent是一个能让宿主机和虚拟机联通的一个软件,就像VM的vmtools一样

Linux安装方法

# apt管理器安装命令:
apt install qemu-guest-agent
# yum管理器安装命令:
yum install qemu-guest-agent

安装完成之后进入pve,先把虚拟机关机,然后在选项里面编辑Qemu Guest Agent,勾选第一项,接着保存并开机
开机完成之后能看见IP地址什么的就证明安装成功了
Windows安装方法
网上的教程一般都是要去更新pcie驱动,其实不用,我们先把virtio-win.iso镜像挂载到Windows的里面
我们先关闭Windows虚拟机,然后在硬件里面选择添加,添加CD/DVD驱动器,然后镜像选择virtio-win.iso
virtio-win的下载链接: 点击转跳
挂载完成后启动Windows虚拟机,在此电脑里面双击CD/DVD驱动器,然后打开virtio-win-guest-tools接着安装即可
安装完成后把Windows关机,然后同样在选项里面把Qemu Guest Agent的第一项勾选上,这样子就装好Qemu Guest Agent了

Views: 11