Перейти

NCQ в Linux: как проверить, включить и отключить

Обновлено 8 ноября 2026

NCQ (Native Command Queuing) позволяет отправить диску до 32 команд сразу. Диск сам выбирает порядок выполнения, и у жёстких дисков меньше лишних движений головок.

Как проверить

При загрузке libata пишет в журнал глубину очереди для каждого диска:

dmesg | grep -i ncq
ata1.00: 7814037168 sectors, multi 16: LBA48 NCQ (depth 32), AA

Текущая глубина очереди для диска:

cat /sys/block/sda/device/queue_depth

Значение больше единицы означает, что NCQ работает. Единица означает, что он выключен или не поддерживается контроллером. Какие контроллеры умеют NCQ, смотрите в таблице поддержки.

Как отключить

Для одного диска до перезагрузки:

echo 1 | sudo tee /sys/block/sda/device/queue_depth

Постоянно, через параметр ядра в загрузчике:

# для всех дисков
libata.force=noncq
# только для порта 2, устройство 0
libata.force=2.00:noncq

Номер порта виден в журнале: строки вида ata2.00 относятся ко второму порту.

Когда отключать

Типичный признак проблем с NCQ: ошибки в журнале с командами READ FPDMA QUEUED или WRITE FPDMA QUEUED, после которых идёт сброс линка. FPDMA QUEUED это и есть команды NCQ. Причиной бывает прошивка диска, кабель или сам контроллер.

  1. Сначала замените кабель SATA. Ошибки кабеля видны по росту атрибута SMART 199 (UDMA_CRC_Error_Count), подробнее в статье про SMART.
  2. Обновите прошивку диска, если производитель её выпускал.
  3. Если ошибки остались, отключите NCQ для этого порта и проверьте, пропали ли сбросы.
Для части SSD ядро само отключает очередную команду TRIM (queued TRIM), оставляя обычный NCQ. Отключить её вручную можно параметром libata.force=noncqtrim.

Читайте также