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.
- Auf dem Server die iSCSI Target Utilities installieren:
yum install scsi-target-utils
- 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>
- Target Service auf dem Server (automatisch) starten:
systemctl enable tgtd.service
systemctl start tgtd.service
- Port 3260 in Firewall freischalten:
firewall-cmd --permanent --add-service=iscsi
firewall-cmd --reload
- 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.