¿Cómo hacer coincidir ata4.00 con el /dev/sdX apropiado o el disco físico real?

¿Cómo hacer coincidir ata4.00 con el /dev/sdX apropiado o el disco físico real?

Obteniendo cosas como esta en los registros:

2 de octubre 22:11:21 kernel de Júpiter: [439646.093111] ata4.00: excepción Emask 0x0 SAct 0x0 SErr 0x0 acción 0x6
2 de octubre 22:11:21 kernel de Júpiter: [439646.093144] ata4.00: estadística BMDMA 0x6
2 de octubre 22:11:21 kernel de Júpiter: [439646.093176] ata4.00: comando fallido: ESCRIBIR DMA EXT
2 de octubre 22:11:21 kernel de Júpiter: [439646.093206] ata4.00: cmd 35/00:98:00:0d:ff/00:02:42:00:00/e0 tag 0 dma 339968 out
2 de octubre 22:11:21 kernel de Júpiter: [439646.093282] ata4.00: estado: {DRDY ERR}
2 de octubre 22:11:21 kernel de Júpiter: [439646.093306] ata4.00: error: {CICR ABRT}
2 de octubre 22:11:21 kernel de Júpiter: [439646.093353] ata4: enlace de restablecimiento parcial
2 de octubre 22:11:21 kernel de Júpiter: [439646.265242] ata4.00: configurado para UDMA/133
2 de octubre 22:11:21 kernel de Júpiter: [439646.265268] ata4: EH completo

Ahora me pregunto qué disco reemplazar. Pero no puedo encontrar ninguna asignación clara entre las entradas "ataX.YZ" y /dev/disk/.

Respuesta1

  • Deberías obtener más información de dmesg:

    dmesg | grep ata
    

    Algo como:

    [    2.345126] ata2.00: ATA-8: WDC WD20EARX-00PASB0, 51.0AB51, max UDMA/133
    

    Ese sería mi disco duro Wester Digital.


  • Esta es una manera si tiene varias unidades de un modelo (cuando lo anterior no ayude):

    1. Encuentre una asignación del host SCSI al ID de ata*:

      $ egrep "^[0-9]{1,}" /sys/class/scsi_host/host*/unique_id
      /sys/class/scsi_host/host0/unique_id:1
      /sys/class/scsi_host/host1/unique_id:2
      /sys/class/scsi_host/host2/unique_id:3
      /sys/class/scsi_host/host3/unique_id:4
      
    2. Busque una asignación del host SCSI al ID sd*:

      $ ls -l /sys/block/sd*
      ... /sys/block/sda -> ../devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda
      ... /sys/block/sdb -> ../devices/pci0000:00/0000:00:1f.2/host1/target1:0:0/1:0:0:0/block/sdb
      

    Ahora puede vincular esos dos resultados a través del identificador de host*. Entonces, si en ese caso tengo problemas con ata2, buscaría Unique_id 2 → host1, y luego cuál sd* es host1 → sdb.


  • También traté de pensar en una frase ingeniosa. No tengo idea si eso es robusto. Primero debes configurar ata* como variable:

    FAIL=ata1
    

    entonces corre:

    echo "$FAIL -> $(ls -l /sys/block/ | grep $(grep "^$(echo $FAIL | cut -c 4-)" /sys/class/scsi_host/host*/unique_id | sed "s/.*\(host[0-9]\{1,\}\).*/\1/") | awk '{print $8}')"
    

    que debería devolver algo como:

    ata1 -> sda
    

Respuesta2

En algunos de mis servidores tengo dos o más dispositivos en un scsi_host. No sé si es correcto pero supuse que se puede distinguir por objetivo y me funciona:

ls -l /sys/block/sd*
lrwxrwxrwx 1 root root 0 2012-02-08 08:15 /sys/block/sda -> ../devices/pci0000:00/0000:00:01.0/0000:01:00.0/host3/target3:0:0/3:0:0:0/block/sda
lrwxrwxrwx 1 root root 0 2012-02-08 08:15 /sys/block/sdb -> ../devices/pci0000:00/0000:00:1f.2/host6/target6:0:0/6:0:0:0/block/sdb
lrwxrwxrwx 1 root root 0 2012-02-08 08:15 /sys/block/sdc -> ../devices/pci0000:00/0000:00:1f.2/host7/target7:0:0/7:0:0:0/block/sdc
lrwxrwxrwx 1 root root 0 2012-02-08 08:15 /sys/block/sdd -> ../devices/pci0000:00/0000:00:1f.2/host8/target8:0:0/8:0:0:0/block/sdd
lrwxrwxrwx 1 root root 0 2012-02-08 08:15 /sys/block/sde -> ../devices/pci0000:00/0000:00:1f.2/host9/target9:0:0/9:0:0:0/block/sde
lrwxrwxrwx 1 root root 0 2012-02-08 08:15 /sys/block/sdf -> ../devices/pci0000:00/0000:00:1f.2/host10/target10:0:0/10:0:0:0/block/sdf
lrwxrwxrwx 1 root root 0 2012-02-08 08:15 /sys/block/sdg -> ../devices/pci0000:00/0000:00:1f.2/host11/target11:0:0/11:0:0:0/block/sdg
lrwxrwxrwx 1 root root 0 2012-02-08 08:15 /sys/block/sdh -> ../devices/pci0000:00/0000:00:1c.4/0000:04:00.0/host13/target13:0:0/13:0:0:0/block/sdh
lrwxrwxrwx 1 root root 0 2012-02-08 08:15 /sys/block/sdi -> ../devices/pci0000:00/0000:00:1c.4/0000:04:00.0/host13/target13:0:1/13:0:1:0/block/sdi

Script bash simple:

#!/bin/bash

#inspired by http://askubuntu.com/questions/64351/how-to-match-ata4-00-to-the-apropriate-dev-sdx-or-actual-physical-disk

for d in /sys/block/sd*
do
  s=`basename $d`
  h=`ls -l $d | egrep -o "host[0-9]+"`
  t=`ls -l $d | egrep -o "target[0-9:]*"`
  a2=`echo $t | egrep -o "[0-9]:[0-9]$" | sed 's/://'`
  a=`cat /sys/class/scsi_host/$h/unique_id`
  echo "$s -> ata$a.$a2"
done

y su salida:

sda -> ata4.00
sdb -> ata7.00
sdc -> ata8.00
sdd -> ata9.00
sde -> ata10.00
sdf -> ata11.00
sdg -> ata12.00
sdh -> ata14.00
sdi -> ata14.01

Respuesta3

Ya es demasiado tarde, pero por el bien de otros lectores... tuve que responder a tu otra pregunta "Ahora me pregunto qué disco reemplazar".

El indicador de error ICRC casi siempre está asociado con un cable SATA defectuoso; este es fácil de reemplazar/probar. Es ligeramente posible levantar la bandera del CICR si la alimentación al variador es defectuosa.

Lo que sí es seguro es que hayNO¡Evidencia de algún problema con el disco! Reemplace su cable SATA.

información relacionada