Bash, SCSI ID zu Device

Post Reply
Message
Author
jochenz
Posts: 3
Joined: 13. Apr 2004 12:11
Location: Brandenburg

Bash, SCSI ID zu Device

#1 Post by jochenz »

Hallo Leute,

Bin gerade mal wieder dabei ein kleines Script zu entwerfen, in dem es um Datensicherung geht. Irgendwie komme ich aber nicht weiter.
Folgende gedachte Situation:
Ein System (SUSE 8.2) mit drei CD-Brenner. Alle Brenner vom selben Hersteller. Alle Brenner werden per SCSI-Emulation vom System angesprochen. Somit kann ich also mit dem Befehl "cdrecord -scanbus" die Laufwerke als Generic Device 1,0,0 oder 1,1,0 usw. anzeigen lassen und die jeweilige ID zum Brennen von CD's benutzen.
Nun soll mein Script herausfinden, welcher Device-Name (sr0, sr1 u.s.w.) für die jeweilige SCSI ID steht.

Ziel ist es, nach dem Brennen die CD zu mounten und den Verzeichnisbaum in eine Log-Datei zu schreiben. (was aber nicht das Problem darstellt)

Habe schon gegooglet ohne Ende aber über all steht, dass 1,0,0=sr0 ist und 1,1,0=sr1 ist (oder dem entsprechend).
Ich weiss das auch, das es so ist aber es muss doch einen Weg geben sich das per batch ausgeben zu lassen.

Ich hoffe einer von euch kann mir helfen.

Danke im Voraus,

Lars

User avatar
jochen
prolinux-forum-admin
Posts: 699
Joined: 14. Jan 2000 15:37
Location: Jülich
Contact:

#2 Post by jochen »

Eine konkrete Antwort habe ich leider nicht parat, da ich zu 2.4er-Zeiten einen SCSI-Brenner hatte und ide-scsi nicht brauchte und seit 2.6er Zeiten mit ATAPI-Brenner einfach /dev/hdc als Devicenamen verwenden kann...

Wenn Du das Modul lädst, sollte es eigentlich auch ein paar Ausgaben machen, aus denen man die Zuordnungen erkennen kann. Untersuche mal den Output von "dmesg" genauer, vielleicht kann man sich die geünschten Daten dort herausgreppen.

Jochen
Die grösste Lüge der EDV? "Mal eben..."

jochenz
Posts: 3
Joined: 13. Apr 2004 12:11
Location: Brandenburg

#3 Post by jochenz »

Hallo Leute,

Erst einmal Danke Jochen, das du geantwortet hast. Nachdem ich das Modul nochmals geladen hatte, gab dmesg lediglich aus, dass es die Daten von IDE zu SCSi übersetzen kann (Translate ide-scsi..ok (oder so ähnilch ;-) )). Da ich nun nach 2 Tagen schon Blutblasen, vom vielen rumhacken auf der Tastatur, an den Fingerspitzen habe und ich laut Google nicht der einzige bin der sich mit diesem Problem beschäftigt, möchte ich euch meine Lösung nicht vorenthalten.

