# 1.101.4

# Einrichten von SCSI-Geräten

Beschreibung: Prüfungskandidaten sollten in der Lage sein, SCSI-Geräte unter Verwendung des SCSI-BIOS und der notwendigen Linux-Werkzeuge zu konfigurieren. Sie sollten ebenso fähig sein, zwischen den verschiedenen SCSI-Typen zu unterscheiden. Dieses Lernziel beinhaltet die Handhabung des SCSI-BIOS zum Auffinden von verwendeten und freien SCSI-IDs und zum Setzen der korrekten ID-Nummer für verschiedene Geräte, im speziellen für das Boot-Device. Ebenso enthalten ist das Verwalten der Einstellungen im System-BIOS zur Bestimmung der gewünschten Bootreihenfolge, wenn sowohl SCSI- als auch IDE-Laufwerke verwendet werden.

Die wichtigsten Dateien, Bezeichnungen und Anwendungen

- SCSI-ID
- `/proc/scsi`
- scsi-info

Das Small Computer System Interface (SCSI) ist jahrelang die Profi-Schnittstelle für Geräte wie Festplatten, CD-ROMs aber auch Scanner und anderer externer Geräte gewesen. Auch heute noch finden sich in den meisten Server-Installationen SCSI Geräte, anstelle der sonst üblichen IDE-Platten. SCSI-Geräte sind in der Regel um einiges teurer als ihre IDE-Pendants, bieten aber oft eine bessere Eignung für den Dauerbetrieb und haben auch sonst Features, die unter IDE nicht oder nur schwer zu realisieren sind (Hot-Pluging).

### Grundsätzliche Architektur von SCSI

SCSI ist ein Bussystem, das bis zu 8 Geräte (16 Geräte bei Wide-SCSI) verwalten kann. Eines der 8 (oder 16) Geräte ist der SCSI-Hostadapter selbst. Der Hostadapter (oft fälschlicherweise als SCSI-Controller bezeichnet) ist das SCSI-Gerät, das den Bus mit dem Computer verbindet.

Grundsätzlich besteht ein SCSI System aus einem Bus, der in der Regel im Inneren des Computers durch ein 50poliges Flachbandkabel realisiert wird. Nach außen hin (für externe Geräte wie Scanner) wird ein abgeschirmtes Spezialkabel verwendet. An diesem Bus hängen die SCSI-Geräte, auch der Hostadapter.

Beim Aufbau des Busses müssen folgende Punkte beachtet werden:

- Der Bus darf nur zwei Enden haben, T-Stücke (Abzweigungen) sind verboten.
- Jedes Ende des Busses muß mit einem Terminator (Abschlußwiderstand) abgeschlossen sein. (Die Werte betragen 330 Ohm gegen Masse und 220 Ohm gegen +5V.) Heute werden diese Widerstände entweder softwaremäßig oder gar automatisch gesetzt. Bei älteren SCSI-Geräten war hier noch Steckarbeit erforderlich.
- Der Leitungsabstand zwischen zwei SCSI Geräten muß mindestens 10 cm betragen.
- Der SCSI Bus darf eine Gesamtlänge von drei Metern nicht überschreiten. (Bei mehr als vier Geräten darf er bei klassischem SCSI sogar nur 1,5 Meter lang sein.)
- Bastlerverbindungen (Pfostenstecker o.ä.) sind nicht zulässig, das Flachbandkabel muß durchgängig sein.
- Der Bus darf nicht durch ein offenes Kabelende abgeschlossen sein, d.h., daß selbst wenn nur ein Gerät (außer dem Adapter) angeschlossen ist immer der letzte Anschluß des Kabels verwendet werden muß.

Diese Regeln sind unbedingt einzuhalten, sonst kommt es mit Sicherheit zu Fehlern, deren Ursache oft sehr schwer ermittelbar ist.

### Unterschiedliche SCSI-Typen

SCSI ist ein gewachsenes System, das in verschiedenen Generationen auftritt. Die ursprünglichen Bezeichnungen SCSI, SCSI2 und SCSI3 haben mehr zur Verwirrung beigetragen, als zur Klärung, daher werden heute die folgenden Begriffe verwendet:

SCSI (oder SCSI1)
  Das klassische SCSI, bis zu 8 Geräte (7+Hostadapter) an einem 50poligen Kabel. Es wurde 1986 standardisiert, seitdem können alle SCSI-Hostadapter Geräte ansteuern, die diesem Standard folgen.
SCSI2
  Eine Erweiterung des SCSI-Befehlssatzes, die hauptsächlich auch die Ansteuerung anderer Geräte als Festplatten ermöglichte. Diese Form von SCSI wurde weiter aufgespalten in eine schnellere Variante (Fast SCSI2) und eine Variante mit der Möglichkeit mehrere Geräte (16 statt 8) anzuschließen (Wide-SCSI-2).
