iSCSI

Einige Systeme und Applikationen bestehen mitunter auf einer lokalen Festplatte als Speicherort, obwohl ein Netzlaufwerk wesentlich mehr Vorteile bietet. Mit iSCSI (internet Small Computer System Interface) lassen sich zum Beispiel Backup- oder Mediendaten unkompliziert im Netz ablegen, da es die Nutzung des SCSI-Protokolls über TCP ermöglicht. Ein Server stellt den Clients (iSCSI-Initiator) über seine iSCSI-Targets Speicherplatz (iSCSI-Devices) zur Verfügung. Für den Client sehen die Netzlaufwerke wie eine lokale Festplatte aus. Standardmässig ist der Port 3260/tcp vorgesehen.

Frühere Versionen von Red Hat Enterprise Linux verwendeten tgtd zur Unterstützung von iSCSI-Targets. Für Fibre-Channel over Ethernet (FCoE) wurde dagegen LIO (Linux Iscsi.Org) aus den fcoe-target-utils verwendet, der Open Source-Implementierung eines SCSI-Targets.

RHEL 7+ verwendet durchweg LIO für FCoE, iSCSI, iSER (Mellanox InfiniBand) und SRP (Mellanox InfiniBand) Storage Fabrics. Alle Fabrics können mithilfe von targetcli verwaltet werden, welches auf dem Linux SCSI Target Wiki sehr schön beschrieben ist.

LIO initiiert dabei keine Sessions, sondern verwaltet eine oder mehrere Logical Unit Numbers (LUN), wartet auf SCSI-Kommandos eines Initiators und führt Input/Output-Transfers durch.

Weitere Begriffe:

  • LUN: Logical Unit Number. Bezeichnung von virtuellen Festplatten auf dem SCSI-Bus.

  • ACL: Access Control List. Berechtigungs-Tabelle.

  • TPG: Target Portal Group. Besteht aus ACLs, LUNs und Portal-Adressen (IP-Adresse + Port), auf die ein iSCSI-Target hört.

iSCSI-Target (Server)

Dem Server mit dem Hostnamen srv.example.com zunächst eine neue (virtuelle) Festplatte (/dev/vdb) spendieren. Diese muss nicht formatiert sein. Anschliessend:

yum -y install targetcli

# Interactive
targetcli

# LUN my_disk auf dem Device /dev/vdb erzeugen
backstores/block create my_disk /dev/vdb

# iSCSI-Target erzeugen
iscsi/ create
#Created target iqn.2003-01.org...e3f4d7a6f0f9.
#Created TPG 1.

# IP-Adresse zuweisen
cd iscsi/iqn.2003-01.org...f4d7a6f0f9/tpgl
portals/ create

# ACL erzeugen: welcher Client darf zugreifen?
acls/ create <iSCSI-ID des Clients>

# LUN exportieren
luns/ create /backstores/block/my_disk

set attribute authentication=0
set attribute generate_node_acls=1

cd /
saveconfig
exit

Diese Kommando-Aufrufreihenfolge steht unter „Quickstart“ in der Manpage zu targetcli.

iSCSI-Clients besitzen eine individuelle iSCSI-ID, die man wie folgt ermittelt:

/etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.2015-03.com.example:clientlun1

So löscht man im Fehlerfall die gesamte LIO-Konfiguration:

targetcli clearconfig confirm=true

Auf dem Server muss noch die Firewall angepasst werden:

firewall-cmd --permanent --add-port=3260/tcp
firewall-cmd --reload

Ob der Target-Prozess läuft, lässt sich so überprüfen:

ss --all | grep iscsi

iSCSI-Inititator (Client)

Konfiguration des Initiators auf der Client-Maschine: Angenommen, man soll eine entfernte iSCSI-Disk als /mnt/iscsi mounten. Vom Client aus soll die Datei myfile.txt in der gemounteten iSCSI-Disk erstellt werden, und der Mount soll einen Neustart überstehen. Auf dem Client trifft man zunächst die Vorbereitungen:

yum -y install iscsi-initiator-utils

iSCSI-Clients besitzen eine individuelle iSCSI-ID, die man wie folgt ermittelt:

/etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.2015-03.com.example:clientlun1

Nun sucht man vom Client aus nach Targets auf dem Server:

iscsiadm --mode discoverydb --type sendtargets --portal srv.example.com --discover

Die Befehlsparameter muss man sich nicht merken - der Aufruf steht so in der Examples-Sektion der Manpage zu iscsiadm.

Im Beispiel liefert der Befehl die Ausgabe:

srv.example.com:3260,1 iqn.2003-...3f4d7a6f0f9

von der man den Teil nach dem Leerzeichen in die Zwischenablage kopiert und im folgenden Befehl einfügt.

iscsiadm: No records found? Wichtig ist, dass srv.example.com problemlos per DNS oder /etc/hosts auflösbar ist, und/oder die angegebene IP-Adresse stimmt. Nun ins iSCSI-Target einloggen:

iscsiadm --mode node --targetname iqn.2003-01.org...x8664:sn.e3f4d7a6f0f9 --portal srv.example.com:3260 --login

Auch dieser Befehlszeilenaufruf steht in der Manpage.

Per partprobe; fdisk -l sieht man schön, wie die entfernte iSCSI-Platte als vermeintlich neue lokale /dev/sda, /dev/vdb o.ä. auf dem Client eingebunden wurde. Darauf lässt sich eine Partition sowie das Dateisystem erstellen und dauerhaft mounten. Man beachte unbedingt den _netdev-Parameter in der /etc/fstab - ohne diesen bleibt das System beim Herunterfahren hängen:

mkfs --type xfs /dev/vdb
mkdir /mnt/iscsi
echo '/dev/vdb1 /mnt/iscsi xfs _netdev 0 0' >> /etc/fstab
mount --all
lsblk

Die Platte lässt sich auch als physisches Volume in einem Logical Volume einsetzen.

Built on 2023-01-27