Wie ermittelt Linux die SCSI-Adresse einer Festplatte?

8

Schöne Grüße,

Ich arbeite mit RHEL 5.5-Gast-VMs unter VMware ESX 4. Wenn ich die virtuellen Festplatten in den VM-Hardwareeinstellungen konfiguriere, hat jede Festplatte eine SCSI-Adresse im Format "N: M". Zum Beispiel würde "1: 3" SCSI-Hostnummer 1 und SCSI-Ziel-ID 3 bedeuten.

Wenn ich mir die Festplatteninformationen aus dem BIOS der VM oder einem Windows-Betriebssystem ansehe, stimmen die erkannten SCSI-Adressinformationen mit den Einstellungen der virtuellen Hardware überein. Unter Linux stimmen die SCSI-Adresskomponenten jedoch nicht überein, zumindest nicht vollständig oder konsistent.

Ich habe die drei unterstützten virtuellen SCSI- und SAS-Treiber ausprobiert und sie scheinen alle "kaputt" zu sein, aber auf unterschiedliche Weise. Hier ist eine Liste der virtuellen Hardwareadressen im Vergleich zu den unter Linux mit den einzelnen Treibern erkannten Adressen:

Driver    vHW Addr  Linux Addr
--------  --------  ----------
LSI SAS   0:0       0:0
LSI SAS   0:3       0:1
LSI SAS   0:6       0:2
LSI SCSI  1:1       2:1
LSI SCSI  1:4       2:4
LSI SCSI  1:7       2:7
pvSCSI    2:2       1:2
pvSCSI    2:5       1:5
pvSCSI    2:8       1:8

Meine Hauptfrage ist, warum dies unter Linux geschieht. Die nächste Frage lautet: Wie kann ich das Problem beheben oder selbst beheben?

Wenn ich raten würde, würde ich sagen, dass es ein Problem damit ist, wie der Kernel die SCSI-Hostnummer verteilt und wie der Linux-SCSI-Treiber (im Lieferumfang der VMware-Tools enthalten) die SCSI-Zielnummer erkennt. Vielleicht hat die Reihenfolge, in der die Treiber geladen werden, auch etwas mit dem Problem zu tun. Ich vermute, dass dies nicht udev beinhalten würde, aber ich könnte mich irren.

Alle Gedanken wäre dankbar. Vielen Dank!

PS. Meine Umgebung ist VMware, aber ich brauche keine spezielle Antwort für diese Treiber. Ich stelle mir vor, dass dies ein Problem mit jedem SCSI-Treiber unter Linux sein könnte.

Chris Sears
quelle
1
Es ist nicht klar, was Sie hier beheben wollen. Es stimmt, dass Linux und das BIOS Geräte oft unterschiedlich aufzählen, aber warum ist dies für Sie ein Problem? Es ist nicht "kaputt", so funktionieren die Dinge.
Larsks
2
Wie bei anderen Hardware-IDs kann die SCSI-Adresse nicht interpretiert werden. Wenn Linux es schafft, MAC-Adressen in NICs und die UUID aus dem BIOS korrekt zu erkennen, warum kann es dann nicht die richtige SCSI-Adresse erhalten? Die Zuordnung von der Ansicht des Betriebssystems zu einer Festplatte zur externen Hardware ist entscheidend, um das Entfernen einer Festplatte sicher zu automatisieren. Wenn Sie zwei Festplatten mit genau derselben Größe hätten, wie (außer SCSI-Adressen) würden Sie wissen, welche welche war?
Chris Sears
Durch die Seriennummer, UUID oder durch Blinken der HD-Lichter. Ich kann sehen, wie die SAS nicht kaputt zu sein scheint, aber die anderen scheinen in Ordnung zu sein
Zoredache
Sie können die Devlinks unter /dev/disk/by-{id,label,path,uuid}hilfreich für Ihren Zweck finden!
MikeyB

Antworten:

4

Linux ist tatsächlich konsistent und korrekt, nur nicht unbedingt so, wie Sie es erwarten.

LSI SAS: SAS-Adressen sind WWNs und erhalten SCSI-ähnliche IDs, die der Reihenfolge entsprechen, in der sie angezeigt werden. (Dies ist eine Vereinfachung, reicht aber aus. Warum haben Sie überhaupt Lücken?)

LSI SCSI & pvSCSI: Die SCSI-Hostnummer bezieht sich NUR auf die Reihenfolge, in der die Hostadaptertreiber vom Kernel geladen werden, und nicht auf die von VMWare zugewiesenen Nummern. Wenn Sie sie in der anderen Reihenfolge sehen möchten, wechseln Sie die Reihenfolge des Treiberladens. Wechseln Sie höchstwahrscheinlich die Nummerierung in /etc/modprobe.conf und starten Sie neu.

