PVE虚拟机核显直通及返回钩子脚本

本文是我的视频《PVE虚拟机核显直通及返回宿主机显示钩子脚本》的文字说明版,如果有看不明白的地方,可以参照我视频中的操作。
B站:https://www.bilibili.com/video/BV1oT41137CU
油管:https://youtu.be/iAs4STnDowU

首先介绍一下我的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

主板BIOS中引导选项,选择对应硬盘项,不要选择UEFI。
如果选择UEFI,在安装图形界面后,直通核显可能会出现Failed to mmap 0000:00:02.0 BAR 2. Performance may be slow 这样的错误。

在安装了独显的情况下,要直通核显输出请启用“IGPU多监视器”,并将主图形适配器设置为“板载”

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_pci
vfio_virqfd

看看你是否在黑名单中添加了下面的内容
修改/etc/modprobe.d/pve-blacklist.conf,删除以下内容
某些硬件(比如J4125)需要添加以下内容才能输出正常分辨率和HDMI音频,此类硬件可能不能实现本文完整效果。

blacklist i915
blacklist snd_hda_intel
blacklist snd_hda_codec_hdmi

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

运行命令刷新initramfs并重启PVE,使以上修改生效

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镜像
https://github.com/AveYo/MediaCreationTool.bat
以及VirtIO驱动ISO镜像
https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/
编辑/etc/pve/qemu-server/<VMID>.conf
在直通核显一行后面添加“legacy-igd=1”,如下所示

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

J4125之类的硬件可能需要加载romfile,不然可能会有显示器分辨率和HDMI音频的问题。
这类需要romfile的机器,/sys/bus/pci/devices/0000:00:02.0/下并没有rom,需要从主板bios中提取vbios
经网友测试,即使硬件没问题,如果新安装的PVE没进行过更新,/sys/bus/pci/devices/0000:00:02.0/rom也可能不存在,这时直通就会不成功。
请在安装PVE后进行必要的更新,重启后再看,如果rom存在,那么大概率不需要romfile。

hostpci0: 0000:00:02.0,legacy-igd=1,romfile=vbios.bin

在首行添加以下内容

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

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

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

git clone https://gitee.com/hellozhing/pvevm-hooks.git

github:

git clone https://github.com/HelloZhing/pvevm-hooks.git

添加可执行权限

cd pvevm-hooks
chmod a+x *.sh *.pl

vm-start.sh和vm-stop.sh在视频中基础上进行过修改,会自动识别核显ID和声卡addr。
现在既可以适应我上面的直通方面也能适应q35(UPT)直通方案。
脚本中默认没有启用USB直通返回,如需启用,请取消vm-stop.sh中“echo $usb_addr…”两行注释。

复制perl脚本至snippets目录
(mkdir报错不用管,加上这一条是因为直装PVE7.2没有这个文件夹,而从之前版本升级到7.2会有)

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

将钩子脚本应用至虚拟机

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/bash\nqm start <VMID> &' > start_win.sh
chmod a+x start_win.sh

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

Windows远程桌面多用户登录
默认情况下本地用户和远程桌面不能同时登录,而使用SuperRDP可以解除这一限制。
https://github.com/anhkgg/SuperRDP
下载Releasesz中的SuperRDP2_*.zip,解压运行,根据提示操作即可。

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



