iSCSI Linux · 10 min read · Feb 07, 2026

Einrichten einer iSCSI-Umgebung unter Linux

Einrichten einer iSCSI-Umgebung unter Linux

Heutzutage ist die iSCSI-Technologie in der Speicherwelt recht beliebt. Dieser Artikel zeigt eine iSCSI-Demo-Umgebung, die aus einem Debian Linux-Host und einem Netapp Filer besteht. Wir versuchen, die wichtigsten Funktionen dieses Protokolls zu zeigen.

1. Was ist iSCSI?

Es handelt sich um ein Netzwerk-Speicherprotokoll über TCP/IP. Dieses Protokoll kapselt SCSI-Daten in TCP-Pakete. iSCSI ermöglicht es uns, einen Host über eine einfache Ethernet-Verbindung (Bandlaufwerk) mit einem Speicher-Array zu verbinden. Diese Lösung ist günstiger als das Fibre Channel SAN (Fibre Channel HBAs und Switches sind teuer). Aus der Sicht des Hosts sieht der Benutzer die Speicher-Array-LUNs wie lokale Festplatten. iSCSI-Geräte sollten nicht mit NAS-Geräten (zum Beispiel NFS) verwechselt werden. Der wichtigste Unterschied ist, dass NFS-Volumes von mehreren Hosts zugegriffen werden können, während ein iSCSI-Volume von einem Host zugegriffen werden kann. Es ist ähnlich wie beim SCSI-Protokoll: In der Regel hat nur ein Host Zugriff auf eine SCSI-Festplatte (der Unterschied ist die Clusterumgebung). Das iSCSI-Protokoll ist im RFC3720-Dokument der IETF (Internet Engineering Task Force) definiert.

Einige Kritiker haben gesagt, dass iSCSI eine schlechtere Leistung im Vergleich zu Fibre Channel hat und eine hohe CPU-Auslastung auf den Host-Maschinen verursacht. Ich denke, wenn wir Gigabit-Ethernet verwenden, kann die Geschwindigkeit ausreichend sein. Um die hohe CPU-Auslastung zu überwinden, haben einige Anbieter die iSCSI TOE-s (TCP Offload Engine) entwickelt. Das bedeutet, dass die Karte einen integrierten Netzwerkchip hat, der die TCP-Frames erstellt und berechnet. Der Linux-Kernel unterstützt dies nicht direkt, und die Kartenanbieter schreiben ihre eigenen Treiber für das Betriebssystem.

Die wichtigsten iSCSI-Begriffe:

Initiator:

Der Initiator ist der Name des iSCSI-Clients. Der iSCSI-Client hat einen Blockzugriff auf die iSCSI-Geräte, die eine Festplatte, ein Bandlaufwerk, einen DVD/CD-Brenner sein können. Ein Client kann mehrere iSCSI-Geräte verwenden.

Ziel:

Das Ziel ist der Name des iSCSI-Servers. Der iSCSI-Server bietet seine Geräte (Festplatten, Bänder, DVD/CD usw.) den Clients an. Ein Gerät kann von einem Client zugegriffen werden.

Entdeckung:

Entdeckung ist der Prozess, der die Ziele für den Initiator anzeigt.

Entdeckungsmethode:

Beschreibt die Art und Weise, wie die iSCSI-Ziele gefunden werden können. Die derzeit verfügbaren Methoden sind:

  • Internet Storage Name Service (iSNS) - Potenzielle Ziele werden durch Interaktion mit einem oder mehreren iSNS-Servern entdeckt.
  • SendTargets – Potenzielle Ziele werden durch Verwendung einer Entdeckungsadresse entdeckt.
  • SLP - Entdecken von Zielen über das Service Location-Protokoll (RFC 4018)
  • Statisch – Statische Zieladresse wird angegeben.

iSCSI-Namensgebung:

Das RFC-Dokument behandelt auch die iSCSI-Namen. Der iSCSI-Name besteht aus zwei Teilen: Typzeichenfolge und eindeutiger Namenszeichenfolge.

Die Typzeichenfolge kann wie folgt sein:

  • iqn. : iscsi qualifizierter Name
  • eui. : eui-64-Bit-Identifikator

