Как пробросить видеокарту в Proxmox: Полное руководство по GPU Passthrough

При попытке запустить virt-manager или QEMU с параметром -gpu без предварительной настройки ядра, система часто возвращает ошибку VFIO-PCI initialization failed или устройство просто не отображается в списке доступных для выделения. Это происходит из-за того, что гипервизор не может изолировать ресурсы видеокарты для гостевой ОС без корректно настроенных модулей ядра IOMMU и соответствующих настроек BIOS материнской платы.

Проброс графического ускорителя в Proxmox VE требует глубокого понимания архитектуры PCIe Passthrough, где физическое устройство полностью переходит под контроль виртуальной машины, теряя управление со стороны хоста. Процесс начинается с проверки поддержки технологий виртуализации на уровне процессора и чипсета, а завершается тонкой настройкой конфигурационных файлов хост-системы для корректной работы VFIO (Virtual Function I/O).

Проверка аппаратной поддержки и настройка BIOS

Первым критическим этапом является подтверждение того, что ваше оборудование способно выполнять изоляцию PCIe-устройств. Вам необходимо войти в интерфейс BIOS/UEFI вашей материнской платы и найти раздел, отвечающий за виртуализацию. Для процессоров Intel это опция Intel VT-d (Virtualization Technology for Directed I/O), а для AMDIOMMU или SVM Mode. Без включения этих функций дальнейшая настройка невозможна, так как ядро не сможет создать группы IOMMU для разделения ресурсов.

Помимо включения виртуализации, часто требуется изменить настройки PCIe на уровне материнской платы. В некоторых случаях необходимо отключить функцию CSM (Compatibility Support Module) и перейти в режим чистого UEFI загрузки, так как старые режимы совместимости могут конфликтовать с работой драйверов VFIO на уровне ядра. Также стоит обратить внимание на опцию Resizable BAR, которую рекомендуется отключить перед началом настройки, чтобы избежать конфликтов адресации памяти.

⚠️ Внимание: Если вы используете процессор Intel с встроенной графикой, убедитесь, что она не мешает работе дискретной карты. В некоторых случаях необходимо отключить встроенное графическое ядро (iGPU) в BIOS, чтобы избежать конфликтов при инициализации VFIO.

Активация модулей ядра и настройка GRUB

После успешной настройки BIOS необходимо сообщить операционной системе Proxmox о необходимости загрузки модулей IOMMU. Откройте терминал хоста и отредактируйте файл конфигурации загрузчика /etc/default/grub. Найдите строку GRUB_CMDLINE_LINUX_DEFAULT и добавьте в кавычки параметры intel_iommu=on (для Intel) или amd_iommu=on (для AMD). Также рекомендуется добавить параметр iommu=pt, который включает пропускную способность ввода-вывода (passthrough mode) для снижения задержек.

После сохранения изменений в файле конфигурации необходимо обновить загрузочное меню, выполнив команду update-grub в терминале. Это действие перезапишет конфигурацию GRUB, и при следующей перезагрузке ядро Linux будет инициализировать подсистему VFIO. Если вы используете процессоры AMD, иногда требуется добавить параметр iommu=soft, если аппаратная поддержка IOMMU работает нестабильно, но в современных системах это редко бывает необходимо.

Проверка загрузки модулей

После перезагрузки выполните команду dmesg | grep -i iommu. В выводе вы должны увидеть сообщения о группах IOMMU и инициализации Intel VT-d или AMD IOMMU. Если вывода нет, параметры GRUB применены неверно или BIOS не поддерживает технологию.

Идентификация и изоляция устройств

Следующим шагом является определение PCI ID вашей видеокарты и её звукового контроллера (часто они находятся в одной группе IOMMU). Выполните команду lspci -nn | grep -i vga и lspci -nn | grep -i audio в терминале хоста. Запишите идентификаторы в квадратных скобках, так как они уникальны для каждой модели NVIDIA, AMD или Intel. Например, для карты NVIDIA GeForce RTX 3080 это может выглядеть как [10de:2206] и [10de:10f8].