SCSI3 (oder Ultra SCSI)
  SCSI3 ist noch nicht vollständig fertig entwickelt, trotzdem bieten es einige Hersteller schon an. Es zeichnet sich durch eine noch höhere Geschwindigkeit aus. Für SCSI3 existieren auch völlig neue Kabelformen (Glasfaser, serielle Übertragung), die aber keine Bedeutung für die LPI-Prüfung haben.

Die Wide-SCSI Varianten benutzen statt einem 50poligen Kabel (8-Bit-Bus) ein 68poliges Kabel (16 Bit Bus), damit die einzelnen Geräte adressiert werden können. Die folgende Tabelle zeigt die verschiedenen Kombinationsmöglichkeiten, die auf dem Markt sind, samt ihren maximalen Transferraten:

Busbreite | Kabelbreite | Standard | Fast | Ultra
--- | --- | --- | --- | ---
8-Bit | 50-polig | 5 MB/sec | 10 MB/sec | 20 MB/sec
16-Bit | 68-polig | 10 MB/sec | 20 MB/sec | 40 MB/sec

Durch entsprechende Kombinationen entstehen dadurch etwas verständlichere Namen wie Ultra-Wide-SCSI oder Fast-Wide-SCSI,...

### Adressierung im SCSI-Bus

Jedes SCSI Gerät muß über eine SCSI-ID verfügen, also einer numerischen Adresse, über die es eindeutig ansprechbar ist. Diese Eindeutigkeit bedeutet, daß kein SCSI Gerät in einem Bus die gleiche ID wie ein anderes haben darf. Die IDs beginnen mit der Null und enden mit der Sieben (Normales SCSI) oder der 15 (Wide-SCSI) Es gibt inzwischen auch schon Versuche mit 32 Geräten, die erfordern jedoch ganz andere Kabel und zum Teil auch andere Protokolle. (Es ist schlicht unmöglich auf einem 1,5 Meter langen Kabel 32 Geräte mit einem Mindestabstand von 10 cm anzuschließen.)

Der Hostadapter hat üblicherweise die ID 7. Die Vergabe der ID sollte nicht wahllos geschehen, den die höchste ID hat immer auch die höchste Priorität im System. Hingegen hat die ID nichts mit der physikalischen Position am Bus zu tun.

Die IDs müssen entweder softwaremäßig (Adapter) oder über Schalter (externe Geräte) und Jumper (interne Geräte) eingestellt werden. Falls eine reine SCSI-Installation ohne IDE Platten eingerichtet werden soll, muß die Bootfestplatte die ID 0 haben.

Neben der SCSI-ID gibt es für jedes Gerät noch eine sogenannte LUN (Logical Unit Number), die eventuell existierende Untergeräte addressiert. So kann etwa ein SCSI-Plattenschrank mit 5 Festplatten aus der Sicht des SCSI-Busses nur ein Gerät mit einer SCSI-ID sein. Um die einzelnen Platten trotzdem ansprechen zu können werden die eigentlichen SCSI-IDs der Platten jetzt zu den LUNs des Plattenschrankes.

Um auch mehrere SCSI-Hostadapter in einem Rechner betreiben zu können, bekommt auch der SCSI-Bus selbst eine Nummerierung. Auch diese Busnummer fängt mit 0 zu zählen an, der erste SCSI-Bus hat also die Busnummer 0, der zweite die 1 usw.

Aus der Kombination der drei Angaben (durch Komma getrennt) lässt sich so eine eindeutige Adressierung innerhalb eines Systems erreichen. Jedes SCSI-Gerät kann mit der Adresse

> Busnummer,SCSI-ID,LUN

angesprochen werden. In den meisten Fällen werden Busnummer und LUN jeweils auf 0 gesetzt sein (wenn nicht mehrere SCSI-Adapter oder Geräte mit Untergeräten im Einsatz sind).

### Das SCSI-BIOS

SCSI ist ein intelligentes Subsystem, von dem das Standard-BIOS des PC nichts weiß. Die Ansteuerung von SCSI-Geräten erfolgt durch entsprechende Gerätetreiber des Betriebssystems. Das ist weiter kein Problem, wenn das Betriebssystem von einem Medium gebootet werden kann, das vom BIOS erkannt wird. Auf einem System, das nur SCSI-Platten aufweist, ist das aber nicht möglich.

Auf einem solchen System muß ein Hostadapter mit eigenem BIOS installiert werden, damit auch von SCSI-Geräten gebootet werden kann. In diesem Punkt unterscheiden sich die Hostadapter stark voneinander. Billige Adapter, wie sie etwa beim Kauf eines SCSI-Scanners mitgeliefert werden, besitzen kein eigenes BIOS sondern dienen ausschließlich der Ansteuerung von SCSI-Geräten im laufenden Betrieb. Teurere Adapter weisen ein eigenes BIOS auf, das - analog zum BIOS des Computers selbst - auch ein Setup-Programm beinhaltet.

