«NVMe» в тарифе ничего не говорит о том, что реально получит ваш сайт или база данных. Разбираем, чем накопители отличаются на практике, когда это вообще имеет значение, и как парой команд fio проверить скорость диска на своём сервере, а не верить цифрам из рекламы.
В карточке тарифа диск почти всегда описан одним словом - SSD, NVMe, реже просто «быстрый диск». За этим словом может стоять локальный накопитель, воткнутый в тот же физический сервер, или сетевое хранилище, до которого VPS достаёт через ту же сеть, что и десятки соседей. Разница между NVMe и SSD настоящая, но проявляется не везде: на статическом сайте вы её не заметите, на нагруженной базе данных она решает, выдержит сервер пиковую нагрузку или ляжет. Разберём, что там реально отличается, и как парой команд fio проверить не паспортные цифры производителя, а то, что получает лично ваш сервер.
Коротко. NVMe и SSD отличаются от HDD принципиально - у механического диска есть головка, которая физически едет по пластине, и это добавляет миллисекунды на каждую операцию. NVMe отличается от SATA SSD интерфейсом и параллельностью: та же флеш-память внутри, но в разы больше IOPS и на порядок меньше задержка под случайной нагрузкой - базы данных, много мелких файлов, десятки параллельных подключений. На последовательном чтении большого файла или на лёгком сайте разница почти не видна. Слово «NVMe» в тарифе не гарантирует эти цифры лично вам: диск может быть сетевым и разделённым между клиентами. Единственный способ узнать правду про свой сервер - прогнать
fioи посмотреть на реальные IOPS и задержку, а не на маркетинг.
Что отличается: IOPS, задержка, последовательная и случайная нагрузка
Диск для сервера описывают не одной «скоростью», а несколькими вещами сразу.
IOPS (input/output operations per second) - сколько операций чтения или записи диск делает за секунду; обычно это один блок фиксированного размера, например 4 килобайта, а не целый файл. Задержка (latency) - время между запросом такой операции и ответом: у HDD это единицы миллисекунд, у SSD и NVMe - микросекунды, тысячные доли миллисекунды.
Последовательная нагрузка (sequential) - это чтение или запись подряд идущих блоков, как при копировании большого файла или бэкапе. Случайная нагрузка (random) - операции в разных, не связанных местах диска: так ведёт себя база данных с тысячами мелких строк или сайт, параллельно отдающий множество мелких файлов кэша.
На механическом диске случайная нагрузка почти всегда упирается в головку, которой физически нужно доехать до нужной дорожки. На SSD и NVMe данные читаются электрически, без движущихся частей, и случайный доступ там не намного медленнее последовательного - именно здесь разница между типами накопителей заметна сильнее всего.
Когда это важно, а когда почти нет
Практический вопрос не «какой диск быстрее», а где именно вы упрётесь в его скорость. Играет роль для баз данных под активной записью (MySQL, PostgreSQL), для сайтов с массой мелких файлов (кэш-плагины WordPress, тяжёлые сборки ассетов), для очередей сообщений и любых сервисов, которые часто пишут на диск небольшими порциями - это и есть случайная нагрузка, десятки тысяч мелких операций в секунду, где механический диск или медленный SSD физически не успевают. Почти не заметна на статическом сайте, который отдаёт файлы в основном из кэша операционной системы в памяти, на бэкапе, который пишется раз в сутки одним потоком, и там, где диск вообще не узкое место - телеграм-бот скорее упрётся в CPU или лимиты API, чем в диск. Платить за NVMe там, где хватило бы SATA SSD, не ошибка, но лишняя переплата при ограниченном бюджете.
NVMe против SSD против HDD в цифрах
Цифры ниже - типичные диапазоны для самих накопителей по независимым обзорам и документации хранилищ на сентябрь 2026 года, не гарантия для конкретного VPS. Это паспортные характеристики железа - сколько выжимает голый диск в лаборатории. Что реально получит ваш сервер через гипервизор и, возможно, через сеть, покажет только fio, не эта таблица.
Тип диска | Случайный 4К IOPS (сырой накопитель) | Задержка случайного чтения | Где это реально ощущается |
|---|---|---|---|
HDD, 7200 об/мин | ~100-200 | единицы-десятки миллисекунд | почти нигде на активной VPS-нагрузке, годится под архив и холодные бэкапы |
SATA SSD | десятки тысяч, до ~100 000 у верхних моделей | ~0,05-0,2 миллисекунды | сайты, лёгкие базы данных, средняя нагрузка |
NVMe | от сотен тысяч до нескольких миллионов у топовых моделей | ~0,01-0,1 миллисекунды | нагруженные базы данных, много мелких файлов, высокая параллельность запросов |
Разрыв между SATA SSD и NVMe на бумаге выглядит внушительно - в разы по IOPS, на порядок по задержке, но вы упрётесь в него, только если нагрузка действительно случайная и параллельная. А вот разница между HDD и любым SSD - не «в разы», а в сотни-тысячи раз именно на случайном доступе, и это единственная строка таблицы, которую стоит принимать как данность без собственного замера.
Как замерить диск на своём VPS: fio
fio (Flexible I/O Tester) - стандартный инструмент для тестирования дисков в Linux: он создаёт управляемую нагрузку любого паттерна и показывает точные IOPS, пропускную способность и задержку, а не просто «скопировал файл и засёк время на глаз».
Установите пакет - в базовых репозиториях Ubuntu его нет «из коробки» - и создайте отдельную папку под тестовые файлы, чтобы потом одной командой всё убрать:
sudo apt install fio -y
mkdir -p ~/fiotest && cd ~/fiotest
Первый тест - последовательная запись: скорость, с которой диск пишет один большой файл целиком, без прыжков по поверхности, сценарий, близкий к бэкапу или загрузке большого файла.
fio --name=seq-write --filename=testfile --size=1G \
--rw=write --bs=1M --direct=1 --ioengine=libaio \
--numjobs=1 --iodepth=16 --group_reporting
--direct=1- ключевой флаг: запись идёт в обход дискового кэша операционной системы. Без него часть данных фактически осядет в оперативной памяти, и результат покажет скорость RAM, а не диска.--bs=1M- размер блока за одну операцию, типичный для последовательного копирования файлов.--iodepth=16- сколько операций диск держит «в полёте» одновременно; с одним запросом за раз современный NVMe не разгонится до паспортных цифр, ему нужна очередь.--filename- важно, чтобы файл лежал именно на том диске, который вы проверяете, а не в/tmp: на части образов этоtmpfs, то есть оперативная память, и тест тогда измерит скорость RAM. Проверить точку монтирования:df -T /tmp.
fio печатает подробную статистику построчно, но по-настоящему важен только итоговый блок в самом конце. Вот реальный результат этой команды - снят на тестовом сервере во время подготовки статьи (KVM VPS, Ubuntu 24.04, 2 vCPU, обычный виртуальный диск, не выделенный NVMe):
Run status group 0 (all jobs):
WRITE: bw=839MiB/s (879MB/s), io=1024MiB, run=1221msec
Это реальные цифры одного конкретного сервера в конкретный момент, не эталон и не обещание для любого VPS - у вас на своём сервере получатся другие числа, в этом и смысл теста.
Прочитать тот же файл обратно - та же команда с --rw=read вместо --rw=write, остальные флаги без изменений.
Главный тест - случайная нагрузка вперемешку с чтением и записью, которая ближе всего к тому, как база данных отвечает на запросы от нескольких пользователей одновременно:
fio --name=rand-rw --filename=testfile --size=1G \
--rw=randrw --rwmixread=70 --bs=4k --direct=1 \
--ioengine=libaio --numjobs=4 --iodepth=32 \
--runtime=30 --time_based --group_reporting
На том же тестовом сервере итоговый блок этого теста выглядит так:
Run status group 0 (all jobs):
READ: bw=295MiB/s (310MB/s), io=8856MiB, run=30001msec
WRITE: bw=127MiB/s (133MB/s), io=3805MiB, run=30001msec
За кадром этого блока fio также посчитал iops (75,6 тысячи на чтение, 32,5 тысячи на запись) и среднюю задержку clat около 1,2 мс на чтении и 1,1 мс на записи - на четырёх параллельных потоках с глубиной очереди 32 это ровно то «единицы миллисекунд под тяжёлой параллельной нагрузкой», о которых речь в следующем разделе.
--rw=randrw --rwmixread=70- 70% чтения и 30% записи вразнобой по файлу, ближе к типичной базе данных, чем чистое чтение или чистая запись.--bs=4k- блок 4 килобайта, стандартный размер страницы для большинства баз данных и файловых систем, поэтому IOPS меряют именно на нём, не на мегабайтных блоках.--numjobs=4- четыре параллельных процесса одновременно бьют по диску, имитируя несколько подключений вместо одного потока запросов.--runtime=30 --time_based- тест идёт ровно 30 секунд вместо остановки по достижении объёма, так результат усреднённый, а не случайно повезший.
После тестов уберите за собой - тестовый файл занимает целый гигабайт:
cd ~ && rm -rf ~/fiotest
Как читать результат: что нормально, а что тревожный знак
В итоговом блоке смотрите на три числа: bw (пропускная способность, МБ/с), iops и среднюю задержку clat (completion latency). Для случайного 4К-теста это и есть главный результат, для последовательного важнее bw.
- Нормально: средняя задержка на SSD или NVMe держится в десятых долях миллисекунды, под тяжёлой параллельной нагрузкой - в единицах миллисекунд; IOPS в случайном тесте заметно выше, чем у HDD из таблицы выше, обычно на порядок.
- Тревожный знак: средняя задержка на диске, заявленном как SSD или NVMe, регулярно уходит в десятки миллисекунд - это уровень механического диска, и либо диск перегружен другими клиентами, либо перед вами не то, что написано в тарифе.
- Знак, который легко пропустить: fio кроме среднего печатает и процентили - 99-й, 99.9-й. Если среднее выглядит прилично, а 99-й процентиль в разы выше - это не общая медленная скорость, а прерывистые провалы: кто-то ещё на этом хранилище периодически забирает всю пропускную способность. Так на практике выглядит «шумный сосед», даже когда средние цифры в отчётах провайдера в порядке.
Почему «NVMe» в тарифе не гарантирует вам эти цифры
Тип накопителя в описании тарифа - это то, что физически стоит в стойке у провайдера. Он не говорит, как этот накопитель до вас доходит.
Локальный диск физически стоит в том же сервере, что и гипервизор с вашей машиной: путь до данных короткий, через шину PCIe и виртуальный драйвер. Сетевое хранилище (network-attached storage, распределённые системы вроде Ceph и аналогов) физически лежит на других серверах, а VPS обращается к нему через внутреннюю сеть провайдера. Даже с самыми быстрыми NVMe на другом конце к задержке диска добавляется задержка сети и работа программного слоя, раздающего данные множеству клиентов сразу. Два тарифа с одинаковой пометкой «NVMe» могут стоять на совершенно разной архитектуре хранения - со стороны клиента это видно только по факту замера, не по названию в карточке.
Второй фактор - переподписка (oversell): провайдер продаёт объём и скорость диска нескольким клиентам сразу, рассчитывая, что не все упрутся в максимум одновременно. Один сосед с неаккуратным скриптом резервного копирования способен на время просадить IOPS всем, кто делит с ним физический накопитель. Это нормальная экономика хостинга, а не обман, но именно из-за неё одна и та же строчка в тарифе на практике выдаёт разные цифры у разных провайдеров и даже у одного - в разное время суток.
Что проверить перед покупкой и что делать, если диск уже тормозит
Перед покупкой тарифа посмотрите, указан ли тип диска именно на той линейке и локации, которую берёте - иногда он отличается между обычными тарифами и линейками с пометкой «максимальная производительность» на одном и том же сайте. Если у тарифа есть тестовый период, потратьте часть его не только на проверку, что сайт открывается, а на реальный прогон fio - до того, как на сервере появятся ваши данные и трафик.
Если сервер уже работает и вы подозреваете диск - начните не с fio, а с малого. Колонка wa в команде vmstat 1 5 (подробно разобрана в статье про подбор CPU и RAM) показывает долю времени, когда процессор простаивает в ожидании ответа от диска - устойчиво высокое значение здесь первый повод присмотреться к хранилищу. Дальше уточните картину пакетом sysstat:
sudo apt install sysstat -y
iostat -x 1 5
Колонка %util показывает занятость диска за интервал. Задержку в актуальных версиях sysstat (проверено на Ubuntu 24.04, пакет 12.6.1) iostat -x печатает не одной общей колонкой await, а раздельно - r_await и w_await, задержка чтения и записи в миллисекундах со стороны приложения; на более старых версиях sysstat (это ближе к тому, что может стоять на Ubuntu 22.04) объединённая колонка await ещё встречается рядом с раздельными - смотрите на то, что реально выводит команда на вашем сервере, а не на конкретное имя колонки. Если оба показателя, %util и await-колонки, стабильно высокие именно тогда, когда сайт или база тормозят - есть основание запускать fio прицельно, в подтверждение диагноза, а не наугад. Делайте это в окно с наименьшим трафиком: fio сам создаёт дополнительную нагрузку и может на время замедлить работающие сервисы.
Если у сервера не KVM, а OpenVZ или похожая контейнерная виртуализация, показания диска и памяти могут быть менее однозначными по причинам из статьи KVM или OpenVZ - там же объясняется, почему на контейнерной виртуализации выше и общий риск шумного соседа, не только по диску.
Частые вопросы
В чём разница между NVMe и SSD на VPS?
Оба - твердотельные накопители без движущихся частей, но NVMe использует более быстрый интерфейс и обрабатывает намного больше параллельных операций одновременно. Разница проявляется на случайной нагрузке с высокой параллельностью - нагруженной базе данных, множестве мелких файлов; на лёгком сайте или последовательном чтении большого файла она на глаз незаметна.
Что такое IOPS и задержка диска простыми словами?
IOPS - количество операций чтения или записи, которые диск успевает сделать за секунду. Задержка - время ожидания ответа на одну такую операцию. Высокий IOPS и низкая задержка вместе означают, что диск быстро обрабатывает много мелких запросов одновременно - критично для баз данных и почти неважно для статического сайта.
Как проверить скорость диска на VPS через fio?
Установите пакет командой sudo apt install fio -y, прогоните последовательный тест записи и чтения с флагом --direct=1 (чтобы не мерить кэш вместо диска), а затем тест случайного чтения-записи блоками по 4 килобайта с несколькими параллельными потоками - он ближе всего имитирует реальную базу данных. Итоговые bw, iops и средняя задержка в конце вывода и есть ответ на вопрос, что реально выдаёт диск.
Нужен ли NVMe для обычного сайта или блога?
Как правило, нет. Небольшой сайт отдаёт файлы в основном из кэша операционной системы в памяти, а не с диска напрямую, и упирается в диск в последнюю очередь. NVMe становится заметен, когда на сервере активно работает база данных, много одновременных посетителей или сервис с интенсивной случайной записью.
Почему диск на VPS может работать медленнее, чем заявлено в тарифе?
Причины две: «NVMe» в описании может относиться к сетевому хранилищу, где к скорости накопителя добавляется задержка внутренней сети провайдера, и переподписка - когда несколько клиентов делят один физический накопитель, и активность соседа временно снижает доступную вам скорость. Проверить реальную картину можно только замером через fio на своём сервере, а не по названию в карточке тарифа.
Что такое сетевое хранилище и чем оно отличается от локального NVMe?
Локальный NVMe физически установлен в том же сервере, где работает ваша виртуальная машина, и путь до данных короткий. Сетевое хранилище физически лежит на других серверах провайдера, а VPS обращается к нему через внутреннюю сеть - даже на быстрых накопителях это добавляет задержку сети и зависимость от того, сколько других клиентов обращается к тому же хранилищу одновременно.
Коротко
- NVMe и SSD - твердотельные накопители без движущихся частей; HDD - механический и на случайной нагрузке уступает им не в разы, а в сотни-тысячи раз.
- Разница между NVMe и SATA SSD - в разы по IOPS и на порядок по задержке - видна на случайной, параллельной нагрузке: базах данных, множестве мелких файлов. На статике и последовательном чтении она почти незаметна.
fio- стандартный инструмент для честного замера; ключевой флаг--direct=1обходит кэш ОС, иначе тест меряет скорость оперативной памяти, а не диска.- В итоговом отчёте fio смотрите на bw, iops и среднюю задержку - а для скрытых проблем ещё и на 99-й процентиль: большой разрыв со средним значением выдаёт «шумного соседа», даже если средние цифры выглядят нормально.
- Слово «NVMe» в тарифе не говорит, локальный это диск или сетевое хранилище с накладными расходами на сеть - выяснить можно только замером на своём сервере.
- Если сервер уже тормозит - начните с колонки
waвvmstat 1 5и сiostat -x 1 5, и только потом переходите к прицельному тесту fio.
Что дальше
Общий порядок выбора сервера, включая диск, ядра и память, разобран в пилар-статье как выбрать VPS. Если сомневаетесь, хватает ли серверу CPU и RAM, а не только диска - смотрите статью сколько CPU и RAM нужно серверу. А про то, как тип виртуализации влияет на риск шумного соседа и предсказуемость ресурсов в целом - в статье KVM или OpenVZ.
