Linux-IO Target (LIO) unter Ubuntu 14.04

Aus Thomas-Krenn-Wiki
Zur Navigation springen Zur Suche springen
Hinweis: Bitte beachten Sie, dass dieser Artikel / diese Kategorie sich entweder auf ältere Software/Hardware Komponenten bezieht oder aus sonstigen Gründen nicht mehr gewartet wird.
Diese Seite wird nicht mehr aktualisiert und ist rein zu Referenzzwecken noch hier im Archiv abrufbar.

Dieser Artikel zeigt die Installation und Konfiguration eines LIO iSCSI Targets unter Ubuntu Server 14.04.1. Weitere Informationen finden Sie im Artikel iSCSI Grundlagen.

"LIO-Architecture" by Marcfl - Own work. Licensed under Creative Commons Attribution-Share Alike 3.0 via Wikimedia Commons - http://commons.wikimedia.org/wiki/File:LIO-Architecture.png#mediaviewer/File:LIO-Architecture.png

LIO

  • Linux-IO Target[1]
  • Seit der Version 2.6.38 Bestandteil des Linux Kernels.
  • Es unterstützt eine Vielzahl von Übertragungsstandards wie z.B. Fibre Channel oder iSCSI.
  • Als Backends können unterschiedlichste Speichertechnologien benutzt werden (z.B. FileIO oder IBLOCK).
  • Als Management Shell und API wird targetcli verwandt.
  • Client-Server Modell[2]
    • LIO als Target stellt die Serverkomponente dar.
    • Ein Inititator (z.B. Windows) bildet die Clientkomponente.

Frontends (Fabric Modules)

Fabric Modules bezeichnen die Frontends des SCSI Targets. Sie transportieren die SCSI Kommandos über die Netzwerke.[3]

Folgende Übertragungswege sind mit LIO verfügbar:

  • Fibre Channel
  • Fibre Channel over Ethernet
  • FireWire
  • IBM vSCSI (virtuelles SCSI)
  • iSCSI
  • iSER
  • SRP
  • tcm_loop
  • USB Gadget
  • vHost

Backends (Storage Modules)

Backstores beschreiben das Backend von LIO. Es gibt unterschiedliche Ausprägungen und im nachfolgenden erfolgt eine Gegenüberstellung.[4]

FILEIO (Linux VFS devices)

Fileio beschreibt ein beliebiges File auf einem gemounteten Filesystem. Standardmäßig wird es in einem nicht gebufferten Modus betrieben. Es wird davor abgeraten Fileio mit einem Writecache zu benutzen. Obwohl es eine signifikante Performanceverbesserung bringt, kann ein nicht weggeschriebener Cache bei einem Systemcrash den Backstore beschädigen.

IBLOCK

Hier wird ein Blockdevice als Backstore benutzt. Es kann jedes Device im Verzeichnis /sys/block verwendet werden (z.B. SATA Festplatten oder auch SAS). IBLOCK Backstores bieten für gewöhnlich die beste Performance.

PSCSI

PSCSI bedeutet Linux pass-through SCSI device und beschreibt Speicherobjekte die ohne Emulation ein pass-through der SCSI Kommandos unterstützen. Wenn das SCSI device in der Ausgabe von lsscsi erscheint wird es durch dieses Subsystem unterstützt, z.B. SAS Festplatten.

Memory Copy RAMDISK

Die Memory Copy RAMDISK stellt RAM Disks mit vollständiger SCSI Emulation zur Verfügung. Separate Memory Mappings durch Verwendung von Memory Copy for Initiators ermöglicht eine Multi-Session Funktion.

Installation von targetcli

targetcli ist in den Paketquellen nahezu jeder Distribution erhalten. Am Beispiel von Ubuntu 14.04 wird es per sudo apt-get install --no-install-recommends targetcli installiert.

Beispielkonfiguration eines Targets mit targetcli

