iSCSI bietet die Möglichkeit, Speicherkapazitäten über ein Netzwerk zu teilen. Im Gegensatz zu NFS, das auf Dateisystemebene arbeitet, funktioniert iSCSI auf Blockgerätebene.
In der iSCSI-Terminologie wird das System, das den Speicherplatz zur Verfügung stellt, als Target bezeichnet. Der Speicherplatz selbst kann aus einer physischen Festplatte bestehen, oder auch aus einem Bereich, der mehrere Festplatten, oder nur Teile einer Festplatte, repräsentiert. Wenn beispielsweise die Festplatte(n) mit ZFS formatiert ist, kann ein zvol erstellt werden, welches dann als iSCSI-Speicher verwendet werden kann.
Die Clients, die auf den iSCSI-Speicher
zugreifen, werden Initiator genannt. Ihnen
steht der verfügbare Speicher als rohe, nicht formatierte
Festplatte, die auch als LUN bezeichnet wird,
zur Verfügung. Die Gerätedateien für die Festplatten erscheinen
in /dev/
und müssen separat formatiert und
eingehangen werden.
FreeBSD enthält einen nativen, kernelbasierten iSCSI Target und Initiator. Dieser Abschnitt beschreibt, wie ein FreeBSD-System als Target oder Initiator konfiguriert wird.
Um ein iSCSI-Target zu konfigurieren,
erstellen Sie die Konfigurationsdatei
/etc/ctl.conf
und fügen Sie eine Zeile
in /etc/rc.conf
hinzu, um
sicherzustellen, dass ctld(8) automatisch beim Booten
gestartet wird. Starten Sie dann den Daemon.
Das folgende Beispiel zeigt eine einfache
/etc/ctl.conf
. Eine vollständige
Beschreibung dieser Datei und der verfügbaren Optionen finden
Sie in ctl.conf(5).
portal-group pg0 { discovery-auth-group no-authentication listen 0.0.0.0 listen [::] } target iqn.2012-06.com.example:target0 { auth-group no-authentication portal-group pg0 lun 0 { path /data/target0-0 size 4G } }
Der erste Eintrag definiert die Portalgruppe
pg0
. Portalgruppen legen fest, auf welchen
Netzwerk-Adressen der ctld(8)-Daemon Verbindungen
entgegennehmen wird. Der Eintrag
discovery-auth-group no-authentication
zeigt an, dass jeder Initiator
iSCSI-Targets suchen darf, ohne sich
authentifizieren zu müssen. Die dritte und vierte Zeilen
konfigurieren ctld(8) so, dass er auf allen
IPv4- (listen 0.0.0.0
)
und IPv6-Adressen
(listen [::]
) auf dem Standard-Port 3260
lauscht.
Es ist nicht zwingend notwendig eine Portalgruppe zu
definieren, da es bereits eine integrierte Portalgruppe namens
default
gibt. In diesem Fall ist der
Unterschied zwischen default
und
pg0
der, dass bei
default
eine Authentifizierung nötig ist,
während bei pg0
die Suche nach Targets
immer erlaubt ist.
Der zweite Eintrag definiert ein einzelnes Target. Ein
Target hat zwei mögliche Bedeutungen: eine Maschine die
iSCSI bereitstellt, oder eine Gruppe von
LUNs. Dieses Beispiel verwendet die
letztere Bedeutung, wobei
iqn.2012-06.com.example:target0
der Name
des Targets ist. Dieser Name ist nur für Testzwecke geeignet.
Für den tatsächlichen Gebrauch ändern Sie
com.example
auf einen echten, rückwärts
geschriebenen Domainnamen. 2012-06
steht
für das Jahr und den Monat, an dem die Domain erworben
wurde. target0
darf einen beliebigen
Wert haben und in der Konfigurationsdatei darf eine beliebige
Anzahl von Targets definiert werden.
Der Eintrag
auth-group no-authentication
erlaubt es
allen Initiatoren sich mit dem angegebenen Target zu verbinden
und portal-group pg0
macht das Target über
die Portalgruppe pg0
erreichbar.
Die nächste Sektion definiert die LUN.
Jede LUN wird dem Initiator als separate
Platte präsentiert. Für jedes Target können mehrere
LUNs definiert werden. Jede
LUN wird über eine Nummer identifiziert,
wobei LUN 0 verpflichtend ist. Die Zeile
mit dem Pfad path /data/target0-0
definiert
den absoluten Pfad zu der Datei oder des zvols für die
LUN. Der Pfad muss vorhanden sein, bevor
ctld(8) gestartet wird. Die zweite Zeile ist optional
und gibt die Größe der LUN an. Als
nächstes fügen Sie folgende Zeile in
/etc/rc.conf
ein, um ctld(8)
automatisch beim Booten zu starten:
ctld_enable="YES"
Um ctld(8) jetzt zu starten, geben Sie dieses Kommando ein:
#
service ctld start
Der ctld(8)-Daemon liest beim Start
/etc/ctl.conf
. Wenn diese Datei nach dem
Starten des Daemons bearbeitet wird, verwenden Sie folgenden
Befehl, damit die Änderungen sofort wirksam werden:
#
service ctld reload
Die vorherigen Beispiele sind grundsätzlich unsicher, da keine Authentifizierung verwendet wird und jedermann vollen Zugriff auf alle Targets hat. Um für den Zugriff auf die Targets einen Benutzernamen und ein Passwort vorauszusetzen, ändern Sie die Konfigurationsdatei wie folgt:
auth-group ag0 { chap username1 secretsecret chap username2 anothersecret } portal-group pg0 { discovery-auth-group no-authentication listen 0.0.0.0 listen [::] } target iqn.2012-06.com.example:target0 { auth-group ag0 portal-group pg0 lun 0 { path /data/target0-0 size 4G } }
Die Sektion auth-group
definiert die
Benutzernamen und Passwörter. Um sich mit
iqn.2012-06.com.example:target0
zu
verbinden, muss ein Initiator zuerst einen Benutzernamen
und ein Passwort angeben. Eine Suche nach Targets wird
jedoch immer noch ohne Authentifizierung gestattet. Um
eine Authentifizierung zu erfordern, setzen Sie
discovery-auth-group
auf eine definierte
auth-group
anstelle von
no-autentication
.
In der Regel wird für jeden Initiator ein einzelnes Target exportiert. In diesem Beispiel wird der Benutzername und das Passwort direkt im Target-Eintrag festgelegt:
target iqn.2012-06.com.example:target0 { portal-group pg0 chap username1 secretsecret lun 0 { path /data/target0-0 size 4G } }
Der in dieser Sektion beschriebene iSCSI-Initiator wird seit FreeBSD 10.0-RELEASE unterstützt. Lesen Sie iscontrol(8), wenn Sie den iSCSI-Initiator mit älteren Versionen benutzen möchten.
Um den Initiator zu verwenden, muss zunächst ein
iSCSI-Daemon gestartet sein. Der
Daemon des Initiators benötigt keine Konfigurationsdatei. Um
den Daemon automatisch beim Booten zu starten, fügen Sie
folgende Zeile in /etc/rc.conf
ein:
iscsid_enable="YES"
Um iscsid(8) jetzt zu starten, geben Sie dieses Kommando ein:
#
service iscsid start
Die Verbindung mit einem Target kann mit, oder ohne eine
Konfigurationsdatei /etc/iscsi.conf
durchgeführt werden. Dieser Abschnitt beschreibt beide
Möglichkeiten.
Um einen Initiator mit einem Target zu verbinden, geben Sie die IP-Adresse des Portals und den Namen des Ziels an:
#
iscsictl -A -p
10.10.10.10
-tiqn.2012-06.com.example:target0
Um zu überprüfen, ob die Verbindung gelungen ist, rufen
Sie iscsictl
ohne Argumente auf. Die
Ausgabe sollte in etwa wie folgt aussehen:
Target name Target portal State iqn.2012-06.com.example:target0 10.10.10.10 Connected: da0
In diesem Beispiel wurde die
iSCSI-Sitzung mit der
LUN /dev/da0
erfolgreich hergestellt. Wenn das Target
iqn.2012-06.com.example:target0
mehr als
nur eine LUN exportiert, werden mehrere
Gerätedateien in der Ausgabe angezeigt:
Connected: da0 da1 da2.
Alle Fehler werden auf die Ausgabe und in die Systemprotokolle geschrieben. Diese Meldung deutet beispielsweise darauf hin, dass der iscsid(8)-Daemon nicht ausgeführt wird:
Target name Target portal State iqn.2012-06.com.example:target0 10.10.10.10 Waiting for iscsid(8)
Die folgende Meldung deutet auf ein Netzwerkproblem hin, zum Beispiel eine falsche IP-Adresse oder einen falschen Port:
Target name Target portal State iqn.2012-06.com.example:target0 10.10.10.11 Connection refused
Diese Meldung bedeutet, dass der Name des Targets falsch angegeben wurde:
Target name Target portal State iqn.2012-06.com.example:target0 10.10.10.10 Not found
Diese Meldung bedeutet, dass das Target eine Authentifizierung erfordert:
Target name Target portal State iqn.2012-06.com.example:target0 10.10.10.10 Authentication failed
Verwenden Sie diese Syntax, um einen CHAP-Benutzernamen und ein Passwort anzugeben:
#
iscsictl -A -p
10.10.10.10
-tiqn.2012-06.com.example:target0
-uuser
-ssecretsecret
Wenn Sie für die Verbindung eine Konfigurationsdatei
verwenden möchten, erstellen Sie
/etc/iscsi.conf
mit etwa folgendem
Inhalt:
t0 { TargetAddress = 10.10.10.10 TargetName = iqn.2012-06.com.example:target0 AuthMethod = CHAP chapIName = user chapSecret = secretsecret }
t0
gibt den Namen der Sektion in der
Konfigurationsdatei an. Diser Name wird vom Initiator
benutzt, um zu bestimmen, welche Konfiguration verwendet
werden soll. Die anderen Einträge legen die Parameter fest,
die während der Verbindung verwendet werden.
TargetAddress
und
TargetName
müssen angegeben werden,
die restlichen sind optional. In diesen Beispiel wird
der CHAP-Benuztername und das Passwort
angegeben.
Um sich mit einem bestimmten Target zu verbinden, geben Sie dessen Namen an:
#
iscsictl -An
t0
Um sich stattdessen mit allen definierten Targets aus der Konfigurationsdatei zu verbinden, verwenden Sie:
#
iscsictl -Aa
Damit sich der Initiator automatisch mit allen Targets
aus /etc/iscsi.conf
verbindet, fügen
Sie folgendes in /etc/rc.conf
hinzu:
iscsictl_enable="YES" iscsictl_flags="-Aa"
Wenn Sie Fragen zu FreeBSD haben, schicken Sie eine E-Mail an
<de-bsd-questions@de.FreeBSD.org>.
Wenn Sie Fragen zu dieser Dokumentation haben, schicken Sie eine E-Mail an
<de-bsd-translators@de.FreeBSD.org>.