Linux Command To Find SATA Link Speed Such as 1.5 / 3.0 / 6.0 Gbps [ Hard Disk ]

by on September 4, 2012 · 13 comments· LAST UPDATED May 30, 2014

in , ,

How do I find out my SATA link speed? How do I make sure my sata hard disk is working at 6Gbps speed and how do I verify this on a Linux server running on HP or IBM amd64 hardware?

You need to go through the dmesg command output or a log file called /var/log/messages. You can also use smartctl command to find out information about hard disk and current link speed on Linux based system.
Tutorial details
DifficultyEasy (rss)
Root privilegesYes
RequirementsNone
Estimated completion time2m

dmesg command examples

Open the Terminal or login using ssh command and than type the following command:

 
dmesg | grep -i sata | grep 'link up'
 

Sample outputs:

[   18.120000] ata1: SATA link up 3.0 Gbps (SStatus 123 SControl F300)
[   39.530000] ata2: SATA link up 3.0 Gbps (SStatus 123 SControl F300)

Here is another example:

 
dmesg | grep -i --color ahci
dmesg | grep -i  ahci | grep -i --color Gbps
 

Sample outputs:

[    1.161418] ahci 0000:00:11.0: version 3.0
[    1.161713] ahci 0000:00:11.0: irq 72 for MSI/MSI-X
[    1.161776] ahci 0000:00:11.0: AHCI 0001.0300 32 slots 1 ports 6 Gbps 0x1 impl SATA mode
[    1.161783] ahci 0000:00:11.0: flags: 64bit ncq sntf ilck pm led clo pmp fbs pio slum part
[    1.162116] scsi0 : ahci

You can find same info using /var/log/messages:
# grep -i SATA /var/log/messages | grep --color -i 'link up'
Sample outputs:

Sep  2 14:56:50 wks01 kernel: [25518.962661] ata2: SATA link up 1.5 Gbps (SStatus 113 SControl 300)
Sep  2 14:56:50 wks01 kernel: [25520.158303] ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
Sep  2 14:56:50 wks01 kernel: [25521.117722] ata3: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
Sep  2 22:09:06 wks01 kernel: [    3.451270] ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
Sep  2 22:09:06 wks01 kernel: [    3.823019] ata2: SATA link up 1.5 Gbps (SStatus 113 SControl 300)
Sep  2 22:09:06 wks01 kernel: [    4.154815] ata3: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
Sep  3 04:14:11 wks01 kernel: [    3.486897] ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
Sep  3 04:14:11 wks01 kernel: [    3.858745] ata2: SATA link up 1.5 Gbps (SStatus 113 SControl 300)
Sep  3 04:14:11 wks01 kernel: [    4.186682] ata3: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
Sep  3 09:17:10 wks01 kernel: [    3.538938] ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
Sep  3 09:17:10 wks01 kernel: [    3.906824] ata2: SATA link up 1.5 Gbps (SStatus 113 SControl 300)
Sep  3 09:17:10 wks01 kernel: [    4.234739] ata3: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
Sep  4 04:13:33 wks01 kernel: [    3.510810] ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
Sep  4 04:13:33 wks01 kernel: [    3.878764] ata2: SATA link up 1.5 Gbps (SStatus 113 SControl 300)
Sep  4 04:13:33 wks01 kernel: [    4.206646] ata3: SATA link up 3.0 Gbps (SStatus 123 SControl 300)

smartctl command example

Type the following command as root user:

 
smartctl -a /dev/DEVICE-NAME-HERE
smartctl -a /dev/sda | grep "^SATA"
smartctl -a /dev/sda
 

Sample outputs:

smartctl 6.2 2013-07-26 r3841 [x86_64-linux-3.11.10-301.fc20.x86_64] (local build)
Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org
=== START OF INFORMATION SECTION ===
Model Family:     Hitachi/HGST Travelstar Z7K500
Device Model:     HGST HTS725050A7E630
Serial Number:    REMOVED
LU WWN Device Id: 5 000cca 77edc5bc0
Firmware Version: GH2ZB550
User Capacity:    500,107,862,016 bytes [500 GB]
Sector Sizes:     512 bytes logical, 4096 bytes physical
Rotation Rate:    7200 rpm
Device is:        In smartctl database [for details use: -P show]
ATA Version is:   ATA8-ACS T13/1699-D revision 6
SATA Version is:  SATA 2.6, 6.0 Gb/s (current: 6.0 Gb/s)
Local Time is:    Sat May 31 02:49:23 2014 IST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled
=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED
TwitterFacebookGoogle+PDF versionFound an error/typo on this page? Help us!

{ 13 comments… read them below or add one }

1 ashwani September 5, 2012 at 12:35 am

Hi,

How to know speed of my external usb HDD is there any specific command?

thanks

Reply

2 Balachander Ganesan September 5, 2012 at 6:05 am

Ashwani the most reliable method is to copy a big file say 4GB or so.
From your system to external HDD and check iostat.
However, your internal HDD should be fast enough and system shouldn’t be loaded.
I trust this method :)

Reply

3 Petrinko Philippe September 5, 2012 at 8:50 am

