Сообщение 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 меняет группировку устройств и может повлиять на работу отдельных контроллеров в старых ОС. Перед изменением настроек на рабочем сервере запланируйте контрольную перезагрузку и убедитесь, что есть доступ к консоли на случай проблем с загрузкой.
Шаг 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 — порядок действий
Шаг 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, но он снижает изоляцию и применяется на свой риск — изучите документацию вашего гипервизора перед использованием.