Verschiedene Open-Source-Projekte widmen sich dem Thema iSCSI unter Linux. Network Computing stellt den fertigen Initiator von Cisco und das in Entwicklung befindliche Target von Intel vor.
Aus den Intel-Laboratorien stammt eine iSCSI-Target-Implementierung für Linux. Um es gleich vorweg zu nehmen: Der Treiber befindet sich noch im Alpha-Stadium und kann daher vorerst nur für Testinstallationen dienen. Im Gegenzug kommt der Intel-Treiber mit recht geringen Konfigurationsoptionen aus und lässt sich über einige simple Kommandozeilentools bedienen.
Für den Test verwendet Network Computing den bestehenden Poweredge-Server, baut aber zusätzlich drei weitere 9-GByte-SCSI-Laufwerke ein, um diese als LUNs im SAN freigeben zu können. Das Linux-Target soll wie gehabt über das zweite Netzwerk-Interface mit Jumbo-Frames arbeiten.
Laden Sie den Treiber von http://sourceforge.net/projects/intel-iscsi/ und entpacken Sie den Inhalt des Archivs in ein temporäres Verzeichnis. Intel liefert für den Inititator-Betrieb sowohl User-Mode- als auch Kernel-Mode-Treiber, für das Target vorerst nur einen User-Mode-Treiber. Das mitgelieferte Kernel-Target arbeitet vorerst nur mit einer Ramdisk. Wechseln Sie in das Verzeichnis /src und kompilieren Sie den Treiber mittels make. Auf unserem Testsystem bricht der Übersetzungsvorgang mittendrin ab - was aber nicht weiter stört. Die Kompilierung des Kernel-Mode-Treibers funktioniert nicht, doch zum Zeitpunkt des Abbruchs liegen die fertigen Binaries des User-Mode-Treibers bereits im /bin-Verzeichnis. Das Target offeriert zwei Tools namens ufsdisk, welches physische Disks und Pseudo-Disks im Filesystem freigibt und uramdisk, das eine RAM-Disk erstellt.
Die Parameter beider Tools stellen die Konfiguration ein: -l legt die Zahl der LUNs fest, -n gibt die Blockgröße der Datenträger vor, -t übergibt dem Target einen Namen, -p legt die Portnummer und -b die Blockgröße fest.
Um die Funktion des Targets zu prüfen, geben Sie einfach /bin/uramdisk ein. Das System erstellt gemäß der Vorgabe eine 100 MByte große Ramdisk auf dem Target mit dem Namen »iqn.com.intel.abc123«. Über einem Initiator wie dem MS-Software-Initiator können sie sofort mit der 100 MByte-Platte arbeiten. Alle Zugriffe auf dieses Target protokolliert der Intel-Treiber direkt auf die Konsole.
Das Kommando ufsdisk erstellt im /tmp-Verzeichnis des Systems virtuelle Laufwerke. Rufen Sie dieses Kommando ohne Parameter auf, generiert es die Datei /tmp/iqn.com.intel.abc123_3260_iscsi_disk_lun_0 mit einer Größe von 100 MByte und gibt diese frei. Mit den passenden Parametern lassen sich somit auch mehrere größere Laufwerke erstellen. Anstelle der Pseudo-Laufwerke im Dateisystem kann ufsdisk auch physische Laufwerke im SAN bereitstellen. Dazu generieren Sie symbolische Links von den physischen Platten auf den iSCSI-Laufwerks-Dateinamen im /tmp-Verzeichnis.
ln -s /dev/sdb /tmp/iqn.com.intel.abc123_3260_iscsi_disk_lun_0
Das Target-Tool ermittelt dabei allerdings nicht die Größe des physischen Laufwerks, sondern die Blöcke gemäß der Kommandozeile. Wollen Sie eine komplette Platte zur Verfügung stellen, müssen sie die Zahl der Blöcke bestimmen und manuell angeben. Gehen Sie dazu am besten mit fdisk auf das Laufwerk und erstellen Sie eine große Partition, die den gesamten Platz der Platte ausnutzt. Nehmen Sie die Zahl der Blöcke, die fdisk dabei anzeigt mal zwei (fdisk zeigt 1-KByte-Blöcke, iSCSI gibt 512-Byte-Blöcke frei), und Sie erhalten die Zahl der via iSCSI freizugebenden Blöcke.
Neben dem Cisco-Initiator und dem Intel Target stehen weitere freie Treiber für Linux bereit. Eine weitere interessante Implementierung ist der Treiber der Interoperability Labs der University of New Hampshire (unh-iSCSI) auf http://unhiscsi.sourceforge.net/. Dieser Treiber arbeitet sowohl als Target als auch als Initiator. In den Real-World Labs testete Network Computing kurz die RPM-Distribution des uhn-Treibers für Redhat 8. Allerdings arbeitet diese Version nicht ohne Fehler unter Redhat 9, weswegen sich dieser Workshop hauptsächlich dem Intel-Target und dem Cisco-Initiator widmet. [ ast ]