本文内容是 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/