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

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

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.
nvme nvme0: I/O Command Timeout, aborting command Linux / DevOps

nvme0: I/O Command Timeout, aborting command — Решение таймаутов NVMe в Linux

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

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

Сообщение «nvme nvme0: I/O Command Timeout, aborting command» регистрируется подсистемой ядра drivers/nvme/host. Ошибка возникает, когда контроллер NVMe не возвращает подтверждение выполнения команды чтения/записи (Completion Queue Entry) за установленный интервал времени (по умолчанию 30 секунд). Драйвер ядра предпринимает попытку прервать операцию (Abort Command), а при отсутствии отклика производит полный аппаратный сброс контроллера (Controller Reset).

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

ПараметрЗначениеИнженерный смысл сбоя
io_timeout30 (sec, default)Максимальное время ожидания ответа на команду ввода-вывода.
Abort CommandNVMe Admin CommandИнструкция контроллеру на экстренную отмену зависшей операции.
nvme_reset_workKernel WorkqueueПоток восстановления ядра, выполняющий реинициализацию очередей NVMe.

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

Сценарий 1: Увеличение таймаута команд ввода-вывода (io_timeout)

Для высоконагруженных enterprise СУБД с пиковыми операциями fsync увеличьте таймаут ответа накопителя:

# Добавьте параметр в /etc/default/grub (увеличение таймаута до 120 секунд):
GRUB_CMDLINE_LINUX="nvme_core.io_timeout=120 nvme_core.admin_timeout=60"

# Обновите конфигурацию GRUB:
sudo update-grub
sudo reboot

Сценарий 2: Отключение Host Memory Buffer (HMB) для безбуферных SSD

Дешевые SSD (DRAM-less) используют системную память хоста через механизм HMB, что часто вызывает таймауты под Linux:

# Отключение Host Memory Buffer в GRUB:
GRUB_CMDLINE_LINUX="nvme_core.noacpi=1 nvme.noacpi=1 modprobe.blacklist=nvme_hmb"

# Или через modprobe в /etc/modprobe.d/nvme.conf:
options nvme_core noacpi=1

Сценарий 3: Диагностика очереди PCIe MSI-X прерываний

Убедитесь, что очереди NVMe равномерно распределены по ядрам процессора:

# Проверка распределения прерываний NVMe:
cat /proc/interrupts | grep nvme

# Запуск службы балансировки прерываний:
sudo systemctl restart irqbalance
Периодические фризы серверов на NVMe накопителях?
ITSTM выполнит профилирование дисковых задержек (fio/bpftrace), оптимизирует очереди контроллеров и подберет надежные серверные решения хранения данных.
Практический опыт инженера: Отключайте непрерывный discard в опциях монтирования /etc/fstab (используйте nodiscard) для баз данных на NVMe. Заменяйте его на запланированный запуск fstrim по расписанию в ночное время через systemd timer.

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

Почему увеличение io_timeout не всегда решает проблему?

Если контроллер завис аппаратно (deadlock прошивки), увеличение времени ожидания лишь откладывает момент перезапуска контроллера, но не устраняет причину зависания чипа.

Что происходит при успешном выполнении Abort Command?

Контроллер прекращает обработку сбойного запроса, возвращает ошибку операции в пространство пользователя (EIO), а ядро продолжает нормальную работу без сброса всего NVMe устройства.

Может ли ошибка возникать из-за работы TRIM (discard)?

Да. Фоновое выполнение fstrim на некоторых моделях SSD вызывает длительную внутреннюю сборку мусора (Garbage Collection), во время которой контроллер блокирует любые входящие команды I/O дольше 30 секунд.

Как проверить, поддерживает ли мой накопитель команду Abort?

Выполните команду nvme id-ctrl /dev/nvme0 | grep acl. Значение параметра Abort Command Limit (ACL) показывает максимальное количество одновременно прерываемых команд.