MikeyB
quelle
Tolle Infos. Vielen Dank. Wissen Sie, warum Linux die von der virtuellen Hardware bereitgestellte SCSI-Hostnummer und Ziel-ID wegwirft / ignoriert und basierend auf der Ladereihenfolge neue generiert? Ich folge nicht der Logik.
Chris Sears
1
Die virtuelle Hardware stellt die SCSI-Hostnummer nicht bereit. Linux wirft die Ziel-ID nicht weg - der einzige Fall, in dem sie sich unterscheidet, ist SAS. Dies liegt daran, dass SAS-Adressen lang sind und einer emulierten Ziel-ID (nach SCSI-Emulationsschicht) zugeordnet sind. Führen Sie sg_logs --page=18h /dev/sg0Folgendes aus : (wobei sg0 das generische Gerät eines Ihrer SAS-Ziele ist), und Sie werden sehen.
MikeyB
3

Ich entferne die richtige Festplatte, indem ich Seriennummern Tray Caddies zuordne. Wir haben Gehäuse mit schlechten LED-Fähigkeiten. Eine neue Festplatte zeigt an, dass sie als / dev / sda angezeigt wird

udevadm info -q all -n /dev/sda|grep SERIAL

Dann schreiben wir die Seriennummer auf. Wenn dann eine Festplatte defekt ist, suchen wir nach der Seriennummer (in unserem Fall beschriften wir den physischen Caddy) und ziehen die entsprechende Festplatte.

Aber das hilft dir bei VMware nicht wirklich.

Andererseits könnten Sie ein Skript schreiben, das dasselbe tut. Fügen Sie eine neue Festplatte hinzu, zeichnen Sie die UUID im Gast auf und konsultieren Sie diese Nachschlagetabelle, wenn Sie die Festplatte später automatisch entfernen möchten.

Ich habe nicht wirklich aufgepasst, aber ich denke, meine VMware-Festplatten wurden immer in derselben Reihenfolge eingeschaltet. Sie können also darauf vertrauen, dass sich die scsi-Adresse nicht ändert, wenn Sie die Adresse beibehalten.

Steven
quelle
Danke, Steven. Ihr Vorschlag zur Verwendung eines Skripts zum Korrelieren der VMware- / Hardwaredaten und der Betriebssystemdaten auf einer neuen Festplatte ist die Problemumgehung, die ich implementieren möchte. Es ist nicht die Lösung, auf die ich gehofft habe, aber es wird funktionieren.
Chris Sears
1

Modernes Linux erstellt das Verzeichnis / dev beim Booten neu und scannt scsi-Hosts in der Reihenfolge, in der sie auf dem PCI-Bus angezeigt werden. In VMware ist dies die Reihenfolge, in der Sie sie der VM hinzufügen.

Wenn Sie zuerst eine Festplatte mit scsi 0: 1 und dann eine mit 2: 2 hinzufügen, sehen sie unter Linux wie folgt aus: 0: 1 und 1: 2. Wenn Sie danach scsi 1: 3 hinzufügen, wird es nach dem Start als 2: 3 angezeigt.

Sie müssen unter Linux nichts bearbeiten. Sie können die Reihenfolge der scsi-Hosts in der VMX-Datei ändern:

$ grep pciSlotNumber vm.vmx
scsi0.pciSlotNumber = "16"
scsi2.pciSlotNumber = "34"
scsi1.pciSlotNumber = "35"

Die Reihenfolge, in der sie in der vmx-Datei erscheinen, spielt keine Rolle, nur die pciSlotNumber

Bearbeiten Sie die VMX und ordnen Sie die Steckplatznummern neu an, sodass scsi0 die niedrigste Nummer, scsi1 die nächstniedrigere und so weiter erhält. (Verwenden Sie die gleichen Nummern, es ist sicherer. Sichern Sie auch Ihre VMX!)

scsi0.pciSlotNumber = "16"
scsi2.pciSlotNumber = "35"
scsi1.pciSlotNumber = "34"

Nach dem Start werden sie in der richtigen Reihenfolge angezeigt.

Denken Sie also daran, Ihre scsi-Hosts in der richtigen Reihenfolge zum VM hinzuzufügen! Denken Sie auch daran, wenn Sie die letzte Festplatte auf einem scsi-Host löschen, wird der scsi-Host selbst beim nächsten Neustart ebenfalls gelöscht. Wenn Sie also scsi-host 0,1,2 und 3 haben und 2 löschen, erhalten Sie unter Linux nur scsi-hosts 0,1 und 2.

Eize Speerstra
quelle
Interessant, ich muss es versuchen. Vielen Dank!
Chris Sears