Es wird anhand eines Beispiels gezeigt wie die Konfiguration eines Targets mit targetcli gelingt. Im nachfolgenden wird ein IBLOCK Device als Backstore und ein iSCSI Target konfiguriert und mit einem Windows Initiator verbunden.

targetcli starten

Als root durch die Eingabe von targetcli gelangt man in die targetcli-shell.

Mittels ls wird im Wurzelverzeichnis die Gesamtübersicht angezeigt. Die Backstores mit ihren Unterordnern und die Fabric Modules werden hier angezeigt.

/> ls
o- / ..................................................................... [...]
  o- backstores .......................................................... [...]
  | o- fileio ............................................... [0 Storage Object]
  | o- iblock ............................................... [0 Storage Object]
  | o- pscsi ................................................ [0 Storage Object]
  | o- rd_dr ................................................ [0 Storage Object]
  | o- rd_mcp ............................................... [0 Storage Object]
  o- ib_srpt ....................................................... [0 Targets]
  o- iscsi ......................................................... [0 Targets]
  o- loopback ...................................................... [0 Targets]
  o- qla2xxx ....................................................... [0 Targets]
  o- tcm_fc ........................................................ [0 Targets]

Ordner iblock

Wechseln in den Ordner iblock:

cd backstores/iblock

Neues Blockdevice anlegen

create name=iscsi dev=/dev/sdb
  • In der Ausgabe von ls ist nun ein iblock Device mit dem Namen iscsi vorhanden.
/> ls
o- / ..................................................................... [...]
  o- backstores .......................................................... [...]
  | o- fileio ............................................... [0 Storage Object]
  | o- iblock ............................................... [1 Storage Object]
  | | o- iscsi .......................................... [/dev/sdb deactivated]
  | o- pscsi ................................................ [0 Storage Object]
  | o- rd_dr ................................................ [0 Storage Object]
  | o- rd_mcp ............................................... [0 Storage Object]
  o- ib_srpt ....................................................... [0 Targets]
  o- iscsi ......................................................... [0 Targets]
  o- loopback ...................................................... [0 Targets]
  o- qla2xxx ....................................................... [0 Targets]
  o- tcm_fc ........................................................ [0 Targets]

Targetnamen festlegen

  • Wechseln in den Ordner /iscsi:
cd /iscsi
  • Mittels create wird der Targetname erstellt. Ohne Angabe eines spezifischen Namens wird ein automatisch generierter erstellt:
/iscsi> create
Created target iqn.2003-01.org.linux-iscsi.iscsi.x8664:sn.7dab2d8e4246.
Selected TPG Tag 1.
Successfully created TPG 1.
  • Nun erscheint bei der Ausgabe von ls im Verzeichnis iscsi der automatisch generierte Targetname. Die Unterverzeichnisse acl, luns und portals werden bei der Anlage eines Targets automatisch angelegt.
/iscsi> cd /
/> ls
o- / ..................................................................... [...]
  o- backstores .......................................................... [...]
  | o- fileio ............................................... [0 Storage Object]
  | o- iblock ............................................... [1 Storage Object]
  | | o- iscsi .......................................... [/dev/sdb deactivated]
  | o- pscsi ................................................ [0 Storage Object]
  | o- rd_dr ................................................ [0 Storage Object]
  | o- rd_mcp ............................................... [0 Storage Object]
  o- ib_srpt ....................................................... [0 Targets]
  o- iscsi .......................................................... [1 Target]
  | o- iqn.2003-01.org.linux-iscsi.iscsi.x8664:sn.7dab2d8e4246 ......... [1 TPG]
  |   o- tpgt1 ....................................................... [enabled]
  |     o- acls ....................................................... [0 ACLs]
  |     o- luns ....................................................... [0 LUNs]
  |     o- portals ................................................. [0 Portals]
  o- loopback ...................................................... [0 Targets]
  o- qla2xxx ....................................................... [0 Targets]
  o- tcm_fc ........................................................ [0 Targets]

