Библиотека — SATA, SAS и NVMe: интерфейсы подключения накопителей [X]
Шифр
storage-interfaces
Разделы
freebsd linux tooling
Сверено
2 сентября — в этот день утверждения статьи сверялись с первоисточниками, а не правился текст
Объём
29 829 знаков · 29 разделов · чтения около 30 минут

SATA, SAS и NVMe: интерфейсы подключения накопителей


Обзор

Три интерфейса, которые обычно сравнивают по одной цифре — пропускной способности, — и почти всегда зря. 600 МБ/с у SATA против 7 ГБ/с у NVMe выглядит исчерпывающим аргументом ровно до момента, когда выясняется, что в реальной нагрузке разрыв то в двадцать раз, то отсутствует вовсе. Дело в том, что скорость линии здесь наименее интересный параметр: SATA, SAS и NVMe отличаются прежде всего моделью общения с накопителем — сколько команд можно держать в полёте, кто и как их упорядочивает, сколько программных слоёв стоит между приложением и флеш-памятью, какие гарантии целостности встроены в протокол и во что превращается топология, когда дисков становится триста.

Разница исторически объяснима. SATA — прямой наследник параллельного ATA, спроектированного под один механический диск с одной головкой, где очередь запросов физически бессмысленна: головка всё равно одна. SAS — наследник параллельного SCSI, выросшего в мире дисковых полок и мейнфреймов, где важнее были адресация сотен устройств, два независимых пути к диску и контроль целостности, чем абсолютная скорость. NVMe спроектирован с нуля уже под флеш и многоядерные процессоры, без обязательства притворяться диском.

Статья разбирает каждый интерфейс, сравнивает их по осям, которые действительно различаются, и показывает, что и как смотреть в работающей системе. Данные приводятся по состоянию на август 2026 года; там, где факт не удалось подтвердить первоисточником, это сказано прямо.

Три оси, которые постоянно путают

Прежде чем сравнивать, стоит развести три независимые вещи. Путаница между ними — источник большинства неверных выводов вроде «у меня M.2, значит NVMe» (не обязательно) или «SAS быстрее SATA» (не в том смысле, в каком обычно имеется в виду).

Ось Что это Примеры
Разъём и форм-фактор физическая механика: что во что вставляется 2.5″/3.5″, M.2, U.2 (SFF-8639), U.3, E1.S, E3.S
Транспорт как биты идут по проводу SATA-линия, SAS-линия, линии PCIe
Командный набор что накопителю говорят ATA/AHCI, SCSI, NVMe

Комбинации не совпадают один в один. M.2 — это разъём, в который вставляется и SATA-накопитель, и NVMe-накопитель; ключ и распиновка у них разные, а внешне модули почти одинаковые. U.2 несёт PCIe, но тот же физический разъём SFF-8639 в трёхрежимной корзине (U.3) принимает и SAS, и SATA. Диск SATA прекрасно работает на SAS-контроллере, потому что SAS-домен умеет туннелировать ATA-команды. И, наконец, NVMe — это командный набор, который сегодня чаще всего ездит по PCIe, но по фабрикам (NVMe over Fabrics) ездит и по TCP, и по RDMA, и по Fibre Channel, оставаясь тем же NVMe.

Поэтому корректный вопрос звучит не «SATA или NVMe», а «какой командный набор поверх какого транспорта, в каком форм-факторе и с какой топологией».

SATA

Родословная и скорости

SATA появился в 2003 году как последовательная замена параллельному ATA и с тех пор прошёл три поколения скорости: 1.5 Гбит/с, 3 Гбит/с и 6 Гбит/с. Последнее — SATA revision 3.0, опубликованная SATA-IO в 2009 году, и на ней развитие скорости остановилось насовсем.

Практический потолок считается так: линия кодируется схемой 8b/10b, то есть на каждые восемь бит данных передаётся десять бит по проводу — 20 % уходит на кодирование. От 6 Гбит/с остаётся 4,8 Гбит/с полезных, что даёт 600 МБ/с. Это цифра из спецификации, и любой SATA-накопитель, показывающий в тестах 540–560 МБ/с, упёрся именно в неё, а не в свою флеш-память.

