Ubuntu проверить скорость диска. Как измерить скорость жесткого диска

It requires reading the manual (man fio) but it will give you accurate results. Note that for any accuracy, you need to specify exactly what you want to measure. Some examples:

Sequential READ speed with big blocks

Fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=read --size=500m --io_size=10g --blocksize=1024k --ioengine=libaio --fsync=10000 --iodepth=32 --direct=1 --numjobs=1 --runtime=60 --group_reporting

Sequential WRITE speed with big blocks (this should be near the number you see in the specifications for your drive):

Fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=write --size=500m --io_size=10g --blocksize=1024k --ioengine=libaio --fsync=10000 --iodepth=32 --direct=1 --numjobs=1 --runtime=60 --group_reporting

Random 4K read QD1 (this is the number that really matters for real world performance unless you know better for sure):

Fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=randread --size=500m --io_size=10g --blocksize=4k --ioengine=libaio --fsync=1 --iodepth=1 --direct=1 --numjobs=1 --runtime=60 --group_reporting

Mixed random 4K read and write QD1 with sync (this is worst case number you should ever expect from your drive, usually less than 1% of the numbers listed in the spec sheet):

Fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=randrw --size=500m --io_size=10g --blocksize=4k --ioengine=libaio --fsync=1 --iodepth=1 --direct=1 --numjobs=1 --runtime=60 --group_reporting

Increase the --size argument to increase the file size. Using bigger files may reduce the numbers you get depending on drive technology and firmware. Small files will give "too good" results for rotational media because the read head does not need to move that much. If your device is near empty, using file big enough to almost fill the drive will get you the worst case behavior for each test. In case of SSD, the file size does not matter that much.

However, note that for some storage media the size of the file is not as important as total bytes written during short time period. For example, some SSDs may have significantly faster performance with pre-erased blocks or it might have small SLC flash area that"s used as write cache and the performance changes once SLC cache is full. As an another example, Seagate SMR HDDs have about 20 GB PMR cache area that has pretty high performance but once it gets full, writing directly to SMR area may cut the performance to 10% from the original. And the only way to see this performance degration is to first write 20+ GB as fast as possible. Of course, this all depends on your workload: if your write access is bursty with longish delays that allow the device to clean the internal cache, shorter test sequences will reflect your real world performance better. If you need to do lots of IO, you need to increase both --io_size and --runtime parameters. Note that some media (e.g. most flash devices) will get extra wear from such testing. In my opinion, if any device is poor enough not to handle this kind of testing, it should not be used to hold any valueable data in any case.

In addition, some high quality SSD devices may have even more intelligent wear leveling algorithms where internal SLC cache has enough smarts to replace data in place that is being re-written during the test if it hits the same address space (that is, test file is smaller than total SLC cache). For such devices, the file size starts to matter again. If you need your actual workload it"s best to test with file sizes that you"ll actually see in real life. Otherwise your numbers may look too good.

Note that fio will create the required temporary file on first run. It will be filled with random data to avoid getting too good numbers from devices that cheat by compressing the data before writing it to permanent storage. The temporary file will be called fio-tempfile.dat in above examples and stored in current working directory. So you should first change to directory that is mounted on the device you want to test.

If you have a good SSD and want to see even higher numbers, increase --numjobs above. That defines the concurrency for the reads and writes. The above examples all have numjobs set to 1 so the test is about single threaded process reading and writing (possibly with a queue set with iodepth). High end SSDs (e.g. Intel Optane) should get high numbers even without increasing numjobs a lot (e.g. 4 should be enough to get the highest spec numbers) but some "Enterprise" SSDs require going to 32 - 128 to get the spec numbers because the internal latency of those devices is higher but the overall throughput is insane.

Чтобы определить скорость записи на диск, необходимо выполнить следующую команду в консоли:

Sync; dd if=/dev/zero of=tempfile bs=1M count=1024; sync

Команда записывает временный файл размером в 1мб 1024 раза и результат ее работы будет вывод таких данных

1024+0 записей получено 1024+0 записей отправлено скопировано 1073741824 байта (1,1 GB), 15,4992 c, 69,3 MB/c

Чтобы определить скорость чтения с диска, необходимо выполнить следующую команду в консоли:

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

Для определения скорости чтения с диска с буфера, нужно выполнить следующую команду в консоли:

Dd if=tempfile of=/dev/null bs=1M count=1024

Вывод предыдущей команды:

1024+0 записей получено 1024+0 записей отправлено скопировано 1073741824 байта (1,1 GB), 15,446 c, 69,5 MB/c