Die meisten Implementierungen verwenden das iqn-Format. Lassen Sie uns unseren Initiator-Namen ansehen: iqn.1993-08.org.debian:01.35ef13adb6d

iqn: Wir verwenden die iSCSI qualifizierte Namensadresse.
1993-08: Das Jahr des Monats, in dem die Namensbehörde den Domainnamen erworben hat, der im iSCSI-Namen verwendet wird.
org.debian: Umgekehrter DNS-Name, der die organisatorische Namensbehörde definiert.
01.35ef13adb6d: Diese Zeichenfolge wird von der Namensbehörde definiert.

Unser Zielname ist ähnlich (iqn.1992-08.com.netapp:sn.84211978). Der Unterschied besteht darin, dass die Seriennummer des Netapp-Filers enthalten ist. Beide Namen sind benutzerbearbeitbar (Initiator, Ziel). Wir benötigen auch zwei IP-Adressen für das Ziel und für den Initiator.

Die folgende Abbildung zeigt unsere Demo-Umgebung. Sie besteht aus einem Debian-Host, der der iSCSI-Initiator ist, und auf die
iSCSI-Festplatte über das /dev/sdb-Gerät zugreift. Der Netapp-Filer ist unser iSCSI-Zielgerät, das die /vol/iscsivol/tesztlun0-Festplatte oder LUN für den Debian Linux-Host anbietet. Die iSCSI-Sitzung besteht aus der Anmeldephase und dann der Datenübertragungsphase.

iSCSI-Namensgebung und Schichten

2. iSCSI-Unterstützung auf anderen Unix-Plattformen

Der Cisco iSCSI-Treiber ist eine der frühesten Software-iSCSI-Initiator-Implementierungen. Dieser Treiber unterstützt alle wichtigen kommerziellen Unix-Systeme und deren Versionen (HPUX:10.20,11,11i, AIX:4.3.3,5.1,5.2, Solaris: 2.6,7,8,9). Die früheste Version kann auf 2001 datiert werden. Derzeit implementiert jeder Unix-Anbieter seinen eigenen Treiber, und wir untersuchen diese Treiber.

Solaris:

Solaris 10 (ab der Version 1/06) unterstützt iSCSI. Der Initiator-Treiber kann Folgendes tun:

  • Unterstützung mehrerer Sitzungen zu einem Ziel: Diese Funktion ermöglicht es, dass ein Client mehrere iSCSI-Sitzungen zu einem Ziel erstellen kann, wie benötigt, und erhöht die Leistung.
  • Multipathing: Mit Hilfe der Solaris Mpxio- oder IPMP-Funktion können wir redundante Pfade zu den Zielen erstellen.
  • 2 TB-Festplatten und CHAP-Authentifizierung werden ebenfalls unterstützt. Der Solaris-Treiber kann die drei Entdeckungsmethoden verwenden (SLP kann dies nicht). iSCSI-Festplatten können über das Formatprogramm zugegriffen werden.

HPUX:

HP unterstützte iSCSI ab dem HP11i v1-Betriebssystem. Dieser Treiber kann die Ziele über SLP (Service Location Protocol) entdecken, das ebenfalls von der IETF (RFC 4018) definiert ist. Das bedeutet, dass der iSCSI-Initiator und die Ziele sich beim SLP-Verzeichnisagenten registrieren. Nach der Registrierung fragt der iSCSI-Initiator nur den Verzeichnisagenten ab. Der HPUX-Treiber implementiert alle Entdeckungsmethoden. Die CHAP-Authentifizierung ist ebenfalls implementiert und die OS-Multipath-Tools (PVLinks) werden ebenfalls unterstützt. Der HPUX-Treiber bietet auch Transportstatistiken.

AIX:

Ab 5.2 unterstützt AIX iSCSI. Der Treiber implementiert nur die statische Zielentdeckung. Wir können die iSCSI-Festplatten mit AIX-Multipathing namens MPIO verwenden. Die CHAP-Authentifizierung wird ebenfalls unterstützt.

Keiner der Treiber erlaubt es uns, von iSCSI zu booten. Dies kann ein nächster Schritt in der Treiberentwicklung sein.

3. iSCSI-Linux-Implementierungen

Initiator-Implementierungen:

Cisco hat auch einen Linux-Treiber veröffentlicht, aber er ist ziemlich alt.