Теперь необходимо создать модуль конфигурации для связывания устройств с драйвером vfio-pci. Создайте файл /etc/modprobe.d/vfio.conf и добавьте в него строку options vfio-pci ids=10de:2206,10de:10f8. Замените ID на те, которые вы получили ранее. Это заставит ядро Linux не загружать родные драйверы видеокарты (например, nvidia.ko) и передать управление устройству подсистеме виртуализации.

Компонент Команда для проверки Ожидаемый результат
Проверка IOMMU dmesg | grep -i iommu Сообщение о поддержке Intel VT-d / AMD IOMMU
Список GPU lspci -nn | grep -i vga Выход с Vendor ID и Device ID карты
Группы IOMMU find /sys/kernel/iommu_groups/ -type l Показывает, в какую группу попадает устройство
Загрузка модулей lsmod | grep vfio Список загруженных модулей vfio и vfio-pci

Не забудьте прописать модули vfio, vfio_iommu_type1, vfio_pci и vfio_virqfd в файл /etc/modules, чтобы они загружались автоматически при запуске системы. После создания всех конфигурационных файлов выполните команду update-initramfs -u -k all и перезагрузите сервер. Это критически важно, так как настройки модулей ядра применяются только при загрузке initramfs.

📊 Удалось ли вам идентифицировать группы IOMMU без конфликтов?
Да, все устройства в разных группах
Нужен IOMMU Group Splitter
Устройства делятся вместе с чипсетом
Не удалось проверить группы

Настройка виртуальной машины и связка с GPU

После успешной перезагрузки и подтверждения загрузки модулей VFIO, можно приступать к созданию или редактированию виртуальной машины. В веб-интерфейсе Proxmox выберите вашу VM и перейдите в раздел "Hardware" (Оборудование). Нажмите кнопку "Add" и выберите "PCI Device". В выпадающем списке вы должны увидеть вашу видеокарту по её ID, если она была правильно изолирована. Выберите её и обязательно поставьте галочку напротив опции Primary GPU, если это карта, с которой будет осуществляться вывод изображения.

Кроме основной видеокарты, в виртуальную машину необходимо добавить её звуковой контроллер, так как современные драйверы NVIDIA и AMD требуют наличия аудиоустройства для корректной работы HDMI/DisplayPort вывода. Если вы не добавите аудио-часть в VM, гостевая ОС может не распознать видеодрайвер или выдать ошибку "Code 43" в диспетчере устройств Windows. Убедитесь, что оба устройства (видео и звук) выбраны в конфигурации оборудования.

⚠️ Внимание: Если вы используете NVIDIA карты потребительского уровня, в гостевой Windows может потребоваться применение патча UEFI BIOS override или редактирование реестра для обхода проверки виртуализации, так как драйверы блокируют работу в виртуальных средах.

☑️ Проверка перед запуском VM

Выполнено: 0 / 4

Решение проблем с драйверами и ошибками

Одной из самых частых проблем при пробросе является появление кода ошибки 43 в диспетчере устройств Windows внутри виртуальной машины. Это означает, что драйвер NVIDIA обнаружил, что он работает в виртуальной среде, и отключил функционал. Для решения этой проблемы необходимо изменить конфигурацию XML-файла виртуальной машины, добавив параметр hide_kvm. Это можно сделать через консоль, отредактировав файл /etc/pve/qemu-server/.conf и добавив строку args: -cpu host,kvm=off.

Для карт AMD ситуация часто проще, так как их драйверы в Linux и более новые версии драйверов Windows менее чувствительны к виртуализации. Однако, если вы используете GPU Passthrough для рендеринга, убедитесь, что в настройках VM в разделе Display выбрано устройство None или VirtIO (только для загрузки), чтобы избежать конфликта инициализации двух видеоадаптеров. Основной вывод изображения должен идти исключительно через проброшенное устройство.

Альтернативный метод для NVIDIA

