Linux Check IDE / SATA SSD Hard Disk Transfer Speed

So how do you find out how fast is your hard disk under Linux? Is it running at the SATA I (150 MB/s) or SATA II (300 MB/s) or SATA III (6.0Gb/s) speed without opening computer case or chassis?

You can use the hdparm or dd command to check hard disk speed. It provides a command line interface to various hard disk ioctls supported by the stock Linux ATA/IDE/SATA device driver subsystem. Some options may work correctly only with the latest kernels (make sure you have cutting edge kernel installed). I also recommend compiling hdparm with the included files from the most recent kernel source code.

ADVERTISEMENTS

How to measure hard disk data transfer speed using hdparm

Login as the root user and enter the following command:
$ sudo hdparm -tT /dev/sda
OR
$ sudo hdparm -tT /dev/hda
Sample outputs:

/dev/sda:
 Timing cached reads:   7864 MB in  2.00 seconds = 3935.41 MB/sec
 Timing buffered disk reads:  204 MB in  3.00 seconds =  67.98 MB/sec

For meaningful results, this operation should be repeated 2-3 times. This displays the speed of reading directly from the Linux buffer cache without disk access. This measurement is essentially an indication of the throughput of the processor, cache, and memory of the system under test. Here is a for loop example, to run test 3 time in a row:
for i in 1 2 3; do hdparm -tT /dev/hda; done
Where,

  • -t :perform device read timings
  • -T : perform cache read timings
  • /dev/sda : Hard disk device file

To find out SATA hard disk link speed, enter:
sudo hdparm -I /dev/sda | grep -i speed
Output:

	   *	Gen1 signaling speed (1.5Gb/s)
	   *	Gen2 signaling speed (3.0Gb/s)
	   *	Gen3 signaling speed (6.0Gb/s)

Above output indicate that my hard disk can use 1.5Gb/s, 3.0Gb/s, or 6.0Gb/s speed. Please note that your BIOS / Motherboard must have support for SATA-II/III:
$ dmesg | grep -i sata | grep 'link up'
Linux Check IDE SATA SSD Hard Disk Transfer Speed

dd Command

You can use the dd command as follows to get speed info too:

dd if=/dev/zero of=/tmp/output.img bs=8k count=256k
rm /tmp/output.img

Sample outputs:

262144+0 records in
262144+0 records out
2147483648 bytes (2.1 GB) copied, 23.6472 seconds, 90.8 MB/s

The recommended syntax for the dd command is as follows

dd if=/dev/input.file  of=/path/to/output.file  bs=block-size  count=number-of-blocks  oflag=dsync
 
## GNU dd syntax ##
dd if=/dev/zero of=/tmp/test1.img bs=1G count=1 oflag=dsync
 
## OR alternate syntax for GNU/dd ##
dd if=/dev/zero of=/tmp/testALT.img bs=1G count=1 conv=fdatasync

Sample outputs from the last dd command:

1+0 records in
1+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 4.23889 s, 253 MB/s

Disks & storage – GUI tool

You can also use disk utility located at System > Administration > Disk utility menu. Please note that in latest version of Gnome it is simply called Disks.

How do I test the performance of my hard disk using Disks on Linux?

To test the speed of your hard disk:

  1. Open Disks from the Activities overview (press the Super key on your keyboard and type Disks)
  2. Choose the disk from the list in the left pane
  3. Select the menu button and select Benchmark disk… from the menu
  4. Click Start Benchmark… and adjust the Transfer Rate and Access Time parameters as desired.
  5. Choose Start Benchmarking to test how fast data can be read from the disk. Administrative privileges required. Enter your password

A quick video demo of above procedure:



HTML 5 Video 01: Running Disks on Ubuntu to test SSD read and write speed

Read Only Benchmark (Safe option)

Then, select > Read only:

Fig.01: Linux Benchmarking Hard Disk Read Only Test Speed

Fig.01: Linux Benchmarking Hard Disk Read Only Test Speed

The above option will not destroy any data.

Read and Write Benchmark (All data will be lost so be careful)

Visit System > Administration > Disk utility menu > Click Benchmark > Click Start Read/Write Benchmark button:

Fig.02:Linux Measuring read rate, write rate and access time

Fig.02:Linux Measuring read rate, write rate and access time

🐧 If you liked this page, please support my work on Patreon or with a donation.
🐧 Get the latest tutorials on SysAdmin, Linux/Unix, Open Source & DevOps topics via:
CategoryList of Unix and Linux commands
File Managementcat
FirewallAlpine Awall CentOS 8 OpenSUSE RHEL 8 Ubuntu 16.04 Ubuntu 18.04 Ubuntu 20.04
Network Utilitiesdig host ip nmap
OpenVPNCentOS 7 CentOS 8 Debian 10 Debian 8/9 Ubuntu 18.04 Ubuntu 20.04
Package Managerapk apt
Processes Managementbg chroot cron disown fg jobs killall kill pidof pstree pwdx time
Searchinggrep whereis which
User Informationgroups id lastcomm last lid/libuser-lid logname members users whoami who w
WireGuard VPNAlpine CentOS 8 Debian 10 Firewall Ubuntu 20.04

ADVERTISEMENTS
31 comments… add one
  • Jonas Nov 6, 2007 @ 13:50

    $ sudo hdparm /dev/sda (and following)

    should be
    $ sudo hdparm -tT /dev/sda

    to get the output you show and describe (At least on most distros).

    • Hount Feb 15, 2011 @ 21:02

      “sudo hdparm -I /dev/sda | grep -i speed” does not show actual speeds which your hardware is capable. As it reports SATA and SATAII speeds even on my laptop which does not have a single SATA port.

  • 🐧 nixCraft Nov 6, 2007 @ 14:25

    thanks for the heads up!

  • Shri3772 Mar 1, 2008 @ 5:12

    I am trying to install linus n the machine having SATA Hard Drive .

    Please let me know the URl or the site name where I will find these drivers

  • Shri3772 Mar 1, 2008 @ 5:13

    help me in finding SATA Hard Drive Drivers for Linux

  • nick Nov 8, 2008 @ 0:22

    Thanks for the tip, works great.

  • Pablo May 11, 2009 @ 8:27

    Excellent, very useful tip. Thanks a lot!

  • manolekshmi Jul 24, 2009 @ 9:31

    in serial ata,how fast datatrnsfer?how it is possible?what is the main difference between PATA & SATA.i want deatails about SATA harddisk communication to motherboard

  • santhanaraj.k Aug 19, 2009 @ 5:19

    how can i delete a partition througn a simple command

  • adg Sep 15, 2009 @ 11:57

    Shri3772 ,
    You probably won’t be able to install ‘linus’ on your hard drive.

  • Markus Ewald Sep 24, 2009 @ 5:41

    What about software RAID partitions?
    I’d love to compare my RAID-5 versus a single drive!

  • andrius Sep 25, 2009 @ 7:44

    hdparm -tT /dev/md0

    for raid

  • sanjay Oct 9, 2009 @ 10:07

    How to check the driver version is being used by SATA?

  • M. Preston Jun 14, 2010 @ 23:09

    sudo hdparm -I /dev/sda | grep SATA

    returns nothing.

    • My Name Jul 5, 2010 @ 22:45

      sudo hdparm -I /dev/sda | grep “signaling speed”

      returns something like this:
      * Gen1 signaling speed (1.5Gb/s)

  • mark seger Jul 15, 2010 @ 15:08

    you have to make sure you know what you’re monitoring. this tool looks like it’s measuring the transfer speed to the raw disk which doesn’t really have much value other than to verify your raw speeds are reasonable.

    in reality, your disk has a file system and writing to a formatted disk will always be slowly, sometimes significantly slower depending on whether you’re reading/writing large sequential ones or small one. your blocksize can also make a dig differences. btw – if you’re doing random I/O expect a significant drop in numbers.

    graphics are good to see, and I like them as well, but for simple benchmarking I like to see numbers and collectl makes that real easy to do. some like iostat but the output can be very difficult to read, especially if you’re taking samples every second which IS a good thing to do if you want to see exactly what’s going on.

    -mark

  • dosn Aug 15, 2010 @ 23:57

    Does this work on mounted disks?

  • christian Feb 16, 2011 @ 16:35

    dd command: To get real write speed of your disk add conv=fdatasync to dd command. This will make dd not return before the output is physically written.

    • Stefan Lasiewski Apr 25, 2013 @ 23:41

      This is a great comment. conv=fdatasync shows more realistic speeds. Running dd without this conv will only tell part of the story and a false sense of performance. On a database server or other server with constant disk activity, you want to know the performance *including* including the physical write time.

      For me, running dd without `conv=fdatasync` shows double the write speed.

      • Stefan Lasiewski Apr 25, 2013 @ 23:47

        Although, the option doesn’t exist for FreeBSD, and I don’t see any equivalent options 😛 (‘sync’ means something completely different).

  • duckgrindrr Mar 22, 2011 @ 17:19

    For anyone who might be wondering, the application in the two last screenshots is called palimpsest.

  • Gmaster Jul 10, 2012 @ 1:56

    You asked to login as root and

    $ sudo hdparm -tT /dev/sda

    Would be more pronounced if you change the $ to #

    # sudo hdparm -tT /dev/sda

  • TheBearAk Jul 18, 2012 @ 23:57

    You don’t need sudo if you’re already root.

    • wow Mar 13, 2015 @ 7:01

      no shit sherlock.

  • The Guy Aug 1, 2012 @ 14:47

    What would be considered terrible? I’m trying to figure out why all of my applications (skype, firefox) are running at 100% and am wondering if my HDD is dying. I’m getting results like the following on my laptop
    /dev/sda:
    Timing cached reads: 512 MB in 2.00 seconds = 255.74 MB/sec
    Timing buffered disk reads: 102 MB in 3.05 seconds = 33.41 MB/sec

    …which is /dev/sda:
    Timing cached reads: 6678 MB in 2.00 seconds = 3342.16 MB/sec
    Timing buffered disk reads: 358 MB in 3.01 seconds = 118.94 MB/sec
    much worse then my desktop

  • Rakesh Aug 21, 2012 @ 7:47

    On my Linux server I have attached SATA Hard disk but it showing IDE.
    How I can change it ????

  • Prabhat Aug 22, 2012 @ 7:05

    was really very helpful

  • Jock Strapp Apr 11, 2013 @ 9:39

    boot@catweazel ~ $ sudo hdparm -tT /dev/md0
    [sudo] password for boot:

    /dev/md0:
    Timing cached reads: 24454 MB in 2.00 seconds = 12239.97 MB/sec
    Timing buffered disk reads: 1886 MB in 3.00 seconds = 628.60 MB/sec

    Arf! Arf!

  • Shawn Hicks Nov 26, 2013 @ 17:56

    Script to get sata link speeds and display in readable format.

    #!/bin/sh
    for i in `grep -l Gbps /sys/class/ata_link/*/sata_spd`; do
     echo Link "${i%/*}" Speed `cat $i`
     cat "${i%/*}"/device/dev*/ata_device/dev*/id | perl -nE 's/([0-9a-f]{2})/print chr hex $1/gie' | echo "    " Device `strings` | cut -f 1-3
    done
  • Sepahrad Salour Jan 26, 2015 @ 8:10

    Thanks for your interesting article.

  • Stig Nørgaard Færch May 10, 2016 @ 10:01

    Four years later…

    /dev/sdc:
    Timing cached reads: 24932 MB in 2.00 seconds = 12478.39 MB/sec
    Timing buffered disk reads: 4260 MB in 3.00 seconds = 1419.88 MB/sec

Leave a Reply

Your email address will not be published. Required fields are marked *

Use HTML <pre>...</pre>, <code>...</code> and <kbd>...</kbd> for code samples.