Interesting, but then, I would like to know more:
- How to you toggle to higher bit rate when/if possible?
- How do you link these message to your drives? For instance, you have here “ata3″ link, how does this links to any /dev/sd.. ?
TIA,
– P

Reply

4 nixCraft September 6, 2012 at 12:02 am

How to you toggle to higher bit rate when/if possible?

You need to pass boot time kernel parameters using grub. Search libata.force using this doc. Example to force 1.5G and 3.0G: libata.force=1:3.0G,2:1.5G

How do you link these message to your drives? For instance, you have here “ata3″ link, how does this links to any /dev/sd.. ?

You need to go through /sys/class/ata_link. Search for sata_spd file. Use lsscsi command to map ids.

cat /sys/devices/pci0000:00/0000:00:1f.2/ata3/link3/ata_link/link3/sata_spd

Also

dmesg | grep -i --color ahci
dmesg | grep -i  ahci | grep -i --color Gbps

Reply

5 Philippe Petrinko September 6, 2012 at 8:53 am

Thanks Vivek.

By the way, on my Debian squeeze 6.0.5, /sys/class does not contain /ata_link but it contains:

  • scsi_device
  • scsi_disk
  • scsi_generic
  • scsi_host

I tried to find clues, such as in /sys/class/scsi_device/2\:0\:0\:0/device/, but then I cannot make a link to ata3 or alikes. No sata_spd found yet.

I have used lsscsi, either, and I have just watched your video and your lsscsi topic.

I am still unable to link “ata3″ to an exact drive, “dmesg|grep” commands didn’t tell much, but thanks to you, I learned some new stuff. :-))

– Philippe

Reply

6 nixCraft September 6, 2012 at 11:31 am

Philippe,

Commands discussed here depends upon your bios, hd firmware, motherboard and kernel driver. You need libata driver loaded. Linux ship with various ata driver located in /lib/modules/$(uname -r)/kernel/drivers/ata. Linux will load the correct driver at boot time as per your hardware. The examples output is taken from kernel v3.2.0 running on Debian Linux 6.0.5. For testing purpose try loading backported kernel v3.2.0.

HTH

Reply

7 Philippe Petrinko September 6, 2012 at 1:28 pm

Thanks again.

FYI, on my plain debian 6.0.5, Linux uses following modules tree:
ata_generic => libata => scsi_mod
So kernel v3.2.0 does not seem mandatory for libata
Linux runs on a Thinkpad T400 laptop (exact model 64741AG).

–P

Reply

8 george September 14, 2012 at 10:10 am

To measure the actual speed of an external USB disk:
I use dd command from dev/null to a file on that USB disk, using block size parameter set to 1MB, and count set to 1000. This creates a 1 GB file, so averages disk speed, and eliminates buffering.
The above is for write speed
from a 1 GB file on the USB disk to /dev/null, you can test read speed

Reply

9 Dhaval September 14, 2012 at 6:06 pm

Hi Guys,

My SATA link shows 1.5 GB
[ 1.204017] ata1: SATA link up 1.5 Gbps (SStatus 113 SControl 300)
However when I check the read write speed I get
/dev/sda1:
Timing cached reads: 412 MB in 2.01 seconds = 205.47 MB/sec
Timing buffered disk reads: 166 MB in 3.03 seconds = 54.80 MB/sec

And when I copy a file over a 1 Gbps network connection I get around 30 to 40 mbps. What could be the bottle neck as I believe the network file transfer speeds should be able to reach over 105-110 Mbps.

Reply

10 Alex January 26, 2014 at 10:02 pm

The problem with relying on dmesg is that the message may have dissapeared on systems with a long uptime.

This can be an alternative:
$ smartctl -a /dev/sda|grep ^SATA
SATA Version is: SATA 3.0, 6.0 Gb/s (current: 3.0 Gb/s)

(on my SATA 1 disk, this line does not appear)

Reply

11 Shawn Hicks January 29, 2014 at 4:08 am

Your post (and some of the comments) inspired me to write this, it prints all ata_link speeds and devices:

#!/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

Reply

12 Ankur March 29, 2014 at 12:25 pm

Thanks for this script. It clearly printed the hard drive name and speed.

Reply

13 Amal June 2, 2014 at 4:18 am

Instead of using
smartctl -a
you can use
smartctl -i for a more compact output. :) For example:

amal-desktop ~ # smartctl -i /dev/sda
smartctl 6.2 2013-04-20 r3812 [x86_64-linux-3.11.0-12-generic] (local build)
Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org
=== START OF INFORMATION SECTION ===
Model Family:     Hitachi Deskstar T7K250
Device Model:     HDT722516DLA380
Serial Number:    VDNE1BTCEB01HV
LU WWN Device Id: 5 000cca 205e12f45
Firmware Version: V43OA96A
User Capacity:    164,696,555,520 bytes [164 GB]
Sector Size:      512 bytes logical/physical
Device is:        In smartctl database [for details use: -P show]
ATA Version is:   ATA/ATAPI-7 T13/1532D revision 1
Local Time is:    Mon Jun  2 09:46:49 2014 IST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled
==========

Reply

Leave a Comment

Tagged as: , , , ,

Previous Faq:

Next Faq: