Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.
iommu: DMAR hardware fault: DMA access violation Linux / DevOps

iommu: DMAR hardware fault — Решение ошибок Intel VT-d и DMA в Linux

Обновлено: 18.08.2026  ·  Официальная база знаний

Архитектура ошибки и симптомы сбоя

Сообщение «iommu: DMAR hardware fault: DMA access violation» генерируется подсистемой ядра IOMMU (Intel VT-d). Ошибка означает, что физическое PCIe-устройство (сетевой адаптер, контроллер NVMe, GPU или HBA) попыталось выполнить операцию прямого доступа к памяти (Direct Memory Access — DMA) по физическому адресу, который не был смаппирован в таблицах трансляции страниц DMA (DMAR — DMA Remapping Table) ядра. Контроллер IOMMU заблокировал несанкционированный доступ к памяти хоста во избежание сбоя или атаки DMA.

Диагностическая таблица параметров сбоя

ПараметрЗначениеИнженерный смысл сбоя
DMARDMA RemappingАппаратная изоляция адресных пространств DMA для устройств шины PCIe.
fault addr 0x...Host Physical AddressАдрес оперативной памяти, к которому устройство попыталось получить неразрешенный доступ.
type 1 (non-zero)Page Request FaultПопытка чтения/записи невалидной страницы или нарушение прав защиты страниц памяти.

Пошаговое дерево решений и сценарии траблшутинга

Сценарий 1: Локализация сбойного устройства по PCI BDF

Найдите в строке ошибки адрес устройства (например, [dmar-fault] source 0000:04:00.0):

# Определение виновника сбоя по PCI адресу:
lspci -vns 0000:04:00.0

# Проверка структуры групп IOMMU (IOMMU Groups):
find /sys/kernel/iommu_groups/ -type l | grep 04:00.0

Сценарий 2: Переключение IOMMU в режим сквозной трансляции (Pass-Through)

Если сбой происходит с исправным драйвером устройства из-за накладных расходов трансляции IOMMU:

# Добавьте в /etc/default/grub режим passthrough:
GRUB_CMDLINE_LINUX="intel_iommu=on iommu=pt"

# Обновите конфигурацию загрузчика:
sudo update-grub  # Ubuntu/Debian
sudo grub2-mkconfig -o /boot/grub2/grub.cfg  # RHEL/AlmaLinux
sudo reboot

Сценарий 3: Настройка ACS (Access Control Services) для проброса (PCIe Passthrough)

Если несколько устройств находятся в одной IOMMU-группе и конфликтуют при пробросе в ВМ (VFIO):

# Включение обхода группировки ACS (только для тестовых стендов!):
GRUB_CMDLINE_LINUX="intel_iommu=on pcie_acs_override=downstream,multifunction"

# Проверка привязки устройства к vfio-pci:
lspci -nnk -d <VENDOR_ID>:<DEVICE_ID>
Сбои при пробросе видеокарт NVIDIA / сетевых карт в виртуальные машины?
ITSTM настроит корректную изоляцию IOMMU-групп, оптимизирует прерывания VFIO и развернет стабильный GPU Passthrough для AI/VDI задач.
Практический опыт инженера: При пробросе PCIe-устройств в KVM обязательно проверяйте наличие опции VT-d / IOMMU в BIOS сервера и включайте режим Strict ACS в настройках слотов материнской платы Supermicro/HPE/Dell.

Частые вопросы (FAQ)

Что дает параметр iommu=pt?

Режим Pass-Through (pt) отключает трансляцию IOMMU для устройств хоста по умолчанию, что устраняет DMAR-ошибки и снижает задержки I/O. При этом для виртуальных машин (VFIO) функционал IOMMU продолжает полноценно работать.

Опасна ли ошибка DMA access violation?

Блокировка DMAR предотвращает порчу данных в ОЗУ хоста. Однако само устройство, чья операция DMA была заблокирована, скорее всего зависнет или завершит операцию ввода-вывода с аппаратной ошибкой.

Как полностью отключить Intel IOMMU, если сервер не использует виртуализацию?

Укажите в параметрах загрузки ядра GRUB параметр intel_iommu=off. Это полностью выключит блок DMAR контроллера.

Почему DMAR fault часто возникает на сетевых картах Realtek / Mellanox?

При включенном scatter-gather DMA драйвер может передать физический адрес буфера за пределами 32-битного диапазона (выше 4GB). Если контроллер устройства имеет баг в работе с 64-битными адресами DMA, возникает DMAR fault.