Update to r42910:

Add section describing the new iSCSI stack.
This section was translated from the latest r47889.

Reviewed by:	bcr
Differential Revision:	https://reviews.freebsd.org/D5170
This commit is contained in:
Bjoern Heidotting 2016-02-03 19:49:59 +00:00
parent eef7bcc5ba
commit d17c111223
Notes: svn2git 2020-12-08 03:00:23 +00:00
svn path=/head/; revision=48147

View file

@ -5,7 +5,7 @@
$FreeBSD$
$FreeBSDde: de-docproj/books/handbook/network-servers/chapter.xml,v 1.103 2011/12/24 15:51:18 bcr Exp $
basiert auf: r42610
basiert auf: r42910
-->
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="network-servers">
<info><title>Netzwerkserver</title>
@ -95,6 +95,11 @@
<command>syslogd</command>, konfiguriert, um Protokolle von
anderen Hosts zu akzeptieren.</para>
</listitem>
<listitem>
<para>Wissen, wie <acronym>iSCSI</acronym> eingerichtet
wird.</para>
</listitem>
</itemizedlist>
<para>Dieses Kapitel setzt folgende Grundkenntnisse voraus:</para>
@ -6432,4 +6437,360 @@ Logging to FILE /var/log/messages</screen>
verhindern, dass lokale Benutzer darin herumschnüffeln.</para>
</sect2>
</sect1>
<sect1 xml:id="network-iscsi">
<!--
<info>
<authorgroup>
<author>
<firstname>Edward Tomasz</firstname>
<surname>Napierala</surname>
</author>
</authorgroup>
</info>
-->
<title>iSCSI Initiator und Target Konfiguration</title>
<para><acronym>iSCSI</acronym> bietet die Möglichkeit,
Speicherkapazitäten über ein Netzwerk zu teilen. Im Gegensatz
zu <acronym>NFS</acronym>, das auf Dateisystemebene arbeitet,
funktioniert <acronym>iSCSI</acronym> auf
Blockgerätebene.</para>
<para>In der <acronym>iSCSI</acronym>-Terminologie wird das
System, das den Speicherplatz zur Verfügung stellt, als
<emphasis>Target</emphasis> 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 <acronym>ZFS</acronym> formatiert ist, kann
ein <acronym>zvol</acronym> erstellt werden, welches dann als
<acronym>iSCSI</acronym>-Speicher verwendet werden kann.</para>
<para>Die Clients, die auf den <acronym>iSCSI</acronym>-Speicher
zugreifen, werden <emphasis>Initiator</emphasis> genannt. Ihnen
steht der verfügbare Speicher als rohe, nicht formatierte
Festplatte, die auch als <acronym>LUN</acronym> bezeichnet wird,
zur Verfügung. Die Gerätedateien für die Festplatten erscheinen
in <filename>/dev/</filename> und müssen separat formatiert und
eingehangen werden.</para>
<para>Seit 10.0-RELEASE enthält &os; einen nativen,
kernelbasierten <acronym>iSCSI</acronym>
<emphasis>Target</emphasis> und <emphasis>Initiator</emphasis>.
Dieser Abschnitt beschreibt, wie ein &os;-System als Target oder
Initiator konfiguriert wird.</para>
<sect2 xml:id="network-iscsi-target">
<title>Ein <acronym>iSCSI</acronym>-Target konfigurieren</title>
<note>
<para>Ein natives <acronym>iSCSI</acronym>-Target wird seit
&os; 10.0-RELEASE unterstützt. Um <acronym>iSCSI</acronym>
mit älteren Versionen zu benutzen, installieren Sie ein
Target aus der Ports-Sammlung, beispielsweise
<package>net/istgt</package>. Dieses Kapitel beschreibt
nur das native Target.</para>
</note>
<para>Um ein <acronym>iSCSI</acronym>-Target zu konfigurieren,
erstellen Sie die Konfigurationsdatei
<filename>/etc/ctl.conf</filename> und fügen Sie eine Zeile
in <filename>/etc/rc.conf</filename> hinzu, um
sicherzustellen, dass &man.ctld.8; automatisch beim Booten
gestartet wird. Starten Sie dann den Daemon.</para>
<para>Das folgende Beispiel zeigt eine einfache
<filename>/etc/ctl.conf</filename>. Eine vollständige
Beschreibung dieser Datei und der verfügbaren Optionen finden
Sie in &man.ctl.conf.5;.</para>
<programlisting>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
}
}</programlisting>
<para>Der erste Eintrag definiert die Portalgruppe
<literal>pg0</literal>. Portalgruppen legen fest, auf welchen
Netzwerk-Adressen der &man.ctld.8;-Daemon Verbindungen
entgegennehmen wird. Der Eintrag
<literal>discovery-auth-group no-authentication</literal>
zeigt an, dass jeder Initiator
<acronym>iSCSI</acronym>-Targets suchen darf, ohne sich
authentifizieren zu müssen. Die dritte und vierte Zeilen
konfigurieren &man.ctld.8; so, dass er auf allen
<acronym>IPv4</acronym>- (<literal>listen 0.0.0.0</literal>)
und <acronym>IPv6</acronym>-Adressen
(<literal>listen [::]</literal>) auf dem Standard-Port 3260
lauscht.</para>
<para>Es ist nicht zwingend notwendig eine Portalgruppe zu
definieren, da es bereits eine integrierte Portalgruppe namens
<literal>default</literal> gibt. In diesem Fall ist der
Unterschied zwischen <literal>default</literal> und
<literal>pg0</literal> der, dass bei
<literal>default</literal> eine Authentifizierung nötig ist,
während bei <literal>pg0</literal> die Suche nach Targets
immer erlaubt ist.</para>
<para>Der zweite Eintrag definiert ein einzelnes Target. Ein
Target hat zwei mögliche Bedeutungen: eine Maschine die
<acronym>iSCSI</acronym> bereitstellt, oder eine Gruppe von
<acronym>LUN</acronym>s. Dieses Beispiel verwendet die
letztere Bedeutung, wobei
<literal>iqn.2012-06.com.example:target0</literal> der Name
des Targets ist. Dieser Name ist nur für Testzwecke geeignet.
Für den tatsächlichen Gebrauch ändern Sie
<literal>com.example</literal> auf einen echten, rückwärts
geschriebenen Domainnamen. <literal>2012-06</literal> steht
für das Jahr und den Monat, an dem die Domain erworben
wurde. <literal>target0</literal> darf einen beliebigen
Wert haben und in der Konfigurationsdatei darf eine beliebige
Anzahl von Targets definiert werden.</para>
<para>Der Eintrag
<literal>auth-group no-authentication</literal> erlaubt es
allen Initiatoren sich mit dem angegebenen Target zu verbinden
und <literal>portal-group pg0</literal> macht das Target über
die Portalgruppe <literal>pg0</literal> erreichbar.</para>
<para>Die nächste Sektion definiert die <acronym>LUN</acronym>.
Jede <acronym>LUN</acronym> wird dem Initiator als separate
Platte präsentiert. Für jedes Target können mehrere
<acronym>LUN</acronym>s definiert werden. Jede
<acronym>LUN</acronym> wird über eine Nummer identifiziert,
wobei <acronym>LUN</acronym> 0 verpflichtend ist. Die Zeile
mit dem Pfad <literal>path /data/target0-0</literal> definiert
den absoluten Pfad zu der Datei oder des zvols für die
<acronym>LUN</acronym>. Der Pfad muss vorhanden sein, bevor
&man.ctld.8; gestartet wird. Die zweite Zeile ist optional
und gibt die Größe der <acronym>LUN</acronym> an. Als
nächstes fügen Sie folgende Zeile in
<filename>/etc/rc.conf</filename> ein, um &man.ctld.8;
automatisch beim Booten zu starten:</para>
<programlisting>ctld_enable="YES"</programlisting>
<para>Um &man.ctld.8; jetzt zu starten, geben Sie dieses
Kommando ein:</para>
<screen>&prompt.root; <userinput>service ctld start</userinput></screen>
<para>Der &man.ctld.8;-Daemon liest beim Start
<filename>/etc/ctl.conf</filename>. Wenn diese Datei nach dem
Starten des Daemons bearbeitet wird, verwenden Sie folgenden
Befehl, damit die Änderungen sofort wirksam werden:</para>
<screen>&prompt.root; <userinput>service ctld reload</userinput></screen>
<sect3>
<title>Authentifizierung</title>
<para>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:</para>
<programlisting>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
}
}</programlisting>
<para>Die Sektion <literal>auth-group</literal> definiert die
Benutzernamen und Passwörter. Um sich mit
<literal>iqn.2012-06.com.example:target0</literal> 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
<literal>discovery-auth-group</literal> auf eine definierte
<literal>auth-group</literal> anstelle von
<literal>no-autentication</literal>.</para>
<para>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:</para>
<programlisting>target iqn.2012-06.com.example:target0 {
portal-group pg0
chap username1 secretsecret
lun 0 {
path /data/target0-0
size 4G
}
}</programlisting>
</sect3>
</sect2>
<sect2 xml:id="network-iscsi-initiator">
<title>Einen <acronym>iSCSI</acronym>-Initiator
konfigurieren</title>
<note>
<para>Der in dieser Sektion beschriebene
<acronym>iSCSI</acronym>-Initiator wird seit &os;
10.0-RELEASE unterstützt. Lesen Sie &man.iscontrol.8;, wenn
Sie den <acronym>iSCSI</acronym>-Initiator mit älteren
Versionen benutzen möchten.</para>
</note>
<para>Um den Initiator zu verwenden, muss zunächst ein
<acronym>iSCSI</acronym>-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 <filename>/etc/rc.conf</filename>
ein:</para>
<programlisting>iscsid_enable="YES"</programlisting>
<para>Um &man.iscsid.8; jetzt zu starten, geben Sie dieses
Kommando ein:</para>
<screen>&prompt.root; <userinput>service iscsid start</userinput></screen>
<para>Die Verbindung mit einem Target kann mit, oder ohne eine
Konfigurationsdatei <filename>/etc/iscsi.conf</filename>
durchgeführt werden. Dieser Abschnitt beschreibt beide
Möglichkeiten.</para>
<sect3>
<title>Verbindung zu einem Target herstellen - ohne
Konfigurationsdatei</title>
<para>Um einen Initiator mit einem Target zu verbinden, geben
Sie die <acronym>IP</acronym>-Adresse des Portals und den
Namen des Ziels an:</para>
<screen>&prompt.root; <userinput>iscsictl -A -p <replaceable>10.10.10.10</replaceable> -t <replaceable>iqn.2012-06.com.example:target0</replaceable></userinput></screen>
<para>Um zu überprüfen, ob die Verbindung gelungen ist, rufen
Sie <command>iscsictl</command> ohne Argumente auf. Die
Ausgabe sollte in etwa wie folgt aussehen:</para>
<programlisting>Target name Target portal State
iqn.2012-06.com.example:target0 10.10.10.10 Connected: da0</programlisting>
<para>In diesem Beispiel wurde die
<acronym>iSCSI</acronym>-Sitzung mit der
<acronym>LUN</acronym> <filename>/dev/da0</filename>
erfolgreich hergestellt. Wenn das Target
<literal>iqn.2012-06.com.example:target0</literal> mehr als
nur eine <acronym>LUN</acronym> exportiert, werden mehrere
Gerätedateien in der Ausgabe angezeigt:</para>
<screen>Connected: da0 da1 da2.</screen>
<para>Alle Fehler werden auf die Ausgabe und in die
Systemprotokolle geschrieben. Diese Meldung deutet
beispielsweise darauf hin, dass der &man.iscsid.8;-Daemon
nicht ausgeführt wird:</para>
<programlisting>Target name Target portal State
iqn.2012-06.com.example:target0 10.10.10.10 Waiting for iscsid(8)</programlisting>
<para>Die folgende Meldung deutet auf ein Netzwerkproblem hin,
zum Beispiel eine falsche <acronym>IP</acronym>-Adresse oder
einen falschen Port:</para>
<programlisting>Target name Target portal State
iqn.2012-06.com.example:target0 10.10.10.11 Connection refused</programlisting>
<para>Diese Meldung bedeutet, dass der Name des Targets falsch
angegeben wurde:</para>
<programlisting>Target name Target portal State
iqn.2012-06.com.example:target0 10.10.10.10 Not found</programlisting>
<para>Diese Meldung bedeutet, dass das Target eine
Authentifizierung erfordert:</para>
<programlisting>Target name Target portal State
iqn.2012-06.com.example:target0 10.10.10.10 Authentication failed</programlisting>
<para>Verwenden Sie diese Syntax, um einen
<acronym>CHAP</acronym>-Benutzernamen und ein Passwort
anzugeben:</para>
<screen>&prompt.root; <userinput>iscsictl -A -p <replaceable>10.10.10.10</replaceable> -t <replaceable>iqn.2012-06.com.example:target0</replaceable> -u <replaceable>user</replaceable> -s <replaceable>secretsecret</replaceable></userinput></screen>
</sect3>
<sect3>
<title>Verbindung mit einem Target herstellen - mit
Konfigurationsdatei</title>
<para>Wenn Sie für die Verbindung eine Konfigurationsdatei
verwenden möchten, erstellen Sie
<filename>/etc/iscsi.conf</filename> mit etwa folgendem
Inhalt:</para>
<programlisting>t0 {
TargetAddress = 10.10.10.10
TargetName = iqn.2012-06.com.example:target0
AuthMethod = CHAP
chapIName = user
chapSecret = secretsecret
}</programlisting>
<para><literal>t0</literal> 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.
<literal>TargetAddress</literal> und
<literal>TargetName</literal> müssen angegeben werden,
die restlichen sind optional. In diesen Beispiel wird
der <acronym>CHAP</acronym>-Benuztername und das Passwort
angegeben.</para>
<para>Um sich mit einem bestimmten Target zu verbinden, geben
Sie dessen Namen an:</para>
<screen>&prompt.root; <userinput>iscsictl -An <replaceable>t0</replaceable></userinput></screen>
<para>Um sich stattdessen mit allen definierten Targets aus
der Konfigurationsdatei zu verbinden, verwenden Sie:</para>
<screen>&prompt.root; <userinput>iscsictl -Aa</userinput></screen>
<para>Damit sich der Initiator automatisch mit allen Targets
aus <filename>/etc/iscsi.conf</filename> verbindet, fügen
Sie folgendes in <filename>/etc/rc.conf</filename>
hinzu:</para>
<programlisting>iscsictl_enable="YES"
iscsictl_flags="-Aa"</programlisting>
</sect3>
</sect2>
</sect1>
</chapter>