pve 直通钩子 - pve桌面环境日用,win11 三机器钩子脚本自动占用核显 快速实现

本文内容是 https://dev.leiyanhui.com/pve/pve-uhd-hook-win-11-all 的后续。 主要是为了实现: pve 宿主机器安装桌面作为日用机使用(lightdm+i3w)此步骤略。 win11-1 (1101)开机后不直通任何设备不影响pve宿主桌面,只能通过rdp远程访问。 win11-2 (1102)开机后接管核显 和usb键鼠等,关机后硬件退还给宿主机。 win11-3 (1103)和 win11-2 一样,不同的是win11-3支持pve网页控制台的vnc屏幕,也就是双屏可以在另外一个设备上简单的实现分屏功能。但是没有开机启动画面会短暂黑屏无信号,一直到win登陆界面才可以点亮核显。 三个vm 磁盘和系统内容完全一样,共享虚拟磁盘文件 但是只能有一个开机处于开机状态。

本文内容参考zhing 和 ledIsBeat 两位大神,并进一步优化和精简。 其他内容例如 bios配置和csm等参考 前文 。

pve和bios配置

简单的说,就是 不要黑名单,不要vfio配置。grub只intel_iommu=on

bios配置参考前文

grub

1
2
nano /etc/default/grub # 修改下面内容,这里不要别的内容
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"

其他

/etc/modules 需要添加 四行 vfio vfio_iommu_type1 vfio_pci vfio_virqfd(有的设备不需要) /etc/modprobe.d/pve-blacklist.conf 删除 blacklist i915 、 blacklist snd_hda_intel 、blacklist snd_hda_codec_hdmi 不需要屏蔽,不然宿主机核显没显示了。如果你需要屏蔽才能直通。本文不适合你。 /etc/modprobe.d/vfio.conf 如果你之前做了vfio ,直接删掉这个文件,不需要。 ls /etc/modprobe.d/ 检查有没有多于的文件 应该只有一个 pve-blacklist.conf 文件才可以 如果你没有独显pve-blacklist.conf也可以删掉。

1
2
update-grub
update-initramfs -u -k all # 可能需要更新gurb后重启后再运行这行

准备文件

win11 安装镜像: https://www.microsoft.com/zh-cn/software-download/windows11 win virio驱动iso :https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/ 钩子脚本 : https://github.com/joyanhui/file.leiyanhui.com/tree/main/pve-igpu-hooks 技嘉 B150M-PIO-SI R3 主板虚拟bios文件:https://github.com/joyanhui/file.leiyanhui.com/blob/main/pve-igpu-hooks/b150m.bin (大大帅大佬给修改的)

安装win11-1(1101)

有很多种模式可以实现,我这里用q35+ovmf+tpm 正常在pve 网页控制台 安装标准版win11 22H2 。这里就不说了,直接贴配置文件/etc/pve/qemu-server/1101.conf

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
agent: 1
bios: ovmf
boot: order=virtio0;ide2
cores: 12
cpu: host
efidisk0: local:1101/vm-1101-disk-0.qcow2,efitype=4m,pre-enrolled-keys=1,size=528K
ide0: local:iso/virtio-win-0.1.240.iso,media=cdrom,size=612812K
ide2: local:iso/Win11_22H2_Chinese_Simplified_x64v2.iso,media=cdrom,size=5723780K
machine: pc-q35-8.0
memory: 10240
meta: creation-qemu=8.0.2,ctime=1695966414
name: win11-1
net0: virtio=72:57:35:2C:58:36,bridge=vmbr0,firewall=1
numa: 0
ostype: win11
scsihw: virtio-scsi-single
smbios1: uuid=9263edd9-30d2-43e7-8907-46bc55fbe996
sockets: 1
tpmstate0: local:1101/vm-1101-disk-1.raw,size=4M,version=v2.0
virtio0: local:1101/vm-1101-disk-2.qcow2,cache=unsafe,iothread=1,size=12G
vmgenid: 9a7d17fc-bc6b-4b76-87d2-f523834aee4a

找不到硬盘驱动的时候,点击浏览,选择cdrom(virtio)中的 amd64目录下的win11,其他驱动进桌面后再装 联网界面,在pve的网页控制台界面 点一下左侧悬浮的 小箭头,然后依次点 A > ctrl(可能需要点两下) 再点一下键盘的 Shift+F10(Fn+F10)。然后在弹出的cmd命令输入 oobe\bypassnro 回车 重启,然后重新选国家键盘等就可以选择不联网。 进入桌面后就可以安装光驱里面的驱动了。然后联网,关闭休眠,关闭C页面文件,修改计算机名称或者ip配置,打开远程桌面,本地账号设置密码,测试远程桌面是否可以正常连接。顺带装个dism++ 可以简单清理一下。

配置win11-2 以及直通

钩子脚本准备

上面下载的钩子脚本 复制到 /opt/pve-igpu-hooks 要cd进去加执行权限 chmod a+x *.sh *.pl 而后复制文件或者ln

1
2
3
mkdir -p /var/lib/vz/snippets
rm -rf /var/lib/vz/snippets/hooks-igpupt.pl
ln -sf /opt/pve-igpu-hooks/hooks-igpupt.pl /var/lib/vz/snippets/hooks-igpupt.pl#cp hooks-igpupt.pl /var/lib/vz/snippets/hooks-igpupt.pl

