ISCSI for dummies

Der Server (Target)

Kernelconfig
  • Device Drivers →
    • [M] CONFIG_TARGET_CORE (Generic Target Core Mod (TCM) and ConfigFS Infrastructure) →
      • [M] CONFIG_ISCSI_TARGET (Linux-iSCSI.org iSCSI Target Mode Stack)
      • [M] CONFIG_TCM_IBLOCK (TCM/IBLOCK Subsystem Plugin for Linux/BLOCK)
      • [M] CONFIG_TCM_FILEIO (TCM/FILEIO Subsystem Plugin for Linux/VFS)
      • [M] CONFIG_TCM_PSCSI (TCM/pSCSI Subsystem Plugin for Linux/SCSI)

WICHTIG: Diese Punkte müssen als Module gebaut werden.

CONFIG_TCM_IBLOCK wird benötigt, wenn man Block-Devices freigeben möchte

CONFIG_TCM_FILEIO für Dateien

CONFIG_TCM_PSCSI für "echte" SCSI-Geräte (z.B. CD-Laufwerk)

Einrichten von Targets

Der Server - also das Gerät, welches die "Targets" zur Verfügung stellt, wird über targetcli gesteuert. Dieses Tool könnt ihr über euren Paketmanager beziehen.

Block-Device als Target einrichten:

targetcli starten (Tip: Es kann Tab-Completion):

$ sudo targetcli

In targetcli angekommen erstellt man zuerst einen "Backstore". Ich verwende exemplarisch sda1. Es kann aber auch jedes andere Blockdevice oder Partition sein.

/> cd /backstores/iblock
/backstores/iblock> create my_blockdevice /dev/sda1
Generating a wwn serial.
Created iblock storage object my_blockdevice using /dev/sda1.
/>

Anschließend wird das iSCSI-Target initialisiert:

/backstores/iblock> cd /iscsi
/iscsi> create
Created target iqn.2003-01.org.linux-iscsi.sulfur.x8664:sn.46326382cc42.
Selected TPG Tag 1.
Successfully created TPG 1.

Das "Portal" repräsentiert einen Netzwerkserver bei iSCSI und muss ebenfalls gestartet/angelegt werden:

/iscsi> cd iqn.2003-01.org.linux-iscsi.sulfur.x8664:sn.46326382cc42/tpgt1/portals
/iscsi/iqn.20...tpgt1/portals> create
Using default IP port 3260
Automatically selected IP address 10.42.0.193.
Successfully created network portal 10.42.0.193:3260.

Innerhalb dieses IQNs (dieser kryptische Name) wird nun eine LUN über iSCSI exportiert. Als letztes wird das LUN (der "Backstore") über iSCSI exportiert/verbunden

/iscsi/iqn.20...tpgt1/portals> cd ../luns
/iscsi/iqn.20...tpgt1/luns> create /backstores/iblock/my_blockdevice
Selected LUN 0.
Successfully created LUN 0.

Damit es leichter wird, kann man noch den Demo-Mode anschalten. Dieser deaktiviert das Password und erlaubt RW-Zugriff auf euer Target. Also VORSICHTIG sein.

/iscsi/iqn.20...42/tpgt1/luns> cd ..
/iscsi/iqn.20...382cc42/tpgt1> set attribute authentication=0 demo_mode_write_protect=0 generate_node_acls=1 cache_dynamic_acls=1
Parameter demo_mode_write_protect is now '0'.
Parameter authentication is now '0'.
Parameter generate_node_acls is now '1'.
Parameter cache_dynamic_acls is now '1'.

Zu guter letzt kann man die Config persistieren

/iscsi/iqn.20...tpgt1/luns> cd /
/> saveconfig
WARNING: Saving sulfur current configuration to disk will overwrite your boot settings.
The current target configuration will become the default boot config.
Are you sure? Type 'yes': yes
[…]
/> exit

Der Client (Initiator)

Kernelconfig
  • Device Drivers → SCSI device support → SCSI low-level drivers →
    • [M] CONFIG_ISCSI_TCP (iSCSI Initiator over TCP/IP)

WICHTIG: Dieser Punkt muss ebenfalls als Modul gebaut werden.

Target mit dem Client verbinden

Auf dem Client wird open-iscsi verwendet, um Targets zu verbinden. Dies kann ebenfalls über den Paketmanager installiert werden.

Zuerst muss der iscsid gestartet werden:

root@workstation ~ # /etc/init.d/iscsid start
 * Checking Open-iSCSI configuration ... [ ok ]
 * Starting iscsid ... [ ok ]
 * Setting up iSCSI targets ...
iscsiadm: No records found

Dann kann der Server nach Targets "abgesucht" werden

root@workstation ~ # iscsiadm -m discovery -t sendtargets -p 10.42.0.193:3260
10.42.0.193:3260,1 iqn.2003-01.org.linux-iscsi.sulfur.x8664:sn.46326382cc42

Dabei sollte der IQN des Targets zurückgegeben werden. Diesen verwendet man anschließend um sich zu verbinden:

iscsiadm -m node -T iqn.2003-01.org.linux-iscsi.sulfur.x8664:sn.46326382cc42 -p 10.42.0.193:3260 --login
Logging in to [iface: default, target: iqn.2003-01.org.linux-iscsi.sulfur.x8664:sn.46326382cc42, portal: 10.42.0.193,3260] (multiple)
Login to [iface: default, target: iqn.2003-01.org.linux-iscsi.sulfur.x8664:sn.46326382cc42, portal: 10.42.0.193,3260] successful.

Nun ist das Gerät als vollwertiges Block-Device unter eurem Client verfügbar. lsblk zeigt das neue Device auch:

root@workstation ~ # lsblk
NAME     MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
[…]
sdc        8:32   0   100M  0 disk