Последующие ревизии — 3.1, 3.2, 3.3, 3.5 (июль 2020) и 3.5a (март 2021) — скорость не поднимали, а добавляли служебные возможности: DevSleep для экономии энергии, поддержку SMR-дисков, средства согласования приоритетов с другими устройствами. Преемника у 3.5a нет и, судя по всему, не будет: SATA Express, задуманный в ревизии 3.2 как мост к PCIe, на рынке не прижился — две линии PCIe оказались слишком скромным предложением на фоне полноценных четырёхлинейных NVMe-накопителей.

AHCI и очередь на 32 команды

Более важное ограничение SATA — не скорость линии, а модель очереди. Стандартный программный интерфейс к SATA-контроллеру, AHCI, предоставляет одну очередь команд глубиной 32. Механизм называется NCQ (Native Command Queuing), и его исходный смысл был честным: дать диску переупорядочить запросы так, чтобы головка прошла по пластине оптимальным маршрутом.

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

Отсюда характерная картина в бенчмарках: SATA SSD и NVMe SSD показывают близкие результаты на однопоточном последовательном чтении (оба упираются в другие вещи) и расходятся на порядок на многопоточной случайной нагрузке с высокой глубиной очереди — то есть ровно на профиле СУБД, гипервизора и объектного хранилища.

Где SATA всё ещё уместен

Списывать SATA рано, и по вполне рациональным причинам. Механические диски большой ёмкости — архив, резервные копии, холодные данные медиатеки — не приближаются к 600 МБ/с даже теоретически: 7200-оборотный диск выдаёт 150–250 МБ/с на последовательном чтении, и интерфейс для него избыточен вдвое. Портов SATA на обычной материнской плате шесть-восемь, и каждый из них не стоит ни одной линии PCIe, тогда как линии — самый дефицитный ресурс на потребительских платформах. Кабель SATA дёшев, тонок и допускает горячее подключение.

Проще говоря: SATA сегодня — интерфейс ёмкости, а не производительности. Как только диск перестаёт быть шпиндельным и начинает обслуживать активную нагрузку, SATA превращается в бутылочное горлышко.

SAS

SCSI поверх последовательной шины

SAS (Serial Attached SCSI) занял в серверном мире ту же нишу, что SATA в потребительском, и с той же логикой: последовательная замена параллельной шине, в данном случае SCSI. Но в отличие от SATA, где от предшественника унаследовали в основном командный набор, SAS унаследовал и всю модель управления устройствами — с адресацией, доменами, инициаторами и целями.

Скорости шли парами с SATA, но ушли дальше: SAS-2 — 6 Гбит/с, SAS-3 — 12 Гбит/с, SAS-4 — 22,5 Гбит/с на линию (маркетинговое имя «24G SAS»; спецификация разработана в 2017 году и утверждена в 2019). SAS-5 находится в разработке в комитете T10 — там речь идёт скорее о новых разъёмах, форм-факторах и целостности сигнала, чем об очередном удвоении.

Ключевое отличие от SATA лежит не в цифрах. Командный набор SCSI изначально проектировался под многозадачность: очередь глубже, приоритеты команд выражаются явно, обработка ошибок разработана подробнее, а состояние устройства сообщается structured-кодами, а не набором флагов. Enterprise-накопитель на SAS честно рассказывает о своём состоянии — вплоть до счётчиков перераспределённых секторов, температуры и остаточного ресурса — и делает это через стандартизованные страницы журналов, а не через вендорские расширения.

Топология: экспандеры, широкие и двойные порты

Именно здесь SAS уходит в отрыв. SATA — это соединение «точка-точка»: один порт контроллера, один диск. Мультипликаторы портов существуют, но применяются редко и плохо. SAS строит настоящую сеть.

                       ┌─────────────┐
      ┌───── x4 wide ──│  Expander A │──┬── диск 1 (порт A)
      │                └─────────────┘  ├── диск 2 (порт A)
