Альт Линукс сервер 11 с PVE 8.4. PCI(e) Passthrough
⚠️ Важно: Инструкция предназначена для серверов с процессорами AMD. Для Intel замените
amd_iommu=onнаintel_iommu=on.
📋 Предварительные требования
- Установленный ALT Linux Server 11 с Proxmox VE 8.4
- Процессор с поддержкой AMD-V / IOMMU (или Intel VT-d)
- Видеокарта(ы) NVIDIA (на примере RTX 3090)
- Доступ к консоли сервера (физический или через IPMI)
🔧 Пошаговая настройка
Включение IOMMU в загрузчике
Описание: Параметры ядра активируют технологию изоляции устройств IOMMU, необходимую для безопасного проброса физических устройств в виртуальные машины.
Откройте файл /etc/default/grub и отредактируйте строку:
GRUB_CMDLINE_LINUX_DEFAULT='panic=30 splash amd_iommu=on iommu=pt'| Параметр | Описание |
|---|---|
amd_iommu=on
|
Принудительно включает IOMMU для AMD (для Intel: intel_iommu=on)
|
iommu=pt
|
Режим Pass-Through: снижает накладные расходы для устройств хоста |
panic=30
|
Автоматическая перезагрузка через 30 сек. при критической ошибке ядра |
Примените изменения:
# update-grub
# reboot nowПроверка групп IOMMU
Описание: Устройства, предназначенные для проброса, должны находиться в отдельной группе IOMMU или в группе только с зависимыми устройствами (например, видеокарта + её аудио-контроллер).
Улучшенный скрипт для диагностики (показывает все устройства, а не только NVIDIA):
# for g in /sys/kernel/iommu_groups/*; do
echo "=== IOMMU Group ${g##*/} ==="
for d in "$g"/devices/*; do
lspci -nns "${d##*/}"
done
echo
doneПример вывода для RTX 3090:
IOMMU Group 18:
04:00.0 VGA compatible controller [0300]: NVIDIA Corporation GA102 [GeForce RTX 3090] [10de:2204] (rev a1)
04:00.1 Audio device [0403]: NVIDIA Corporation GA102 High Definition Audio Controller [10de:1aef] (rev a1)
IOMMU Group 24:
0e:00.0 VGA compatible controller [0300]: NVIDIA Corporation GA102 [GeForce RTX 3090] [10de:2204] (rev a1)
0e:00.1 Audio device [0403]: NVIDIA Corporation GA102 High Definition Audio Controller [10de:1aef] (rev a1)Устройство готово к пробросу, если:
- Видеокарта и её аудио-контроллер находятся в одной группе или в отдельных изолированных группах
- В группе нет критичных для хоста устройств (USB-контроллеры, сетевые адаптеры и т.п.)
⚠️ Если устройства в одной группе с другими: попробуйте переставить карту в другой PCI-E слот или включить ACS-override (не рекомендуется для продакшена).
Дополнительные параметры ядра (опционально)
🔸 Разрешение небезопасных прерываний
Требуется только если в
dmesgесть ошибки, связанные с interrupt remapping.
# echo "options vfio_iommu_type1 allow_unsafe_interrupts=1" >> /etc/modprobe.d/iommu_unsafe_interrupts.conf🔸 Игнорирование MSR-регистров для Windows-ВМ
Необходимо, если виртуальная машина с Windows падает при запуске приложений типа GeForce Experience, Passmark, SiSoftware Sandra.
# echo "options kvm ignore_msrs=1" >> /etc/modprobe.d/kvm.confЗагрузка модулей VFIO
Описание: Модули VFIO обеспечивают интерфейс для безопасного проброса устройств в виртуальные машины.
Добавьте в файл /etc/modules (или создайте /etc/modules-load.d/vfio.conf):
vfio
vfio_iommu_type1
vfio_pci| Модуль | Назначение |
|---|---|
vfio
|
Базовый фреймворк виртуализации устройств |
vfio_iommu_type1
|
Поддержка IOMMU типа 1 |
vfio_pci
|
Драйвер для проброса PCI/PCIe-устройств |
Обновление initramfs
Описание: Пересборка образа начальной загрузки необходима, чтобы модули VFIO подгружались на раннем этапе инициализации ядра.
Для большинства систем:
# update-initramfs -u -k allДля ALT Linux Server:
# make-initrd --kernel=`uname -r`Блокировка драйверов видеокарты на хосте
Описание: Запрещает ядру хоста загружать драйверы NVIDIA/Nouveau, чтобы устройство было свободно для проброса в ВМ.
# echo "blacklist nouveau" >> /etc/modprobe.d/blacklist.conf
# echo "blacklist nvidia" >> /etc/modprobe.d/blacklist.conf
# echo "blacklist nvidiafb" >> /etc/modprobe.d/blacklist.conf
# echo "blacklist nvidia_drm" >> /etc/modprobe.d/blacklist.conf
# echo "blacklist nvidia_modeset" >> /etc/modprobe.d/blacklist.conf⚠️ Важно: Не используйте
nvidia*с wildcard вblacklist— это может не сработать. Указывайте модули явно.
Привязка устройств к драйверу vfio-pci
Описание: Указывает ядру использовать драйвер vfio-pci для указанных устройств вместо стандартных драйверов.
Получите ID устройств:
# lspci -nn | grep "NVIDIA"
04:00.0 VGA compatible controller [0300]: NVIDIA Corporation GA102 [GeForce RTX 3090] [10de:2204] (rev a1)
04:00.1 Audio device [0403]: NVIDIA Corporation GA102 High Definition Audio Controller [10de:1aef] (rev a1)
0e:00.0 VGA compatible controller [0300]: NVIDIA Corporation GA102 [GeForce RTX 3090] [10de:2204] (rev a1)
0e:00.1 Audio device [0403]: NVIDIA Corporation GA102 High Definition Audio Controller [10de:1aef] (rev a1)Создайте файл /etc/modprobe.d/vfio.conf:
# cat /etc/modprobe.d/vfio.conf
options vfio-pci ids=10de:2204,10de:1aef disable_vga=1| Параметр | Описание |
|---|---|
ids=10de:2204,10de:1aef
|
ID видеокарты и аудио-контроллера (указывайте оба устройства) |
disable_vga=1
|
Отключает эмуляцию VGA для пробрасываемого устройства (предотвращает конфликты с консолью хоста) |
Финальная перезагрузка и проверка
# make-initrd --kernel=`uname -r` # для ALT Linux
# reboot✅ Проверка загрузки модулей:
# lsmod | grep vfioОжидаемый вывод:
vfio_pci 16384 2
vfio_pci_core 94208 1 vfio_pci
vfio_iommu_type1 45056 1
vfio 65536 9 vfio_pci_core,vfio_iommu_type1,vfio_pci✅ Проверка логов ядра:
# dmesg | grep -e DMAR -e IOMMU -e AMD-ViОжидаемые строки:
AMD-Vi: Interrupt remapping enabled
AMD-Vi: IOMMU performance counters supportedℹ️ Сообщение
AMD-Vi: Unknown option - 'on'не является ошибкой — параметрamd_iommu=onкорректен.
✅ Проверка привязки устройств:
# lspci -k -s 04:00.0 # замените на ваш BDFОжидаемый вывод:
Kernel driver in use: vfio-pci