Wie korreliere ich / dev / sd-Geräte mit der Hardware, die sie darstellen?


35

Ein Laufwerk beginnt auszufallen und ich kenne das Gerät nur anhand seiner /dev/sdbGerätedateibestimmung. Auf welche Weise kann ich diese Gerätedatei mit einem tatsächlichen Hardwaregerät korrelieren, um zu ermitteln, welches Laufwerk physisch ersetzt werden muss?

Bonus: Was ist, wenn ich /dev/disk/bei dieser Installation keine Unterverzeichnisse habe? (Was ich leider nicht tue)


Kein RAID-Controller?
Ewwhite

@ewwhite Nicht für die Zwecke dieser Frage, nein. =)
Wesley

btw. Wenn Sie das /dev/disk/Verzeichnis nicht haben, haben Sie wahrscheinlich kein udev.
Ulrich Dangel

@UlrichDangel Sehr aufmerksam, weil ... ich kein udev habe. = (
Wesley

Antworten:


21

Sie können schauen in /sys/block:

-bash-3.2$ ls -ld /sys/block/sd*/device
lrwxrwxrwx 1 root root 0 Jun  8 21:09 /sys/block/sda/device -> ../../devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0
lrwxrwxrwx 1 root root 0 Jun  8 21:10 /sys/block/sdb/device -> ../../devices/pci0000:00/0000:00:1f.2/host1/target1:0:0/1:0:0:0
lrwxrwxrwx 1 root root 0 Jun  8 21:10 /sys/block/sdc/device -> ../../devices/pci0000:00/0000:00:1f.2/host2/target2:0:0/2:0:0:0
lrwxrwxrwx 1 root root 0 Jun  8 21:10 /sys/block/sdd/device -> ../../devices/pci0000:00/0000:00:1f.2/host3/target3:0:0/3:0:0:0

Oder wenn Sie nicht haben /sys, können Sie schauen /proc/scsi/scsi:

-bash-3.2$ cat /proc/scsi/scsi 
Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
  Vendor: ATA      Model: ST31000340AS     Rev: SD1A
  Type:   Direct-Access                    ANSI SCSI revision: 05
Host: scsi1 Channel: 00 Id: 00 Lun: 00
  Vendor: ATA      Model: ST31000340AS     Rev: SD1A
  Type:   Direct-Access                    ANSI SCSI revision: 05
Host: scsi2 Channel: 00 Id: 00 Lun: 00
  Vendor: ATA      Model: ST31000340AS     Rev: SD1A
  Type:   Direct-Access                    ANSI SCSI revision: 05
Host: scsi3 Channel: 00 Id: 00 Lun: 00
  Vendor: ATA      Model: ST31000340AS     Rev: SD1A
  Type:   Direct-Access                    ANSI SCSI revision: 05
Host: scsi4 Channel: 00 Id: 00 Lun: 00
  Vendor: PepperC  Model: Virtual Disc 1   Rev: 0.01
  Type:   CD-ROM                           ANSI SCSI revision: 03

Genial, ich habe /sys/(wie auch /proc/) viele tolle Infos dabei. Immer noch verbrauchen.
Wesley

Schauen Sie sich auch / dev / disk / by-path an (vorausgesetzt, Ihr udev unterstützt dies). Natürlich nicht OPs, also ...
Derobert

14
hdparm -i /dev/sdb

Das sollte Ihnen das Modell und die Seriennummer des Laufwerks geben.


Dies würde in den meisten Situationen funktionieren, glaube ich. Aus irgendeinem Grund ist der Controller in diesem Server jedoch skizzenhaft. Das Ausführen dieses Befehls bringt mir Folgendes ein:HDIO_GET_IDENTITY failed: Invalid argument
Wesley

1
smartctl -iist auch einen Versuch wert. Funktioniert auf SCSI-Laufwerken, wohingegen hdparm dies häufig nicht tut.
Derobert

Funktioniert nicht mit USB-Sticks
Mads Skjern

12

Wie der unnachahmliche Gilles in seiner Antwort erwähnte , udevkönnen Sie , wenn Ihr Kernel verwendet , den udevadmBefehl verwenden, um ein Gerät abzufragen:

udevadm info -n /dev/sda -a

(Leider ist es in einigen Fällen [doppelt traurig, dass es in diesem Fall für mich zutrifft], dass udev nicht verwendet wird und / oder udevadm nicht verfügbar ist.)


8

Wenn Sie die LED auf dem Laufwerk sehen oder das Festplattenrauschen hören können, können Sie ausführen

sudo cat /dev/sdb >/dev/null

und sehen, welches Laufwerk plötzlich ständig aktiv wird. Oder, wenn Sie durch Lärm gehen,

sudo find /mount/point >/dev/null

Dadurch bewegen sich die Köpfe mehr (es ist möglicherweise besser, dies nicht auf der fehlerhaften Festplatte zu tun und stattdessen einen Eliminierungsprozess mit den anderen Festplatten durchzuführen).


2
Ich hatte darüber nachgedacht, wie ich die Lichter dazu bringen könnte, blinky-blinky zu werden. Das ist also eine Antwort auf meine Neugier. =)
Wesley

1
Einige Laufwerke haben dafür eine zusätzliche LED, aber sie sind normalerweise nur in Laufwerken der Enterprise-Klasse zu finden (lesen Sie bizarr teuer bei relativ geringer Kapazität). Ich weiß nicht, wie diese LEDs funktionieren, aber der ddTrick funktioniert normalerweise gut genug.
jippie

@WesleyDavid Auch wenn keine LEDs vorhanden sind, kann das Abhören des Rauschens eine letzte Möglichkeit sein. Es ist nicht erforderlich, ddhier ( oder in den meisten Fällen ) catein anderes Programm zu verwenden, das aus einer Datei liest.
Gilles 'SO- hör auf böse zu sein'

4

Unter der Annahme, dass dies Linux ist, ist es am offensichtlichsten, dmesg dahingehend zu überprüfen, wo der Kernel das Gerät zuerst initialisiert. Es protokolliert das Laufwerksmodell.


Weitere Informationen finden Sie unter unix.stackexchange.com/questions/39886/… .
jippie

Ja, es ist Linux. Insbesondere Debian 4. Ich habe dmesg überprüft, aber merkwürdigerweise keinen Hinweis auf ein Laufwerksmodell gefunden. Vielleicht verstehe ich es falsch.
Wesley

4

Ich habe 4 Methoden. Der erste ist der einfachste:

dmesg | egrep "sd[a-z]"

Für die anderen bin ich mir nicht sicher, ob sie / dev / disk benötigen, außer für dieses:

ls -lF /dev/disk/by-uuid

Die Anderen:

blkid -o list -c /dev/null

Und das Offensichtliche:

fdisk -l

3

Nachstehend sind einige Methoden aufgeführt, mit denen der SCSI-Gerätename ermittelt werden kann

  • dmesg | egrep "sd[a-z]"
  • lsblk --scsi (aus dem Paket util-linux> = v2.22)
  • lshw -C disk
  • ls -ld /sys/block/sd*/device
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.