ubuntuusers.de

Hinweis: Dies ist ein statischer Snapshot unseres Wikis vom 25. März 2013 und kann daher nicht bearbeitet werden. Der aktuelle Artikel ist unter wiki.ubuntuusers.de zu finden.
WikiiSCSI

iSCSI

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

Das standardisierte iSCSI (internet SCSI) Protokoll ermöglicht die Nutzung von Netzwerkspeicher wie lokaler Speicher. Im Gegensatz zu den anderen Netzwerkfreigaben wie z.B. SMB oder NFS überträgt iSCSI rohe Datenblöcke zum Netzwerkspeicher, somit ist das Dateisystem des Speichermediums egal. Das Protokoll hat einen kleinen Overhead, was einen guten Durchsatz im Netzwerk verspricht. Mit GNU/Linux lässt sich sowohl die Freigabe wie auch das Einhängen von iSCSI-Speicher bewerkstelligen. Auch einige NAS-Geräte beherrschen die Freigabe ihrer Festplatten mit iSCSI. Der Netzwerkspeicher kann eigentlich jedes Medium sein, das vom System erkannt wird. Dies können ganze Festplatten sein, Partitionen von diesen, Bandlaufwerke, optische Laufwerke oder eine Image-Datei, aber niemals Ordner! Hat man ein Cluster-Dateisytem, so können mehrere Nutzer auf die Freigaben zugreifen, ansonsten kann immer nur ein Server als Client gleichzeitig agieren.

Target

Die Serverkomponente wird bei iSCSI auch Target genannt. iSCSI kommuniziert normalerweise über die TCP Ports 860 und 3260.

Installation

Das iSCSI-Target kann aus der Paketverwaltung installiert werden. Dazu muss das Paket

  • iscsitarget

Wiki/Vorlagen/Installbutton/button.png mit apturl

Paketliste zum Kopieren:

sudo apt-get install iscsitarget 

sudo aptitude install iscsitarget 

installiert werden [1].

Ab Maverick sind zusätzlich noch die folgenden Pakete notwendig:

  • iscsitarget-source (universe)

  • iscsitarget-dkms (universe)

Wiki/Vorlagen/Installbutton/button.png mit apturl

Paketliste zum Kopieren:

sudo apt-get install iscsitarget-source iscsitarget-dkms 

sudo aptitude install iscsitarget-source iscsitarget-dkms 

Konfiguration

Um das Target zu aktivieren, muss die Datei /etc/default/iscsitarget folgendermaßen geändert werden [3]:

ISCSITARGET_ENABLE=true 

ietd.conf

Die Freigaben werden in der Konfigurationsdatei /etc/iet/ietd.conf definiert [3]. Alles, was vor der Definition des ersten Target steht, sind globale Einstellungen des iSCSI-Servers. Diese sind optional. Es bestehen folgende Konfigurationsmöglichkeiten:

iSNSServer 192.168.1.16
iSNSAccessControl No

IncomingUser joe secret
OutgoingUser jack 12charsecret

iSNSServer gibt die IP-Adresse des ISNSServers an.

iSNSAccessControl gibt an ob der iSNS-Server auch die Zugriffskontrolle durchführt.

IncommingUser joe secret definiert einen Standardbenutzer und Passwort mit welchem sich der Initiators beim Server anmelden kann, wenn es keine anderen Target-spezifischen Angaben gibt. Hier heißt der Benutzer joe und benutzt das Passwort secret

OutgoingUser definiert den Standardbenutzer welcher bei einer CHAP-Authentifizierung verwendet würde. Hier heißt der Benutzer jack und benutzt das Passwort 12charsecret

Es kann immer nur eine Art der Authentifizierung für ein Target gelten.

Bei der Definition eines Targets reichen im einfachsten Fall zwei Zeilen.

Die erste gibt dem Target den Namen.

Target iqn.yyyy-mm.<reversed domain name>:identifier

wobei

  • yyyy-mm gibt das Ablaufdatum der Freigabe an. Das Format ist das Jahr gefolgt von dem Monat z.B 2010-04 für den April des Jahres 2010.

  • <reversed domain name> muss durch den Hostname ersetzt werden. in einem privaten Netz kann er fast beliebig gewählt werden. Im Beispiel wird com.example benutzt.

  • identifier kann durch einen beliebigen Namen ersetzt werden. Im der Beispielkonfiguration wird storage.lun1 verwendet

Dies sieht dann ca. so aus

iqn.2010-04.com.example:storage

Die zweite gibt den Pfad zum Speichermedium an und die Art der Freigabe

Lun 0 Path=/dev/sda3,Type=fileio

Bei Path muss der vollständige Pfad zu Freigabe angegeben werden, z.B.:

/dev/sda2
/dev/md0
/dev/vg0/storage-lun1
...

Der Type fileio kann eigentlich immer benutzt werden. Der Type blockio umgeht den Linux Page-Cache und reicht somit die Zugriffe direkt auf das Gerät weiter - dies verspricht mehr Geschwindigkeit bei Blöcken, welche größer als 64k sind.

Danach können weitere optionale Angaben gemacht werden:

        Alias Test       
        IncomingUser joe secret
        OutgoingUser jim 12charpasswd