Portals

  • Hier wird angegeben auf welcher IP-Adresse des Servers das Target freigegeben wird.
  • Bei nur einer IP-Adresse wird diese standardmäßig ausgewählt, ansonsten kann sie explizit angegeben werden.
  • Der Port kann ebenso angepasst werden.
  • Wechseln in das Portals-Verzeichnis des zuvor angelegten Targets:
/> cd iscsi/iqn.2003-01.org.linux-iscsi.iscsi.x8664:sn.7dab2d8e4246/tpgt1/portals
  • Anlegen eines Portals
/iscsi/iqn.20...tpgt1/portals> create
Using default IP port 3260
Automatically selected IP address 10.1.102.155.
Successfully created network portal 10.1.102.155:3260.

LUN konfigurieren

  • Eine LUN bezeichnet eine Logical Unit (LU).
  • Oft wird aber auch der Begriff Logical Unit Number verwendet.
  • Sie wird zur Zuordnung für die Ansteuerung von Geräten im SCSI-Bus verwendet.
  • Es können je Target ein oder mehrere LUNs bereitgestellt werden.
  • In das Unterverzeichnis /luns wechseln
cd ../luns
  • Anlage eines neuen LUNs auf das vorab erstellte Blockdevice.
/iscsi/iqn.20...46/tpgt1/luns> create /backstores/iblock/iscsi 
Selected LUN 0.
Successfully created LUN 0.

ACL anlegen

  • Access Control List[5]
  • Hiermit wird gesteuert auf welche Interfaces ein Initiator zugreifen darf.
  • In das Unterverzeichnis /acls wechseln
cd ../acls
/iscsi/iqn.20...46/tpgt1/acls> create iqn.1991-05.com.microsoft:node01.infra.local
Successfully created Node ACL for iqn.1991-05.com.microsoft:node01.infra.local
Created mapped LUN 0.

Speichern der Konfiguration

  • In das Wurzelverzeichnis wechseln cd /
  • saveconfig und anschließend mit yes bestätigen

Fertige Konfiguration

  • Hier sehen Sie eine fertiggestellte Targetkonfiguration anhand der targetcli ls Ausgabe und anhand einer Grafik.
/> ls
o- / ..................................................................... [...]
  o- backstores .......................................................... [...]
  | o- fileio ............................................... [0 Storage Object]
  | o- iblock ............................................... [1 Storage Object]
  | | o- iscsi ............................................ [/dev/sdb activated]
  | o- pscsi ................................................ [0 Storage Object]
  | o- rd_dr ................................................ [0 Storage Object]
  | o- rd_mcp ............................................... [0 Storage Object]
  o- ib_srpt ....................................................... [0 Targets]
  o- iscsi .......................................................... [1 Target]
  | o- iqn.2003-01.org.linux-iscsi.iscsi.x8664:sn.7dab2d8e4246 ......... [1 TPG]
  |   o- tpgt1 ....................................................... [enabled]
  |     o- acls ........................................................ [1 ACL]
  |     | o- iqn.1991-05.com.microsoft:node01.infra.local ....... [1 Mapped LUN]
  |     |   o- mapped_lun0 ......................................... [lun0 (rw)]
  |     o- luns ........................................................ [1 LUN]
  |     | o- lun0 .................................... [iblock/iscsi (/dev/sdb)]
  |     o- portals .................................................. [1 Portal]
  |       o- 10.1.102.155:3260 ............................. [OK, iser disabled]
  o- loopback ...................................................... [0 Targets]
  o- qla2xxx ....................................................... [0 Targets]
  o- tcm_fc ........................................................ [0 Targets]
/>

Schematischer Ablauf

Die folgende Grafik stellt den schematischen Ablauf der Erzeugung eines iSCSI Targets dar:

Linux-IO Target Konfiguration

Target steuern

Das LIO Target kann per service target {start|startbak|stop|status|restart} gesteuert werden.

Konfiguration löschen

