Подробный гайд: Проброс PCI(e) в ALT Linux

Проброс PCI/PCIe в ALT Linux: настройка VFIO, IOMMU, KVM для виртуальных машин. Проброс GPU, NVMe, USB. Полное руководство.

2026.05.20                  


Подробный гайд: Проброс PCI(e) в ALT LinuxПодробный гайд: Проброс PCI(e) в ALT Linux Проброс физических PCI/PCIe-устройств (GPU, сетевые карты, контроллеры USB/NVMe и т.д.) напрямую в виртуальную машину называется PCI(e) Passthrough. В ALT Linux он реализован на стандартном стеке ядра Linux (VFIO + KVM + libvirt), но имеет несколько дистрибутивных особенностей.


Требования

Компонент Минимум
Процессор Intel с VT-d или AMD с AMD-Vi/IOMMU
Материнская плата Поддержка IOMMU, ACPI 3.0+, UEFI
Ядро 5.10+ (в ALT p10/p11 уже включено)
Пакеты libvirt, qemu, virt-manager, ovmf, vfio-pci
Устройства Желательно 2 GPU (или headless-сервер) для проброса видеокарты

Примечание:

Проброс GPU в Windows-гостях часто требует обхода Error 43. Для Linux-гостей проблема встречается реже.


Шаг 1: Проверка поддержки IOMMU

# Проверка сообщений ядра
dmesg | grep -iE "DMAR|IOMMU|amd_iommu"

# Проверка групп IOMMU
for d in /sys/kernel/iommu_groups/*/devices/*; do
  n=${d#*/iommu_groups/*}; n=${n%%/*}
  printf "IOMMU group %s " "$n"
  lspci -nns "${d##*/}"
done | sort -V

Если вывод содержит строки вроде DMAR: IOMMU enabled или AMD-Vi: Enabling IOMMU, поддержка активна.


Шаг 2: Настройка BIOS/UEFI

1. Включить:
  • Intel VT-d / AMD IOMMU / SVM
  • Above 4G Decoding
  • Resizable BAR (опционально, полезно для современных GPU)
2. Отключить:
  • CSM (Compatibility Support Module) → перевести в UEFI only
  • Secure Boot (часто блокирует загрузку VFIO/OVMF)
    1. Сохранить и перезагрузиться.

Шаг 3: Установка пакетов (ALT Linux)

ALT использует apt-get (RPM-бэкенд).

Выполните от root или через sudo:

sudo apt-get update
sudo apt-get install libvirt qemu virt-manager edk2-ovmf vfio-pci
sudo systemctl enable --now libvirtd

Добавьте пользователя в группы управления виртуализацией:

sudo usermod -aG libvirt,kvm $USER
# Применится после перелогина

Шаг 4: Настройка GRUB2

Откройте /etc/default/grub:

sudo nano /etc/default/grub

Найдите строку GRUB_CMDLINE_LINUX_DEFAULT и добавьте параметры IOMMU:

Для Intel:
GRUB_CMDLINE_LINUX_DEFAULT="... intel_iommu=on iommu=pt"
Для AMD:
GRUB_CMDLINE_LINUX_DEFAULT="... amd_iommu=on iommu=pt"

iommu=pt включает режим "passthrough" только для устройств, которым явно назначен VFIO, что снижает overhead.


Обновите конфигурацию GRUB:

sudo grub2-mkconfig -o /boot/grub2/grub.cfg

Шаг 5: Изоляция PCI-устройства (vfio-pci)

1. Найдите устройство:
   lspci -nn | grep -iE "vga|3d|audio|network|usb"

Пример вывода:

01:00.0 VGA compatible controller [0300]: NVIDIA Corporation ... [10de:1b80]

Запишите `vendor:

deviceID (например,10de:1b80) и ID аудио-части GPU (часто10de:10f0`).


2. Создайте правило загрузки модулей:

   sudo nano /etc/modprobe.d/vfio.conf
   options vfio-pci ids=10de:1b80,10de:10f0
   softdep nvidia pre: vfio-pci
   softdep nouveau pre: vfio-pci
   softdep snd_hda_intel pre: vfio-pci

3. Пересоберите initramfs (ALT использует mkinitrd):

   sudo mkinitrd -f

4. Перезагрузитесь:

   sudo reboot