wobei

  • Alias damit kann man einen Alias Namen für das Target definieren, hier heisst dieser Test.

  • IncomingUser joe secret definiert ein Benutzer und Passwort, mit welchem sich der Initiator beim Server anmelden kann. Wenn man nach IncomingUser keinen Benutzer angibt, kommen die Globaleneinstellungen zu tragen. Ist dort ebenfalls kein Benutzer definiert, ist keine Authentifizierung notwendig, um auf das Target zuzugreifen.

  • OutgoingUser definiert einen Benutzer, welcher bei einer CHAP Authentifizierung verwendet würde. Wenn keine Angaben nach OutgoingUser gemacht werden, kommen die Globaleneinstellungen zu tragen.

initiators.allow

Verbindungen auf die Freigabe müssen nun noch erlaubt werden. Hierzu muss in der Datei /etc/iet/initiators.allow[3] eine Zeile hinzu gefügt werden. Diese beginnt mit dem Namen der Freigabe, gefolgt von der IP-Adresse des Clients, von welchem man darauf zugreifen will.

Achtung!

Die Zeile: ALL ALL sollte nur zum Testen der Konfiguration unkommentiert bleiben, da sich sonst jeder mit dem Target verbinden kann.

[...]
iqn.2010-04.com.example:storage 192.168.0.100

wobei

  • iqn.2010-04.com.example:storage der Name der Freigabe ist

  • 192.168.0.100 die IP-Adresse des Clients ist, welcher darauf zugreifen soll.

Es können auch mehrere IP-Adressen angegeben werden, diese müssen dann durch ein , getrennt werden. Um den Zugriff von allen Clients zu erlauben, kann die IP durch ein ALL ersetzt werden. IPv6 Adressen sind ebenfalls zugelassen. Wenn die Konfigurationsdateien angepasst wurde, muss das das Target neu gestartet werden, um die Änderungen wirksam zu machen. Dies geschieht in einem Terminal-Fenster [2] mit:

sudo /etc/init.d/iscsitarget restart 

LUN-Files erzeugen

Ein LUN-File kann als iSCSI-Target benutzt werden, um Daten darin zu speichern. Auf diese Weise ist es möglich, im Dateisystem eines Servers mehrere LUNs zur Verfügung zu stellen, auf welche von verschiedenen Hosts via iSCSI zugegriffen werden kann.

Um bei Verwendung mehrerer LUNs die Übersicht zu behalten, empfiehlt es sich, für diese ein eigenes Verzeichnis zu erstellen.

sudo mkdir luns
cd luns 

Dort wird eine LUN-Datei mit folgendem Befehl erstellt:

sudo dd if=/dev/zero of=storagelun0 count=0 obs=1 seek=100G 

Diese Image-Datei kann zukünftig 100 GByte an Daten aufnehmen. Um die Datei nutzen zu können muss sie noch unter PATH in der /etc/iet/ietd.conf eingetragen werden.

Initiator

Installation

Die Client-Komponente wird Initiator genannt. Auch der iSCSI-Initiator kann über die Paketverwaltung installiert werden. Es muss das Paket

  • open-iscsi

Wiki/Vorlagen/Installbutton/button.png mit apturl

Paketliste zum Kopieren:

sudo apt-get install open-iscsi 

sudo aptitude install open-iscsi 

installiert werden.[1]

Konfiguration

In der Datei /etc/iscsi/iscsid.conf[3] sollte die Zeile node.startup in

node.startup = automatic

geändert werden, damit der Initiator automatisch startet. Danach muss der Initiator mit

sudo /etc/init.d/open-iscsi restart 

neu gestartet werden. Um die Freigabe zu finden, muss folgender Befehl ausgeführt werden:

iscsiadm -m discovery -t st -p 192.168.0.101 

wobei die IP-Adresse selbstverständlich angepasst werden muss.

iscsiadm -m node -l 

Wenn man keine Authentifizierung gemacht hat, also weder im globalen noch im Target-spezifischen Teil etwas zu IncomingUser oder OutgoingUser angegeben hat, kann man nun das Device partitionieren und anschließend Formatieren.

Authentifizierung normal

Um den Benutzer und das Passwort für die Authentifizierung zu setzen, kann man die Datei /etc/iscsi/nodes/iqn.2010-04.com.example:storage/192.168.0.101,3260,1/default editieren. Der Pfad zur Konfigurationsdatei ist je nach benutzter IP-Adresse und Namen des Target anders.

Alternativ kann man die Daten von iscsiadm setzen lassen, dazu gibt man diese beiden Kommandos im Terminal ein [2]:

iscsiadm -m node --targetname "iqn.2010-04.com.example:storage" --portal "192.168.0.101:3260" --op=update --name node.session.auth.username --value=BENUTZER 
iscsiadm -m node --targetname "iqn.2010-04.com.example:storage" --portal "192.168.0.101:3260" --op=update --name node.session.auth.password --value=PASSWORT 

Es muss bei beiden Kommandos die IP-Adresse und der Targetname angepasst werden.

BENUTZER muss in den gewünschten Benutzer geändert werden und PASSWORT in das dazu passende Passwort.

Authentifizierung mit CHAP

Um die Authentifizierung mit CHAP (Challenge Handshake Authentication Protocol) durchzuführen, muss dieses ebenfalls mitgeteilt werden. Mit iscsiadm kann das Setzen der Konfiguration erledigt werden, dazu Folgendes im Terminal eingegeben [2]:

iscsiadm -m node --targetname "iqn.2001-04.com.example:storage" --portal "192.168.0.101:3260" --op=update --name node.session.auth.authmethod --value=CHAP 

Auch hier muss die IP-Adresse und der Targetname angepasst werden.

ubuntuusers.local › WikiiSCSI