Relación entre ATA ID y SATA ID y cómo comprobar la velocidad de las conexiones SATA

Mapear un identificador ATA (ATA ID) con el dispositivo SATA en cuestión (SATA ID) (Muy útil a la hora de saber qué disco está fallando al recibir un error especificando un ID ATA, por ejemplo con dmesg).

atasata.sh
#!/bin/bash
# save original IFS
OLDIFS="$IFS"
 
for i in /sys/block/sd*; do 
 readlink $i |
 sed 's^\.\./devices^/sys/devices^ ;
      s^/host[0-9]\{1,2\}/target^ ^ ;
      s^/[0-9]\{1,2\}\(:[0-9]\)\{3\}/block/^ ^' \
 \
  |
  while IFS=' ' read Path HostFull ID
  do
 
     # OLD line: left in for reasons of readability 
     # IFS=: read HostMain HostMid HostSub <<< "$HostFull"
 
     # NEW lines: will now also work without a hitch on r/o environments
     IFS=: h=($HostFull)
     HostMain=${h[0]}; HostMid=${h[1]}; HostSub=${h[2]}
 
     if echo $Path | grep -q '/usb[0-9]*/'; then
       echo "(Device $ID is not an ATA device, but a USB device [e. g. a pen drive])"
     else
       echo $ID: ata$(< "$Path/host$HostMain/scsi_host/host$HostMain/unique_id").$HostMid$HostSub
     fi
 
  done
 
done
 
# restore original IFS
IFS="$OLDIFS"
sda: ata2.00
sdb: ata3.00
sdc: ata5.00

Otra forma sería listando los dispositivos scsi del sistema.

cat /proc/scsi/scsi

Velocidad de la conexión SATA.

Lista de velocidades SATA REVISION ⇒ Velocidad ({Gbit|MB}/s).

Listar la velocidad de cada conexión SATA.

dmesg | grep -i sata | grep 'link up'
 ata5: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
 ata3: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
 ata1: SATA link up 1.5 Gbps (SStatus 113 SControl 300)
 ata2: SATA link up 6.0 Gbps (SStatus 133 SControl 300)
 
 # Con el script anterior se obtuvieron los siguientes valores.
 # sda: ata2.00 (6.0 Gbps)
 # sdb: ata3.00 (3.0 Gbps)
 # sdc: ata5.00 (3.0 Gbps)
 
# Otra manera de obtener la misma información.
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
Link /sys/class/ata_link/link1 Speed 1.5 Gbps
     Device MIQC118289WL 1.00 PIONEER DVD-RW DVR-221L
Link /sys/class/ata_link/link2 Speed 6.0 Gbps
     Device WD-WMC3F0685256 01.01A01WDC WD10EZEX-00BN5A0 tk}aA#ti AA#@
Link /sys/class/ata_link/link3 Speed 3.0 Gbps
     Device S0URJ9CPB07644 FH100-05SAMSUNG HD250HJ A#ti A#@ w 88
Link /sys/class/ata_link/link5 Speed 3.0 Gbps
     Device 9VP5ENVM CC38 ST31000528AS Ac4i tp

Comprobar el tipo de dispositivo SATA y su revisión (acorde a la velocidad).

hdparm -I /dev/sdb | egrep "Model|speed"
	Model Number:       SAMSUNG HD250HJ                         
	   *	Gen1 signaling speed (1.5Gb/s)
	   *	Gen2 signaling speed (3.0Gb/s)
 
hdparm -I /dev/sda | egrep "Model|speed"
	Model Number:       WDC WD10EZEX-00BN5A0                    
	   *	Gen1 signaling speed (1.5Gb/s)
	   *	Gen2 signaling speed (3.0Gb/s)
	   *	Gen3 signaling speed (6.0Gb/s)
 
hdparm -I /dev/sdc | egrep "Model|speed"
	Model Number:       ST31000528AS                            
	   *	Gen1 signaling speed (1.5Gb/s)
	   *	Gen2 signaling speed (3.0Gb/s)

También puede ser de utilidad el comando smartctl, aunque a veces no muestra la información relativa a la velocidad y es necesario usar hdparm.

smartctl -a /dev/sda | grep "^SATA"
SATA Version is:  SATA 3.1, 6.0 Gb/s (current: 6.0 Gb/s)

Enlaces de Interés.