- chalblog - http://blog.is-a-geek.org -

iSCSI Target auf Ubuntu Server erstellen und in Windows/Linux einbinden

iSCSI Target auf Ubuntu Server erstellen und in Windows/Linux einbinden [1]Mit Hilfe des iSCSI Protokolls lässt sich Speicherplatz auf einem Server oder iSCSI-Target als ganz normale Festplatte in Windows/Linux/Mac einbinden. Diese kann wie üblich partitioniert werden und erscheint auch wie gewohnt in der Datenträgerverwaltung. Damit ist es sogar möglich einen PC ohne eingebaute Festplatte zu betreiben.

iSCSI Target auf Ubuntu erstellen

Das Paket “iscsitarget” wird auf Ubuntu benötigt um ein Target zu erstellen.

sudo apt-get install iscsitarget

Danach öffnen wir die Datei …

sudo nano /etc/default/iscsitarget

… und setzen “ISCSITARGET_ENABLE” auf true (nano: speichern mit “Strg+o“, schließen mit “Strg+x”).

ISCSITARGET_ENABLE=true

LUN-Files erzeugen

“LUN” hat sich als Bezeichnung für eine virtuelle Festplatte aus Sicht eines Betriebssystems eingebürgert. Grundsätzlich kann man eine physikalische Festplatte, eine Partition, ein RAID oder eine Datei als LUN einbinden. Da sich eine Datei jedoch um einiges leichter zwischen Systemen übertragen lässt und die Möglichkeit besteht den Speicher nicht sofort, sondern erst dynamisch bei Verwendung zu besetzen, ist dies sicher die beste Wahl (kommt natürlich auf den Anwendungsbereich an).

Für die Lun-Dateien legen wir einen neuen Ordner an und wechseln auch gleich in diesen.

sudo mkdir /luns
cd /luns

Dort erstellen wir die Datei/en mit folgendem Befehl:

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

… und noch eine zweite …

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

Wir haben nun zwei Imagedateien erstellt, welche 100GB fassen können, den Speicher aber erst dann verwenden, wenn man diese mit Daten füllt. Sieht man sich die Eigenschaften der Images an, erscheinen sie jedoch von Anfang an als 100GB-Dateien. Bei der Wahl der Größe sollte man darauf achten, dass auch genügend physikalischer Speicher für den Fall der Fälle vorhanden ist.

Benennung des Targets

Der Name des jeweiligen Targets muss in eurer Umgebung einzigartig sein und man sollte sich wenigstens halbwegs an die Konvention halten. “iqn” steht in diesem Fall für “iSCSI Qualified Name” und sollte auch so verwendet werden. Der zweite Block besteht aus Jahr und Monat (YYYY-MM), in welchem die Domain gültig ist und kann eigentlich ausgelassen werden. An dritter Stelle steht der umgedrehte Domainname (statt z.B. example.at > at.example) und dahinter noch ein Name der frei wählbar ist.

iqn.YYYY-MM.at.example:irgendeinname

Konfigurationsdatei bearbeiten

In der Konfigurationsdatei müssen wir natürlich noch das Target mit den soeben erstellten LUNs eintragen.

Öffnet die “ietd.conf” Datei …

sudo nano /etc/iet/ietd.conf

… und fügt ganz am Ende diese Zeilen ein (gegebenen Falles anpassen).

Target iqn.local.example:storage.sys1
        Lun 0 Path=/luns/storagelun0,Type=fileio,ScsiId=lun0,ScsiSN=lun0
        Lun 1 Path=/luns/storagelun1,Type=fileio,ScsiID=lun1,ScsiSN=lun1

Danach startet man den Dienst neu, damit diese Änderungen auch übernommen werden.

sudo service iscsitarget start

Sicherheit

Das iSCSI-Target bietet die Möglichkeit den User über CHAP zu authentifizieren. Dazu öffnen wir wieder die Konfigurationsdatei …

sudo nano /etc/iet/ietd.conf

… und fügen zum jeweiligen Target die “IncomingUser” Option hinzu:

Target iqn.local.example:storage.sys1
        IncomingUser BENUTZERNAME PASSWORT
        Lun 0 Path=/luns/storagelun0,Type=fileio,ScsiId=lun0,ScsiSN=lun0
        Lun 1 Path=/luns/storagelun1,Type=fileio,ScsiID=lun1,ScsiSN=lun1

Zu beachten ist, dass das Passwort mindestens 9 Zeichen lang sein muss, da man ansonsten eine Fehlermeldung erhält (nano: speichern mit “Strg+o“, schließen mit “Strg+x”). Danach startet man den Dienst wieder neu.

sudo service iscsitarget start

iSCSI Initiatoren

Der iSCSI-Initiator ist das Gegenstück zum Target, also in etwa ein Client zum Server und wird benötigt um die Laufwerke auf den Clientmaschinen einzubinden.

Windows XP

In Windows XP ist der Initiator nicht enthalten, man kann diesen jedoch bei Microsoft kostenlos herunterladen: Microsoft iSCSI Initiator [2]

Nach der Installation öffnet man diesen über “Start > Programme > Microsoft iSCSI Initiator”. Dort wechselt man zur Karteikarte “Discovery” und klickt auf “Add” (Bild 1). Im Unterfenster gibt man die IP des Servers oder iSCSI-Targets an und bestätigt mit “Ok” (Bild 2).

iSCSI Initiator Windows XP 1 [3]

Bild 1

iSCSI Initiator Windows XP 2 [4]

Bild 2

iSCSI Initiator Windows XP 3 [5]

Bild 3

In “Targets” wählt man das gewünschte (Bild 4) und nach dem Klick auf “Log On” sollte man den Hacken (Bild 5) für die automatische Verbindung beim Start setzen. Hat man die Authentifizierung wie oben gezeigt aktiviert, kann man in “Advanced” das Passwort und den Benutzernamen angeben (Bild 6).

iSCSI Initiator Windows XP 4 [6]

Bild 4

iSCSI Initiator Windows XP 5 [7]

Bild 5

iSCSI Initiator Windows XP 6 [8]

Bild 6

In “Bound Volumes/Devices” kann man mit einem Klick auf “Bind All” alle LUNs dieses Targets verbinden (Bild 7), welche dann in der Datenträgerverwaltung (Systemsteuerung > Verwaltung) angezeigt werden (Bild 8). Diese Laufwerke müssen nur mehr initialisiert werden (Bild 9) und danach partitioniert man diese wie gewohnt.

iSCSI Initiator Windows XP 7 [9]

Bild 7

iSCSI Initiator Windows XP 8 [10]

Bild 8

iSCSI Initiator Windows XP 9 [11]

Bild9

 

Windows 7

Windows 7 hat den iSCSI-Initiator integriert, welcher in den Verwaltungstools zu finden ist. Die Verwaltung erreicht man über die Systemsteuerung, nachdem man auf den kleinen Pfeil in der Adressleiste klickt und “Alle Systemsteuerungselemente” (Bild 10) auswählt. Danach öffnet man die Verwaltung wo anschließend auch der iSCSI-Initiator aufgelistet ist (Bild 12).

iSCSI Initiator Windows 7 1 [12]

Bild 10

iSCSI Initiator Windows 7 2 [13]

Bild 11

iSCSI Initiator Windows 7 3 [14]

Bild 12

Will man sich nicht durch die einzelnen Fenster klicken, besteht auch die Möglichkeit das Suchfeld im Startmenü zu benutzen. Dort gibt man einfach “iscsicpl.exe” ein und öffnet das gefundene Programm (Bild 13).

Benutzt man den Initiator zum ersten Mal, wird man zur Bestätigung der Ausführung des Dienstes aufgefordert (Bild 14).

iSCSI Initiator Windows 7 4 [15]

Bild 13

iSCSI Initiator Windows 7 5 [16]

Bild 14

iSCSI Initiator Windows 7 6 [17]

Bild 15

