Скорость Диска (Чтения/Записи): Тест HDD, SSD в Linux

Из этой статьи вы узнаете, как проверить производительность файловой системы на таких устройствах, как HDD, SSD, USB Флэшки и т. п.

Я покажу, как произвести тестирование скорости чтения/записи диска из командной строки в Linux с помощью команды dd.

А также, вы узнаете как установить и использовать утилиту hdparm для измерения скорости чтения жесткого диска в Linux Mint, Ubuntu, Debian, CentOS, RHEL.

Берите средний результат: Для определения точной скорости чтения/записи, все приведенные ниже тесты необходимо проводить по несколько раз (обычно 3-5) и брать средний результат.

dd: ТЕСТ Скорости ЗАПИСИ Диска

Выполните следующую команду для определения скорости ЗАПИСИ на накопитель:

$ sync; dd if=/dev/zero of=tempfile bs=1M count=1024; sync
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 3.28696 s, 327 MB/s

dd: ТЕСТ Скорости ЧТЕНИЯ Диска

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

Чтобы получить реальную скорость, необходимо предварительно очистить кэш.

Выполни следующую команду, чтобы узнать скорость ЧТЕНИЯ из буфера:

$ dd if=tempfile of=/dev/null bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 0.159273 s, 6.7 GB/s

Очистите кэш и измерьте реальную СКОРОСТЬ чтения непосредственно с жесткого диска:

$ sudo /sbin/sysctl -w vm.drop_caches=3
vm.drop_caches = 3
$ dd if=tempfile of=/dev/null bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 2.27431 s, 472 MB/s

dd: ТЕСТ Скорость Чтения/Записи Внешнего Накопителя

Дельный Совет: Добавили новый диск в /etc/fstab? Перезагрузка не нужна! Примонтируйте его всего лишь одной командной! Читать далее →

Для проверки производительности какого-либо внешнего HDD, SSD, USB Флэшки либо другого съемного носителя или удаленной файловой системы, просто перейдите в точку монтирования и выполните приведенные выше команды.

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

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

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

hdparm: Проверка Производительности HDD, SSD, USB Флэш Накопителья

hdparm — это утилита для командной строки в Linux, которая позволяет просматривать и менять параметры жестких дисков.

Так же она может использоваться в качестве простой утилиты для сравнительного анализа, которая позволяет быстро узнать скорость ЧТЕНИЯ с диска.

hdparm доступен из стандартных репозиториев в большинстве Linux дистрибутивах.

Установите hdparm, в зависимости от вашего Linux дистрибутива.

Дельный Совет: Решаете проблему производительности жесткого диска? Дополнительно будет хорошей идеей проверить скорость Интернет-канала. Это можно легко сделать из командной строки в Linux! Читать далее →

В Linux Mint, Ubuntu, Debian:

$ sudo apt-get install hdparm

В CentOS, RHEL:

$ sudo yum install hdparm

Запустите hdparm, как показано ниже, для измерения скорости ЧТЕНИЯ с устройства /dev/sda:

$ sudo hdparm -Tt /dev/sda
/dev/sda:
 Timing cached reads:   16924 MB in  2.00 seconds = 8469.95 MB/sec
 Timing buffered disk reads: 1386 MB in  3.00 seconds = 461.50 MB/sec

