- Disk Speed Test (Read/Write): HDD, SSD Performance in Linux
- dd: TEST Disk WRITE Speed
- dd: TEST Disk READ Speed
- dd: TEST Read/Write Speed of an External Drive
- hdparm: Test HDD, SSD, USB Flash Drive’s Performance
- 18 Replies to “Disk Speed Test (Read/Write): HDD, SSD Performance in Linux”
- How to Benchmark Hard Disks in Linux
- GNOME Disks
- Hdparm
- DD
- Sysbench
- Sysstat
- Iotop
- Conclusion
- About the author
- Nitesh Kumar
Disk Speed Test (Read/Write): HDD, SSD Performance in Linux
From this article you’ll learn how to measure an input/output performance of a file system on such devices as HDD, SSD, USB Flash Drive etc.
I’ll show how to test the read/write speed of a disk from the Linux command line using dd command.
I’ll also show how to install and use hdparm utility for measuring read speed of a disk on Linux Mint, Ubuntu, Debian, CentOS, RHEL.
To get the accurate read/write speed, you should repeat the below tests several times (usually 3-5) and take the average result.
Cool Tip: How to choose SSD with the best quality/price relation! Read more →
dd: TEST Disk WRITE Speed
Run the following command to test the WRITE speed of a disk:
$ 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: TEST Disk READ Speed
The file tempfile , that has just been created by the previous command, was cached in a buffer and its read speed is much higher then the real read speed directly from the disk.
To get the real speed, we have to clear cache.
Run the following command to find out the READ speed from buffer:
$ 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
Clear the cache and accurately measure the real READ speed directly from the disk:
$ 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: TEST Read/Write Speed of an External Drive
Cool Tip: Have added a new drive to /etc/fstab ? No need to reboot! Mount it with one command! Read more →
To check the performance of some External HDD, SSD, USB Flash Drive or any other removable device or remote file-system, simply access the mount point and repeat the above commands.
Or you can replace tempfile with the path to your mount point e.g.:
$ sync; dd if=/dev/zero of=/media/user/MyUSB/tempfile bs=1M count=1024; sync
Reminder: All the above commands use the temporary file tempfile . Don’t forget to delete it when you complete the tests.
hdparm: Test HDD, SSD, USB Flash Drive’s Performance
hdparm is a Linux command line utility that allows to set and view hardware parameters of hard disk drives.
And it can also be used as a simple benchmarking tool that allows to quickly find out the READ speed of a disk.
hdparm is available from standard repositories on the most Linux distributions.
Install hdparm depending on your Linux distribution.
Cool Tip: Troubleshooting an issue with a hard drive performance? It will be a good idea also to test download/upload Internet speed. It can be easily done from the Linux command line! Read more →
On Linux Mint, Ubuntu, Debian:
$ sudo apt-get install hdparm
On CentOS, RHEL:
Run hdparm as follows, to measure the READ speed of a storage drive device /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
18 Replies to “Disk Speed Test (Read/Write): HDD, SSD Performance in Linux”
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
“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?
go to directory where you executed the command, in terminal:
““rm tempfile““
or in a gui select the file and delete it.
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?
@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.
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
?
I think you missed the best software package for this kind of tests. It’s called fio:
https://github.com/axboe/fio/
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.
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.
/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
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?
How to Benchmark Hard Disks in Linux
Monitoring read and write speeds of storage devices is a good way to determine genuine products and determine disk health overtime. This article will list various tools available for Linux that can be used to benchmark hard disks and monitor real time disk activity data.
GNOME Disks
GNOME Disks is an internal and external disk management tool for Linux. Based on udisks, it can be used to modify, format, and partition drives as well as to perform benchmarks on any storage media connected to the system.
GNOME Disks comes pre-installed on most distribution having a GNOME based desktop environment. In case if it missing on your Ubuntu system, you can install it by running the command below:
To perform a hard disk benchmark using GNOME Disks, launch “Disks” app from application launcher.
Click on three dot menu and then click on “Benchmark Disk…” option.
Click on “Start Benchmark…” button on the next window.
Change the options as required. Note that the benchmark utility won’t allow you to do write benchmarks on mounted disks. So in order to perform a full read-write benchmark on built-in disk, you have to launch GNOME Disks in a live USB mode and unmount the built-in storage drive. Click on “Start Benchmarking…” button to start the benchmarking process.
The benchmarking process will take some to finish depending on the number of samples you have chosen. Once the process has finished, you will be able to see read / write speed results.
You need to compare these results with the vendor advertised read / write values to gauge the efficiency.
Hdparm
Hdparm is a simple command line app for Linux that allows you to manage storage devices by setting and removing parameters. It also includes an option to test read speeds of storage devices.
To install hdparm in Ubuntu, run the command below:
To run a hard disk benchmark using Hdparm, use the command below:
Replace “/dev/sda” part with the address of your hard drive. You can check the path using the GNOME Disks app mentioned above or by running the command below:
Once the benchmark has finished running, you will see test results as terminal output.
DD
Data Duplicator or simply ‘dd’ is a command line utility for Linux that allows you to copy and convert files and data. It is capable of copying large chunks of data, cloning entire hard disks, creating bootable USB drives and so on.
It is possible to check hard disk write speed using dd. Run the commands below in order to perform a write speed benchmark.
$ mkdir benchmark
$ cd benchmark
$ dd if = / dev / zero of =benchfile bs =4k count = 200000 && sync ; rm benchfile
Wait for the test to finish, results will be shown in terminal once done.
To perform a read test using dd, run the command below:
This command will continue to run until stopped, so press after a few seconds to see the results.
Sysbench
Sysbench is a multi purpose benchmark utility for Linux. Some of the benchmark options provided by Sysbench include a CPU stress test, memory access speed test, and filesystem input output performance test.
To install sysbench in Ubuntu, run the command below:
To perform a hard disk benchmark using sysbench, run the commands below one by one:
$ mkdir benchmark
$ cd benchmark
$ sysbench fileio prepare
$ sysbench fileio —file-test-mode =rndrw run
Wait for the test to finish. Once done, you will see the results as terminal output.
To remove the test files from benchmark directory, run the command below:
You can use “Throughput” statistics as the performance indicator.
Sysstat
Sysstat is a command line performance monitoring app for Linux. It can monitor input output operations, memory consumption, resource usage by running system processes, network activity etc. and show real time statistics about them.
To install Sysstat in Ubuntu, run the command below:
To monitor performance of hard disk, you can use “iostat” command included in Sysstat. Though it doesn’t include an option to perform benchmark, it can show real time data about disk read and write activity.
To see disk read and write speeds every second, run the command below:
Iotop
Iotop is a “top” tool for monitoring disk reads and writes. It shows data in a tabular form, similar to what top or htop does for displaying resource consumption. It works similar to iostat utility mentioned above and it is not exactly a benchmark tool. However, it can display real time disk activity statistics, making it suitable for monitoring large data operations.
To install Iotop in Ubuntu, run the command below:
Run the command below, to launch iotop:
Conclusion
These are some of the methods that can be used to benchmark hard disks and determine their read and write speeds. There is no denying that some counterfeit and falsely advertised products are available today in market, especially flash storage products. The only way to determine their efficiency is to benchmark them and compare the results with advertised speeds.
About the author
Nitesh Kumar
I am a freelancer software developer and content writer who loves Linux, open source software and the free software community.