┌───────────┐                           └── ... до сотен
│    HBA    │
│ (initiator)│                          ┌── диск 1 (порт B)
└───────────┘  ┌─────────────┐          │
      └── x4 ──│  Expander B │──────────┴── диск 2 (порт B)
               └─────────────┘

Три механизма стоит различать. Широкий порт (wide port) объединяет несколько физических линий в один логический канал — четырёхлинейный порт SAS-3 даёт 48 Гбит/с суммарно, и это то, чем HBA подключается к корзине одним кабелем. Экспандер — коммутатор SAS-домена; он позволяет повесить на один HBA десятки и сотни накопителей, а каскадирование экспандеров увеличивает счёт дальше (адресация SAS допускает очень большие домены; практический предел определяется полосой и качеством конкретной реализации, а не адресным пространством). Двойной порт — свойство самого enterprise-накопителя: у него два независимых физических интерфейса, которые заводятся на два разных HBA или два контроллера СХД. Отказ контроллера, кабеля или экспандера не выводит диск из строя, а переключает трафик на второй путь; в Linux этим занимается dm-multipath.

У SATA-накопителя порт один, и это не мелочь: отказоустойчивая полка на SATA-дисках принципиально не собирается, каким бы качественным ни было железо вокруг.

Целостность данных

SCSI-стек умеет то, чего в ATA нет вовсе: сквозную защиту данных T10 PI (Protection Information, исторически DIF). Сектор расширяется с 512 или 4096 байт на 8 байт метаданных — контрольная сумма блока, тег ссылки и тег приложения, — и эти 8 байт проверяются на каждом переходе: в HBA, в экспандере, в самом накопителе. Ошибка, возникшая в кабеле или в буфере контроллера, обнаруживается до записи, а не через полгода при чтении.

Это ровно та проблема, которую ZFS решает своими средствами на уровне файловой системы. Механизмы дополняют друг друга: T10 PI ловит порчу на тракте, контрольные суммы ZFS ловят порчу где угодно, включая сам накопитель, и умеют её чинить по избыточности.

Односторонняя совместимость с SATA

SAS-контроллер принимает SATA-накопители. Работает это через STP (SATA Tunneling Protocol): экспандер оборачивает ATA-трафик в SAS-кадры, и диск виден системе обычным образом. Обратное невозможно — SAS-накопитель в SATA-порт не заводится ни физически (разъём отличается перемычкой), ни логически.

Практический вывод: смешанная корзина возможна, и её часто так и собирают — SAS для активных данных, дешёвые SATA-диски для ёмкости. Но при туннелировании теряется то, ради чего SAS и берут: у SATA-накопителя нет второго порта, нет T10 PI и нет полноценной SCSI-диагностики. Это по-прежнему SATA-диск, просто подключённый через SAS-инфраструктуру.

Разница видна прямо в драйвере. Семейство HBA на Broadcom mpt3sas задаёт глубину очереди по типу устройства: 254 команды для SAS-накопителя и 32 для SATA — ровно тот же потолок NCQ, что и на материнской плате. Дорогой контроллер не поднимает планку у диска, который её не поддерживает.

NVMe

Отказ от посредника

NVMe (Non-Volatile Memory Express) построен на наблюдении, которое к 2011 году стало очевидным: если накопитель — это флеш, то заставлять его говорить на языке, придуманном для вращающихся пластин, — чистые накладные расходы. Команда от приложения до SATA SSD проходила через уровень блочного устройства, драйвер AHCI, трансляцию в ATA-команду, контроллер SATA, и в конце контроллер накопителя переводил всё это обратно в операции с флеш-массивом.

NVMe убирает посредников. Накопитель подключён напрямую к PCIe, драйвер кладёт команду в кольцевой буфер в оперативной памяти, звонит в дверной звонок (doorbell-регистр), контроллер забирает команду по DMA и кладёт результат в буфер завершений. Никакой трансляции, никакого промежуточного контроллера шины.

