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