В отличие от Virtualbox, VMWare Workstation Pro или других гипервизоров Type-2, Proxmox требует, чтобы вы выделили ему целый ПК. Но если вы готовы его настроить, Proxmox может служить мощной базой для любой домашней лаборатории или сервера виртуализации. Вы даже можете продвинуть утилиту Proxmox на шаг дальше, включив PCI passthrough.
По умолчанию виртуальные машины внутри Proxmox не могут получить доступ к устройствам, подключенным к слотам расширения PCI Express вашей материнской платы. Но, включив PCI passthrough, вы можете использовать сетевые карты, звуковые карты, RAID-контроллер и другие карты PCIe внутри ваших любимых виртуальных машин. Единственное предостережение заключается в том, что процесс может стать чрезвычайно сложным, особенно если вы пытаетесь использовать графические процессоры с виртуальными машинами Proxmox. Поэтому мы создали подробное руководство, которое поможет вам настроить PCI passthrough на Proxmox.
Включение IOMMU в BIOS
Прежде чем вы сможете начать вводить команды в оболочке Proxmox, вам придется включить настройку IOMMU в BIOS вашей материнской платы. Как вы можете догадаться из названия, Input-Output Memory Management Unit контролирует назначение адресов памяти всем вашим периферийным устройствам, включая те, которые подключены к слотам PCIe.
Несмотря на то, что IOMMU является основным требованием для PCI passthrough, он несовместим со многими материнскими платами и процессорами. Что касается ЦП, то все должно быть в порядке, если он не слишком старый, но ситуация с материнской платой немного шаткая, поскольку многие дешевые серверные платы безымянных серверов для старых процессоров Xeon несовместимы с этой технологией.
Поэтому, прежде чем приступать к этому процессу, убедитесь, что ваша материнская плата поддерживает IOMMU, поскольку вы только зря потратите время, если не сможете включить эту настройку. После того, как вы изучите спецификации материнской платы (и процессора) и убедитесь, что оба работают с IOMMU, пора погрузиться в BIOS.
Перезагрузите машину Proxmox и нажмите клавишу Delete во время загрузки. В большинстве случаев опция IOMMU должна находиться в подменю CPU или Miscellaneous settings на вкладке Settings. Нажмите на IOMMU и установите для него статус «Включено». (Необязательно) Если вы еще не включили виртуализацию, вы можете перейти в раздел «Дополнительные параметры ЦП» и включить VT-x, SVM Mode, AMD-V или любое другое название этой опции на вашей материнской плате. Обязательно сохраните изменения перед выходом из BIOS.
Подтверждение того, что настройки IOMMU включены правильно
После перезагрузки сервера Proxmox настанет время выполнить некоторые команды терминала с помощью веб-интерфейса из другой системы в той же сети.
В веб-интерфейсе выберите узел, который вы собираетесь использовать для этого проекта, и щелкните его окно оболочки. Выполните эту команду, чтобы убедиться, что IOMMU правильно включен в вашей системе. dmesg | grep -e DMAR -e IOMMU Если вы правильно включили IOMMU в BIOS в предыдущем разделе, сообщение IOMMU performance counters supported должно появиться в качестве вывода. Убедитесь, что Interrupt Remapping включен, выполнив следующую команду: dmesg | grep ‘remapping’ (Необязательно) Если вы не видите сообщение о включенном сопоставлении прерываний/IRQ, откройте файл iommu_unsafe_interrupts.conf с помощью редактора Nano. nano iommu_unsafe_interrupts.conf Вставьте эту строку в файл, прежде чем нажать Ctrl+X для сохранения и Y для выхода из файла конфигурации. options vfio_iommu_type1 allow_unsafe_interrupts=1
Включение сквозной передачи PCI для большинства устройств
Если параметры IOMMU настроены правильно, можно выполнить следующие шаги для настройки функции сквозного доступа PCI на Proxmox:
Внутри оболочки Proxmox откройте файл конфигурации загрузчика GRUB с помощью текстового редактора Nano, введя следующую команду: nano /etc/default/grub Найдите строку GRUB_CMDLINE_LINUX_DEFAULT и перезапишите ее этим аргументом. GRUB_CMDLINE_LINUX_DEFAULT=»iommu=pt» Если у вас процессор Intel, вам нужно будет добавить более длинный аргумент: GRUB_CMDLINE_LINUX_DEFAULT=»quiet intel_iommu=on» Сохраните и выйдите из файла конфигурации, нажав Ctrl+X, а затем Y. Выполните эту команду, чтобы обновить загрузчик GRUB: update-grub Доступ к файлу модулей осуществляется с помощью редактора Nano. nano /etc/modules Добавьте эти переменные ввода/вывода виртуальной функции в файл перед сохранением и возвращением в оболочку, используя ту же комбинацию клавиш, что и ранее.vfio vfio_iommu_type1 vfio_pci vfio_virqfd Перезагрузите систему Proxmox.
После выполнения этих шагов вам просто нужно добавить устройство PCIe в вашу виртуальную машину. Если вы не используете видеокарту, можете смело пропустить следующий раздел статьи.
(Необязательно) Включение сквозного PCI для графических процессоров
Позвольте мне начать этот раздел следующим образом: если вы цените свой здравый смысл, вам следует забыть об использовании графических процессоров в виртуальных машинах Proxmox. В отличие от обычного устройства PCIe, настройка сквозного канала для графических карт — это мучительный процесс, который может легко потерпеть неудачу в зависимости от множества факторов, включая спецификации материнской платы и модель графического процессора, производителя и поколение.
Но если вы все еще полны решимости довести дело до конца, вот несколько важных вещей, которые следует иметь в виду. Для безошибочного опыта я рекомендую использовать немного более старые графические процессоры вместо их последних аналогов. И да, графические процессоры, как во множественном числе этого слова. Хотя вы получаете доступ к веб-интерфейсу из другой системы, вам понадобится как минимум один источник видеовывода исключительно для машины Proxmox. К счастью, это касается и iGPU в современных процессорах, но, как я уже сказал, ваш пробег может значительно варьироваться в зависимости от спецификаций вашего ПК.
Также важно вставить графический процессор в соответствующий слот PCIe на материнской плате. Если графический процессор подключен к разъему PCIe, имеющему ту же группу IOMMU, что и твердотельный накопитель M.2, контроллер SATA, разъем Ethernet или другие подобные устройства, попытка пробросить графическую карту в виртуальную машину может привести к зависанию всей машины Proxmox при загрузке указанной виртуальной машины. Конечно, технически вы можете запустить команду pcie_acs_override=downstream,multifunction, чтобы разделить некоторые группы IOMMU, но это может привести к некоторым неожиданным проблемам позже.
Чтобы не усложнять, я предлагаю подключить графический процессор, к которому вы хотите получить доступ из виртуальной машины, в самый быстрый слот PCIe x16, так как он обычно имеет свою собственную группу IOMMU. В большинстве случаев это должен быть первый разъем x16 на материнской плате. Затем вы можете вставить свою вторичную графическую карту в любой другой слот и подключить ее к монитору с помощью кабеля дисплея. После этого просто выполните следующие действия внутри оболочки Proxmox:
(Необязательно) В качестве меры предосторожности откройте blacklist.conf, чтобы запретить машине Proxmox доступ к графическому процессору, который вы планируете использовать внутри виртуальных машин. nano /etc/modprobe.d/blacklist.conf (Необязательно) Добавьте эти параметры в файл, если вы используете видеокарту Nvidia: blacklist nouveau blacklist nvidia blacklist nvidiafb blacklist nvidia_drm Как вы уже догадались, на графических процессорах AMD команды немного отличаются: blacklist amdgpu blacklist radeon Между тем, для предложений Intel вам нужно добавить только один параметр: blacklist i915 Запишите значение слота PCIe контроллера VGA видеокарты и аудиодрайвера, выполнив следующую команду: lspci -v Значение слота — это набор чисел, которые появляются в формате xx:xx.x перед каждым устройством PCIe. Выполните команду lspci еще раз, но на этот раз вам придется использовать другой набор флагов и включить идентификатор слота PCIe вашего графического процессора. lspci -n -s slot_ID Повторите этот процесс для аудиодрайвера и скопируйте идентификаторы устройств для контроллера VGA и аудиодрайвера, так как они вам понадобятся на следующем шаге. Откройте файл vfio.conf с помощью текстового редактора Nano. nano /etc/modprobe.d/vfio.conf Вставьте следующую строку в файл конфигурации. options vfio-pci ids=Device_1,Device_2 disable_vga=1 Обязательно сохраните файл vfio.conf после изменения значений Device_1 и Device_2 на шестнадцатеричные идентификаторы, скопированные на предыдущем шаге. Выполните эти две команды, чтобы сохранить изменения в файловой системе initramfs.update-initramfs -u reset
Добавление устройств PCIe к вашим виртуальным машинам Proxmox
Наконец, пришло время отказаться от оболочки Proxmox и настроить ее с помощью конфигурации виртуальной машины. Если у вас нет виртуальной машины, сейчас самое время ее создать. Когда вы закончите, вот шаги, которые вам нужно выполнить:
Выберите виртуальную машину, на которой вы планируете использовать устройства PCIe, и перейдите на вкладку «Оборудование». Нажмите кнопку «Добавить устройство» и выберите «Устройство PCI». Переключите переключатель Raw Device и выберите свое устройство из списка. Нажмите кнопку Добавить.
Оснащение виртуальных машин мощными картами расширения
Если вы внимательно выполнили все шаги, ваша виртуальная машина не должна испытывать проблем с обнаружением обычного устройства PCIe. Однако графические процессоры — это совсем другая история, поскольку они требуют различных калибровок и настроек для работы с различными операционными системами виртуальных машин. Например, Windows 11 может не работать с noVNC, если вы попытаетесь установить дискретную видеокарту в качестве основного графического процессора.
В своем тестировании я следовал этой процедуре для моей GTX 1080 (сквозной графический процессор) и Intel Arc A750 (вторая видеокарта), и мне удалось заставить мою 1080 работать на виртуальной машине Windows 11 Pro. Таким образом, вам придется установить версию ОС Pro и использовать удаленный рабочий стол для доступа к виртуальной машине на базе графического процессора. Аналогично, у Ubuntu есть свой набор причуд, хотя я не думаю, что мне нужно упоминать, насколько сложно заставить сквозной графический процессор работать на новых версиях macOS.