Die Intel-iSCSI-Implementierung enthält sowohl Ziel- als auch Initiator-Treiber sowie ein praktisches Tool zur Generierung von Workloads.

UNH-iSCSI ist eine Initiator- und Zielimplementierung der University of New Hampshire.

Das Open-iSCSI-Projekt ist die neueste Implementierung. Es kann mit 2.6.11-Kerneln und höher verwendet werden. Wir werden diesen Treiber mit dem Debian-Host testen. Es enthält Kernel-Module und einen iscsid-Daemon.

Der iscsid kann mit dem folgenden Befehl gestartet werden:

/etc/init.d/open-scsi start

Die iSCSI-Operationen können mit dem iscsiadm-Befehl gesteuert werden. Der Befehl kann die Ziele entdecken, sich beim Ziel anmelden/abmelden und die Sitzungsinformationen anzeigen.

Die Konfigurationsdateien befinden sich im Verzeichnis /etc/iscsi:

  • iscsid.conf:         Konfigurationsdatei für den iSCSI-Daemon. Sie wird beim Start gelesen.
  • initiatorname.iscsi:    Der Name des Initiators, den der Daemon beim Start liest.
  • nodes-Verzeichnis:         Das Verzeichnis enthält die Knoten und deren Ziele.
  • send_targets-Verzeichnis: Das Verzeichnis enthält die entdeckten Ziele.

Der Installationsprozess ist ziemlich einfach. Geben Sie ein:

apt-get install open-iscsi

Dieser Treiber implementiert derzeit die Sendtargets-Entdeckungsmethode.

Zielimplementierungen:

iSCSI Enterprise Target ist die Open-Source-Zielimplementierung für Linux. Sie basiert auf der Ardis-iSCSI-Linux-Implementierung und erfordert den 2.6.14-Kernel.

Openfiler ist eine recht beliebte Linux-NAS-Implementierung und bietet eine Linux-basierte NAS-Software mit einer webbasierten GUI.

Viele andere Unternehmen bieten softwarebasierte kommerzielle iSCSI-Zieltreiber an (Amgeon, Mayastor, Chelsio).

Die Hersteller von Speicherarrays bieten auch eine native Unterstützung für iSCSI (EMC, Netapp usw.).

Wir haben den Netapp FAS-Filer für die Tests ausgewählt, aber Sie können es auch mit einer kostenlosen Software testen. Am Ende des Artikels gibt es einen Link, der zeigt, wie wir es mit Openfiler machen können.

4. Einrichten der iSCSI-Linux-Demo-Umgebung

Unsere Demo-Umgebung enthält einen Debian Linux-Host und einen Netapp-Filer. Der Debian-Host ist der Initiator, und der Netapp-Filer ist das Ziel.

Der Einrichtungsprozess ist folgendermaßen kurz:

  1. Wir sollten die TCP/IP-Verbindung zwischen Debian und Netapp-Filer einrichten. Der Initiator und das Ziel müssen sich gegenseitig anpingen. Wir gehen davon aus, dass das open-iscsi-Paket bereits auf Debian installiert ist.
  2. Der Debian-Host muss die Netapp-Ziele entdecken. Dies wird als “Entdeckungsprozess” bezeichnet. Dann sendet das Ziel die Ziel-Listen.
  3. Das Ziel muss dem Initiator den Zugriff auf die LUN ermöglichen. Auf der Netapp-Seite bedeutet dies, dass wir eine Initiatorgruppe erstellen sollten, die eine logische Bindung zwischen den Hosts und den LUNs ist. Die Initiatorgruppe enthält die LUN und einen Debian-Host, der auf diese LUN zugreifen kann.
  4. Wenn der Initiator die Ziel-Listen erhält, muss er sich beim Ziel “anmelden”.
  5. Wenn der “Anmelde”-Prozess erfolgreich abgeschlossen ist und der Netapp-Filer den Zugriff erlaubt, kann der Initiator die iSCSI-Festplatte wie eine normale Festplatte verwenden. Sie erscheint unter den /dev/sdx-Geräten, und Sie können sie formatieren und einhängen wie eine normale Festplatte.

Hier sind die detaillierten Schritte:

  1. Wir pingen den Netapp-Filer vom Linux-Host an:
debian:~# ping nasa

PING nasa (192.168.2.222) 56(84) Bytes Daten.

64 Bytes von nasa (192.168.2.222): icmp_seq=1 ttl=255 time=0.716 ms
64 Bytes von nasa (192.168.2.222): icmp_seq=2 ttl=255 time=0.620 ms

Es ist erfolgreich.

  1. Wir entdecken die Netapp-Filer iSCSI LUNs mit dem iscsiadm-Befehl. Wir haben die st (sendtargets) Entdeckungsmethode gewählt. Derzeit wird sie mit diesem Treiber implementiert:
debian:~# iscsiadm -m discovery -t st -p 192.168.2.222

192.168.2.222:3260 über sendtargets

Lassen Sie uns die entdeckten Ziele ansehen:

debian:~# iscsiadm -m node

192.168.2.222:3260,1000 iqn.1992-08.com.netapp:sn.84211978

  1. Wir müssen die Netapp-Seite vorbereiten: In diesem Beispiel werden wir eine 4-GB-LUN (Teil der RAID-Gruppe) erstellen und sie dem Debian-Host zuweisen. Wir sollten den freien Speicherplatz überprüfen:
nasa> df -k

Dateisystem
gesamt
verwendet  verfügbar Kapazität  Eingehängt auf
/vol/vol0/
8388608KB   476784KB
7911824KB       6%  /vol/vol0/
/vol/vol0/.snapshot
2097152KB    10952KB
2086200KB       1%
/vol/vol0/.snapshot
/vol/iscsiLunVol/   31457280KB 20181396KB 11275884KB      64%  /vol/iscsiLunVol/
/vol/iscsiLunVol/.snapshot
0KB
232KB
0KB     —%
/vol/iscsiLunVol/.snapshotunVol/testlun1

Der folgende Befehl erstellt eine 4-GB-LUN auf dem iscsiLunVol-Volume:

nasa> lun create -s 4g -t linux /vol/iscsiLunVol/testlun1

Überprüfen:

nasa> lun show

/vol/iscsiLunVol/iscsitestlun    7.0g
(7526131200)    (r/w, online, zugeordnet)
/vol/iscsiLunVol/iscsitestlun2    7.0g
(7526131200)   (r/w, online, zugeordnet)
/vol/iscsiLunVol/testlun1      4g
(4294967296)        (r/w, online)

Wir sollten überprüfen, ob der Debian-Host vom Netapp-Host sichtbar ist:

nasa> iscsi initiator show

Initiatoren verbunden:
TSIH  TPGroup  Initiator
19    1000   debian (iqn.1993-08.org.debian:01.35ef13adb6d / 00:02:3d:00:00:00)

Ok, wir sehen den Debian-Host. Lassen Sie uns die Initiatorgruppe erstellen, die Debian2 genannt wird.

nasa> igroup create -i -t linux Debian2 iqn.1993-08.org.debian:01.35ef13adb6d
nasa> igroup show
    Debian2 (iSCSI) (ostype: linux):  
        iqn.1993-08.org.debian:01.35ef13adb6d (eingeloggt auf: e0a)

Wir sollten die neu erstellte LUN den Debian2-Hosts zuweisen.

nasa> lun map /vol/iscsiLunVol/testlun1 Debian2

lun map: automatisch zugewiesen Debian2=2

Der Überprüfungsbefehl:

nasa> lun show -v

/vol/iscsiLunVol/testlun1      4g
(4294967296)    (r/w, online, zugeordnet)
Seriennummer: hpGBe4AZsnLV
Freigabe: keine
Speicherreservierung: aktiviert
Multiprotocoltyp: linux
Zuordnungen: Debian2=2

  1. Lassen Sie uns zu unserem Initiator-Host zurückkehren. Jetzt ist alles vorbereitet, um auf die 4-GB-LUN zuzugreifen. Der folgende Befehl macht die Festplatte vom Linux-Host aus zugänglich.
debian:~#  iscsiadm -m node -T iqn.1992-08.com.netapp:sn.84211978 -p  

192.168.2.222:3260 –login

Wir sollten die folgenden Einträge in der Nachrichten-Datei sehen:

debian:~# tail /var/log/messages