Mit delete kann die Konfiguration gelöscht werden.

  • Backstore löschen
/backstores/iblock> delete iscsi 
Deleted storage object iscsi.
  • Fabric Module löschen
/iscsi> delete iqn.2003-01.org.linux-iscsi.iscsi.x8664:sn.7dab2d8e4246 
Deleted Target iqn.2003-01.org.linux-iscsi.iscsi.x8664:sn.7dab2d8e4246.

Demo Modus

Der Demo Modus dient zum grundlegenden Testen der Verbindung. Er beinhaltet keinerlei Sicherheitsmaßnahmen. In einer produktiven Umgebung sollte deshalb immer eine Authentifizierung aktiviert sein. Im Verzeichnis tpg1 wird nachfolgender Befehl abgesetzt, um den Demomodus zu aktivieren und die Verbindung testen zu können.

/> iscsi/iqn.2003-01.org.linux-iscsi.iscsi.x8664:sn.7dab2d8e4246/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'.

Target Sichtbarkeitskontrolle

  • Ein spezifisches Target kann mittels Username und Passwortangabe nur für diesen Account sichtbar gemacht werden.
  • Jedoch kann es auch für alle sichtbar gemacht werden.
  • Wechseln in das Targetverzeichnis (in diesem Beispiel /iscsi)
  • set discovery_auth enable={0,1}
    1 und eine zusätzliche Angabe von userid=<id> und password=<pw> grenzt die Sichtbarkeit auf den einen spezifischen User ein.
    set discovery_auth enable=1 userid=<id> password=1
    0 ermöglicht eine generelle Sichtbarkeit
    Jedoch funktioniert im Moment (Version 2.1-1 von targetcli) die Option 0 nicht. Es schaltet die Sichtbarkeit nicht für alle ein sondern funktioniert wie der Parameter 1. Um die Sichtbarkeit für alle zu aktivieren muss ein Fragezeichen eingegeben werden.
 /iscsi> set discovery_auth enable=0
Parameter enable is now '1'.
/iscsi> set discovery_auth enable=1
Parameter enable is now '1'.
/iscsi> set discovery_auth enable=?
Parameter enable is now '0'.

Verbindung testen

Nachfolgend wird beschrieben wie man sich von Windows 7 aus mit dem iSCSI Initiator auf das zuvor erstellte Target verbindet.

  • Aufrufen des iSCSI Inititators
    • Startmenü - Systemsteuerung - Verwaltung - iSCSI Initiator
    • Alternativ im Startmenü unten links den Suchbegriff "iscsi" eintippen.
  • Konfiguration

Weitere Informationen

Einzelnachweise

  1. http://linux-iscsi.org/wiki/LIO LIO (linux-iscsi.org)
  2. http://lwn.net/Articles/424004/ A tale of two SCSI targets (lwn.net)
  3. http://linux-iscsi.org/wiki/LIO#Fabric_modules Fabric Modules (linux-iscsi.org)
  4. http://linux-iscsi.org/wiki/LIO#Backstores Backstores (linux-iscsi.org)
  5. http://linux-iscsi.org/wiki/LIO#Glossary Glossary (linux-iscsi.org)


Foto Thomas Niedermeier.jpg

Autor: Thomas Niedermeier

Thomas Niedermeier arbeitet im Product Management Team von Thomas-Krenn. Er absolvierte an der Hochschule Deggendorf sein Studium zum Bachelor Wirtschaftsinformatik. Seit 2013 ist Thomas bei Thomas-Krenn beschäftigt und kümmert sich unter anderem um OPNsense Firewalls, das Thomas-Krenn-Wiki und Firmware Sicherheitsupdates.

Icon-Twitter.png 

Das könnte Sie auch interessieren

Fibre Channel SAN Zoning Best Practices
Schlechte Schreibperformance von Single Controller IBM Storage DS3300 / DS3400 / DS3200 beheben
Storage Multipathing Technologien