Пропускная способность при этом определяется не самим NVMe, а поколением PCIe и числом линий. Для типовых четырёхлинейных накопителей (с учётом кодирования 128b/130b):

Поколение PCIe На линию x4, практический потолок
3.0 (8 ГТ/с) ~985 МБ/с ~3,9 ГБ/с
4.0 (16 ГТ/с) ~1970 МБ/с ~7,9 ГБ/с
5.0 (32 ГТ/с) ~3940 МБ/с ~15,8 ГБ/с

Очереди — главное отличие

Если из NVMe нужно запомнить один факт, то этот. Спецификация допускает до 65 535 очередей ввода-вывода, в каждой до 65 536 команд. Против одной очереди на 32 команды у AHCI.

Смысл не в абсолютных числах — столько никто не использует, — а в том, что очередь перестаёт быть общим ресурсом. Драйвер заводит по очереди на процессорное ядро, и поток, выполняющий ввод-вывод, работает со своей очередью: без блокировок, без конкуренции за общую структуру, с прерыванием завершения, приходящим на то же ядро, что отправило команду. В Linux это ложится на блочный слой blk-mq вообще без швов, потому что blk-mq спроектирован ровно под такую модель.

Отсюда же берётся правильная интуиция насчёт производительности: NVMe выигрывает не там, где данных много, а там, где запросов много и они независимы. Однопоточное копирование большого файла упрётся во что угодно раньше, чем в модель очередей; база данных с сотней параллельных транзакций почувствует разницу немедленно.

Пространства имён и форм-факторы

Накопитель NVMe делится на namespace'ы — независимые адресные пространства, каждое из которых видно системе отдельным блочным устройством (/dev/nvme0n1, /dev/nvme0n2). Это не разделы: разбиение на namespace'ы выполняет контроллер накопителя, у каждого может быть свой размер сектора и свои настройки защиты данных. На корпоративных моделях namespace'ы создаются и удаляются на лету и служат основой для аккуратной нарезки под виртуальные машины.

Форм-факторы стоит различать отдельно от протокола:

  • M.2 — модуль на плате, обычно x4, потребительский стандарт и повод для большинства путаниц: в тот же слот вставляется и SATA-накопитель.
  • U.2 (разъём SFF-8639) — 2,5-дюймовый корпус с горячей заменой, PCIe наружу; корпоративная классика.
  • U.3 (SFF-TA-1001) — тот же разъём, но трёхрежимная корзина: одна универсальная стойка принимает NVMe, SAS и SATA. Совместимость односторонняя: накопитель U.3 работает в отсеке U.2, накопитель U.2 в отсеке U.3 — нет.
  • EDSFF (E1.S, E3.S) — форм-факторы, спроектированные под плотность и охлаждение стойки, а не под наследие 2,5-дюймового отсека; в новых серверных платформах вытесняют U.2/U.3.

NVMe over Fabrics

NVMe как командный набор не обязан ездить по PCIe. NVMe-oF переносит ту же модель очередей на сеть — по RDMA (RoCE, iWARP, InfiniBand), по TCP на обычном Ethernet и по Fibre Channel. Смысл в том, что удалённый накопитель остаётся NVMe-накопителем со всеми его очередями, а не превращается в SCSI-цель, как это происходит с iSCSI.

Отказоустойчивость здесь решается через ANA (Asymmetric Namespace Access) — аналог многопутевого доступа SAS, встроенный в сам протокол. В Linux работает нативно, без dm-multipath; политика выбора пути задаётся модулем nvme_core и принимает значения numa (по умолчанию), round-robin и queue-depth.

Спецификация развивается заметно быстрее соседей: после переработки библиотеки в версию 2.0 (июнь 2021) вышли ревизии 2.1 (август 2024), 2.2 (март 2025), 2.3 (июль 2025) и 2.4 (август 2026). Из содержательных дополнений последних лет — зонированные накопители (ZNS), живая миграция контроллеров между подсистемами, шифрование с ключом на операцию ввода-вывода.

