Samstag, 15. Oktober 2022

iSCSI - ganz minimalistisch

Ich war überrascht wie einfach das funktioniert. Es gibt da eine Menge erklärender Seiten im Web, die zeigen aber auch ziemlich viel verwirrende Vielfalt. Ich habe mit einem debian System und einer Windows Maschine mal ein Target und einen Initiator miteinander verbunden.

Ich habe hier ein paar Artikel verlinkt, beim einarbeiten sind mir in diesen leider ein paar Fehler im Code aufgefallen. Also Vorsicht mit Copy&Paste aus den verlinkten Artikeln!

Target - der Speicherplatz im Netzwerk

Alle Befehle erfordern erhöhte Rechte: sudo su

Unter debian benötigt man das tgt Packet und einen leeren, noch nicht eingebundenen Datenträger. 

apt install tgt

Zunächst zur Vereinfachung der folgende Befehle zunächst ein paar Variablen. Der Name des Target soll weltweit eindeutig sein, dies hat im privaten Netzwerk sicher keine Bedeutung. (siehe)

id=2
target_name='iqn.2022-10.scsi.target:test'
storage_name='/storage/test_storage.img'

Zum Testen kann der Datenträger einfach eine leere Image Datei sein (Beispiel 1,5 GB)

mkdir -p ${storage_name%*/*}
dd if=/dev/zero of=${storage_name} bs=1024k count=1500

Auf einer NAS wird man besser mit LVM ein logisches Volume anlegen. Beispiel: zwei freie Laufwerke sdb und sdc vorhanden (siehe auch)

pvcreate /dev/sd{b,c}
vgcreate vgroup1 /dev/sd{b,c}
lvcreate -l 50%FREE -n vgroup1_lun1 vgroup1
storage_name='/dev/mapper/vgroup1-vgroup1_lun1'

Mit tgtadm erzeugen wir online ein target in mehreren Schritten, der Letzte zeigt zur Kontrolle das target an. 

  1. target erzeugen mit eindeutiger ID und Name
  2. logicalunit zum Target erzeugen mit eindeutiger ID und Storage Name
  3. das Target freigeben, All für alle (hier könnten z.B. spezielle IP Adressen stehen)

tgtadm --lld iscsi --op new --mode target --tid ${id} -T ${target_name}
tgtadm --lld iscsi --op new --mode logicalunit --tid ${id} --lun 1 -b ${storage_name}
tgtadm --lld iscsi --op bind --mode target --tid ${id} -I ALL
tgtadm --lld iscsi --op show --mode target

Tipp: Man kann bei Bedarf weitere LUNs zum gleichen Target erzeugen (Beispiel).

Will man die Konfiguration fest verankern, muss man eine Konfigurationsdatei schreiben. Alle conf Dateien im Pfad /etc/tgt/conf.d werden beim Start von tgt Service geladen (siehe auch).

Im folgenden erzeugen wir mit der ersten Zeile die Datei, grep -v löscht die Zeile mit dem Suchbegriff in der Ausgabe.

Die folgenden 4 Zeilen sind lediglich zum Test, die braucht man im normalen Betrieb nicht auszuführen. Fügt man irgendwann noch ein Target hinzu oder ändert anderweitig die Konfiguration, würde man in dem Moment die Verbindung unnötig unterbrechen.

tgt-admin --dump | grep -v default-driver > /etc/tgt/conf.d/test_storage.conf
tgtadm --lld iscsi --op delete --mode target --tid ${id}
tgtadm --mode target --op show
tgt-admin --update ALL --force
tgtadm --mode target --op show

Man kann die Verwendung des Targets noch absichern, nur bestimmte Initiatoren zulassen oder die Autorisierung mittels CHAP. Dazu kann/muss man die conf Datei mit editieren und wieder anwenden (--update ). 

Initiator - der Nutzer im Netzwerk

Windows

Die Nutzung von iSCSI unter Windows ist sehr einfach. Man nutzt die Windows Taste, tippt iscsi ein und startet die App iSCSI-Initiator. Mit Angabe des Hostnamens oder der IP wird das Target automatisch gefunden und mit einem klick verbunden.

Mit der Datenträgerverwaltung wird die neue iSCSI Festplatte eingerichtet.

Will man die Einbindung eines iSCSI Targets automatisieren, kann man Powershell dafür verwenden.

Debian

Zur Einbindung braucht man das Paket open-iscsi

apt install open-iscsi

Der iscsiadm Befehl dient der Administration ( Beschreibung ). Das discovery legt ein Konfigurationsverzeichnis in /etc/iscsi/nodes/ ab. Ein erneutes discovery überschreibt die vorhandenen Dateien, eventuell Änderungen gehen verloren!

iscsiadm -m discovery -t st -p <IP des Target Servers>

Der Befehl liefert den Target Namen, dieser wird bei den weiteren Befehl benötigt. Man kann ihn auch jederzeit später wieder abfragen. Mit dem --login Befehl kann man die Anbindung testen. Weitere Parameter in der angelegten default Datei kann man mit dem -o update Befehl setzen, z.B. auch den automatischen Start. Man kann an mehreren Stellen diesen automatischen Start einrichten.

iscsiadm --mode node
target_name='iqn.2022-10.scsi.target:test'
iscsiadm --mode node --targetname ${target_name} --login
iscsiadm --mode node --targetname ${target_name} -o update -n node.startup -v automatic

Mit dem lsblk Befehl kann man den Erfolg überprüfen und nach der Anbindung den mount und das Dateisystem einrichten. Allerdings funktioniert der automatische Start so noch nicht, ich weiß noch nicht warum. Ein systemctl restart open-iscsi im laufenden Betrieb führt die automatic Einträge aus, ein reboot des Systems nicht.

Mit diesem Befehl werden alle ermittelten Targets gelöscht.

iscsiadm -m node -o delete

Noch ein Link.

Nodes auflisten oder session auflisten.

iscsiadm -m node|session


Zum Lesen

LVM for Beginners

ToDo

Links konsolidieren

automatische Verbindung unter debian klären.

Code

Ende

1 Kommentar: