Wie ordnet man ata4.00 der entsprechenden /dev/sdX- oder tatsächlichen physischen Festplatte zu?

Wie ordnet man ata4.00 der entsprechenden /dev/sdX- oder tatsächlichen physischen Festplatte zu?

In den Protokollen finden sich Dinge wie diese:

2. Okt. 22:11:21 Jupiter-Kernel: [439646.093111] ata4.00: Ausnahme Emask 0x0 SAct 0x0 SErr 0x0 Aktion 0x6
2. Okt. 22:11:21 Jupiter-Kernel: [439646.093144] ata4.00: BMDMA-Statistik 0x6
2. Okt. 22:11:21 Jupiter-Kernel: [439646.093176] ata4.00: fehlgeschlagener Befehl: WRITE DMA EXT
2. Okt. 22:11:21 Jupiter-Kernel: [439646.093206] ata4.00: cmd 35/00:98:00:0d:ff/00:02:42:00:00/e0 Tag 0 dma 339968 aus
2. Okt. 22:11:21 Jupiter-Kernel: [439646.093282] ata4.00: Status: { DRDY ERR }
2. Okt. 22:11:21 Jupiter-Kernel: [439646.093306] ata4.00: Fehler: { ICRC ABRT }
2. Okt. 22:11:21 Jupiter-Kernel: [439646.093353] ata4: Soft-Reset-Link
2. Okt. 22:11:21 Jupiter-Kernel: [439646.265242] ata4.00: konfiguriert für UDMA/133
2. Okt. 22:11:21 Jupiter-Kernel: [439646.265268] ata4: EH abgeschlossen

Jetzt frage ich mich, welche Platte ich ersetzen soll. Aber ich kann keine eindeutige Zuordnung zwischen den Einträgen "ataX.YZ" und /dev/disk/ finden.

Antwort1

  • Sie sollten weitere Informationen von dmesg erhalten:

    dmesg | grep ata
    

    Etwas wie:

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

    Das wäre meine Wester Digital-Festplatte.


  • So gehen Sie vor, wenn Sie mehrere Laufwerke eines Modells haben (und die obigen Schritte nicht helfen):

    1. Suchen Sie eine Zuordnung vom SCSI-Host zur ata*-ID:

      $ 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. Suchen Sie eine Zuordnung vom SCSI-Host zur SD*-ID:

      $ 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
      

    Jetzt können Sie diese beiden Ergebnisse über die Host*-Kennung verknüpfen. Wenn ich in diesem Fall also Probleme mit ata2 habe, würde ich nach der eindeutigen ID 2 → host1 suchen und dann nach der eindeutigen SD*, die Host1 → sdb ist.


  • Ich habe auch versucht, einen Einzeiler zu finden. Keine Ahnung, ob das robust ist. Du musst zuerst das ata* als Variable festlegen:

    FAIL=ata1
    

    dann renne:

    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}')"
    

    Das Ergebnis sollte etwa wie folgt aussehen:

    ata1 -> sda
    

Antwort2

Auf einigen meiner Server habe ich zwei oder mehr Geräte auf einem scsi_host. Ich weiß nicht, ob das richtig ist, aber ich bin davon ausgegangen, dass es nach Ziel unterschieden werden kann, und bei mir funktioniert es:

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

Einfaches Bash-Skript:

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

und die Ausgabe:

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

Antwort3

Jetzt ist es viel zu spät, aber den anderen Lesern zuliebe ... musste ich auf Ihre andere Frage antworten: „Jetzt frage ich mich, welche Festplatte ich ersetzen soll.“

Das ICRC-Fehlerflag ist fast immer mit einem fehlerhaften SATA-Kabel verbunden. Dieses lässt sich leicht ersetzen/testen. Es ist in gewissem Maße möglich, dass das ICRC-Flag gesetzt wird, wenn die Stromversorgung des Laufwerks fehlerhaft ist.

Sicher ist jedoch, dass esNEINHinweise darauf, dass mit dem Laufwerk etwas nicht stimmt! Ersetzen Sie das SATA-Kabel.

verwandte Informationen