Сравнение

SATA SAS NVMe
Командный набор ATA (через AHCI) SCSI NVMe
Транспорт линия SATA линия SAS линии PCIe (или фабрика)
Скорость линии 6 Гбит/с (потолок с 2009) 22,5 Гбит/с (SAS-4) зависит от поколения PCIe
Практическая полоса ~600 МБ/с ~2,2 ГБ/с на линию, x4 в широком порту ~3,9 / 7,9 / 15,8 ГБ/с (Gen3/4/5 x4)
Очереди 1 × 32 1 × 254 (типично) до 65 535 × 65 536
Портов на накопителе 1 2 (dual port) 1 (отказоустойчивость — через ANA)
Масштабирование точка-точка экспандеры, сотни устройств линии PCIe, обычно единицы-десятки
Целостность на тракте нет T10 PI метаданные защиты (аналог)
Горячая замена да да да (U.2/U.3/EDSFF), не в M.2
Цена за терабайт самая низкая высокая средняя, падает

Развернём то, что за таблицей не видно.

Пропускная способность против задержки. Полосу легко нарастить, добавив линий; задержку — нет. NVMe выигрывает у SATA не столько в мегабайтах, сколько в микросекундах на операцию: короче программный путь, меньше переключений контекста, прерывание приходит на то ядро, которое отправило команду. Для нагрузки из множества мелких синхронных операций — журнал СУБД, метаданные файловой системы — это важнее любой полосы.

Плотность против ширины. У SAS есть свойство, которого у NVMe нет: дешёвое масштабирование по количеству. Один HBA с четырёхлинейным широким портом обслуживает полку на двадцать четыре диска, а каскад экспандеров — несколько полок. Чтобы подключить столько же накопителей NVMe напрямую, нужны линии PCIe, которых на процессор конечное число, — приходится ставить коммутаторы PCIe, и это дорого. Поэтому большие массивы ёмкости по-прежнему строят на SAS.

Отказоустойчивость. Двойной порт SAS — свойство железа, работающее без участия ОС и без сетевого стека. У NVMe эквивалент есть, но он либо на уровне фабрики (ANA поверх NVMe-oF), либо отсутствует: у обычного накопителя PCIe один путь, и его резервируют избыточностью на уровне пула, а не путей.

Стоимость владения. SATA даёт минимальную цену за терабайт и обходится без специального контроллера. SAS требует HBA и корпуса, но взамен даёт диагностику, целостность и топологию. NVMe перестал быть дорогим на потребительском рынке, но в серверном варианте (U.2/U.3, защита от потери питания, высокий ресурс записи) стоит заметных денег и, что важнее, потребляет линии PCIe — самый дефицитный ресурс современной платформы.

Как выбирать

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

Системный диск и рабочая станция — NVMe без вариантов; выигрыш в отзывчивости системы виден невооружённым глазом и не требует обоснований. Домашний сервер и NAS — гибрид: NVMe под систему, метаданные и кэш, SATA-шпиндели под ёмкость; для ZFS это классическая раскладка, где отдельный NVMe уходит под special vdev или L2ARC. Массив ёмкости от десятка дисков — SAS, ради экспандеров, двойных портов и вменяемой диагностики, даже если сами диски в корзине окажутся SATA. База данных, гипервизор, объектное хранилище — NVMe, потому что там нагрузка состоит именно из параллельных мелких операций, ради которых он и сделан. Архив и холодные данные — SATA-шпиндели, самая низкая цена за терабайт, скорость интерфейса роли не играет.

Отдельно про корпоративные накопители: критерий выбора между потребительской и серверной моделью почти никогда не скорость, а защита от потери питания (PLP — конденсаторы, дающие контроллеру дописать буфер при пропадании напряжения) и ресурс записи. Потребительский NVMe в роли журнала СУБД теряет данные при отключении питания и изнашивается за месяцы.