win11-1 小调整

然后上面创建的硬盘只有12G大小再小装不机。可以备份一下sudo cp /var/lib/vz/images/1101/vm-1101-disk-2.qcow2 /home/yanhui/pve-files/w11-q35-12G.qcow2 。然后返回pve网页控制台选中这个虚拟磁盘文件磁盘操作调整大小,增加88G容量。而后可以返回win的磁盘管理里面 扩容磁盘(开机状态下 virio可以扩容)

另外额外挂载一个磁盘,并去掉多余的光驱。

复制出win11-2 并配置

cp /etc/pve/qemu-server/1101.conf /etc/pve/qemu-server/1102.conf 这样1102 和1101 共享磁盘文件。

编辑win11-2(1102)

显示 None ,机型i440fx,添加usb设备和核显 板载声卡。然后编辑1102.conf 添加args 修改 核显的配置 以及添加hookscript,另外bios设置为默认seaf最终配置文件如下

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
agent: 1
args: -bios /opt/pve-igpu-hooks/b150m.bin  -set device.hostpci0.addr=02.0 -set device.hostpci0.x-igd-gms=2 -set device.hostpci0.x-igd-opregion=on  -smbios type=2 -global nec-usb-xhci.msi=off -global ICH9-LPC.acpi-pci-hotplug-with-bridge-support=off -cpu host,vendor=GenuineIntel,+invtsc,+hypervisor,kvm=on,vmware-cpuid-freq=on
boot: order=virtio0
cores: 12
cpu: host
efidisk0: local:1101/vm-1101-disk-0.qcow2,efitype=4m,pre-enrolled-keys=1,size=528K
hookscript: local:snippets/hooks-igpupt.pl
hostpci0: 0000:00:02.0,legacy-igd=1
machine: pc-i440fx-8.0
memory: 10240
meta: creation-qemu=8.0.2,ctime=1695966414
name: win11-1
net0: virtio=72:57:35:2C:58:36,bridge=vmbr0,firewall=1
numa: 0
ostype: win11
scsihw: virtio-scsi-single
smbios1: uuid=9263edd9-30d2-43e7-8907-46bc55fbe996
sockets: 1
tpmstate0: local:1101/vm-1101-disk-1.raw,size=4M,version=v2.0
usb0: host=1ea7:0064,usb3=1
usb1: host=260d:0013,usb3=1
vga: none
virtio0: local:1101/vm-1101-disk-2.qcow2,cache=unsafe,iothread=1,size=100G
virtio1: local:1101/vm-1101-disk-3.qcow2,cache=unsafe,iothread=1,size=120G
vmgenid: 9a7d17fc-bc6b-4b76-87d2-f523834aee4a

主板vbios文件-bios /opt/pve-igpu-hooks/b150m.bin 仅适合我的主板,不是所有平台都需要这个文件,你可以删掉args里面的这段内容先看看能不能启动。也可以从/usr/share/kvm/ 手动指定一个。args后面的内容 是一些显卡的配置还有防止被检测虚拟机等。

开机后,usb设备和核显正常时可以点亮的。扩容C盘,用系统更新功能安装显卡驱动(win11-3 因为是q35模式需要先有驱动才能点核显)。

win11-3(1103)

cp /etc/pve/qemu-server/1101.conf /etc/pve/qemu-server/1103.conf 这样1103 也 和1101 共享磁盘文件。只添加args和钩子 然后添加usb设备即可,最终配置文件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
agent: 1
args: -device vfio-pci,host=00:02.0,addr=0x02,x-igd-opregion=on,romfile=vbios_gvt_uefi.rom
bios: ovmf
boot: order=virtio0
cores: 12
cpu: host
efidisk0: local:1101/vm-1101-disk-0.qcow2,efitype=4m,pre-enrolled-keys=1,size=528K
hookscript: local:snippets/hooks-igpupt.pl
machine: pc-q35-8.0
memory: 10240
meta: creation-qemu=8.0.2,ctime=1695966414
name: win11-q35-x2
net0: virtio=72:57:35:2C:58:36,bridge=vmbr0,firewall=1
numa: 0
ostype: win11
scsihw: virtio-scsi-single
smbios1: uuid=9263edd9-30d2-43e7-8907-46bc55fbe996
sockets: 1
tpmstate0: local:1101/vm-1101-disk-1.raw,size=4M,version=v2.0
usb0: host=1ea7:0064,usb3=1
usb1: host=260d:0013,usb3=1
virtio0: local:1101/vm-1101-disk-2.qcow2,cache=unsafe,iothread=1,size=100G
virtio1: local:1101/vm-1101-disk-3.qcow2,cache=unsafe,iothread=1,size=120G
vmgenid: 9a7d17fc-bc6b-4b76-87d2-f523834aee4a

q35 模式 可以双屏幕,启动的时候会提示一个 IGD不支持legacy的警告信息,不用理会。

如果提示vfio/xx/0 不存在的错误 重启再启动一下就可以,可以用手机 ssh过来 qm start 1103 这样启动

更多可以参考 :

https://dev.leiyanhui.com/pve/win-gpu/

https://dev.leiyanhui.com/pve/pve-uhd-hook-win-11-all

https://zhing.fun/pve_igpupt/

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计