Подробный гайд: Проброс 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/SVMAbove 4G DecodingResizable BAR(опционально, полезно для современных GPU)
2. Отключить:
CSM (Compatibility Support Module)→ перевести вUEFI onlySecure Boot(часто блокирует загрузку VFIO/OVMF)- Сохранить и перезагрузиться.
Шаг 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
- Запустите
virt-manager. - Создайте новую ВМ →
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 Hardware→PCI 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_id2. Отключите pci=nomsi в госте3. Используйте драйверы 470+ или патченные4. Попробуйте q35 вместо i440fx |
| Устройство не появляется в Virt-Manager | Проверьте lspci -nnk: драйвер должен быть vfio-pci. Убедитесь, что libvirtd запущен, а пользователь в группах libvirt,kvm. |
| Чёрный экран после проброса GPU | 1. Убедитесь, что хост использует другой GPU или nomodeset2. В XML ВМ добавьте <video><model type='none'/></video>3. Проверьте, что UEFI firmware подключена |
| Падение производительности PCIe | Убедитесь, что iommu=pt активен. Проверьте dmesg | grep -i "IOMMU" на ошибки ATS/PRI. Обновите BIOS. |
Финальные рекомендации
- Всегда тестируйте проброс на отдельной ВМ перед переносом рабочих нагрузок.
- Делайте резервные копии
/etc/default/grub,/etc/modprobe.d/, и XML-файлов ВМ (/etc/libvirt/qemu/). - Для GPU-проброса предпочтительны процессоры AMD Ryzen/EPYC или Intel 8-го поколения+ (лучшая поддержка ACS/IOMMU).
- В ALT Linux обновления ядра могут сбрасывать
mkinitrd. Послеapt-get upgrade kernel-image-*повторно выполнитеsudo mkinitrd -f.
Информация предоставлена в ознакомительных целях. Применение описанных настроек в системах, должно осуществляться только после согласования с ответственными за информационную безопасность и в соответствии с требованиями ФСТЭК, ФСБ и иных уполномоченных органов.