MAATRIX / Блог / Как тестировать диск через fio

Как тестировать диск через fio

Блог MAATRIX · 2026-07-07

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

Зачем тестировать диск и что даёт fio

['После заказа VPS полезно проверить диск на деле, а не верить описанию тарифа. fio (Flexible I/O tester) моделирует любую нагрузку: случайное или последовательное чтение и запись, разный размер блока, разную глубину очереди. В отличие от простых утилит вроде hdparm, он показывает именно то, что важно серверу — случайные IOPS и латентность.', 'Установка занимает секунды:', '
sudo apt update && sudo apt install -y fio
', 'Тесты создают временный файл в текущей папке. Запускайте их в разделе, где есть свободное место, и удаляйте файл после теста.']

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK и США. Оплата картой РФ и по СБП.

Арендовать VPS на NVMe

Ключевые флаги fio

['Прежде чем запускать, разберём параметры — от них зависит, что именно вы измеряете.', '
  • --rw — режим: randread, randwrite (случайные), read, write (последовательные), randrw (смешанный).
  • --bs — размер блока: 4k для баз, 1M для линейной нагрузки.
  • --direct=1 — обход кэша ОС, тест реального диска, а не памяти.
  • --iodepth — глубина очереди: 1 для латентности, 32-64 для максимума IOPS.
  • --numjobs — число параллельных потоков нагрузки.
  • --runtime + --time_based — длительность теста в секундах.
', 'Флаг --direct=1 критичен: без него вы измеряете скорость кэша в RAM, а не диска, и получите нереально красивые цифры.']

Тест случайного чтения — главный для баз

['Случайное чтение блоками 4К — нагрузка, максимально похожая на работу базы данных. Именно она показывает реальный потолок IOPS диска.', '
fio --name=randread --filename=./fiotest --size=1G \\\n  --rw=randread --bs=4k --direct=1 --ioengine=libaio \\\n  --iodepth=64 --numjobs=1 --runtime=30 --time_based\nrm -f ./fiotest
', 'В выводе главное — строка вида read: IOPS=250k, BW=980MiB/s. IOPS — число операций в секунду, BW — пропускная способность. На NVMe вы увидите сотни тысяч IOPS, на SATA SSD — десятки тысяч, на HDD — сотни. Ниже в блоке clat указана латентность — задержка операции в микросекундах.']

Тест записи и смешанной нагрузки

['Запись тестируют отдельно — она обычно тяжелее чтения. Осторожно: тест записи нагружает диск реально, не запускайте его на важных данных.', '
# случайная запись 4к\nfio --name=randwrite --filename=./ft --size=1G \\\n  --rw=randwrite --bs=4k --direct=1 --ioengine=libaio \\\n  --iodepth=64 --numjobs=1 --runtime=30 --time_based\n\n# смешанная нагрузка 70/30 чтение/запись — как у реального сервиса\nfio --name=mixed --filename=./ft --size=1G \\\n  --rw=randrw --rwmixread=70 --bs=4k --direct=1 \\\n  --ioengine=libaio --iodepth=32 --runtime=30 --time_based\nrm -f ./ft
', 'Смешанный тест (randrw) ближе всего к реальности: сервер редко только читает или только пишет. Соотношение 70/30 типично для веб-приложения с базой.']

Тест латентности и последовательной скорости

['Чтобы измерить честную задержку одной операции, ставят глубину очереди 1 — так видно, за сколько диск отвечает без накопления запросов.', '
# латентность одиночной операции\nfio --name=lat --filename=./ft --size=512M --rw=randread \\\n  --bs=4k --direct=1 --ioengine=libaio --iodepth=1 \\\n  --runtime=20 --time_based\n\n# последовательное чтение большими блоками — максимальные МБ/с\nfio --name=seqread --filename=./ft --size=2G --rw=read \\\n  --bs=1M --direct=1 --ioengine=libaio --iodepth=16 \\\n  --runtime=20 --time_based\nrm -f ./ft
', 'При iodepth=1 задержка NVMe — десятки микросекунд, у HDD — миллисекунды, разница в сотни раз. Последовательный тест блоками 1М покажет максимальную линейную скорость в МБ/с.']

Как читать вывод и делать выводы

['Соберём воедино, на что смотреть. В выводе fio ключевые поля:', '
  • IOPS — число операций в секунду, главный показатель для баз и веба.
  • BW (bandwidth) — пропускная способность в МБ/с, важна для линейных задач.
  • clat / lat — задержка операции, чем меньше и стабильнее, тем лучше.
  • percentiles — 99-й перцентиль латентности показывает худшие случаи, а не среднее.
', 'Ориентиры: NVMe — сотни тысяч случайных IOPS при задержке в десятки микросекунд; SATA SSD — десятки тысяч IOPS; HDD — сотни IOPS и миллисекундные задержки. Если ваш тест дал сотни IOPS — под капотом медленный диск, и базу на нём держать нельзя.', 'На тарифах MAATRIX диски NVMe в связке с AMD EPYC — прогоните fio после заказа и увидите сотни тысяч IOPS сами. Оплата возможна картой РФ, СБП, криптой или токеном MAAT, что удобно для аудитории из России.']

Частые ошибки при тестировании

['
  • Забыть --direct=1 — измеряете кэш в RAM, а не диск, цифры завышены в разы.
  • Тестировать блоком 1M и радоваться МБ/с — для сервера важны случайные 4к IOPS.
  • Слишком маленький --size — тест целиком влезает в кэш, результат нереальный.
  • Запускать тест записи на боевых данных — fio реально пишет на диск, используйте отдельный файл.
']

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK и США. Оплата картой РФ и по СБП.

Арендовать VPS на NVMe

Частые вопросы

Зачем нужен флаг --direct=1 в fio?

Он заставляет fio обходить кэш операционной системы и тестировать реальный диск. Без него вы измеряете скорость RAM и получаете завышенные цифры.

Какой тест fio показывает производительность базы?

Случайное чтение и запись блоками 4к (--rw=randread/randwrite --bs=4k) или смешанный randrw. Именно так работает СУБД под нагрузкой.

Какие IOPS считаются хорошими?

NVMe выдаёт сотни тысяч случайных IOPS, SATA SSD — десятки тысяч, HDD — лишь сотни. Для базы данных нужен NVMe.