Когда хочется быстро прикинуть, на что способен накопитель по части чтения, под рукой почти всегда оказывается утилита hdparm. Она входит в базовый набор почти любого дистрибутива Linux и умеет за несколько секунд выдать пару цифр про скорость. Простота тут одновременно достоинство и ловушка. Две строки результата выглядят понятно, но за ними прячется устройство кэшей, без понимания которого легко принять скорость оперативной памяти за скорость диска и сделать неверный вывод о железе.

Изначально hdparm создавалась для тонкой настройки параметров ATA-накопителей, а функция замера скорости в ней побочная и нарочито грубая. Это не полноценный бенчмарк уровня специализированных инструментов, а быстрый замер последовательного чтения для прикидки и сравнения. Понимать границы этой грубости важно, иначе цифры начнут вводить в заблуждение.

Две команды и две принципиально разные величины

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

lsblk -o NAME,SIZE,TYPE,MOUNTPOINTS

Сам замер выполняется командой с двумя ключами сразу. Заглавный ключ отвечает за чтение из кэша, строчный за чтение с самого накопителя.

sudo hdparm -Tt /dev/sda

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

/dev/sda:
 Timing cached reads:   9486 MB in  2.00 seconds = 4749.77 MB/sec
 Timing buffered disk reads:  110 MB in  3.04 seconds = 36.16 MB/sec

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

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

Почему результаты пляшут от запуска к запуску

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

Отсюда вытекает первое правило честного замера. Прогонять тест нужно не один раз, а два-три подряд, и брать устоявшееся значение, отбрасывая случайные провалы. Руководство самой утилиты прямо рекомендует повторять замеры несколько раз на простаивающей системе ради осмысленного сравнения. Если на машине крутятся базы данных, активная запись логов или копирование файлов, цифры будут заниженными и сравнивать их с чем-либо бессмысленно.

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

sudo sync
echo 3 | sudo tee /proc/sys/vm/drop_caches

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

Чтение в обход кэша как способ получить чистую цифру

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

sudo hdparm -t --direct /dev/sda

Этот режим заставляет утилиту читать через механизм прямого доступа, который обходит кэш ядра и тащит данные сразу с накопителя в собственные буферы. Результат подписывается отдельной строкой про прямое чтение и обычно ближе всего к паспортной последовательной скорости устройства. На некоторых дисках разница между обычным и прямым замером оказывается разительной, и именно прямой режим вскрывает истинную картину, когда обычное буферизованное чтение почему-то проседает.

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

sudo hdparm -t --direct /dev/nvme0n1

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

Где hdparm уместен, а где стоит взять инструмент посерьёзнее

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

Слабые стороны вытекают из той же простоты. Утилита измеряет только чтение и ничего не говорит о скорости записи, которая часто оказывается узким местом. Она проверяет лишь последовательный доступ и обходит стороной случайные операции, а ведь именно на случайных мелких запросах разваливается производительность многих накопителей под реальной нагрузкой. Наконец, она не умеет нагружать диск параллельными очередями, без чего невозможно оценить современные твердотельные накопители честно.

Чтобы измерить скорость записи на уровне файловой системы, обычно дописывают временный файл утилитой копирования с прямым сбросом на диск, а для глубокого анализа со случайным доступом и параллельными очередями берут специализированные тестеры нагрузки. Эти инструменты гоняют чтение, запись, перезапись и случайные операции, рисуя куда более полную картину. Но если задача звучит как быстро прикинуть, не просел ли диск, то hdparm остаётся самым прямым ответом.

Что считать нормальной скоростью для разных типов накопителей

Голая цифра скорости мало значит без понимания, чего вообще ждать от конкретного типа железа. Обычный механический диск на интерфейсе SATA выдаёт последовательное чтение в диапазоне примерно от тридцати до двухсот мегабайт в секунду в зависимости от плотности пластин и скорости вращения шпинделя. Старый медленный винчестер на тридцати-сорока мегабайтах это норма для своего поколения, а свежий ёмкий диск способен перевалить за полторы сотни. Если знакомый диск вдруг просел вдвое относительно прежних замеров, это уже повод присмотреться к его здоровью отдельными средствами диагностики.