In der Karteikarte Suchen gibt man bei “Portal ermitteln” die Server/Target IP ein (Bild 16) und wechselt zu “Ziele “. Hier sollte schon der Name unseres Targets aufscheinen und wir verbinden zu diesem (Bild 17). Nachdem man zusätzlich den Hacken für die automatische Verbindung gesetzt hat, kann man unter “Erweitert” das Passwort und den Benutzernamen eingeben, sofern man eine Authentifizierung benutzt.

iSCSI Initiator Windows 7 7 [18]

Bild 16

iSCSI Initiator Windows 7 8 [19]

Bild 17

iSCSI Initiator Windows 7 9 [20]

Bild 18

Als letzten Schritt bindet man die Volumes in “Volumes und Geräte” ein, indem man einfach “Automatisch konfigurieren” anklickt (Bild 19). Jetzt sollten alle Laufwerke dieses Targets in der Datentragerverwaltung vorhanden sein (Bild 20).

iSCSI Initiator Windows 7 10 [21]

Bild 19

iSCSI Initiator Windows 7 11 [22]

Bild 20

 

Ubuntu

Für Ubuntu gibt es bis jetzt leider nur Initiatoren ohne grafische Benutzeroberfläche, diese sind jedoch mit einer kuzen Anleitung nicht sonderlich schwer zu konfigurieren.

Dazu installiert man Open-iSCSI:

sudo apt-get install open-iscsi

Damit automatisch beim Start mit dem Target verbunden wird öffnen wir folgende Datei, …

sudo nano /etc/iscsi/iscsid.conf

… suchen “node.startup” und ersetzen “manual” durch “automatic”.

.
.
node.startup = automatic
.
.

Danach starten wir den Dienst neu um die Änderungen zu übernehmen.

sudo service open-iscsi restart

Jetzt lassen wir uns die Targets dieser IP-Adresse anzeigen.

sudo iscsiadm -m discovery -t sendtargets -p SERVERIP

Die Ausgabe sollte in etwa so aussehen und enthält den Targetnamen, welchen wir uns aufschreiben/merken/kopieren (iqn.local.example:storage.sys1).

192.168.11.128:3260,1 iqn.local.example:storage.sys1

Da wir jetzt den Namen kennen, können wir alle Laufwerke dieses Targets einbinden.

sudo iscsiadm --mode node --targetname EUERTARGETNAME --portal SERVERIP:3260 --login

Habt ihr keine Authentifizierung konfiguriert, könnt ihr diesen Bereich bis zum finalen Neustart des Dienstes überspringen.

Den Benutzernamen und das Passwort für die Authentifizierung könnt ihr ganz einfach mit folgenden Befehlen angeben.

sudo iscsiadm -m node --targetname "EUERTARGETNAME" --portal "SERVERIP:3260" --op=update --name node.session.auth.authmethod --value=CHAP
sudo iscsiadm -m node --targetname "EUERTARGETNAME" --portal "SERVERIP:3260" --op=update --name node.session.auth.username --value=EUERBENUTZERNAME
sudo iscsiadm -m node --targetname "EUERTARGETNAME" --portal "SERVERIP:3260" --op=update --name node.session.auth.password --value=EUERPASSWORT 

Wie vorhin angekündigt der finale Restart des Dienstes:

sudo service open-iscsi restart

Lässt man sich nun mit fdisk die Liste anzeigen sind die Laufwerke vorhanden und man kann sie mit z.B. gParted zum Mounten vorbereiten.

sudo fdisk -l

PC ohne Festplatte booten

Dieser Bereich ist noch in Arbeit und erscheint entweder in einem gesonderten Artikel oder wird in kürze hier eingefügt.

iSCSI über Internet

Man sollte davon absehen direkt mit Hilfe von Portfreigaben am Router zu einem iSCSI-Target zu verbinden. Es könnte zwar funktionieren, aber dann sicherlich nicht sonderlich stabil. Ich nutze seit einiger Zeit iSCSI in Verbindung mit VPN und seitdem läuft es ohne Probleme.

 

Viel Spaß beim Experimentieren!