Сообщение no iommu detected please activate it see documentation for further information появляется при запуске виртуальных машин в Proxmox VE, при проверке dmesg в Linux или при попытке проброса видеокарты в гостевую систему — и означает, что ядро не обнаружило активный блок IOMMU (Input-Output Memory Management Unit). Без него невозможен безопасный проброс PCI-устройств (GPU, сетевых карт, NVMe-контроллеров) в виртуальные машины через VFIO, поэтому функции вроде GPU Passthrough попросту не запустятся.

Причина почти всегда одна из трёх: технология виртуализации отключена в BIOS/UEFI, ядру Linux не передан нужный параметр загрузки, либо оборудование не поддерживает IOMMU аппаратно. Ниже разберём проверку поддержки, включение в BIOS, настройку загрузчика и типичные ошибки.

Что такое IOMMU и зачем он нужен

IOMMU — это аппаратный блок, который транслирует адреса памяти для устройств ввода-вывода, работая по аналогии с обычным MMU для процессора. У Intel технология называется VT-d (Virtualization Technology for Directed I/O), у AMD — AMD-Vi. Именно IOMMU изолирует устройства друг от друга и позволяет назначить физическое устройство конкретной виртуальной машине через VFIO.

Без активного IOMMU гипервизор не может гарантировать, что проброшенное устройство не получит доступ к чужой области памяти, поэтому Proxmox, libvirt и другие решения отказываются выполнять проброс и выводят предупреждение. Для обычных виртуальных машин без проброса оборудования IOMMU не обязателен — но сообщение об его отсутствии всё равно сигнализирует, что часть функций виртуализации недоступна.

💡

IOMMU (VT-d у Intel, AMD-Vi у AMD) обязателен для проброса PCI-устройств в виртуальные машины. Ошибка «no IOMMU detected» означает, что функция выключена в BIOS или не активирована в ядре Linux.

Шаг 1. Проверка поддержки IOMMU процессором и платой

Прежде чем менять настройки, убедитесь, что оборудование вообще поддерживает технологию. Практически все современные процессоры Intel и AMD для настольных и серверных платформ её поддерживают, но у бюджетных моделей и старых чипов возможны ограничения — точную спецификацию стоит сверить на сайте производителя процессора (ark.intel.com для Intel, страница продукта AMD).

Выполните в терминале проверку текущего состояния:

dmesg | grep -i -e iommu -e dmar -e amd-vi

Если вывод пуст или содержит строку No IOMMU detected, блок не активен. Дополнительно проверьте флаги процессора:

grep -E -o 'vmx|svm' /proc/cpuinfo | sort -u
  • 🔍 vmx — аппаратная виртуализация Intel VT-x активна;
  • 🔍 svm — аппаратная виртуализация AMD-V активна;
  • 🔍 пустой вывод — виртуализация отключена в BIOS полностью, начинать нужно именно с неё.
💡

Если команда dmesg требует прав root или выводит «operation not permitted», выполните её через sudo — во многих дистрибутивах чтение буфера ядра ограничено для обычных пользователей.

Шаг 2. Включение VT-d / AMD-Vi в BIOS или UEFI

Самая частая причина ошибки — отключённая опция в прошивке материнской платы. Перезагрузите компьютер и войдите в BIOS/UEFI (обычно клавишей Del или F2 при старте, но комбинация зависит от производителя платы или ноутбука).

Названия и расположение пунктов различаются у ASUS, MSI, Gigabyte, ASRock и серверных плат, поэтому точный путь сверяйте с руководством к вашей модели. Ищите опции со следующими названиями:

  • ⚙️ Intel VT-d или Intel Virtualization Technology for Directed I/O — для платформ Intel;
  • ⚙️ AMD-Vi, IOMMU или SVM Mode (SVM включает базовую виртуализацию AMD) — для платформ AMD;
  • ⚙️ VT-x / Intel Virtualization Technology — базовая виртуализация, без неё VT-d работать не будет;
  • ⚙️ На серверных платах встречается отдельный пункт IOMMU в разделе ACPI или North Bridge.

Установите все найденные опции в положение Enabled, сохраните настройки (обычно F10) и загрузите систему. После этого повторите проверку из первого шага.

⚠️ Внимание: на некоторых материнских платах включение IOMMU меняет группировку устройств и может повлиять на работу отдельных контроллеров в старых ОС. Перед изменением настроек на рабочем сервере запланируйте контрольную перезагрузку и убедитесь, что есть доступ к консоли на случай проблем с загрузкой.

📊 Где вы столкнулись с ошибкой «no IOMMU detected»?
Proxmox VE
Ubuntu/Debian с KVM
Fedora/Arch с libvirt
При пробросе GPU в другое ПО

Шаг 3. Параметры ядра Linux для принудительной активации

Даже при включённом VT-d в BIOS ядро Linux иногда не активирует IOMMU автоматически — особенно на платформах Intel. В этом случае нужно передать ядру параметр загрузки. Для систем с загрузчиком GRUB откройте файл конфигурации:

sudo nano /etc/default/grub

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

# Для Intel:

GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"

Для AMD:

GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on"

Затем обновите конфигурацию загрузчика и перезагрузитесь:

sudo update-grub

sudo reboot

В Proxmox VE на системах с systemd-boot вместо GRUB параметры ядра редактируются в файле /etc/kernel/cmdline, после чего применяется команда proxmox-boot-tool refresh. Какой загрузчик используется, зависит от способа установки системы (UEFI с ZFS обычно означает systemd-boot) — проверьте наличие соответствующих файлов перед редактированием.