Если патч реестра не помогает, попробуйте создать скрипт hooks в Proxmox, который будет удалять устройство из хоста перед запуском VM и добавлять обратно при остановке. Это часто решает проблему с "Code 43" без глубокого редактирования реестра.

Оптимизация производительности и вывод изображения

Для достижения максимальной производительности в играх или рендеринге необходимо отключить в гостевой ОС любые функции, связанные с эмуляцией, такие как Windows Defender (в некоторых случаях) или фоновые процессы мониторинга. В настройках BIOS хоста можно включить режим High Performance и отключить энергосбережение для PCIe-слотов, чтобы исключить задержки при передаче данных. Также рекомендуется установить последние версии драйверов VFIO и QEMU Guest Agent для улучшения взаимодействия с хостом.

Если вы используете NVIDIA карту, убедитесь, что в гостевой системе установлен драйвер, соответствующий вашей версии Windows. Для Linux-гостей (например, Ubuntu) часто требуется установка драйвера через репозиторий PPА или из официального сайта, так как драйверы из стандартного репозитория могут быть устаревшими. Проверьте версию ядра гостевой системы, так как старые ядра могут не поддерживать новые функции PCIe.

Заключение и важные нюансы

Настройка VFIO Passthrough в Proxmox — это процесс, требующий точности и понимания архитектуры виртуализации. После успешной настройки вы получите виртуальную машину с практически нативной производительностью видеокарты, что позволяет запускать тяжелые игры, работать с 3D-графикой и использовать аппаратное кодирование видео. Однако, помните, что при пробросе устройства оно становится недоступным для хост-системы, пока виртуальная машина работает.

Всегда делайте резервные копии конфигурационных файлов перед внесением изменений в ядро или модули. Если после настройки вы не видите изображение на мониторе, подключенном к проброшенной карте, проверьте настройки UEFI в виртуальной машине и убедитесь, что загрузка идет через проброшенное устройство, а не через эмуляцию VirtIO-GPU. Тщательная проверка групп IOMMU и корректное связывание модулей — залог успешного проброса.

⚠️ Внимание: При обновлении ядра Proxmox (например, с 5.x на 6.x или 7.x) параметры GRUB могут сброситься. Всегда проверяйте файл /etc/default/grub после крупных обновлений системы, чтобы не потерять настройки IOMMU и VFIO.

Использование GPU Passthrough открывает широкие возможности для создания домашних серверов и рабочих станций. С его помощью можно создать мощную рабочую среду, которая в любое время доступна через сеть, при этом не занимая физическое пространство в офисе или дома. Правильно настроенная система обеспечивает стабильность и высокую скорость обработки данных, превращая Proxmox в универсальную платформу для любых задач.

Что делать, если устройство не отображается в списке PCI устройств в Proxmox?

Проверьте, включена ли технология VT-d (Intel) или IOMMU (AMD) в BIOS. Также убедитесь, что вы используете команду lspci с флагом -nn для отображения ID. Если устройство видно в Linux, но не в Proxmox GUI, перезапустите службу pvedaemon или обновите страницу браузера.

Можно ли пробросить одну и ту же видеокарту на две виртуальные машины?

Нет, физическое устройство PCIe Passthrough может быть прикреплено только к одной виртуальной машине одновременно. Для работы с несколькими VM требуется технология SR-IOV (если карта и плата поддерживают) или использование нескольких физических карт.

Почему гостевая система видит видеокарту, но не запускает драйверы?

Скорее всего, проблема в подписи драйверов или проверке виртуализации (кнопка Code 43). Попробуйте добавить параметр -cpu host,kvm=off в конфигурацию VM или применить патч к реестру Windows. Также проверьте, не конфликтует ли аудиоустройство.

Нужно ли отключать встроенную графику в BIOS?

Желательно, если вы используете дискретную карту для вывода изображения на хост. Встроенная графика может занимать ресурсы IOMMU и создавать конфликты групп. Однако, если вам нужен вывод на хост через iGPU, а дискретную карту пробрасываете в VM, убедитесь, что они находятся в разных группах IOMMU.