PVE虚拟机核显直通及返回宿主机显示

2022-07-01 17:12:45 27点赞 170收藏 22评论

追加修改(2022-07-02 12:44:22):
钩子脚本复制到snippets目录这一步,如果是直接安装的PVE7.2,需要先创建目录,mkdir /var/lib/vz/snippets,然后再复制文件。因为直接安装PVE7.2默认没有snippets目录,但从之前版本升级到7.2是有这个目录的。

本文是我的B站视频《PVE虚拟机核显直通及返回宿主机显示钩子脚本》的文字说明版,如果有看不明白的地方,可以参照我视频中的操作。


首先介绍一下我的PVE核显直通方案能够实现怎样的效果。
 1. 可以正常驱动,对核显驱动版本没有特别需求,OpenCL使用正常。
 2. 显示器能输出画面和HDMI音频,分辨率正常,可以显示虚拟机开机画面。
 3. PVE开机能够正常显示,对于大多硬件配置还能在PVE上安装KDE界面不受影响。
 4. 虚拟机关机后直通的硬件返回到宿主机,PVE恢复正常显示输出。
注:本文操作在PVE7.2下没有问题,选择PVE7.1.8是有其他的原因。

硬件平台及BIOS设置

本篇仅针对支持legacy启动的intel核显机器,建议intel 7~10代。
我们知道11代开始intel核显只支持UEFI启动,很多人说核显不能直通了…其实不对,关于纯UEFI启动的核显直通会有一些差别,这个以后再讲。(目前我已经在N5105工控机上实现了UEFI启动核显直通Windows虚拟机,但还不太完善)

BIOS设置

首先确保VT-D是启用的状态,然后要开启CSM,PCI或Video等项目选择legacy

PVE虚拟机核显直通及返回宿主机显示

PVE直通设置

简单说,就是只对IOMMU和Kernel Modules进行基本的配置,不要屏蔽核显和声卡
修改/etc/default/grub

GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"

如果你之前添加了”video=efifb:off,vesafb:off”请删除
运行命令使grub修改生效

update-grub

modprobe设置

修改/etc/modules,添加以下内容

vfio

vfio_iommu_type1

vfio_pc

vfio_virqfd

看看你是否在黑名单中添加了下面的内容
修改/etc/modprobe.d/pve-blacklist.conf,删除以下内容
(某些硬件需要添加以下内容才能正常直通,此类硬件可能不能实现本文完整效果)

blacklist i915

blacklist snd_hda_intel

blacklist snd_hda_codec_hdmi

如果您此前将核显和声卡ID添加到vfio,请删除/etc/modprobe.d/vfio.conf

运行命令刷新initramfs,使以上修改生效

update-initramfs -u -k all

Win虚拟机设置

重启PVE之后新建Windows虚拟机
BIOS设置为默认的“SeaBIOS”,显示设置为“无”,机型设置为“i440fx”
直接通过web页面添加核显、声卡等PCI设备
如果需要直通NVME固态硬盘,目前需要将pve-qemu-kvm降级至6.1.1-2(截止6.2.0-10较新版本均不可直通NVME)

apt update

apt install pve-qemu-kvm=6.1.1-2

虚拟机添加CD驱动器,挂载Windows系统安装ISO镜像以及VirtIO驱动ISO镜像
编辑/etc/pve/qemu-server/<VMID>.conf
在直通核显一行后面添加“legacy-igd=1”,如下所示

hostpci0: 0000:00:02.0,legacy-igd=1

在首行添加以下内容

args: -set device.hostpci0.x-igd-gms=1

PVE虚拟机核显直通及返回宿主机显示

启动虚拟机,即可在物理显示器中使用键鼠安装系统。
系统安装完成后,打开挂载的VirtIO驱动盘安装相关驱动,然后可以直接通过Windows更新自动安装核显驱动。
注意:驱动安装完成后,请务必关闭系统休眠。
现在虚拟机核显已经可以正常使用了,OpenCL正常。

钩子脚本设置

如果前面的操作没有问题,可以增加钩子脚本实现虚拟机关机后直通的硬件返回宿主机。
克隆我的相关代码仓库到/root目录

PVE虚拟机核显直通及返回宿主机显示

添加可执行权限

cd pvevm-hooks

chmod a+x *.sh *.pl

使用lspci -v命令查看你的硬件相关信息,根据你的实际情况对vm-stop.sh等脚本中相关内容进行修改

PVE虚拟机核显直通及返回宿主机显示

复制perl脚本至snippets目录

cp hooks-igpupt.pl /var/lib/vz/snippets

将钩子脚本应用至虚拟机

qm set <VMID> -hookscript local:snippets/hooks-igpupt.pl

如果你想对钩子脚本进行其他修改,可参照我的脚本与PVE模板文件进行对比 /usr/share/pve-docs/examples/guest-example-hookscript.pl
应用钩子脚本后即可实现虚拟机关机后返回到PVE宿主机的显示。

PVE图形界面相关

我们知道PVE是基于Debian的,所以可以像普通Debian一样安装图形界面,在安装图形界面后需要做以下修改。
vfio-startup.sh和vfio-teardown.sh 默认情况下不会被调用,但在PVE安装图形界面的情况下,就需要用到这两个脚本。
取消vm-start.sh中(dirname0)/vfio-startup.sh该行注释
取消vm-stop.sh中(dirname0)/vfio-teardown.sh该行注释
感谢 @ledisthebest 提供的脚本vfio-startup.sh和vfio-teardown.sh

重要设置

PVE安装图形界面后与LXC会有冲突,导致启动LXC时CPU占用过高
运行以下命令停用udisks2服务可解决这一问题

systemctl mask udisks2.service

systemctl stop udisks2.service

KDE桌面启动虚拟机图标

输入以下命令创建脚本并赋予可执行权限

echo -e '#!/bin/bashnqm start &' > start_win.sh

chmod a+x start_win.sh

桌面新建“链接到应用程序”,应用程序命令中选择创建的脚本,“高级选项”中“用户”填写“root”
双击图标,输入密码即可启动Windows虚拟机。

PVE平台基于legacy启动的核显直通基本就是这样了,之后可以和大家聊聊怎么给PVE安装KDE图形界面,以及KDE界面下输入法和浏览器视频硬解等操作。
至于较新平台UEFI启动的核显直通操作,11代及之后硬件和N5105之类的工控机需要基于UEFI做核显直通,(其实10代及之前的硬件做UEFI核显直通也有一个好处,就是能安装黑苹果)等我弄得比较清楚了再来和大家分享。

作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

展开 收起
22评论

  • 精彩
  • 最新
  • j4125 pve7.2 照着搞能输出画面了 但死活没有hdmi音频

    校验提示文案

    提交
    j4125应该需要加黑名单,还有可能主要romfile

    校验提示文案

    提交
    收起所有回复
  • 蹲个12代的方案 [大囧] [大囧]

    校验提示文案

    提交
    我前两天弄过了12100f的显卡直通了,感觉挺简单的,但是不能远程打lol,就不打算搞windows了

    校验提示文案

    提交
    咋弄的哇大佬 有没有教程或者视频参考啊

    校验提示文案

    提交
    还有1条回复
    收起所有回复
  • 学习了,我的是n5105,期待楼主的教程 [高兴]

    校验提示文案

    提交
  • 之前一直无法返回宿主,原来还需要额外步骤,学习了

    校验提示文案

    提交
  • 玩得有点6,我现在也在用12代平台。

    校验提示文案

    提交
  • 如果如果一些问题,可以看看我的博客文章,去看看 上面会持续修改,张大妈上不好做修改

    校验提示文案

    提交
  • 顶顶顶。b站先看到的。分析的太棒了

    校验提示文案

    提交
  • Apt update 中proxmox的网址pve目录加密了,需要认证才能下载,还有没有其他办法

    校验提示文案

    提交
  • 大佬怎么只有这一篇文章了?前后呢?

    校验提示文案

    提交
    对啊 对啊 咋删除了

    校验提示文案

    提交
    收起所有回复
  • 微星B460主板,开启CSM后,开机显示“there is no vbios support detected in this card”

    校验提示文案

    提交
    10105CPU吗 好像不支持传统启动

    校验提示文案

    提交
    收起所有回复
  • 赞!按本文成功了。楼主UEFI启动搞定了吗?

    校验提示文案

    提交
  • 安装白屏怎么搞?

    校验提示文案

    提交
  • n5015不可以吧,全网没见到可以实现的

    校验提示文案

    提交
  • 有没有办法虚拟机关机了,宿主机也跟着一起关呢?

    校验提示文案

    提交
  • 华硕小主机,没有bios没有csm设置项,有没有办法绕过?谢谢

    校验提示文案

    提交
    我是华硕z490,有csm,但是我关闭了csm,用uefi启动,可以直通核显。不过我和楼主的方式不太一样,我是用了vbios。

    校验提示文案

    提交
    收起所有回复
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
170
扫一下,分享更方便,购买更轻松