GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie kann man ataX.0-Identifikatoren in kern.log-Fehlermeldungen tatsächlichen /dev/sdY-Geräten zuordnen?

Sie können das entsprechende /dev/sdY-Gerät finden, indem Sie /sys durchlaufen Baum:

$ find /sys/devices | grep '/ata[0-9]\+/.*/block/s[^/]\+$' \
    | sed '[email protected]^.\+/\(ata[0-9]\+\)/.\+/block/\(.\+\)[email protected]\1 => /dev/\[email protected]'

Mit einem effizienteren /sys Durchquerung (vgl. lsata.sh):

$ echo /sys/class/ata_port/ata*/../../host*/target*/*/block/s* | tr ' ' '\n' \
    | awk -F/ '{printf("%s => /dev/%s\n", $5, $NF)}'

Beispielausgabe von einem System mit 2 Platten:

ata1 => /dev/sda
ata2 => /dev/sdb

Dann müssen Sie zur zuverlässigen Identifizierung der tatsächlichen Hardware /dev/sdY der Seriennummer zuordnen, z. B.:

$ ls /dev/disk/by-id -l | grep 'ata.*sd[a-zA-Z]$'

lssci

Die lssci Dienstprogramm kann auch verwendet werden, um die Zuordnung abzuleiten:

$ lsscsi | sed '[email protected]^\[\([^:]\+\).\+\(/dev/.\+\)[email protected]\1,\[email protected]' \
    | awk -F, '{ printf("ata%d => %s\n", $1+1, $2) }'

Beachten Sie, dass die relevante lsscsi-Aufzählung bei 0 beginnt, während die ata-Aufzählung bei 0 beginnt.

Syslog

Wenn nichts anderes funktioniert, kann man sich das Syslog/Journal ansehen, um das Mapping abzuleiten.

Die /dev/sdY Geräte werden in der gleichen Reihenfolge erstellt, in der die ataX-Identifikatoren in kern.log aufgelistet sind während Nicht-Festplattengeräte (ATAPI) und nicht verbundene Links ignoriert werden.

Daher zeigt der folgende Befehl die Zuordnung an:

$ grep '^May 28 2'  /var/log/kern.log.0  | \
   grep 'ata[0-9]\+.[0-9][0-9]: ATA-' | \
   sed 's/^.*\] ata//' | \
   sort -n | sed 's/:.*//' | \
   awk ' { a="ata" $1; printf("%10s is /dev/sd%c\n", a, 96+NR); }'
ata1.00 is /dev/sda
ata3.00 is /dev/sdb
ata5.00 is /dev/sdc
ata7.00 is /dev/sdd
ata8.00 is /dev/sde
ata10.00 is /dev/sdf

(Beachten Sie, dass ata4 nicht angezeigt wird, da die obigen Protokollmeldungen von einem anderen System stammen.)

Ich verwende /var/log/kern.log.0 und nicht /var/log/kern.log da die Boot-Meldungen bereits rotiert sind. Ich suche nach May 28 2 da dies das letzte Booten war und ich frühere Meldungen ignorieren möchte.

Um die Zuordnung zu überprüfen, können Sie einige Überprüfungen durchführen, indem Sie sich die Ausgabe von:

ansehen
$ grep '^May 28 2'  /var/log/kern.log.0  | \
grep 'ata[0-9]\+.[0-9][0-9]: ATA-'
May 28 20:43:26 hn kernel: [    1.260488] ata1.00: ATA-7: SAMSUNG SV0802N, max UDMA/100
May 28 20:43:26 hn kernel: [    1.676400] ata5.00: ATA-5: ST380021A, 3.19, max UDMA/10
[..]

Und Sie können diese Ausgabe mit hdparm vergleichen Ausgabe, z. B.:

$ hdparm -i /dev/sda

/dev/sda:

Model=SAMSUNG SV0802N [..]

(mit Kernel 2.6.32-31)


Hier ist meine Version, modifiziert von oben. Da ich nicht das genaue Datum kenne, an dem das System gebootet wurde (zum Testen war es vor 27 Tagen), und ich nicht weiß, welches kern.log die Daten enthält, die ich brauche (einige können gzipped auf meinem System), verwende ich uptime und date Um ein ungefähres Systemstartdatum (zumindest auf den Tag genau) zu berechnen, verwenden Sie dann zgrep um alle verfügbaren kern.log-Dateien zu durchsuchen.

Ich habe auch den zweiten grep leicht modifiziert Anweisung, da neben ATA-*-Laufwerken nun auch ein ATAPI-CD/DVD-Laufwerk angezeigt wird.

Es könnte immer noch verfeinert werden (d. h. wenn die Systembetriebszeit länger als ein Jahr ist), sollte aber vorerst gut funktionieren.

#!/bin/bash

uptime=$(uptime | awk -F' '  '{ print $3" "$4 }' | sed s/,//)
date=$(date -d "$uptime ago" | awk '{print $2" "$3 }')
zgrep "$date"  /var/log/kern.log*  | \
grep 'ata[0-9]\+.[0-9][0-9]: ATA'  | \
sed 's/^.*\] ata//' | \
sort -n | sed 's/:.*//' | \
awk ' { a="ata" $1; printf("%10s is /dev/sd%c\n", a, 96+NR); }'

Linux
  1. So generieren Sie ein zufälliges Passwort unter Linux mit /dev/random

  2. Wie behandelt Linux mehrere aufeinanderfolgende Pfadtrennzeichen (/home////username///file)?

  3. Linux:Unterschied zwischen /dev/console , /dev/tty und /dev/tty0?

  4. Unterschied zwischen /var/log/messages, /var/log/syslog und /var/log/kern.log?

  5. So ordnen Sie /dev/sdX- und /dev/mapper/mpathY-Geräte vom /dev/dm-Z-Gerät zu

Wie man einen Cronjob komplett zum Schweigen bringt /dev/null/?

Fehlermeldungen „Befehl abbrechen ausgegeben Nexus“ in der Datei /var/log/messages

Wie kann /dev/random oder /dev/urandom mit base64 codiert werden?

Wie tauscht man /dev/sda mit /dev/sdb aus?

Wann sollte ich /dev/shm/ verwenden und wann sollte ich /tmp/?

Linux:Unterschied zwischen /dev/console , /dev/tty und /dev/tty0