Чтобы измерить реальную скорость чтения с диска очищаем кеш:

Sudo /sbin/sysctl -w vm.drop_caches=3

Вывод команды:

Vm.drop_caches = 3

Производим тест скорости чтения после очистки кеша:

Dd if=tempfile of=/dev/null bs=1M count=1024 1024+0 записей получено 1024+0 записей отправлено скопировано 1073741824 байта (1,1 GB), 16,5786 c, 64,8 MB/c

Выполнение теста скорости чтения/записи на внешнем накопителе

Для тестирования скорости какого-либо Внешнего HDD, USB Флэшки либо иного съемного носителя либо файловой системы удаленной машины(vps/vds), необходимо перейти в точку монтирования и выполнить приведенные выше команды.

Либо, вместо tempfile, можно конечно же прописать путь к точке монтирования, как приведено ниже:

Sync; dd if=/dev/zero of=/media/user/USBFlash/tempfile bs=1M count=1024; sync

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

Тест скорости HDD при помощи утилиты hdparm

hdparm — это Linux утилита, которая позволяет быстро узнать скорость чтения с вашего hdd.

Для запуска измерения скорости чтения с вашего жесткого диска необходимо выполнить следующую команду в консоли:

Sudo hdparm -Tt /dev/sda

Вывод команды в консоли:

/dev/sda: Timing cached reads: 6630 MB in 2.00 seconds = 3315.66 MB/sec Timing buffered disk reads: 236 MB in 3.02 seconds = 78.17 MB/sec

На этом все. Таким образом мы смогли узнать производительность нашего жесткого диска и дать примерную оценку его возможностям.

Сейчас ударными темпами идет модернизация дисковых подсистем практически у любых хостеров. Твердотельные накопители стали существенным рывком в улучшении производительности компьютерного и в том числе серверного оборудования. Дело в том, что диск уже много лет был узким местом, что называется «слабым звеном», в производительности любых информационных систем. Другими словами все остальные составляющие — процессор, оперативная память, системные шины и даже сеть — все уже давно сильно быстрее и производительнее накопителей. SSD дает прирост производительности любого устройства примерно в 3-5 раз. Это значит любые приложения будут запускаться в несколько раз быстрее, иногда даже в десятки раз быстрее.

Итак, хостер предлагает вам две тарифные линейки — SSD и не_SSD. Вы, конечно же, берете SSD. Но как убедиться в том, что хостер выдал действительно SSD? Ведь для работы сайта нет никакой разницы — у вас все будет работать на хостинге с любым диском. То есть, теоретически хостер может вам объявить, что у него серверы на быстрых твердотельных дисках. А на деле продавать мощности на обычных традиционных HDD. И вы, скорее всего, даже не узнаете об этом.

Ведь SSD гораздо дороже обычных дисков. А у хостеров мощности ведь серьезные, им нужно терабайты данных хранить. Представляете, сколько такие системы могут стоить, учитывая, что 1 Гб твердотельного накопителя в примерно в 10 раз дороже 1 Гб обычного диска?

Что такое SSD-boost или flashcache?

Вообще, есть гибридная система. Когда используют связку SSD + HDD. При этом, все данные хранятся на традицонных больших дисках. Есть специальный софт, который настраивает эти диски в особый хитрый массив, где SSD выступает как бы кэшем для любых данных, которые записываются или считываются. В таком массиве мы имеем небольшой SSD, допустим на 120 Гб и за ним большой HDD, на 2 Tb. Такая связка дает скорость чтения/записи как у SSD, но объем, как у HDD. Вот такие дела. При этом, хостер спокойно может вам сказать, что у него все на SSD. Честные хостеры называют это SSD-boost. На работе сайтов это никак негативно не отражается.

Я проверял скорость дисков у десятков различных хостеров. Вы удивитесь, но только 1 из 5 хостеров дает «честный» SSD.

Такие вещи фиксирую скриншотами.

Тесты фейковых SSD некоторых хостеров

Хостер №1

Здесь мы видим всего 30 Мб/с на запись. Это нормальная скорость для обычного HDD. Но у хостера он объявлен как SSD.

Хостер №2

Аналогичная картина. Но скорость чтения уже получше немного. Возможно это случай с flashcache, но очень перегруженный. А скорее всего просто raid массив из обычных HDD. Можно их собирать таким образом, что увеличивается в 1,5-2 раза производительность на чтение.

Хостер №3

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

Хостер №4

Здесь вообще веселая история. Делал клиенту аудит сервера, были жалобы на тормоза. Дай, думаю, проверю диск.