zur Verdeutlichung:
Der Benutzer dieses Scriptes (Admin, root, was auch immer) soll also lediglich mit dem Befehl "cdrecord -scanbus" herrausfinden, was für Brenner dem System zur verfügung stehen. Die aus diesem Befehl resultierende SCSI-ID (1,0,0 so, oder so ähnlich) trägt er am Anfang des Scripts in eine Variable ein und das Script verwendet diese ID zum Brennen und anschliessendem Mounten des dazugehörigen Blockdevice (sr0, sr1, haste nich gesehen). Da sich mit der SCSI-ID nichts mounten lässt, muss also eine automatische (geiles Wort) Konvertierung zum Blockdevice her.
Die Lösung:
der Befehl cdrecord -scanbus liefert in etwa solche Ausgaben:
scsibus0:
0,0,0 0) 'HPT Inc.' 'HPT37x2 RAID 1' '1.05' Disk
0,1,0 1) *
0,2,0 2) *
0,3,0 3) *
0,4,0 4) *
0,5,0 5) *
0,6,0 6) *
0,7,0 7) *
scsibus1:
1,0,0 100) 'HL-DT-ST' 'CD-RW GCE-8240B ' '1.07' Removable CD-ROM
1,1,0 101) 'HL-DT-ST' 'CD-RW GCE-8240B ' '1.07' Removable CD-ROM
1,2,0 102) 'HL-DT-ST' 'CD-RW GCE-8240B ' '1.07' Removable CD-ROM
1,3,0 103) *
1,4,0 104) *
1,5,0 105) *
1,6,0 106) *
1,7,0 107) *
Für jeden sollte hier unschwer zu erkennen sein wo die Brenner am SCSI-Bus sitzen.
Und ebenfalls ist die dazugehörige ID(1,0,0 u.s.w.), die von cdrecord zum Brennen benutzt wird, leicht auszumachen. Für das Linuxsystem scheint allerdings etwas ganz anderes wichtig zu sein. Na? Nana? Nananana?
Die zweite Spalte enthält die alles enscheidende Ausgabe. 100), 101), 102) . Das sind die Zahlen die zum Erfolg führten.
Welcher Befehl liefert eine Ausgabe wo diese Zahlen in Zusammenhang mit SCSI vorkommen?
Es ist nicht sgcheck. Es ist nicht scsiinfo. Es ist nicht cdrecord -checkdrive. Es ist nicht
rescan-scsi-bus.sh Es ist nicht scsidev. Es ist nicht sg_start. Es ist nicht scsi. Es ist nicht boot.scsidev.Es ist auch nicht scsi_kreuz_und_ quer oder scsi_finger_krumm.
Nein es ist der Befehl, der eigendlich jeder Distri beiliegt.

hwinfo --scsi

Die Ausgabe dieses befehls sieht in etwa so aus:

05: SCSI 100.0: 10602 CD-ROM (CD-RW)
[Created at scsi.230]
Unique ID: zyP1.vHduEurdwmB
Hardware Class: cdrom
Model: "HL-DT-ST CD-RW GCE-8240B"
Vendor: "HL-DT-ST"
Device: "HL-DT-ST CD-RW GCE-8240B"
Revision: "1.07"
Serial ID: ""
Driver: "ide-scsi"
Device File: /dev/sr0
Features: CD-R, CD-RW
Config Status: cfg=yes, avail=yes, need=no
Drive Speed: 40


06: SCSI 101.0: 10602 CD-ROM (CD-RW)
[Created at scsi.230]
Unique ID: zyP1.vHduEurdwmB
Hardware Class: cdrom
Model: "HL-DT-ST CD-RW GCE-8240B"
Vendor: "HL-DT-ST"
Device: "HL-DT-ST CD-RW GCE-8240B"
Revision: "1.07"
Serial ID: ""
Driver: "ide-scsi"
Device File: /dev/sr1
Features: CD-R, CD-RW
Config Status: cfg=yes, avail=yes, need=no
Drive Speed: 40

Das geschulte Auge sollte hier spätestens auf den Zweiten Blick erkennen, wo die Zusammenhänge liegen.
SCSI 100.0 zu Device File: /dev/sr0
verhält sich wie
SCSI 101.0 zu Dievice File: /dev/sr1

und da drin enthalten sind genau die Zahlen, die auch bei cdrecord -scanbus vorkommen.

Der Rest ist nur noch eine Kleinigkeit.

cdrecord, dann greppen nach SCSI-ID, dann awk Spalte 2, dann tr auf die Klammer
das Ganze in eine Variable schreiben
dann hwinfo --scsi, dann greppen auf Variable und 10 Zeilen weiter, dann greppen auf "File", dann cut von Zeichen 16 bis ende
das ganze in eine Variable schreiben und
Variable ausgeben lassen.

Alles zusammen sieht dann so aus:
vorgabe=1,0,0
var1=`cdrecord -scanbus | grep "$vorgabe" | awk '{print$2}' | tr -d [:punct:]`
var2=`hwinfo --scsi | grep "$var1" -A 10 | grep File | cut -c16-`
echo $var2

Und raus kommt /dev/sr0 .

So, und in diesem Sinne wünsche ich euch allen da draußen ein schönes Loch im Hemde. eehh Wochenende.

Bis zum nächsten mal

euer jochenz

Falls einer Schreibfehler entdeckt, der sollte mal meine Blutblasen sehen.

Post Reply