Сегодня я в пошаговом режиме покажу, как в свой сервер на базе материнской платы Gigabyte C246 WU4 и гипервизора Proxmox 6.4.4
добавить видеокарту Видеокарта PALIT nVidia GeForce GTX 1080 , PA-GTX1080 GameRock Premium 8G, 8ГБ, GDDR5X, Ret [neb1080h15p2-1040g]
, т. е. Я смогу после всего ниже указанного иметь возможность пробрасывать до виртуальных машин видеокарту. И как-то ее использовать.
Моя конфигурация домашнего сервера
Серверная материнская плата GIGABYTE C246-WU4
Процессор Intel Core i5-9600K OEM
Кулер для процессора AeroCool Verkho 3
Корпус ZALMAN N5 OF черный
Блок питания COOLER MASTER MWE White V2, 700Вт, 120мм, черный, retail
Intel SSDPEKKW256G8
KVR24N17S8/4 = это на 4Gb, DIMM, 288-контактная, 2400МГц, CL: 17
KVR24N17S8/8 = это на 8Gb, DIMM, 288-контактная, 2400МГц, CL: 17
+ видеокарта:
Видеокарта PALIT nVidia GeForce GTX 1080 , PA-GTX1080 GameRock Premium 8G, 8ГБ, GDDR5X, Ret [neb1080h15p2-1040g]
но сперва разберу на примере GeForce GT 710B
Шаг №1:
На домашний сервер установлен Debian 10
Шаг №2:
На систему установлен Proxmox 6.4.4
опираясь на заметку
Шаг №3:
Через BIOS
выставляю, что по-умолчанию монитор подключенный к материнской платы использует саму плату, а не видеокарту.
Del — Peripherals
Initial Display Output = IGFX
после нажимаю F10
для сохранения изменений
Шаг №4:
Когда система Debian 10 + Proxmox 6.4.4
загрузилась авторизуюсь в консоли и проверяю, что у меня есть поддержка DMAR & IOMMU
ekzorchik@srv-lubuntu:~$ ssh -l ekzorchik 172.33.33.116 ekzorchik@srv-proxmox2:~$ su - Password: root@srv-proxmox2:~# root@srv-proxmox2:~# dmesg | grep -e DMAR -e IOMMU [ 0.006577] ACPI: DMAR 0x0000000039654C70 0000A8 (v01 ALASKA A M I 00000002 01000013) [ 0.074501] DMAR: Host address width 39 [ 0.074502] DMAR: DRHD base: 0x000000fed90000 flags: 0x0 [ 0.074505] DMAR: dmar0: reg_base_addr fed90000 ver 1:0 cap 1c0000c40660462 ecap 19e2ff0505e [ 0.074506] DMAR: DRHD base: 0x000000fed91000 flags: 0x1 [ 0.074508] DMAR: dmar1: reg_base_addr fed91000 ver 1:0 cap d2008c40660462 ecap f050da [ 0.074508] DMAR: RMRR base: 0x00000039ae0000 end: 0x00000039d29fff [ 0.074509] DMAR: RMRR base: 0x0000003b000000 end: 0x0000003f7fffff [ 0.074510] DMAR-IR: IOAPIC id 2 under DRHD base 0xfed91000 IOMMU 1 [ 0.074510] DMAR-IR: HPET id 0 under DRHD base 0xfed91000 [ 0.074511] DMAR-IR: Queued invalidation will be enabled to support x2apic and Intr-remapping. [ 0.077562] DMAR-IR: Enabled IRQ remapping in x2apic mode root@srv-proxmox2:~#
Шаг №5:
Активируем для загрузчика grub
использование IOMMU:
root@srv-proxmox2:~# nano /etc/default/grub GRUB_DEFAULT=0 GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR="Proxmox Virtual Environment" GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on" GRUB_CMDLINE_LINUX="" GRUB_DISABLE_OS_PROBER=true GRUB_DISABLE_RECOVERY="true" root@srv-proxmox2:~# update-grub Generating grub configuration file ... Found linux image: /boot/vmlinuz-5.4.106-1-pve Found initrd image: /boot/initrd.img-5.4.106-1-pve Found linux image: /boot/vmlinuz-4.19.0-16-amd64 Found initrd image: /boot/initrd.img-4.19.0-16-amd64 Found linux image: /boot/vmlinuz-4.19.0-14-amd64 Found initrd image: /boot/initrd.img-4.19.0-14-amd64 Found linux image: /boot/vmlinuz-4.19.0-6-amd64 Found initrd image: /boot/initrd.img-4.19.0-6-amd64 done root@srv-proxmox2:~# pve-efiboot-tool refresh Running hook script 'proxmox-auto-removal'.. Running hook script 'zz-proxmox-boot'.. Re-executing '/etc/kernel/postinst.d/zz-proxmox-boot' in new private mount namespace.. No /etc/kernel/proxmox-boot-uuids found, skipping ESP sync. root@srv-proxmox2:~#
Шаг №6:
Добавляем в файл конфигурации загрузку необходимых драйверов
root@srv-proxmox2:~# nano /etc/modules vfio vfio_iommu_type1 vfio_pci vfio_virqfd
Шаг №7:
Извлекаем идентификаторы видеокарты (видео + аудио) и прописываю их как группа устройств:
root@srv-proxmox2:~# lspci 00:00.0 Host bridge: Intel Corporation 8th Gen Core Processor Host Bridge/DRAM Registers (rev 0d) 00:02.0 VGA compatible controller: Intel Corporation Device 3e98 (rev 02) 00:12.0 Signal processing controller: Intel Corporation Cannon Lake PCH Thermal Controller (rev 10) 00:14.0 USB controller: Intel Corporation Cannon Lake PCH USB 3.1 xHCI Host Controller (rev 10) 00:14.2 RAM memory: Intel Corporation Cannon Lake PCH Shared SRAM (rev 10) 00:16.0 Communication controller: Intel Corporation Cannon Lake PCH HECI Controller (rev 10) 00:16.3 Serial controller: Intel Corporation Cannon Lake PCH Active Management Technology - SOL (rev 10) 00:17.0 SATA controller: Intel Corporation Cannon Lake PCH SATA AHCI Controller (rev 10) 00:1b.0 PCI bridge: Intel Corporation Cannon Lake PCH PCI Express Root Port (rev f0) 00:1b.4 PCI bridge: Intel Corporation Cannon Lake PCH PCI Express Root Port (rev f0) 00:1c.0 PCI bridge: Intel Corporation Cannon Lake PCH PCI Express Root Port (rev f0) 00:1c.2 PCI bridge: Intel Corporation Cannon Lake PCH PCI Express Root Port (rev f0) 00:1c.3 PCI bridge: Intel Corporation Cannon Lake PCH PCI Express Root Port (rev f0) 00:1c.4 PCI bridge: Intel Corporation Cannon Lake PCH PCI Express Root Port (rev f0) 00:1d.0 PCI bridge: Intel Corporation Cannon Lake PCH PCI Express Root Port (rev f0) 00:1d.2 PCI bridge: Intel Corporation Cannon Lake PCH PCI Express Root Port (rev f0) 00:1f.0 ISA bridge: Intel Corporation Device a309 (rev 10) 00:1f.3 Audio device: Intel Corporation Cannon Lake PCH cAVS (rev 10) 00:1f.4 SMBus: Intel Corporation Cannon Lake PCH SMBus Controller (rev 10) 00:1f.5 Serial bus controller [0c80]: Intel Corporation Cannon Lake PCH SPI Controller (rev 10) 00:1f.6 Ethernet controller: Intel Corporation Ethernet Connection (7) I219-LM (rev 10) 02:00.0 Non-Volatile memory controller: Intel Corporation SSD Pro 7600p/760p/E 6100p Series (rev 03) 04:00.0 SATA controller: ASMedia Technology Inc. ASM1062 Serial ATA Controller (rev 02) 05:00.0 PCI bridge: Integrated Technology Express, Inc. IT8892E PCIe to PCI Bridge (rev 71) 07:00.0 VGA compatible controller: NVIDIA Corporation GP104 [GeForce GTX 1080] (rev a1) 07:00.1 Audio device: NVIDIA Corporation GP104 High Definition Audio Controller (rev a1) 08:00.0 Non-Volatile memory controller: Kingston Technologies Device 2263 (rev 03) 09:00.0 Ethernet controller: Intel Corporation I210 Gigabit Network Connection (rev 03) root@srv-proxmox2:~#
На консоль будет выведен список устройств доступных для проброса, находим интересующий нас блок с видеокартой, в моем случае это 2
устройства в группе видеокарта и звук по адресам 07:00.0
и 07:00.1
, поэтому я прописываю сразу группу.
root@srv-proxmox2:~# nano /etc/pve/qemu-server/vmid.conf hostpci0: 07:00
Прописываем в консоли команду для того что бы определить модель и ее id:
root@srv-proxmox2:~# lspci -n -s 07:00 07:00.0 0300: 10de:1b80 (rev a1) 07:00.1 0403: 10de:10f0 (rev a1) root@srv-proxmox2:~#
Теперь правлю файл под свою видеокарту:
root@srv-proxmox2:~# nano /etc/modprobe.d/vfio.conf options vfio-pci ids=10de:1b80,10de:10f0
Обозначаю какие драйвера хостовой системе не нужно использовать:
root@srv-proxmox2:~# nano /etc/modprobe.d/blacklist.conf blacklist radeon blacklist nouveau blacklist nvidia blacklist nvidiafb
Шаг №8:
Перезагружаю хост srv-proxmox2
Шаг №9:
Далее работающий порядок добавления видеокарты в VM
под управлением Windows 10 Pro
Создаем шаблон VM
который в последствии буду использовать, как исходник для развертывания VM
Итак:
General:
Node: srv-proxmox2
VM ID: 103
Name: 103
OS:
Storage: local
ISO image: SW_DVD9_Win_Pro_10_1903.1_64BIT_Russian_Pro_Ent_EDU_N_MLF_X22-14082.ISO
Type: Microsoft Windows
Version: 10/2016/2019
System:
Graphic card: Standard VGA
Qemu Agent: отмечаю галочкой
SCSI Controller: VirtiO SCSI
BIOS: OVMF (UEFI)
Machine: q35
Add EFI Disk: отмечаю галочкой
Storage: выбираю хранилище (к примеру у меня local-lvm)
Hard Disk:
Bud/Device: VirtiO Block 0
Storage: local-lvm
Disk size (GiB): 50
CPU:
Sockets: 1
Cores: 2
Memory:
Memory(MiB): 4096
Minimum memory (MiB): 4096
Ballooning Device: отмечаю галочкой
Network:
Bridge: vmbr0
Model: VirtiO (paravirtualized)
Далее VM
не запускаем, добавляем еще одни CDROM
где указываем использовать образ virtio-win-0.1.171.iso
и изменяем конфигурационный файл создаваемой виртуальной машины через консоль:
root@srv-proxmox2:~# nano /etc/pve/qemu-server/103.conf agent: 1 bios: ovmf boot: order=virtio0;ide2;net0 cores: 2 cpu: host,hidden=1,flags=+pcid,hv-vendor-id=123456789abc efidisk0: local-lvm:vm-103-disk-1,size=4M ide2: local:iso/SW_DVD9_Win_Pro_10_1903.1_64BIT_Russian_Pro_Ent_EDU_N_MLF_X22-14082.ISO,media=cdrom machine: pc-q35-5.2 memory: 4096 name: 103 net0: virtio=2E:95:FF:F8:A7:20,bridge=vmbr0,firewall=1 numa: 0 ostype: win10 sata0: local:iso/virtio-win-0.1.171.iso,media=cdrom,size=363020K scsihw: virtio-scsi-pci smbios1: uuid=fa7d689d-6b7d-4c9d-96c0-a8fe297f29e5 sockets: 1 vga: std virtio0: local-lvm:vm-103-disk-0,size=50G vmgenid: fc7ff770-5e74-4dfb-af30-3bed0fcd9f4e
После не забываем сохранить внесенные изменения.
Получается вот так
Запускаем VM
и производим установку операционной системы с образа ISO
, в процесс установщик не определит какой у нас диск используется и сообщит что "не удалось найти драйверы"
. Это нормально, нажимаем "Загрузить" - Обзор
— указываем/выбираем D:(virtio-win-0.1.1)
— переходим в папку viostor — w10
— и выбираем amd64
, затем нажимаем ОК
, теперь у нас есть драйвер (Red Hat VirtIO Scsi controller (D:\viostor\w10\amd64\viostor.inf))
под диск и нажимаем "Далее"
, затем видим что установщик Windows 10
определил, что есть "Незанятое пространство на диск 0"
— нажимаем "Далее"
. Дальнейшая установка операционной системы проходит как обычно.
Когда операционная система установится, нужно используя образ virtio-win-0.1.171.iso
установить все драйвера (для сетевой карты к примеру) и агента (D:\guest-agent\qemu-ga-x86-64.msi
) дабы можно было взаимодействовать с Console виртуальной машины через Web
-интерфейс.
Копирую с диска D:
(это подмонтированный образ virtio-win-0.1.171.iso
) папку Balloon
, к примеру C:\Program Files
Win + X — Windows PowerShell (администратор)
PS C:\Windows\system32> cd 'C:\Program Files\Ballon\w10\amd64' PS C:\Program Files\Ballon\w10\amd64> blnsvr.exe -i
Очень нужная вещь.
Шаг №10:
После выключаем VM
и я перевожу ее в Template:
выделяем VMID 103 — More — Convert to template — Yes.
После из созданного шаблона VM
делаю полный клон и это уже будет полнофункциональная виртуальная машина которую буду использовать:
выделяем VMID 103 — More — Clone
Target node: srv-proxmox2
VM ID: 104
Name: W10X64
Mode: Full Clone
Target Storage: local-lvm
Открываю Hardware VM ID 104 (W10X64)
и добавляю видеокарту которая подключена физически к хосту, под ID: 02.00: Add — PCI Device -
Device:
выбираю
ID: 0000:02:00.0
IOMMU GROUP: 1
Vendor: NVIDIA Corporation
Device: GX208 [GeForce GT 710B]
Mediated Devices: No
и отмечаю галочками параметры: Primary GPU & PCI-Express & ROM-Bar
Итого характеристики VM
через Web
интерфейс приняли вид:
Итого характеристики VM
через консоль приняли вид:
root@srv-proxmox2:~# cat /etc/pve/qemu-server/104.conf agent: 1 bios: ovmf boot: order=virtio0;ide2;net0 cores: 2 cpu: host,hidden=1,flags=+pcid,hv-vendor-id=123456789abc efidisk0: local-lvm:vm-104-disk-1,size=4M hostpci0: 02:00.0,pcie=1,x-vga=1 ide2: local:iso/SW_DVD9_Win_Pro_10_1903.1_64BIT_Russian_Pro_Ent_EDU_N_MLF_X22-14082.ISO,media=cdrom machine: pc-q35-5.2 memory: 4096 name: W10X64 net0: virtio=C6:BC:9D:10:7A:69,bridge=vmbr0,firewall=1 numa: 0 ostype: win10 sata0: local:iso/virtio-win-0.1.171.iso,media=cdrom,size=363020K scsihw: virtio-scsi-pci smbios1: uuid=4fa53f6d-ca05-419b-aafc-9bf5f4c42f90 sockets: 1 vga: std virtio0: local-lvm:vm-104-disk-0,size=50G vmgenid: 636c8ade-5ce9-476b-a168-04a71d7be6dd root@srv-proxmox2:~#
Шаг №11:
Теперь запускаю VM
, чтобы система увидела видеокарту я могу воспользоваться либо установкой драйверов от мастера установки Windows
или же через пакет 388.13-desktop-win10-64bit-international-whql.exe
По итогу получаю VM
с проброшенной видеокартой внутри и установленными драйверами на нее и нет никакой ошибки Error 43:
УРА, получилось. Меняю видеокарту на PALIT nVidia GeForce GTX 1080
, узнаю ее ID
и добавляю ее в VM
, все успешно!
Итого, я для себя разобрал как прокинуть в виртуальную машину на базе Proxmox 6.4.4
видеокарту и поставив на нее драйвера она рабочая. Но это еще не все, подключаем кабель DP
от монитора в разъем на видеокарте и изображением с W10X64
виртуальной машины отображается на мониторе. Вот только это изображение без возможности использовать клавиатуру или мышь. Получается и их (второй комплект) тоже нужно пробросить в виртуальную машину. Либо же подключиться к VM
по RDP.
На этом пока всё, с уважением автор блога Олло Александр aka ekzorchik.