Вот такая картина. Пишу клиенту так и так — хостер вас нагло обманывает. Клиент бегом в саппорт — оказывается действительно. Клиенту «забыли» включить SSD при переходе когда-то там с тарифа на тариф, понимаете? Переключают, тестируем снова и видим как появился настоящий SSD.

Тесты реальных SSD

Теперь, чтобы понимать разницу, я покажу вам скриншоты тестов действительно SSD.

Вот так это выглядит. Скорость записи свыше 100 Mb/s должна быть. Это минимум для SSD. Это тест с моего рабочего ноутбука, на котором я сейчас пишу этот пост. В нем стоит самый дешевый SSD на 120 Gb. Как видите, скорость работы у него в 4-5 раз быстрее чем у традиционного диска.

А вот тест хостера, который предоставляет реальный SSD.

Вот здесь уж точно настоящий SSD. Вот таким оно и должно быть. Возможно настроен буст, но таки это SSD и жить с этим хостером можно.

Как сделать тест скорости диска у хостера?

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

Итак, для теста записи следует взять поток нулей из специального устройства /dev/zero и направить его в файл, на тестеруемом диске. Любой произвольный файл. Например в папку временных файлов /tmp/test.img

Dd if=/dev/zero of=/tmp/test.img bs=1M count=1024 oflag=dsync

Такая команда создаст файл в 1 Гб размером и выведет скорость записи.

Сразу же можно проверить и скорость чтения, только здесь опция if должна указывать на созданный файл, а of куда нибудь в пустоту. В линуксах есть такое устройство /dev/null , в него и направим:

Dd if=/tmp/test.img of=/dev/null bs=1M count=1024

Но перед этим, нужно сбросить дисковый кэш, иначе файл будет считан за секунду, а вам выведется скорость чтения в Gb/s. Это делается такой командой:

Sysctl vm.drop_caches=3

После чего проводим тест чтения второй командой.

Ну и по окончанию нужно удалить тестовый файл, дабы не занимал место:

Rm -f /tmp/test.img

Это все сработает только на выделенном сервере или VPS. Причем, не на всяком VPS. Поскольку они различаются еще и по технологии виртуализации. Многие хостеры дают не полноценную виртуализацию (KVM, XEN) а контейнеры (openVZ). Здесь нет доступа к параметрам ядра, а значит не получится сбросить кэш. Придется читать и писать в разные файлы, либо перед тестом чтения подождать несколько часов, пока дисковый кэш перезапишется другими данными. Также довольно сложно проверить скорость на виртуальном (shared) хостинге, поскольку вы не имеете там root доступа. Но утилита dd обычно доступна любому системному пользователю, поэтому можно проверить и на нём, имея доступ по SSH.

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

Чтобы избежать таких проблем можно использовать smartmontools. Это программный пакет для управления и мониторинга устройств хранения данных с помощью технологии Self-Monitoring Analysis and Reporting Technology или просто SMART.

Большинство современных ATA / SATA, SCSI / SAS накопителей информации предоставляют интерфейс SMART. Цель SMART - мониторинг надежности жесткого диска, для выявления различных ошибок и своевременного реагирования на их появление. Smartmontools состоит из двух утилит - smartctl и smartd. Вместе они представляют мощную систему мониторинга и предупреждения о возможных поломках HDD в Linux. Дальше будет подробно рассмотрена проверка жесткого диска linux.

Пакет smartmontools есть в официальных репозиториях большинства дистрибутивов Linux, поэтому установка сводится к выполнению одной команды. В Debian и основанных на нем системах выполните:

aptitude install smartmontools

А для Red Hat:

yum install smartmontools

Теперь можно переходить к диагностике жесткого диска linux.

Проверка жесткого диска в smartctl

Сначала узнайте какие жесткие диски подключены к вашей системе:

ls -l /dev | grep -E "sd|hd"

В выводе будет что-то подобное:

Здесь - sdx - имя устройства HDD подключенного к компьютеру.

Для отображения информации о конкретном жестком диске (модель устройства, S/N, версия прошивки, версия ATA, доступность интерфейса SMART) Запустите smartctl с опцией info и именем жесткого диска. Например, для /dev/sda:

smartctl --info /dev/sda

Хотя вы можете и не обратить внимание на версию ATA, это один из самых важных факторов при поиске замены устройству. Каждая новая версия ATA совместима с предыдущими. Например, старые устройства ATA-1 и ATA-2 прекрасно будут работать на ATA-6 и ATA-7 интерфейсах, но не наоборот. Когда версии ATA устройства и интерфейса не совпадают, возможности оборудования не будут полностью раскрыты. В данном случае для замены лучше всего выбрать жесткий диск ATA-7.

