Dieser Artikel soll die Installation von iSCSI unter Debian Linux beschreiben.
Ich habe versucht, eine Schritt-für-Schritt-Anleitung zu generieren.
Weiterführende Links:
Homepage von open-iscsi
Debian-Installation mit Kernel-Sourcen (hier: 2.6.23 von http://www.kernel.org) und Übersetzungswerkzeugen
iSCSI-Target-Sourcen (apt-get install iscsitarget-source) aus der derzeit "unstable"-Distribution
- Kernel-Source holen
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.23.tar.bz2
das Archiv nach /usr/src legen - Kernel-Source entpacken
in /usr/src aufrufen:
tar -xjvf linux-2.6.23.tar.bz2
am besten gleich einen symbolischen Link setzen auf ein generisches Verzeichnis /usr/src/linux:
ln -s linux-2.6.23 linux
- Kernel übersetzen:
in /usr/src/linux zunächst
make menuconfig
und damit der Kernel konfigurieren Dann mit
make-kpkg --revision tester kernel-image
ein Kernel-Image generieren. Dieses liegt anschließend unter /usr/src - Sourcen für iSCSI-Target holen
apt-get install iscsitarget-source
- iSCSI-Target-Module übersetzen
in /usr/src/linux aufrufen:
make-kpkg modules-image
Anschließend liegt unter /usr/src ein Modul-Paket mit der gleichen Revisionsbezeichnung wie beim Kernel angegeben. - Kernel und iSCSI-Target-Module installieren mit
dpkg -i linux-image-2.6.23_tester_i386.deb
und
dpkg -i iscsitarget-module-2.6.23_0.4.15+svn145-1+tester_i386.deb
- Neustart
- Installation der iscsitarget-Software mit
apt-get install iscsitarget
Damit wird im Erfolgsfall auch gleich der ietd-Daemon gestartet.
aktueller Kernel-Source und Übersetzungswerkzeuge
- Übersetzen des Kernels
Bei der Compilierung des Kernels muss unter "Device Drivers" - "SCSI device support" - "SCSI low level drivers" der Treiber "iSCSI Initiator over TCP/IP" ausgewählt werden, ich habe mich für die Einbindung als Modul entschieden. In der .config entspricht das dem Eintrag "CONFIG_ISCSI_TCP=m". Außerdem muss eine Ebene weiter oben auch der "SCSI disk support" aktiviert werden - sonst kann man später keine iSCSI-Laufwerke einbinden, denn die werden als virtuelle SCSI-Disks angesprochen. Auch hier ist es möglich, ein Modul zu generieren. - Reboot mit neuem Kernel und Aktivierung der Module iscsi_tcp und sd_mod
- Installation der open-iscsi-Software mit
apt-get install open-iscsi
Das startet auch gleich den Daemon, der, sofern kernelseitig alles korrekt installiert ist.
Wenn alles glattgegangen ist und auch das Target läuft, dann sollte folgendes funktionieren:
iscsiadm -m discovery
Dieser Befehl sucht nach den verfügbaren iSCSI-Nodes im Netzwerk und zeigt sie an. Wenn das im vorherigen Kapitel installierte iSCSI-Target noch in seiner Standard-Konfiguration ist, wird bereits ein Node angezeigt:
# iscsiadm -m discovery tester:3260 via sendtargets
Und jetzt schauen wir gleich noch, was er genau gefunden hat:
Das entspricht genau dem, was in der iSCSI-Target-Konfiguration aktuell drinsteht! Damit können wir also davon ausgehen, dass sich Client und Target unterhalten können.
# iscsiadm -m node 10.1.100.125:3260,1 iqn.2001-04.com.example:storage.disk2.sys1.xyz
In der Datei /etc/ietd.conf finden wir bereits ein Beispiel-Target. Hier brauchen wir, um die Funktionalität zu testen, eigentlich nur noch die Partition anzugeben, die wir als iSCSI-Target zur Verfügung stellen wollen.
Auf dem Testsystem haben wir dazu das physische Laufwerk /dev/hdc angeschlossen. Für dieses zeigt uns "fdisk -l" folgende Daten:
# fdisk -l /dev/hdc Disk /dev/hdc: 16.9 GB, 16907304960 bytes 16 heads, 63 sectors/track, 32760 cylinders Units = cylinders of 1008 * 512 = 516096 bytes Disk identifier: 0x00000000
Device Boot Start End Blocks Id System /dev/hdc1 1 32760 16511008+ 83 Linux
Wir nehmen daher einfach aus dem Beispiel-Target das "#"-Zeichen der Zeile "Lun 0 Path=......" heraus und passen sie so an, dass sie folgendermaßen aussieht:
Lun 0 Path=/dev/hdc,Type=fileio
Anschließend starten wir den Daemon neu mit
# /etc/init.d/iscsitarget restart
Nachdem wir nun ein laufendes iSCSI-Target haben, müssen wir noch eine Verbindung dorthin herstellen.
Bei der Einrichtung des Clients hatten wir ja bereits eine Verbindung zu unserem Beispiel-Target hergestellt. Die trennen wir jetzt erst mal wieder und bauen sie neu auf. Trennen:
iscsiadm -m node -T iqn.2001-04.com.example:storage.disk2.sys1.xyz -u
Wiederverbinden:
iscsiadm -m node -T iqn.2001-04.com.example:storage.disk2.sys1.xyz -l
Und jetzt schauen wir mal mit "dmesg", was passiert ist. Wenn wir alles richtig gemacht haben, sehen wir dort folgende Zeilen am Ende:
scsi0 : iSCSI Initiator over TCP/IP Vendor: IET Model: VIRTUAL-DISK Rev: 0 Type: Direct-Access ANSI SCSI revision: 04 scsi 0:0:0:0: Attached scsi generic sg0 type 0 SCSI device sda: 33022080 512-byte hdwr sectors (16907 MB) sda: Write Protect is off sda: Mode Sense: 77 00 00 08 SCSI device sda: drive cache: write through SCSI device sda: 33022080 512-byte hdwr sectors (16907 MB) sda: Write Protect is off sda: Mode Sense: 77 00 00 08 SCSI device sda: drive cache: write through sda: sda1 sd 0:0:0:0: Attached scsi disk sda
Nach "dmesg" haben wir also ein virtuelles SCSI-Laufwerk /dev/sda verbunden. Schauen wir mal, was fdisk dazu meint:
# fdisk -l /dev/sda Disk /dev/sda: 16.9 GB, 16907304960 bytes 16 heads, 63 sectors/track, 32760 cylinders Units = cylinders of 1008 * 512 = 516096 bytes Disk identifier: 0x00000000
Device Boot Start End Blocks Id System /dev/sda1 1 32760 16511008+ 83 Linux
Wenn wir das mit der Ausgabe vom iSCSI-Target-System weiter oben vergleichen, stellen wir fest, dass das identische Angaben sind - nur die Devicenamen unterscheiden sich.
Bisher haben wir ja nur eine iSCSI-Verbindung herstellt. Diese hat uns aber das virtuelle SCSI-Laufwerk eingerichtet - das können wir auf die gewohnte Weise mounten:
#mount /dev/sda1 /mnt
Damit sollten wir unter /mnt den Inhalt des Laufwerks /dev/hdc vom iSCSI-Target-System sehen - sofern bereits Inhalte existieren.
Natürlich können wir auch bei der Verbindung zum iSCSI-Target dort ein völlig leeres Laufwerk haben - das können wir dann remote mit fdisk nach Belieben partitionieren.
|