Практика: что смотреть в системе

Что подключено и как

lsblk -o NAME,SIZE,ROTA,TRAN,MODEL,SERIAL     # ROTA=1 — механика, TRAN — sata/sas/nvme
lsscsi -s                                      # SCSI-устройства с ёмкостью
nvme list                                      # накопители NVMe и их namespace'ы

Столбец TRAN в lsblk — самый быстрый способ узнать, чем на самом деле является диск в слоте M.2: sata или nvme.

Скорость канала, а не накопителя

Частая ошибка диагностики — измерять накопитель, когда узкое место в подключении. Реальную ширину и скорость линии PCIe показывает lspci:

lspci | grep -i nvme                          # найти адрес устройства
lspci -vv -s 01:00.0 | grep -i 'lnkcap\|lnksta'

LnkCap — на что накопитель способен, LnkSta — как он договорился на самом деле. Расхождение (x4 в capability против x2 в status) означает, что слот делит линии с чем-то ещё — типовая ситуация на потребительских платах, где второй слот M.2 отбирает линии у видеокарты или отключает пару портов SATA.

Состояние и здоровье

smartctl -a /dev/sda                          # SATA и SAS
smartctl -a /dev/nvme0                        # NVMe тоже понимает
nvme smart-log /dev/nvme0                     # родной формат: температура, износ, ошибки
nvme id-ctrl /dev/nvme0 -H                    # возможности контроллера в читаемом виде

Для NVMe стоит смотреть percentage_used (расчётный износ ресурса записи), media_errors и critical_warning. Для SAS smartctl показывает страницы журналов SCSI, включая счётчики скорректированных ошибок по чтению и записи, — по ним деградация видна задолго до отказа.

Очереди и планировщик

cat /sys/block/sda/queue/rotational           # 1 — механический диск
cat /sys/block/sda/queue/nr_requests          # глубина очереди блочного слоя
cat /sys/block/nvme0n1/queue/scheduler        # активный планировщик в [скобках]
ls /sys/block/nvme0n1/mq                      # аппаратные очереди: по одной на ядро

Планировщик — место, где легко потерять производительность на ровном месте. Для NVMe осмысленный выбор обычно none: накопителю нечего переупорядочивать, а работа планировщика становится чистым оверхедом. Для механики mq-deadline или bfq дают заметный выигрыш, потому что там сортировка запросов действительно экономит движения головки.

Многопутевой доступ

cat /sys/module/nvme_core/parameters/multipath   # Y — нативный multipath NVMe включён
cat /sys/module/nvme_core/parameters/iopolicy    # numa | round-robin | queue-depth
nvme list-subsys                                 # подсистемы и пути к ним
multipath -ll                                    # пути SAS через device-mapper

Политики iopolicy заданы в драйвере nvme_core: по умолчанию numa (путь выбирается по близости к узлу памяти), альтернативы — round-robin и queue-depth.

Корзины и экспандеры

lsscsi -H                                     # хост-адаптеры и их драйверы
sg_ses --page=es /dev/sg3                     # состояние корзины: слоты, вентиляторы, питание
sg_map -i                                     # соответствие sg-устройств блочным

SES (SCSI Enclosure Services) — то, чем корзина сообщает о себе: какой слот занят, где горит индикатор отказа, что с температурой. На SATA-инфраструктуре этого нет в принципе.

Нюансы и подводные камни

Линии PCIe — дефицитный ресурс. На потребительской платформе процессор даёт около двадцати линий, и накопители конкурируют за них с видеокартой и сетевой картой. Второй накопитель M.2 нередко работает на половинной ширине или отключает пару портов SATA — это указано в руководстве к плате мелким шрифтом и обнаруживается через lspci -vv уже после покупки.

Тепловой троттлинг. Накопитель NVMe под нагрузкой греется всерьёз, а в ноутбуке или тесном корпусе рассеивать тепло некуда. Контроллер снижает скорость, и накопитель, показавший 7 ГБ/с на первых десяти секундах, дальше выдаёт треть от этого. Проверяется температурой в nvme smart-log под нагрузкой; лечится радиатором, а не заменой накопителя.

