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. Nummerierung 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:
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:
InitiatorName=iqn.2015-03.com.example:clientlun1
Welche Targets kennt der Client bereits?
iscsiadm --mode node
iscsiadm --mode session
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 natürlich auch als physisches Volume in einem Logical Volume einsetzen.
lsscsi
Was bedeutet die erste Spalte der Ausgabe von lsscsi --size
, und wie ordne ich diese beispielsweise Disks in VMware zu?
Eins vorweg: Eine Zuordnung klappt nicht immer - je nach VMware-Version und/oder verwendetem Disk-Driver.
In der Regel schaut man sich unter VMware die Eigenschaft der Disk der VM an. In unserem Beispiel kommt es auf eine Angabe der Art „SCSI(0:9)“ an.
Das in der Linux-VM ausgeführte lsscsi --size
listet in der ersten Spalte beispielsweise „[2:0:9:0]“ in der Ausgabe auf. Die einzelnen Werte stehen bei SCSI-Geräten für:
Host Number: 2
Controller Number: 0
Target Number: 9 (sprich Disk Nummer 10)
Logical Unit NUmber (LUN): 0
Um sicherzugehen, dass es sich in unserem Beispiel mit Controller Number „0“ auch um einen VMware-Controller handelt, kann man lsscsi --controllers
verwenden, welches je nach Treiber beispielsweise vmw_pvscsi
für den Paravirtualisierten Treiber ausgibt. Beim Match „0:9“ in VMware („SCSI(0:9)“) und in Linux („[2:0:9:0]“) zusammen mit der Grösse handelt es sich sehr sicher um die gesuchte Disk.
Troubleshooting
- No records found
Der Target-Name stimmt nicht.
Built on 2024-11-18