77 comments

  1. J4125直通显卡安装好系统安装好显卡驱动重启PVE后启动WIN11虚拟机一直黑屏。
    kvm: -device vfio-pci,host=0000:00:02.0,id=hostpci0,bus=pci.0,addr=0x2: Failed to mmap 0000:00:02.0 BAR 2. Performance may be slow
    TASK OK

      • 好了!BIOS中的CSM不能用兼容模式。只能legacy模式。想问一下,J4125不添加驱动黑名单是否可以用钩子脚本实现返回宿主机?

        • 别的机器我不确定,我手上这个J4125工控机,如果不加黑名单分辨率只能到1080P而且没有声音。可以用钩子脚本返回宿主机,但是再次启动虚拟机的时候分辨率和声音就会出问题。

  2. 只能二选一了!倍控J4125工控机添加了黑名单也还是没有声音,分辨率可调到1920*1080.BIOS都里也都选了legacy模式。不知道哪里有问题。刚安装好是有声音的。重启PVE后就没了。

    • 找到问题了,我的声卡直通了就会黑屏,我现在用了个USB声卡,但是显示不是很正常,不能跑满4K60HZ,只能跑在30HZ,线材和显示器是没问题的,KDE桌面可以4k60HZ

  3. 装完驱动同黑屏,虚拟机里面 efi legacy启动都试过不行,宿主机是按教程legacy启动的,不装驱动可以直通,装完就黑屏,9100 uhd630,按照其他人去掉声卡直通也不行,是不是和主板有关的
    明显的一点就是实体机如果安装驱动的时候,会有两次声音,类似usb拔出再插入,黑屏之后响一声,然后重新显示再响一声
    但是虚拟机里就只响一声,然后黑屏,没再响,好像显卡就这么掉了

    • 主板关系比较大吧,我用9400在华擎B365试过没问题。虚拟机用EFI操作会比较繁琐,等我出EFI直通的视频到时候可以再试试

  4. 我看大部分的教程modprobe设置里都是vfio_pci,您这边是vfio_pc,请问是笔误,还是就是要这样填

    • 感谢指正,应该是我编辑文章的时候手滑删掉了一个字母。不过其实……那4行全都不要,也一样可以直通

  5. N5105工控机PVE7.2-3内核更新到5.17.5是不是不能将pve-qemu-kvm降级至6.1.1-2?评论不能截图上传么?

    • 应该和内核没有关系吧,我目前5.15.39-1内核,PVE降到了7.1.8,qemu降到了6.1.1-2。PVE降级要处理一些依赖,qemu好像不存在什么依赖。

  6. N5105工控机PVE7.2-3内核更新到5.17.5是不是不能将pve-qemu-kvm降级至6.1.1-2?
    降级过程如下:
    root@www:~# apt update
    apt install pve-qemu-kvm=6.1.1-2
    Hit:1 http://security.debian.org bullseye-security InRelease
    Hit:2 http://ftp.debian.org/debian bullseye InRelease
    Err:3 https://enterprise.proxmox.com/debian/pve bullseye InRelease
    401 Unauthorized [IP: 51.79.159.216 443]
    Hit:4 http://ftp.debian.org/debian bullseye-updates InRelease
    Get:5 https://dl.cloudsmith.io/public/pve-edge/kernel/deb/debian bullseye InRelease [5,171 B]
    Reading package lists… Done
    E: Failed to fetch https://enterprise.proxmox.com/debian/pve/dists/bullseye/InRelease 401 Unauthorized [IP: 51.79.159.216 443]
    E: The repository ‘https://enterprise.proxmox.com/debian/pve bullseye InRelease’ is not signed.
    N: Updating from such a repository can’t be done securely, and is therefore disabled by default.
    N: See apt-secure(8) manpage for repository creation and user configuration details.
    Reading package lists… Done
    Building dependency tree… Done
    Reading state information… Done
    E: Version ‘6.1.1-2’ for ‘pve-qemu-kvm’ was not found

  7. 成功降为6.1了,但在启动新的win11安装时就提示如下错误:start failed: QEMU exited with code 1
    完整出错提示如下:kvm: -drive file=/var/lib/vz/template/iso/11_21H2_Consumer_x64_zh-CN.iso,if=none,id=drive-sata0,media=cdrom,aio=io_uring: Could not read image for determining its format: Input/output error
    TASK ERROR: start failed: QEMU exited with code 1

  8. 最近一直在折腾 pve 直通核显,参考了无数教程但是一直没解决,实在没办法找楼主讨论一下。方便的话可以用邮箱交换一下 telegram 一起研究
    首先我硬件配置是 i3-10300 + H510M-ITX/ac,支不支持 legacy 好像不仅看 cpu,我开启不了 legacy 应该是主板问题。
    我开启直通的步骤主要参考:https://3os.org/infrastructure/proxmox/gpu-passthrough/igpu-passthrough-to-vm/

    我的情况是直通网口没有问题,但是直通核显的话,不仅 vm 开不了机,而且 pve 过一会也会挂掉,无论 vm 是 ubuntu 还是 windows 都会有这个问题,pve 最新的内核似乎有问题,所以我把 5.11 和 5.13 的内核都试过了也不能解决。

    好像网上大部分人直通核显并没有我这么多问题,所以这看起来还是主板的差异造成?不知道楼主有没有碰到类似的问题

  9. 我的是J4125,之前按其他直通是能显示,VGA不能输出,声音好像也不行,然后用了你的方法,开始没有声音,但是VGA和HDMI都可以输出,后来找了一下,调了GRUB的文件内容如下,HDMI就有声音了,但是钩子脚本就不好用了,有时win10关机会导致PVE死机,所以现在取消掉钩子脚本也不错。。。
    GRUB_CMDLINE_LINUX_DEFAULT=”quiett intel_iommu=on iommu=pt pcie_acs_override=downstream,multifunction nofb textonly nomodeset video=efifb:off,vesafb:off”
    GRUB_CMDLINE_LINUX=”vfio-pci.ids=8086:3185,8086:3198″

      • 对于J4125,相对来说,加黑名单比添加vfio pciid要好一些,可以让pve启动时能有命令行界面

        • vfio不加也能显示..主要是pcie_acs_override=downstream,multifunction nofb textonly nomodeset video=efifb:off,vesafb:off这句…不加黑名单也可以…不过我也不用pve启动命令行..对于命令不太会..只会复制粘贴…用ssh就是了..

          • 对于某些PVE失联的情况,保留命令行很有意义,比如8125B的机器安装官方驱动的时候就会失联

  10. 如果鉤子腳本不需要顯卡(獨顯)直通及返回,只需要usb直通及返回的話,腳本要怎麼修改呢?

  11. 感谢楼主分享hdmi直通成功,我有个问题请教,插入dp线无法使用,已经排除线问题,请问如何设置解决,谢谢

  12. Thinkcenter CPU-I7-9700 Q370芯片组
    我的虚拟机能直通,显卡能正确输出,声卡也没问题,问题是直通的虚拟机启动,宿主机网络就断掉了!
    重启宿主机,进入虚拟机,虚拟机无网络,宿主机也没网络!
    重装过PVE 重装过虚拟机问题一样!

  13. J4125 主板开启video legacy(不开会启动不了虚拟机) ,pve 7.2.7 内核 5.15.39-4,pve配置是和文中一样,不同的是核显直通给群晖,启动虚拟机后内存占用很高,无法找到IP地址

  14. 我按照你的教程操作了,所有不走都没有问题,但是虚拟机开机以后,显示器只显示SeaBIOS 和Machine UUID 然后就卡住不动了,请问这种情况一般是啥问题,应该改哪里?

    • 跟你一样的问题,华硕b360m-plus gaming s,技嘉b360m aorus pro。启动虚拟机,跟你卡同一画面。微星z390芯片组的两个主板虚拟机启动正常。

  15. “J4125之类的硬件可能需要加载romfile,不然可能会有显示器分辨率和HDMI音频的问题。
    这类需要romfile的机器,/sys/bus/pci/devices/0000:00:02.0/下并没有rom,需要从主板bios中提取vbios
    经网友测试,即使硬件没问题,如果新安装的PVE没进行过更新,/sys/bus/pci/devices/0000:00:02.0/rom也可能不存在,这时直通就会不成功。
    请在安装PVE后进行必要的更新,重启后再看,如果rom存在,那么大概率不需要romfile。”

    请教一下,这一段不太明白,如果/sys/bus/pci/devices/0000:00:02.0/中不存在rom,朋友从他的J4125中提取好的vbios.bin文件分享给我了,我应该怎么办才能直通呢?谢谢

  16. 将勾子脚本应用到虚拟机的时候提示
    400 Parameter verification failed.
    hookscript: script ‘local:snippets/hooks-igpupt.pl’ is not executable
    请教下大佬要怎么处理?

  17. kvm: -device vfio-pci,host=0000:00:02.0,id=hostpci0,bus=pci.0,addr=0x2: vfio 0000:00:02.0: failed to open /dev/vfio/1: No such file or directory
    TASK ERROR: start failed: QEMU exited with code 1
    有没有跟我一样的错误的?核显直通已经做好了,但再加钩子脚本就会出这个报错。

  18. 有没有遇到直通成功后核显占用内存很大,虚拟机分配8G内存被UHD630核显占用了4G,只有2G可用,以前屏蔽核显直通没有这个问题。

  19. 用这个方法我的8350U一起没显示在物理屏上,最后还是回q35,希望博主写个虚拟机重启的钩子,这样也算完美了,谢谢!

  20. 我直通独显成功了,正好找到这个脚本,想解决关机让信号返回PVE的问题。
    看了下脚本,似乎得改一部分代码,试了几次没成功

    • 黑苹果要用UEFI启动,可以参考我N5105的方案,另外还要编译VFIO显示开机画面,UHD630应该可以

  21. start failed: command ‘/usr/bin/kvm -id 100 -name ‘WIN11,debug-threads=on’ -no-shutdown -chardev ‘socket,id=qmp,path=/var/run/qemu-server/100.qmp,server=on,wait=off’ -mon ‘chardev=qmp,mode=control’ -chardev ‘socket,id=qmp-event,path=/var/run/qmeventd.sock,reconnect=5’ -mon ‘chardev=qmp-event,mode=control’ -pidfile /var/run/qemu-server/100.pid -daemonize -smbios ‘type=1,uuid=23de0798-0162-4e2f-87ea-7374cc9510fb’ -smp ‘4,sockets=1,cores=4,maxcpus=4’ -nodefaults -boot ‘menu=on,strict=on,reboot-timeout=1000,splash=/usr/share/qemu-server/bootsplash.jpg’ -vga none -nographic -no-hpet -cpu ‘host,hv_ipi,hv_relaxed,hv_reset,hv_runtime,hv_spinlocks=0x1fff,hv_stimer,hv_synic,hv_time,hv_vapic,hv_vpindex,+kvm_pv_eoi,+kvm_pv_unhalt’ -m 16384 -object ‘memory-backend-ram,id=ram-node0,size=16384M’ -numa ‘node,nodeid=0,cpus=0-3,memdev=ram-node0’ -device ‘pci-bridge,id=pci.1,chassis_nr=1,bus=pci.0,addr=0x1e’ -device ‘pci-bridge,id=pci.2,chassis_nr=2,bus=pci.1,addr=0x1e’ -device ‘pci-bridge,id=pci.3,chassis_nr=3,bus=pci.0,addr=0x5’ -device ‘vmgenid,guid=326d2e3a-fc31-4bab-9b84-09bdd9d455c2’ -device ‘piix3-usb-uhci,id=uhci,bus=pci.0,addr=0x1.0x2’ -device ‘usb-tablet,id=tablet,bus=uhci.0,port=1’ -device ‘vfio-pci,host=0000:00:02.0,id=hostpci0,bus=pci.0,addr=0x2’ -device ‘vfio-pci,host=0000:00:1f.3,id=hostpci1,bus=pci.0,addr=0x11’ -device ‘vfio-pci,host=0000:00:14.0,id=hostpci2,bus=pci.0,addr=0x1b’ -chardev ‘socket,path=/var/run/qemu-server/100.qga,server=on,wait=off,id=qga0’ -device ‘virtio-serial,id=qga0,bus=pci.0,addr=0x8’ -device ‘virtserialport,chardev=qga0,name=org.qemu.guest_agent.0’ -device ‘virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3,free-page-reporting=on’ -iscsi ‘initiator-name=iqn.1993-08.org.debian:01:cb725cf07bc’ -device ‘ahci,id=ahci0,multifunction=on,bus=pci.0,addr=0x7’ -drive ‘file=/dev/pve/vm-100-disk-0,if=none,id=drive-sata0,format=raw,cache=none,aio=io_uring,detect-zeroes=on’ -device ‘ide-hd,bus=ahci0.0,drive=drive-sata0,id=sata0’ -drive ‘file=/var/lib/vz/template/iso/win11_consumer_22h2_x64.iso,if=none,id=drive-sata1,media=cdrom,aio=io_uring’ -device ‘ide-cd,bus=ahci0.1,drive=drive-sata1,id=sata1,bootindex=100’ -drive ‘file=/var/lib/vz/template/iso/virtio-win-0.1.229.iso,if=none,id=drive-sata2,media=cdrom,aio=io_uring’ -device ‘ide-cd,bus=ahci0.2,drive=drive-sata2,id=sata2’ -netdev ‘type=tap,id=net0,ifname=tap100i0,script=/var/lib/qemu-server/pve-bridge,downscript=/var/lib/qemu-server/pve-bridgedown,vhost=on’ -device ‘virtio-net-pci,mac=FA:1F:25:E8:44:8F,netdev=net0,bus=pci.0,addr=0x12,id=net0,rx_queue_size=1024,tx_queue_size=1024’ -rtc ‘driftfix=slew,base=localtime’ -machine ‘smm=off,type=pc-i440fx-7.2+pve0’ -global ‘kvm-pit.lost_tick_policy=discard’ -set ‘device.hostpci0.x-igd-gms=1” failed: got timeout

  22. 自己备忘一下:联想m710q + qtj2 cpu,完全按你的设置,不同点:
    不用vbios,
    GRUB_CMDLINE_LINUX_DEFAULT=”quiet intel_iommu=on iommu=pt intel_pstate=disable”

  23. args: -set device.hostpci0.x-igd-gms=1
    boot: order=sata0
    cores: 4
    hostpci0: 0000:00:02,legacy-igd=1
    memory: 4096
    meta: creation-qemu=7.2.0,ctime=1682165842
    name: nas
    net0: virtio=66:DF:9C:BC:77:84,bridge=vmbr0,firewall=1
    numa: 0
    ostype: l26
    sata0: local-lvm:vm-100-disk-0,size=1G,ssd=1
    sata1: /dev/disk/by-id/ata-INTEL_SSDSC2KB480G7_PHYS8204002A480BGN,size=468851544K
    scsihw: virtio-scsi-single
    smbios1: uuid=e88fbc2a-6efd-4384-becc-3b118b6a9943
    sockets: 1
    vga: none
    vmgenid: 9017762b-fa9b-434b-b276-1f83313d768a

    g4600t 的cpu pve 7.4 按照这个配置改了之后无法启动。
    报错信息 ()
    VM 100 qmp command ‘set_password’ failed – Could not set password
    TASK ERROR: Failed to run vncproxy.

  24. 您好,我pve7.4-3,内核5.15.104-1 ,主板是小雕365,cpu也是跟您一样QNCT,直通和您配置的一样,但配置文件里有加这句args: -set device.hostpci0.x-igd-gms=1 ,开机后内存还是异常,分配10G,开机基本就是50%,稳定后60%左右(删了这句开机也一样异常)请问有什么办法解决,内存异常很痛苦,物理机内存不是特别大

  25. 您好!按您的步骤,win11虚拟机直通核显成功到物理显示器。但是用钩子关闭虚拟机出现如下情况。不知道哪里的问题,能帮我分析下吗?谢谢
    配置:华擎h470m itx + i3 10305 核显:uhd630
    pve login: (
    38.019097] FS-Cache: Duplicate cookie detected
    338.0131261 FS-Cache: D-Cook1e C=00000007 [p=00000002 f1-222 nc-o na=11
    98.0131501 FS-Cache: 0-cookie d-0000000015cdf 44e (NFS. server) n-00000000b8b4d
    38.013168] FS-Cache: O-KeU= [16] “0300000000000000020000000aobocde*
    [
    38.013194] FS-Cache: N-cookie c=00000009 [p=00000002 f1=2 nc=0 na=1]
    38.013210] FS-Cache: N-cookie d=0000000015cdf 44e (NFS. server] n=00000000856a4
    38.013231] FS-Cache: N-key= [16]
    ‘0300000000000000020000000a0b0cde

  26. 您好,我直通一个m2控制器给虚拟机后,当虚拟机关机后,m2发热严重,但是虚拟机开机却不烫,我看有人说,虚拟机关机后,pcie设备没人接管,便以最大功率运行,博主有方法解决吗

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注