Твердотельный накопитель на том же интерфейсе SATA упирается в потолок самого интерфейса и показывает порядка пятисот мегабайт в секунду на последовательном чтении. Накопитель формата NVMe, подключённый напрямую к шине, оставляет SATA далеко позади и выдаёт тысячи мегабайт в секунду. Именно поэтому грубый последовательный замер hdparm на NVMe заведомо занижает паспортные характеристики: утилита не нагружает накопитель параллельными запросами, на которых тот раскрывается полностью. Цифра в полторы-две тысячи мегабайт от hdparm на быстром NVMe это не приговор диску, а лишь предел метода.

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

Когда замер скорости намекает на проблему со здоровьем диска

Резкое падение скорости чтения относительно прежних значений нередко оказывается первым внешним признаком начавшейся деградации накопителя. Механический диск, на поверхности которого появились нечитаемые участки, тратит время на повторные попытки чтения, и средняя скорость проседает. Твердотельный накопитель при исчерпании ресурса или перегреве сбрасывает частоту и тоже замедляется. Поэтому неожиданно низкий результат hdparm это сигнал копнуть глубже специализированными средствами самодиагностики, а не просто смириться с медленным диском.

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

sudo hdparm -I /dev/sda

Этот вывод раскрывает заявленные накопителем возможности и фактически включённые режимы. Расхождение между тем, что диск умеет, и тем, что реально активно, порой и есть причина разочаровывающих цифр. Так грубый замер скорости превращается в отправную точку для осмысленной диагностики, а не в самоцель.

Как прикинуть скорость записи, раз hdparm её не меряет

Самое заметное ограничение утилиты в том, что она измеряет исключительно чтение. Между тем именно запись часто оказывается узким местом, особенно у бюджетных твердотельных накопителей, чья скорость записи рушится после исчерпания быстрого буфера. Чтобы закрыть этот пробел без установки тяжёлых инструментов, скорость записи прикидывают штатной утилитой копирования, дописывая временный файл на нужную файловую систему с принудительным сбросом на диск.

dd if=/dev/zero of=/var/tmp/testfile bs=1M count=2048 oflag=direct

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

rm /var/tmp/testfile

Такой замер записи в паре с чтением через hdparm уже даёт двустороннюю картину последовательной производительности. Это всё ещё не полноценный бенчмарк со случайным доступом, но для бытовой прикидки связки из двух простых команд обычно достаточно, и обе они есть в любой системе из коробки.

Как прервать затянувшийся замер и не навредить диску

Замер чтения создаёт реальную нагрузку на накопитель, и на большом медленном диске прямое чтение порой тянется заметно дольше ожидаемого. Прервать любую запущенную команду hdparm можно обычным сочетанием клавиш прерывания в терминале, и накопителю это ничем не грозит, поскольку чтение не меняет данные. А вот замеры записи на диск, который уже подозревается в неисправности, стоит проводить осторожно: лишняя нагрузка способна ускорить уход умирающего накопителя. Если диск важен и явно болен, разумнее сначала снять с него копию, и лишь потом гонять любые тесты скорости.

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

Короткий чек-лист честного замера

Чтобы цифры hdparm отражали реальность, а не фантазию кэша, достаточно держать в голове несколько правил:

  1. Игнорировать строку про кэшированное чтение, поскольку это скорость памяти, а не диска;
  2. Ориентироваться на буферизованное или прямое чтение как на честную скорость накопителя;
  3. Запускать замер два-три раза подряд и брать устоявшееся значение;
  4. Сбрасывать кэш перед замером, чтобы повторное чтение не шло из памяти;
  5. Проводить тест на простаивающей системе, без активной записи и копирования в фоне.

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