5. После загрузки проверьте, что устройство захвачено vfio-pci:

   lspci -nnk -s 01:00.0

В строке Kernel driver in use: должно быть vfio-pci.


Шаг 6: Создание ВМ в Virt-Manager

  1. Запустите virt-manager.
  2. Создайте новую ВМ → Local install media или Import existing disk.
3. На этапе настройки:
  • Architecture: x86_64
  • Chipset: Q35
  • Firmware: UEFI x86_64: /usr/share/edk2/ovmf/OVMF_CODE.fd
  • CPU: host-passthrough (критично для производительности и проброса)
  • VirtIO drivers: добавьте ISO с virtio-win (для Windows) или используйте нативные драйверы (Linux)
4. В настройках готовой ВМ:
  • Add HardwarePCI Host Device → выберите ваше устройство
  • Для GPU: отметьте Multifunction (если аудио-часть пробрасывается отдельно)
  • В XML-конфиге (кнопка XML) найдите секцию <features> и добавьте:
     <kvm>
       <hidden state='on'/>
     </kvm>
     <hyperv>
       <vendor_id state='on' value='1234567890ab'/>
     </hyperv>

Это снижает вероятность Error 43 в Windows.
5. Запустите ВМ.


Шаг 7: Проверка работы

На хосте:
journalctl -u libvirtd -f | grep vfio
dmesg | grep vfio

Должны быть сообщения об успешном привязывании устройства.


В гостевой ОС:
  • Windows: Диспетчер устройств → устройство определяется без ошибок (кроме старых NVIDIA, где может потребоваться патч драйвера или отключение pci=nomsi)
  • Linux: lspci -k покажет стандартные драйверы (nvidia, amdgpu, e1000e и т.д.)

Особенности ALT Linux

Компонент Примечание
Пакетный менеджер apt-get (RPM-бэкенд), не dnf/yum
Initramfs mkinitrd (из пакета mkinitrd)
Загрузчик GRUB2, обновление через grub2-mkconfig
UEFI firmware Пакет edk2-ovmf, пути: /usr/share/edk2/ovmf/
Модули ядра В ALT p10/p11 VFIO включен в std-def и un-def
SMACK/SELinux В ALT Workstation/Server может быть активен SMACK. При блокировке проброса временно проверьте: cat /proc/self/attr/current. Для теста можно добавить smack=0 в GRUB_CMDLINE_LINUX_DEFAULT или настроить правила в /etc/smack/

Решение типичных проблем

Проблема Решение
IOMMU groups не разделены Добавьте pcie_acs_override=downstream в GRUB. Внимание: снижает изоляцию, используйте только если устройство в одной группе с системными.
Error 43 (NVIDIA в Windows) 1. <kvm hidden='on'/> + vendor_id
2. Отключите pci=nomsi в госте
3. Используйте драйверы 470+ или патченные
4. Попробуйте q35 вместо i440fx
Устройство не появляется в Virt-Manager Проверьте lspci -nnk: драйвер должен быть vfio-pci. Убедитесь, что libvirtd запущен, а пользователь в группах libvirt,kvm.
Чёрный экран после проброса GPU 1. Убедитесь, что хост использует другой GPU или nomodeset
2. В XML ВМ добавьте <video><model type='none'/></video>
3. Проверьте, что UEFI firmware подключена
Падение производительности PCIe Убедитесь, что iommu=pt активен. Проверьте dmesg | grep -i "IOMMU" на ошибки ATS/PRI. Обновите BIOS.

Финальные рекомендации

  1. Всегда тестируйте проброс на отдельной ВМ перед переносом рабочих нагрузок.
  2. Делайте резервные копии /etc/default/grub, /etc/modprobe.d/, и XML-файлов ВМ (/etc/libvirt/qemu/).
  3. Для GPU-проброса предпочтительны процессоры AMD Ryzen/EPYC или Intel 8-го поколения+ (лучшая поддержка ACS/IOMMU).
  4. В ALT Linux обновления ядра могут сбрасывать mkinitrd. После apt-get upgrade kernel-image-* повторно выполните sudo mkinitrd -f.

Информация предоставлена в ознакомительных целях. Применение описанных настроек в системах, должно осуществляться только после согласования с ответственными за информационную безопасность и в соответствии с требованиями ФСТЭК, ФСБ и иных уполномоченных органов.