iSCSI Target und Initiator einrichten

Fileshares sind ja ganz praktisch, aber manchmal nicht das was man braucht. Zum Beispiel ist die Vergabe von Zugriffsberechtigungen komplett anders.
Bei einem  Fileshare wird das auf dem Server erledigt, der ja auch das Filesystem (NTFS, ext4, …) vorgibt.
Stellt man ein Laufwerk per iSCSI zur Verfügung, ist das für den Client wie eine zusätzliche Festplatte. Man kann das iSCSI Laufwerk partitionieren, formatieren und Rechte vergeben, ganz wie bei einer Festplatte.

Im folgenden beschreibe ich, wie man eine Festplatte oder ein logisches Laufwerk an einem Linux Server (hier mit CentOS 7) mittels iSCSI freigibt und dann von einem anderen Linux Rechner aus benutzt.
Das automatische Verbinden beim Neustart und den Windows Initiator beschreibe ich in separaten Postings.

D.h. auf dem Server wird ein „iSCSI Target“ konfiguriert, auf dem anderen Computer ein „iSCSI Initiator“.

Zunächst müssen wir entscheiden, was wir per iSCSI freigeben möchten. Das kann eine Festplatte, eine Partition oder eine mit Nullen gefüllte Datei sein. Was auch immer wir benutzen, für den Client wird’s wie Festplatte aussehen. Nehmen wir mal an, wir wollen Partition /dev/sdb3 freigeben.
Alles weitere als root ausführen oder „sudo “ voranstellen.

  1. Auf dem Server die iSCSI Target Utilities installieren:
    yum install scsi-target-utils
  2. Konfigurationsdatei auf dem Server anpassen.
    In /etc/tgt/targets.conf müssen wir das Target definieren. Der Name eines Targets sieht so aus
    iqn.2016-01.local:myiscsi
    Am Anfang muss „iqn“ stehen, gefolgt von Jahr, Monat und der Domaine des Servers. Für ein Heimnetzwerk ist „local“ ok, ansonsten z.B. „tethis-it.at“. Laut Standard wird das Datum vorangestellt, weil Domainen den Besitzer wechseln oder gelöscht werden könnten.
    Am Schluss ein Doppelpunkt und ein frei definierbarer Name.
    Das ganze File /etc/tgt/targets.conf sieht anschließend ohne Kommentare wie folgt aus. Möchte man ein Passwort setzen, einfach das # vor „incominguser“ entfernen und USER und PASSWORD wie gewünscht ändern:

    default-driver iscsi
    <target iqn.2016-01.local:myiscsi>
        backing-store /dev/sda3
        # nächste Zeile nur nötig wenn ein Password gesetzt werden soll
        # incominguser USER PASSWORD
    </target>
    
  3. Target Service auf dem Server (automatisch) starten:
    systemctl enable tgtd.service
    systemctl start tgtd.service
  4. Port 3260 in Firewall freischalten:
    firewall-cmd --permanent --add-service=iscsi
    firewall-cmd --reload
  5. Mit tgtadm prüfen ob alles ok ist:
    [root@arthus etc]# tgtadm -m target -o show
    Target 1: iqn.2016-01.local:myiscsi
        System information:
            Driver: iscsi
            State: ready
        I_T nexus information:
            I_T nexus: 12
                Initiator: iqn.openelec.tethis-it.tk alias: OpenELEC
                Connection: 0
                    IP Address: 192.168.11.9
        LUN information:
            LUN: 0
                Type: controller
                SCSI ID: IET 00010000
                SCSI SN: beaf10
                Size: 0 MB, Block size: 1
                Online: Yes
                Removable media: No
                Prevent removal: No
                Readonly: No
                SWP: No
                Thin-provisioning: No
                Backing store type: null
                Backing store path: None
                Backing store flags:
            LUN: 1
                Type: disk
                SCSI ID: IET 00010001
                SCSI SN: beaf11
                Size: 2199023 MB, Block size: 512
                Online: Yes
                Removable media: No
                Prevent removal: No
                Readonly: No
                SWP: No
                Thin-provisioning: No
                Backing store type: rdwr
                Backing store path: /dev/sda3
                Backing store flags:
        Account information:
        ACL information:
            ALL

Damit ist das Target, also der Server konfiguriert. Fehlt noch der Initiator auf dem Computer, von dem aus wir auf das iSCSI Target zugreifen wollen.

Dazu benötigen wir das Kommando iscsiadm, das üblicherweise schon installiert ist. Falls nicht, mittels
yum install iscsi-initiator-utilities
installieren.

Die iSCSI Tools pflegen eine Datenbank von bekannten Targets. Bevor wir irgend etwas anderes tun, müssen wir erst einmal dafür sorgen, dass unser neues Target beim Client in dieser Datenbank auftaucht.
Das machen wir mit folgendem Befehl:

root@ubuntu:~# iscsiadm --mode discovery --type sendtargets --portal 192.168.11.7 --show
192.168.11.7:3260,1 iqn.2016-01.local:myiscsi

Damit steht unser neues Target in der Datenbank, was wir aber noch überprüfen sollten:

root@ubuntu:~# iscsiadm -m node
192.168.11.7:3260,1 iqn.2016-01.local:myiscsi

Um das Laufwerk nun wie eine lokale Festplatte nutzen zu können, geben wir folgendes ein:

iscsiadm --mode node --targetname iqn.2016-01.local:myiscsi --portal 192.168.11.7 --login

Antwortet iscsiadm darauf mit iscsiadm: No records found, war das Discovery vorher nicht erfolgreich, d.h. das Target steht noch nicht in der Datenbank.

Haben wir auf der Server-Seite ein Passwort vergeben, produziert der iscsiadm Befehl oben einen Fehler:

root@ubuntu:/etc/iscsi# iscsiadm --mode node --targetname iqn.2016-01.local:myiscsi --portal 192.168.11.7 --login
Logging in to [iface: default, target: iqn.2016-01.local:myiscsi, portal: 192.168.11.7,3260] (multiple)
iscsiadm: Could not login to [iface: default, target: iqn.2016-01.local:myiscsi, portal: 192.168.11.7,3260].
iscsiadm: initiator reported error (24 - iSCSI login failed due to authorization failure)

Kein Wunder, wir haben das Passwort ja auch noch nicht angegeben. Leider kann man das nicht als Parameter von iscsiadm, sondern muss das Konfigurationsfile /etc/iscsi/iscsid.conf anpassen. Folgende Zeilen müssen enthalten sein. Also Kommentarzeichen (#) entfernen oder am Ende anhängen. USER und PASSWORD natürlich passend zum Eintrag in der targets.conf auf dem Server ändern:

node.session.auth.authmethod = CHAP
node.session.auth.username = USER
node.session.auth.password = PASSWORD

Anschließend noch mal Targets suchen und einloggen, dann sollte es funktionieren:

iscsiadm --mode discovery --type sendtargets --portal 192.168.11.7 --show
iscsiadm --mode node --targetname iqn.2016-01.local:myiscsi --portal 192.168.11.7 --login

Ist das Kommando erfolgreich, gibt es eine neue Festplatte im System, wie man mit lsblk oder fdisk -l sehen kann. Alles weitere erfolgt dann wie bei einer normalen Festplatte, d.h. falls noch nicht geschehen mit fdisk oder gparted partitionieren, formatieren, mounten. Sind schon Daten drauf, reicht das mounten.
Das Device (also z.B. /dev/sdb1) des iSCSI Laufwerks findet man mit lsblk oder auch in /var/log/messages.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.