17 Replies to “Скорость Диска (Чтения/Записи): Тест HDD, SSD в Linux”

  1. Awesome. Thanks.

    williamj@SilverK:~$ sync; dd if=/dev/zero of=tempfile bs=1M count=1024; sync
    1024+0 records in
    1024+0 records out
    1073741824 bytes (1.1 GB, 1.0 GiB) copied, 0.313688 s, 3.4 GB/s
    williamj@SilverK:~$ dd if=tempfile of=/dev/null bs=1M count=1024
    1024+0 records in
    1024+0 records out
    1073741824 bytes (1.1 GB, 1.0 GiB) copied, 0.093416 s, 11.5 GB/s
    williamj@SilverK:~$ sudo /sbin/sysctl -w vm.drop_caches=3
    [sudo] password for williamj: 
    vm.drop_caches = 3
    williamj@SilverK:~$ dd if=tempfile of=/dev/null bs=1M count=1024
    1024+0 records in
    1024+0 records out
    1073741824 bytes (1.1 GB, 1.0 GiB) copied, 0.7639 s, 1.4 GB/s
  2. soooooooooo simple!!!!!…….

  3. Anyone has hdparm version for Android?

  4. «Reminder: All the above commands use the temporary file tempfile. Don’t forget to delete it when you complete the tests.»
    I can not find any place where you instruct as to how to delete the tempfile. How is this done safely?

    1. go to directory where you executed the command, in terminal:
      ««rm tempfile««
      or in a gui select the file and delete it.

  5. I must have done something wrong. I tested first with bs=4k and count=256k.
    It finished quickly.
    Afterwards I decided myself to alter the parameters like so: bs=1M and count=256k
    I didn’t know exactly what I was doing. I left it running not having slightest hunch if it’s wrong to interrupt it via Ctrl-C. It run approximately 1000 seconds having written almost 100GB of all 150GB free on the SSD. Only then I’ve read the man pages searching for clues but still didn’t found. So I have a couple of questions if kindly allowed. That ‘k’ at the end of count I am not sure of it’s meaning or even if it makes sense. I have to also ask what would have happened if the command filled the whole free space? Would it have stopped by itself with message/error? Was it dangereous for an ssd doing this. The fact I performed it from sysresccd on ssd with Windows installed has any effect on outcome?
    I mean the if = is it from the RAM memory? I specified an of= on the ssd after mounting it like /mnt/windows/some.output.file. Is the way I did it significant for the results?

  6. @JON

    > bs=4k and count=256k
    k means what it always means: about 1,000, but in the case of computers (here), usually 1024. «bs» means block size, «count» means number of blocks. So this means write 4k x 256k bytes. 1k x 1k = 1 megabyte (about 1,000 x about 1,000 = about 1,000,000). How many megabytes? Since we already took care of the ‘k’s; 4x 256 = 1024 (aka about 1000, or 1k again.) What’s 1k x 1k x 1k? 1 gigabyte (about 1,000,000,000.) You wrote 1 gigabyte of zeros.

    Therefore,

    > bs=1M and count=256k

    1M = (1k x 1k)
    (1k x 1k) x 1k(the k from «count») = 1 gigabyte
    1 gigabyte x 256 = 256 gigabytes.

    You were writing 256 gigabytes of zeros. Your drive is only 150 gigabytes in size. It won’t hurt your drive, it will just delete everything on your drive. When it fills your drive, it will stop.

    The «if» is not from ram, it is a program (/dev/zero) in your system disguised as a file but whenever it is read is just endless zeros.

  7. How to check sdb drive?
    Should I use /dev/sdb instead of /dev/zero here:
    sync; dd if=/dev/zero of=/media/user/MyUSB/tempfile bs=1M count=1024; sync
    ?

  8. I think you missed the best software package for this kind of tests. It’s called fio:
    https://github.com/axboe/fio/

  9. It’s not accurate. The second sync does not influence the measurement (it’s being run after dd reports the results) and thus it’s influenced by caching. If you try the same test with 4096 or 8192 megs, you’ll have worse results (but closer to the reality).

    One way to correct for this is measuring the whole process with the time command and then doing the division manually. E.g.:
    # time (sync; dd if=/dev/zero of=tempfile bs=1M count=8192; sync)

    You’ll see that dd will report a higher throughput, but you can then divide 8192 with whatever seconds time comes up with.

  10. You need `conv=fdatasync` in your dd commands to include flush and sync time. Otherwise the results will be way too high, as others have mentioned.

  11. /dev/sdb2:
    Timing cached reads: 16830 MB in 1.99 seconds = 8454.99 MB/sec
    Timing buffered disk reads: 434 MB in 3.01 seconds = 144.27 MB/sec

  12. Hello, after doing some tests with different «GB» my storage on NVMe was filled with 7% (56GB), can I delete that storage or stay there permanently?

Добавить комментарий