PVE设置显卡直通

news/2025/1/2 1:58:11/

在这里插入图片描述

0x01 准备事项

  • 1、确认CPU是否支持VT-D
    • Inter官网查询: https://www.intel.cn
    • AMD官方网站: https://www.amd.com/zh-hans
      例: i7-7700 查询结果
  • 2、确保启动方式为gurb,非systemd-boot
    如果启动方式为systemd-boot,在0x02步骤中需要参考 [3] Proxmox VE Administration Guide 开启iommu功能

0x02 开启IOMMU功能

编辑文件*/etc/default/grub*,修改GRUB_CMDLINE_LINUX_DEFAULT字段值

如果为Intel的CPU

GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"

如果为AMD的CPU

GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"

0x03 添加VT-D功能的内核模块

打开文件/etc/modules,新增以下4行内容

vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

0x04 屏蔽显卡驱动

# 屏蔽镭龙显卡驱动
echo "blacklist radeon" >> /etc/modprobe.d/pve-blacklist.conf# 屏蔽英伟达显卡的开源nouveau驱动
echo "blacklist nouveau" >> /etc/modprobe.d/pve-blacklist.conf# 屏蔽英伟达显卡驱动
echo "blacklist nvidia" >> /etc/modprobe.d/pve-blacklist.conf

0x05 其它参数

# 允许不安全的中断
echo "options vfio_iommu_type1 allow_unsafe_interrupts=1" > /etc/modprobe.d/iommu_unsafe_interrupts.conf# 忽略异常,防止虚拟机异常导致宿主机崩溃
#   ignore_msrs             :   忽略异常
#   report_ignored_msrs     :   是否报告异常
echo "options kvm ignore_msrs=1 report_ignored_msrs=0" > /etc/modprobe.d/kvm.conf

0x06 配置VFIO

ps:执行此操作后可能无法输出到外接显示器,若出现此情况,请撤回该步骤

  • 1、查看显卡ID

    root@pve:~# lspci -nn | grep VGA
    # 前缀02:00.0是设备编号,最后*.0为子编号
    # 末尾[10de:2489]是设备ID
    02:00.0 VGA compatible controller [0300]: NVIDIA Corporation Device [10de:2489] (rev a1)
    08:00.0 VGA compatible controller [0300]: Matrox Electronics Systems Ltd. G200eR2 [102b:0534] (rev 01)
    root@pve:~#
    

    N卡编号为02:00,搜索对应的设备ID和音频设备ID

    root@pve:~# lspci -n -s 02:00
    02:00.0 0300: 10de:2489 (rev a1)
    02:00.1 0403: 10de:228b (rev a1)
    root@pve:~#
    

    或者直接以NVIDIA为关键词搜索相关的设备,其中一个是音频

    root@pve:~# lspci -nn | grep NVIDIA
    02:00.0 VGA compatible controller [0300]: NVIDIA Corporation Device [10de:2489] (rev a1)
    02:00.1 Audio device [0403]: NVIDIA Corporation GA104 High Definition Audio Controller [10de:228b] (rev  a1)
    root@pve:~#
    

    得到显卡的设备ID和显卡内置音频设备ID为:

    • 显卡ID10de:2489
    • 音频ID10de:228b
  • 2、将设备ID添加到vfio.conf

    # 添加PCI设备
    echo "options vfio-pci ids=10de:2489,10de:228b disable_vga=1" > /etc/modprobe.d/vfio.conf
    

    如果无法输出到外接显示器,取消disable_vga=1参数试试

    echo "options vfio-pci ids=10de:2489,10de:228b" > /etc/modprobe.d/vfio.conf
    

