Inhalt

3. Was sind die notwendigen Voraussetzungen?

3.1 Kernel Konfiguration

Natürlich muß ein unterstützter SCSI Kontroller vorhanden sein. Außerdem muß der Kernel noch Treiber für SCSI, den/die SCSI-Hostadapter und das generische Interface beinhalten.

Die Kernelkonfiguration (mittels make config unter /usr/src/linux) sieht typischerweise so aus:

...
*
* SCSI support
*
SCSI support? (CONFIG_SCSI) [n] y
*
* SCSI support type (disk, tape, CDrom)
*
...
Scsi generic support (CONFIG_CHR_DEV_SG) [n] y
*
* SCSI low-level drivers
*
...

Falls Module möglich sind, können diese natürlich auch stattdessen verwendet werden.

3.2 Device Deskriptoren

Das generische SCSI Interface verwendet eigene Devicedeskriptoren, also nicht die der anderen SCSI Gerätetreiber. Das Skript MAKEDEV (zu finden im /dev Verzeichnis) kann die Einträge erzeugen. Der Aufruf MAKEDEV sg erzeugt diese Einträge:

crw-------   1 root     system    21,   0 Aug 20 20:09 /dev/sga
crw-------   1 root     system    21,   1 Aug 20 20:09 /dev/sgb
crw-------   1 root     system    21,   2 Aug 20 20:09 /dev/sgc
crw-------   1 root     system    21,   3 Aug 20 20:09 /dev/sgd
crw-------   1 root     system    21,   4 Aug 20 20:09 /dev/sge
crw-------   1 root     system    21,   5 Aug 20 20:09 /dev/sgf
crw-------   1 root     system    21,   6 Aug 20 20:09 /dev/sgg
crw-------   1 root     system    21,   7 Aug 20 20:09 /dev/sgh
                                   |    |
                               Major,   Minor Device Nummern

Es fällt auf, daß dies Character-Deviceeinträge für Lowlevelzugriff sind.

Hinweis: Auf manchen Systemen mögen die Namen auch /dev/{sg0,sg1,...} lauten, die folgenden Beispiele müssen dann entsprechend angepaßt werden.

3.3 Abbildung der SCSI-Geräte auf Deskriptoren

Diese Deskriptoren werden dynamisch auf die aktiven SCSI ID/LUNs der SCSI-Busse abgebildet (LUN bedeutet logische Einheit von logical unit). Die Zuordnung (beim SCSI-Busscan) weist der Reihe nach alle LUNs von allen IDs von allen SCSI-Bussen zu. Begonnen wird bei der kleinsten LUN der kleinsten ID des ersten SCSI-Busses. Bei mehreren SCSI-Kontrollern schließen sich die folgenden Busse ohne Lücken an. Dieser Schritt findet beim Initialisieren des SCSI-Hosttreibers statt (also zum Zeitpunkt des Bootens oder beim Einfügen des Hosttreibermoduls).

Ein Beispiel: Nehmen wir an, es gibt drei angeschlossene SCSI Geräte mit den Ids 1, 3 und 5 auf dem ersten SCSI-Bus (jedes belegt eine LUN). Dann würde sich die folgende Zuordnung ergeben:

/dev/sga -> SCSI Id 1
/dev/sgb -> SCSI Id 3
/dev/sgc -> SCSI Id 5

Falls jetzt ein weiteres Gerät mit ID 4 dazukommt, verändert sich die Zuodnung (nach erneutem Busscan) zu:

/dev/sga -> SCSI Id 1
/dev/sgb -> SCSI Id 3
/dev/sgc -> SCSI Id 4
/dev/sgd -> SCSI Id 5

Beachte die Änderung bei Id 5 -- das entsprechende Gerät ist nicht mehr /dev/sgc zugeordnet, sondern erscheint als /dev/sgd.

Zum Glück gibt es bei modernen Kerneln eine Möglichkeit, darauf Einfluß zu nehmen.

Dynamisches Einfügen und Löschen von SCSI Geräten

Wenn alls ein neuerer Kernel und das /proc Filesystem läuft, können Geräte, die gerade nicht benutzt werden, mitten im Betrieb ausgetragen und neu angemeldet werden. Dazu sind natürlich Superuser- privilegien erforderlich.

Zum Austragen eines angemeldeten SCSI-Gerätes wird

echo "scsi remove-single-device a b c d" > /proc/scsi/scsi

und ähnlich zum Anmelden

echo "scsi add-single-device a b c d" > /proc/scsi/scsi

verwendet, dabei ist

'a' die Hostadapter Id (die erste ist 0)
'b' der SCSI-Bus des Hostadapters (der erste ist 0)
'c' die ID
'd' die LUN (die erste ist 0)

Um also die Zuordnungen der beiden Geräte /dev/sgc und /dev/sgd zu vertauschen (siehe letztes Beispiel), geben wir Folgendes ein:

echo "scsi remove-single-device 0 0 4 0" > /proc/scsi/scsi
echo "scsi remove-single-device 0 0 5 0" > /proc/scsi/scsi
echo "scsi add-single-device 0 0 5 0" > /proc/scsi/scsi
echo "scsi add-single-device 0 0 4 0" > /proc/scsi/scsi

Das klappt, weil die Gerätezuordnung nach Anmeldereihenfolge erfolgt.

Beim Anmelden neuer SCSI-Geräte ist zu beachten, daß nur eine begrenzte Anzahl von freien Einträgen zur Verfügung steht. Der Speicher ist zur Bootzeit reserviert worden und erlaubt zwei weitere Gerätezuordnungen.


Inhalt