☑️ Активация IOMMU — порядок действий

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

Шаг 4. Проверка результата и групп IOMMU

После перезагрузки убедитесь, что IOMMU заработал. Выполните:

dmesg | grep -i iommu

Успешная активация выглядит как строки вида DMAR: IOMMU enabled (Intel) или сообщений об AMD-Vi. Главный признак рабочего IOMMU — наличие непустого каталога /sys/kernel/iommu_groups/ с пронумерованными подкаталогами групп.

Посмотреть распределение устройств по группам можно так:

find /sys/kernel/iommu_groups/ -type l | sort -V

Каждая группа — это набор устройств, которые пробрасываются в виртуальную машину только вместе. Если нужная видеокарта оказалась в одной группе с другими устройствами, это отдельная тема (ACS override и выбор слота), но сама по себе ошибка «no IOMMU detected» на этом этапе уже должна исчезнуть.

Типичные причины, почему IOMMU всё ещё не определяется

ПричинаКак проверитьРешение
VT-d/AMD-Vi выключен в BIOSПустой вывод dmesg по IOMMUВключить опцию в BIOS/UEFI
Нет параметра ядраcat /proc/cmdlineДобавить intel_iommu=on или amd_iommu=on
Процессор не поддерживает VT-dСпецификация на сайте производителяТолько замена оборудования
Устаревшая прошивка BIOSВерсия BIOS на экране POSTОбновить прошивку с сайта производителя платы
Изменения GRUB не примененыcat /proc/cmdline после перезагрузкиПовторно выполнить update-grub

Обратите внимание на вывод cat /proc/cmdline — он показывает параметры, с которыми ядро реально загрузилось. Если добавленного параметра там нет, значит конфигурация загрузчика не обновилась или редактировался не тот файл (типично для систем с systemd-boot вместо GRUB).

⚠️ Внимание: обновление BIOS — потенциально рискованная операция. Используйте только прошивку для точной модели и ревизии вашей платы с официального сайта производителя и не прерывайте процесс записи. Если плата работает стабильно, обновляйте прошивку только когда другие способы не помогли.

Что делать, если VT-d включён, но dmesg всё равно пуст

Проверьте, не перекрывает ли параметр значение iommu=off или iommu=pt где-то в конфигурации. Убедитесь, что система загружена не в режиме восстановления с урезанными параметрами. На некоторых платах помогает сброс настроек BIOS к значениям по умолчанию с последующим повторным включением виртуализации. Также проверьте, что ядро достаточно свежее — очень старые ядра могут некорректно работать с новыми чипсетами.

Особенности для Proxmox VE и проброса GPU

В Proxmox VE сообщение «No IOMMU detected, please activate it» отображается прямо в веб-интерфейсе при создании виртуальной машины или добавлении PCI-устройства. После включения IOMMU по инструкции выше дополнительно потребуется загрузить модули VFIO — добавьте их в файл /etc/modules:

vfio

vfio_iommu_type1

vfio_pci

После этого выполните update-initramfs -u -k all и перезагрузите хост. Для проброса видеокарты также обычно требуется «отвязать» её от драйверов хоста (blacklist для nouveau, nvidia или amdgpu в зависимости от карты) — конкретный набор действий зависит от модели GPU и версии Proxmox, поэтому сверяйтесь с официальной вики Proxmox по PCI Passthrough.

💡

После всех настроек проверяйте проброс на тестовой виртуальной машине, а не на рабочей. Ошибки в конфигурации VFIO могут привести к тому, что хост потеряет вывод изображения, если пробрасываемая видеокарта — единственная в системе.

Часто задаваемые вопросы

Опасно ли включать IOMMU на обычном домашнем ПК?

Нет, включение VT-d или AMD-Vi безопасно и не влияет на производительность заметным образом. Функция лишь добавляет уровень трансляции адресов для устройств. Если вы не используете виртуализацию, включённый IOMMU ничем не мешает.

Почему в BIOS нет пункта VT-d или IOMMU?

Возможные причины: процессор не поддерживает технологию (проверьте спецификацию модели), опция скрыта в другом разделе меню (часто внутри Advanced → Chipset или North Bridge), либо прошивка платы устарела. На некоторых ноутбуках производитель вообще блокирует эту функцию — тогда программно включить её не получится.

Нужен ли intel_iommu=on, если VT-d уже включён в BIOS?

Часто да. На многих платформах Intel ядро Linux не активирует IOMMU без явного параметра, даже когда VT-d включён в прошивке. На платформах AMD ядро обычно включает AMD-Vi автоматически, но параметр amd_iommu=on гарантирует активацию.

Что означает параметр iommu=pt и нужен ли он?

Параметр iommu=pt (passthrough) переводит IOMMU в режим прямой трансляции для хоста, что может немного снизить накладные расходы при пробросе устройств. Он не обязателен: сначала добейтесь работы IOMMU без него, а режим pt добавляйте только при необходимости оптимизации.

IOMMU включился, но устройства в одной группе с лишними. Что делать?

Это нормальная ситуация: устройства, висящие на одном PCIe-мосту, попадают в общую группу. Иногда помогает перестановка карты в другой слот. Существует также патч ACS override, но он снижает изоляцию и применяется на свой риск — изучите документацию вашего гипервизора перед использованием.