Запустить проверку жесткого диска ubuntu можно командой:

smartctl -s on -a /dev/sda

Здесь опция -s включает флаг SMART на указном устройстве. Вы можете его убрать если поддержка SMART уже включена. Информация о диске разделена на несколько разделов, В разделе READ SMART DATA находится общая информация о здоровье жесткого диска.

START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment rest result: PASSED

Этот тест может быть пройден (PASSED ) или нет (FAILED ). В последнем случае сбой неизбежен, начинайте резервное копирование данных с этого диска.

Следующая вещь которую можно посмотреть, когда нужна диагностика HDD в linux, это таблица SMART атрибутов.

В SMART таблице записаны параметры, определенные для конкретного диска разработчиком, а также порог отказа для этих параметров. Таблица заполняется автоматически и обновляется на основе прошивки диска.

  • ID # - ID атрибута, как правило, десятичное число между 1 и 255;
  • ATTRIBUTE_NAME - Название атрибута;
  • FLAG - флаг обработки атрибута;
  • VALUE - это поле представляет нормальное значение для состояния данного атрибута в диапазоне от 1 до 253, 253 - лучшее состояние, 1 - худшее. В зависимости от свойств, начальное значение может быть от 100 до 200;
  • WORST - худшее значение value за все время;
  • THRESH - самое низкое значение value, после перехода за которое нужно сообщить что диск непригоден для эксплуатации;
  • TYPE - тип атрибута, может быть Pre-fail или Old_age. Все атрибуты по умолчанию считаются критическими, то-есть если диск не прошел проверку по одному из атрибутов, то он уже считается не пригодным (FAILED) но атрибуты old_age не критичны;
  • UPDATED - показывает частоту обновления атрибута;
  • WHEN_FAILED - будет установлено в FAILING_NOW если значение атрибута меньше или равно THRESH, или в "-" если выше. В случае FAILING_NOW, лучше как можно скорее выполнить резервное копирование, особенно если тип атрибута Pre-fail.
  • RAW_VALUE - значение, определенное производителем.

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

Настройка smartd и smartctl для диагностики и мониторинга в реальном времени

Диагностика hdd в linux в реальном времени настраивается очень просто. Сначала отредактируйте файл конфигурации smartd - /etc/smartd.conf. Добавьте следующую строку:

nano /etc/smartd.conf

/dev/sda -m [email protected] -M test

  • -m - адрес электронной почты для отправки результатов проверки. Это может быть адрес локального пользователя, суперпользователя или внешний адрес, если настроен сервер для отправки электронной почты;
  • -M - частота отправки писем. once - отправлять только одно сообщение о проблемах с диском. daily - отправлять сообщения каждый день если была обнаружена проблема. diminishing - отправлять сообщения через день если была обнаружена проблема. test - отправлять тестовое сообщение при запуске smartd. exec - выполняет указанную программу в место отправки почты.

Сохраните изменения и перезапустите smartd. Вы должны получить на электронную почту письмо подобного содержания:

Также можно запланировать тесты по своему графику, для этого используйте опцию -s и регулярное выражение типа "T/MM/ДД/ДН/ЧЧ", где:

  • T - тип теста:
  • L - длинный тест;
  • S - короткий тест;
  • C - тест перемещение (ATA);
  • O - оффлайн (тест).

Остальные символы определяют дату и время теста:

  • ММ - месяц в году;
  • ДД - день месяца;
  • ЧЧ - час дня;
  • ДН - день недели (от 1 - понедельник 7 - воскресенье;
  • MM, ДД и ЧЧ - указываются с двух десятичных цифр.

Точка означает все возможные значения, выражение в скобках (A|B|C) - означает один из трех вариантов, выражение в квадратных скобках означает диапазон (от 1 до 5).

Например, чтобы выполнять полную проверку жесткого диска linux каждый рабочий день в час дня добавьте следующую строку в smartd.conf:

DEVICESCAN -s (L /../../ / 13)

Выводы

Если вы хотите быстро проверить механическую работу жесткого диска, посмотреть его физическое состояние или выполнить более-менее полное сканирование поверхности диска используйте smartmontools. Не забывайте выполнять регулярное сканирование, потом будете себя благодарить. Вы уже делали это раньше? Будете делать? Или используете другие методы? Напишите в комментариях!

Источник перевода.

Поделиться