Apr 13 00:31:34 debian kernel: scsi: unbekannter Gerätetyp 31
Apr 13 00:31:34 debian kernel:   Anbieter: NETAPP
Modell:
LUN               Rev: 0.2
Apr 13 00:31:34 debian kernel:
Typ:
Unbekannt                            ANSI SCSI-Revision: 04
Apr 13 00:31:34 debian kernel: Anbieter: NETAPP    Modell:
LUN               Rev: 0.2
Apr 13 00:31:34 debian kernel:
Typ:
Direktzugriff                      ANSI SCSI-Revision: 04
Apr 13 00:31:34 debian kernel: SCSI-Gerät sdb: 8388608 512-Byte-HDWR-Sektoren (4295 MB)
Apr 13 00:31:34 debian kernel: sdb: Schreibschutz ist deaktiviert
Apr 13 00:31:34 debian kernel: SCSI-Gerät sdb: Laufwerkscache: Durchschreiben
Apr 13 00:31:34 debian kernel: sd 1:0:0:2: Angeschlossenes SCSI-Laufwerk sdb

Die Festplatte erscheint als sdb-Gerät (/dev/sdb).

  1. Wir können es wie eine normale Festplatte verwenden. Sie können eine Partition erstellen und sie ganz einfach einhängen.
debian:~# fdisk /dev/sdb 
debian:~# mkfs /dev/sdb1 ; mount /dev/sdb1 /mnt 

Wenn Sie sdb nach dem nächsten Neustart verwenden möchten, sollten Sie den folgenden Eintrag ändern:

node.conn[0].startup = manual auf automatic

in der Datei /etc/iscsi/nodes//. Nachdem Sie dies geändert haben, wird der iSCSI-Daemon sich bei diesem Ziel anmelden. Das Hinzufügen eines automatischen Eintrags zum Einhängen (/dev/sdb1 /mnt) in die /etc/fstab-Datei funktioniert nicht, da der open-iscsi-Daemon später als das Einhängen der Dateisysteme gestartet wird. Ein einfaches Skript kann dieses Problem lösen, das das automatische Einhängen nach dem Start des iSCSI-Daemons durchführt.

Die open-iscsi-Initiatorimplementierung toleriert Netzwerkfehler gut. Wenn Sie das Ethernet-Kabel trennen und wieder anschließen, müssen Sie den IO-Prozess erneut starten, aber die Wiederverbindung erfolgt automatisch.

Eine weitere gute Lösung für Netzwerkfehler besteht darin, mehrere Pfade für eine LUN zu erstellen (zum Beispiel: /dev/sdb, /dev/sdc), der Initiator meldet sich an zwei Standorten (zwei RAID-Controller) an, und Sie machen die beiden Festplatten zu einer einzigen logischen Festplatte mit Hilfe von Linux-Multipath-Software (dmsetup).

Ich empfehle eine weitere Alternative zur iSCSI-Zielimplementierung: Openfiler (wenn Sie nicht auf dem Netapp-Box testen können). Es ist eine kostenlose, Linux-basierte NAS-Software, die mit einer webbasierten GUI verwaltet werden kann.

Der iSCSI-Einrichtungsprozess ist im Fall anderer Unix-Implementierungen recht ähnlich.

5. Zusammenfassung und Ergebnisse

iSCSI ist eine gute Lösung für einen kostengünstigen Katastrophenschutzstandort. Sie sollten keine teure Fibre-Channel-Karte am Katastrophenschutzstandort kaufen, Sie können Ethernet und iSCSI verwenden. Sie können es auch verwenden, um Hosts ohne Fibre-Channel-Host-Adapter mit Festplattenarrays zu verbinden (wenn die Arrays iSCSI-fähig sind).

Während des Tests habe ich den Debian-Host im VMware Player-Programm ausgeführt, und meine Netzwerkverbindung betrug 100 Mbit/s. Ich kann nicht mehr als 15 MB/s Lese-/Schreibgeschwindigkeit erreichen, aber das ist nicht relevant. Mit Gigabit-Ethernet können Sie viel bessere Leistungen erzielen, der einzige Nachteil ist, dass die CPU-Auslastung steigt (die CPU muss TCP-Frames erstellen und berechnen).

Hier ist meine einfache Homepage.

Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.