Durch eine Tastenkombination beim Hochfahren des Rechners (etwa Strg-A bei Adaptec-Adaptern) wird das Setup-Programm des SCSI-BIOS gestartet. Hier können verschiedene Einstellungen vorgenommen werden, die den Adapter selbst und die angeschlossenen Geräte betreffen (etwa seine SCSI-ID) und Informationen über alle angeschlossenen Geräte ermittelt werden. Dazu zählen insbesondere

- Ermittlung aller vergebenen SCSI-IDs
- Einstellungen die Transferrate betreffend
- Einstellung, von welchem Gerät gebootet werden soll

Manche modernen SCSI-Geräte sind auch in der Lage, ihre SCSI-ID softwaremäßig einzustellen, was dann auch innerhalb dieses Programms vorgenommen werden kann.

### Booten von SCSI-Geräten

Wenn von einem SCSI-Gerät gebootet werden soll, müssen die oben genannten Einstellungen im SCSI-BIOS vorgenommen werden. SCSI-Hostadapter ohne eigenes BIOS eignen sich nicht, um zu booten.

Im System-BIOS muß dann noch eingestellt werden, daß von einem SCSI-Gerät gebootet werden soll. Um welches Gerät es sich handelt, kann das System-BIOS nicht bestimmen, dazu hat der Hostadapter ja sein eigenes BIOS. Bei der Einstellung der Boot-Reihenfolge im System-BIOS (Bootsequence) wird einfach nur SCSI angegeben. In diesem Fall übergibt das System-BIOS die Aufgabe des Bootens an das SCSI-BIOS, das wiederum über die entsprechenden Informationen verfügt, von welchem Gerät gebootet werden soll.

### SCSI im Linux-System

Im /proc-Verzeichnis findet sich ein Unterverzeichnis `scsi`, das alle gefundenen SCSI-Hostadapter wiederum als Unterverzeichnis enthält. Jedes dieser Unterverzeichnisse enthält wiederum eine Datei, die eine Nummer als Namen trägt. Das ist die Nummer, mit der der SCSI-Bus an diesem Adapter bezeichnet wird. Die Datei selbst enthält Informationen über den entsprechenden Adapter.

Ein Beispiel: Auf einem Linux-System sind ein Adaptec-SCSI Adapter AHA-2940 und ein Zip-Laufwerk am Parallelport installiert. Auch das Zip-Laufwerk ist ein SCSI-Gerät, der Parallelport dient hier als SCSI-Adapter (PPA-ParallelPort Adapter). Im Verzeichnis `/proc/scsi` findet sich folgender Inhalt:

      dr-xr-xr-x    ...    aic7xxx
        |
        +   -rw-r--r--    ...  0

      dr-xr-xr-x    ...    ppa
        |
        +   -rw-r--r--    ...  1

      -r--r--r--    ...    scsi

Jedes der beiden Verzeichnisse enthält eine Datei. Das Verzeichnis `aic7xxx` enthält eine Datei mit Namen `0`, das Verzeichnis `ppa` eine mit Namen `1`. Der Bus am Adaptec-Adapter ist also Bus 0, der am Parallelport Bus 1. Die Datei `scsi` enthält Informationen über alle angeschlossene Geräte, egal auf welchem Bus sie hängen.

### Die Namensgebung von SCSI-Geräten unter Linux

Die Namen der SCSI-Geräte unter Linux sind abhängig von der Reihenfolge, in der die Hostadapter beim Booten erkannt werden. Die einzelnen Platten werden anhand der Reihenfolge ihrer Erkennung durchnummeriert. So ist die erste erkannte Festplatte auf dem ersten erkannten SCSI-Adapter die Platte mit dem Namen `/dev/sda`. Die nächste Platte des selben Adapters bekäme den Namen `/dev/sdb`. Sind keine weiteren Platten mehr angeschlossen, beginnt das gleiche Spiel beim nächsten Adapter wieder. Die dortige Platte, die zuerst erkannt wurde wäre also in unserem Beispiel `/dev/sdc`...

CDROM-Laufwerke bekommen entsprechend die Namen `/dev/sr0, /dev/sr1`,... oder auch (gleichzeitig) `/dev/scd0, /dev/scd1`,... Das `sr` steht für SCSI-Removable also SCSI-Wechselplatte.

Eine andere Form der Adressierung wäre eindeutiger, die schon bekannte Form

> Busnummer,SCSI-ID,LUN

Um die beiden Adressierungsformen zueinander in Verbindung zu bringen, existiert das kleine Programm scsi_info, dem als Parameter der Name der Gerätedatei eines beliebigen SCSI-Gerätes mitgegeben wird. Als Ausgabe gibt das Programm dann die Adresse in der Form `Busnummer,SCSI-ID,LUN` und weitere Informationen aus `/proc/scsi/scsi`. Ein Aufruf von

      scsi_info /dev/sda

ergibt beispielsweise eine Ausgabe wie

      SCSI_ID="0,2,0"
      MODEL="IBM DFHSS1F       !c"
      FW_REV="1717"

Mit diesem Hilfsmittel ist es also möglich, die tatsächlichen physikalischen Adressen zu ermitteln.