SMR-диски. Черепичная запись даёт плотность ценой катастрофической деградации на случайной записи: перезапись одного сектора влечёт переписывание всей зоны. В архиве это незаметно, в пуле ZFS — приводит к многосуточному ресилверу. Тип записи не всегда указан в спецификации явно; смотреть стоит на модель, а не на интерфейс, — SMR встречается и на SATA, и на SAS.

RAID-контроллер против HBA. Аппаратный RAID-контроллер прячет диски за своей логикой и отдаёт системе виртуальные тома. Для ZFS, Btrfs и программных массивов это вредно: файловая система теряет доступ к SMART, к реальным границам устройств и к сквозной проверке целостности. Правильная конфигурация — HBA в режиме IT (Initiator Target), где контроллер просто пробрасывает диски. Многие карты Broadcom/LSI перепрошиваются из RAID в IT-режим.

U.2 и U.3 несовместимы в одну сторону. Накопитель U.3 работает в отсеке U.2, обратное — нет. При закупке в существующую корзину это стоит проверять по паспорту шасси, а не по внешнему виду разъёма: он одинаковый.

Глубина очереди в бенчмарках. Сравнение SATA SSD и NVMe при iodepth=1 покажет разницу в полтора раза и создаст ложное впечатление. Профиль теста должен соответствовать реальной нагрузке; для серверной это означает несколько заданий с глубиной очереди в десятки, для десктопной — как раз малые глубины, где разница честно невелика.

SATA-диск в SAS-корзине остаётся SATA-диском. Туннелирование через STP не добавляет ни второго порта, ни T10 PI. Смешивать можно, но рассчитывать на отказоустойчивость путей в такой полке нельзя.

FreeBSD против Linux

Модель одна, реализации различаются заметно.

В Linux три подсистемы живут раздельно: libata обслуживает SATA, поднимая устройства как SCSI-диски (/dev/sda), стек SCSI — SAS-накопители (тоже /dev/sda), а NVMe имеет собственный драйвер и собственное пространство имён устройств (/dev/nvme0n1). Многопутевой доступ раздвоен соответственно: для SAS это dm-multipath в пространстве пользователя, для NVMe — нативный ANA внутри nvme_core.

FreeBSD прогоняет всё через единую подсистему CAM. SATA и SAS обслуживаются драйверами ada и da поверх общего транспортного слоя, а с FreeBSD 14 туда же заведён и NVMe: драйвер nda (NVMe Direct Access) по умолчанию поднимает накопители как CAM-устройства, включая подключённые через NVMe over Fabrics. Старый драйвер nvd остался для совместимости, переключение делается тюнаблом hw.nvme.use_nvd, а kern.cam.nda.nvd_compat создаёт алиасы со старыми именами. Практическое следствие — единый инструментарий: camcontrol работает и с SATA, и с SAS, и с NVMe-устройствами, тогда как в Linux для каждого стека свой набор утилит.

Диагностика соответственно: camcontrol devlist вместо lsblk/lsscsi, nvmecontrol devlist и nvmecontrol logpage вместо nvme list и nvme smart-log, smartctl работает одинаково на обеих системах. Планировщиков ввода-вывода в привычном линуксовом смысле в FreeBSD нет: GEOM устроен иначе, и настройка идёт через параметры CAM и sysctl вроде kern.cam.nda.sort_io_queue (сортировка очереди по LBA, по умолчанию выключена — для флеша она бессмысленна).

Источники


Связанные заметки

Из библиотеки института уносят только знания. Читателей здесь не считают: посещение не регистрируется, отметок в издании не остаётся, счётчиков нет ни у одного издания фонда.

Издание пополняется и пересверяется. Текст доступен на условиях CC BY-SA 4.0 — унесённое можно передавать дальше на тех же условиях.