0x07 应用更改

  • 1、刷新更改
    update-grub
    update-initramfs -u -k all
    
  • 2、重启PVE
    reboot
    
  • 3、检查是否配置成功
    root@pve:~# lspci -nnk
    02:00.0 VGA compatible controller [0300]: NVIDIA Corporation Device [10de:2489] (rev a1)Subsystem: CardExpert Technology Device [10b0:153c]Kernel driver in use: vfio-pciKernel modules: nvidiafb, nouveau
    02:00.1 Audio device [0403]: NVIDIA Corporation GA104 High Definition Audio Controller [10de:228b] (rev a1)Subsystem: CardExpert Technology Device [10b0:153c]Kernel driver in use: vfio-pciKernel modules: snd_hda_intel     
    root@pve:~# 
    
    如果看到Kernel driver in use: vfio-pci,表示应用成功

0x09 添加显卡到虚拟机中

完成上述步骤配置后,在PVE-web图形化端添加PCI-E设备到虚拟机中即可

ps:
1、我同时添加显卡和音频之后,开机遇报错:TASK ERROR: start failed: QEMU exited with code 1,如果遇到同样的报错,尝试把音频设备从硬件中移除
2、我本次安装的win11,好像msdn i'tell u下载的无法安装,建议下载官方镜像尝试,或者下载2021年8月份版本


参考链接

[1] Proxmox VE 直通显卡方案及解决N卡Code43
[2] Stopped start failed: QEMU exited with code 1
[3] Proxmox VE Administration Guide


http://www.ppmy.cn/news/294385.html

相关文章

16进制颜色透明度对照表

#000000:16进制颜色,纯黑色不透明 #80000000:表示黑色50%透明度,前两位是透明度,不写默认FF 透明度16进制100%FF99%FC98%FA97%F796%F595%F294%F093%ED92%EB91%E890%E689%E388%E087%DE86%DB85%D984%D683%D482%D181%CF8…

kubernetes 1.24.2实战与源码(4)

kubernetes 1.24.2实战与源码 第22章 容器底层技术之镜像原理 22.1 以nginx镜像为例看OCI中的镜像规范 22.2 联合文件系统简介 第23章 k8s job和cronjob源码解读 23.1 job的基本功能 23.2 job controller源码解析之初始化工作 23.3 job controller源码解析之syncJob工作…

【i阿极送书——第四期】《ChatGPT时代:ChatGPT全能应用一本通》

系列文章目录 作者:i阿极 作者简介:数据分析领域优质创作者、多项比赛获奖者:博主个人首页 😊😊😊如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论📒…

Golang context 实现原理与源码解读

0 context入门介绍 context是Golang应用开发常用的并发控制技术,主要在异步场景中用于实现并发协调以及对 goroutine 的生命周期控制,它与WaitGroup最大的不同点是context对于派生goroutine有更强的控制力,它可以控制多级的goroutine。 con…

【Android】WMS(六)Surface的创建和操作

Surface的创建流程 在Android系统中每个Activity都有一个独立的画布(在应用侧称为Surface,在SurfaceFlinger侧称为Layer), 无论这个Activity安排了多么复杂的view结构,它们最终都是被画在了所属Activity的这块画布上。 1.Surfac…

【每日一题Day228】LC2352相等行列对 | 哈希

相等行列对【LC2352】 给你一个下标从 0 开始、大小为 n x n 的整数矩阵 grid ,返回满足 Ri 行和 Cj 列相等的行列对 (Ri, Cj) 的数目*。* 如果行和列以相同的顺序包含相同的元素(即相等的数组),则认为二者是相等的。 映射哈希表 …

Matlab论文插图绘制模板第101期—人口金字塔图

在之前的文章中,分享了Matlab双向柱状图的绘制模板: 进一步,再来分享一种特殊的双向柱状图:人口金字塔图。 先来看一下成品效果: 特别提示:本期内容『数据代码』已上传资源群中,加群的朋友请自…

Symfony3的所有命令及其解释说明

1. cache:clear:清除缓存,可以用于在生产环境中更新代码。 2. cache:warmup:在空缓存中预热缓存,可以在生产环境中提高应用程序的响应时间。 3. config:debug:显示配置文件的参数,可以帮助你调试和查找错…