qemu, kvm, xen & libvirtHauptseite | Über | Hilfe | FAQ | Spezialseiten | Anmelden

Druckversion | Impressum | Datenschutz | Aktuelle Version

iSCSI

(Unterschied zwischen Versionen)(Link zu dieser Seite als [[QEMU-KVM-Buch/ Speichermedien/ iSCSI]])

Version vom 10:44, 8. Feb. 2013 (bearbeiten)
Rowa (Diskussion | Beiträge)
K
← Zum vorherigen Versionsunterschied
Aktuelle Version (18:53, 16. Apr. 2013) (bearbeiten) (rückgängig)
Rowa (Diskussion | Beiträge)
K
 
Zeile 14: Zeile 14:
Dadurch ist das Dateisystem des Speichermediums egal. Dadurch ist das Dateisystem des Speichermediums egal.
Das Protokoll iSCSI hat nur geringen Overhead. Das Protokoll iSCSI hat nur geringen Overhead.
 +Der iSCSI-Standard sieht den konkurrierenden Zugriff zweier Server auf dieselbe LUN nicht vor.
Wie beim SCSI gibt es einen Controller (Initiator), der die Kommunikation steuert. Wie beim SCSI gibt es einen Controller (Initiator), der die Kommunikation steuert.
Die Speichermedien (Festplatten, Bandlaufwerke, optische Laufwerke und so weiter) nennt man Target. Die Speichermedien (Festplatten, Bandlaufwerke, optische Laufwerke und so weiter) nennt man Target.

Aktuelle Version

<<<|###| >>> | English



Im_Aufbau


[bearbeiten] iSCSI

Das Protokoll iSCSI (internet Small Computer System Interface) ermöglicht die Nutzung des SCSI-Protokolls über TCP. Dabei wird Storage über das Netzwerk angeboten, daß dieser wie eine lokale Festplatte eingebunden werden kann. Im Gegensatz zu den anderen Netzwerkfreigaben, wie zum Beispiel Samba oder NFS, werden bei iSCSI rohe Datenblöcke übertragen. Dadurch ist das Dateisystem des Speichermediums egal. Das Protokoll iSCSI hat nur geringen Overhead. Der iSCSI-Standard sieht den konkurrierenden Zugriff zweier Server auf dieselbe LUN nicht vor. Wie beim SCSI gibt es einen Controller (Initiator), der die Kommunikation steuert. Die Speichermedien (Festplatten, Bandlaufwerke, optische Laufwerke und so weiter) nennt man Target. Mit Linux lässt sich sowohl die Freigabe wie auch das Einhängen von iSCSI-Speicher realisieren. QEMU kann auf iSCSI-Devices direkt zugreifen.

[bearbeiten] iSCSI-Server (Target)

Damit man das Zusammenspiel von QEMU und iSCSI testen kann wird zunächst ein iSCSI-Server (Target) benötigt. In diesem einfachen Beispiel dient ein separater Linux-Server (Debian 64-Bit) mit dem Namen iscsiserver und IP-Adresse 192.168.178.44 als iSCSI-Server (Target). Es wird eine Partition, eine Festplatte, ein Image-Datei, ein Logical Volume oder ein RAID-Device benötigt. Folgende Pakete sind zu installieren.

iscsiserver ~$ sudo apt-get install iscsitarget iscsitarget-dkms open-iscsi

Es müssen diese Kernel-Module geladen sein:

iscsiserver ~$ lsmod | grep iscsi 
iscsi_tcp              8113 0 
libiscsi_tcp          10946 1 iscsi_tcp
libiscsi              29302 3 ib_iser,iscsi_tcp,libiscsi_tcp
scsi_transport_iscsi  25036 4 ib_iser,iscsi_tcp,libiscsi
scsi_mod             126725 9 ib_iser,iscsi_tcp,libiscsi,scsi_transport_iscsi,firewire_sbp2,sg,sd_mod,sr_mod,libata

Das Verzeichnis /sys/class/iscsi_transport darf nicht leer sein.

iscsiserver ~$ ls /sys/class/iscsi_transport
iser  tcp

In der Datei /etc/default/iscsitarget ist ISCSITARGET_ENABLE=true zu setzen.

# /etc/default/iscsitarget
ISCSITARGET_ENABLE=true

In diesem Beispiel dient eine Image-Datei als iSCSI-Storage.

iscsiserver ~$ mkdir /srv/luns
iscsiserver ~$ cd /srv/luns
iscsiserver ~$ dd if=/dev/zero of=storagelun0 count=0 obs=1 seek=100G

Jedes iSCSI-Target muss einen eindeutigen Namen nach folgenden Muster erhalten:

iqn.yyyy-mm.<reversed domain name>:identifier

Hier ist der Taget-Name iqn.2036-12.de.example:storage.target0. Der Zugriff erfolgt mit dem User admin und dem Passwort geheim. Die Datei /etc/iet/ietd.conf wird entsprechend angepasst.

#  /etc/iet/ietd.conf
Target iqn.2036-12.de.example:storage.target0
        CHAP Users
        IncomingUser admin geheim
        OutgoingUser admin geheim
        Lun 0 Path=/srv/luns/storagelun0,Type=fileio
        Alias lun0

Für den ersten Test wird in der Datei /etc/iet/initiators.allow für alle Rechner der Zugriff auf alle Targets erlaubt (ALL ALL). Die Zeile ALL ALL sollte aber nur zum Testen unkommentiert bleiben, da sich sonst jeder Rechner mit dem Target verbinden kann.

/etc/iet/initiators.allow
ALL ALL
# iqn.2036-12.de.example:storage.target0 192.168.178.27

Das iSCSI-Taget ist zu starten.

iscsiserver ~$ sudo /etc/init.d/iscsitarget start

Getestet wird die Verfügbarkeit des iSCSI-Targets mit dem Befehl iscsiadm (Paket iscsiadm).

iscsiserver ~$ sudo iscsiadm -m discovery -t st -p localhost
127.0.0.1:3260,1 iqn.2036-12.de.example:storage.target0
...

Nun loggt man sich per SSH auf dem Rechner ein, der auf das iSCSI-Target zugreifen soll (Initiator). Dieser hat hier die IP-Adresse 192.168.178.27. Für den Zugriff auf das iSCSI-Target wird das Paket open-iscsi benötigt.

Host ~$ sudo apt-get install open-iscsi

In der Datei /etc/iscsi/iscsid.conf ist node.startup = automatic zu setzen.

# /etc/iscsi/iscsid.conf
...
node.startup = automatic
...

Man testet die Verfügbarkeit des iSCSI-Targets vom Initiator. In diesem Beispiel hat der iSCSI-Server die IP-Adresse 192.168.178.44.

Host ~$ sudo iscsiadm -m discovery -t st -p 192.168.178.44
192.168.178.44:3260,1 iqn.2036-12.de.example:storage.target0
Host ~$ sudo iscsiadm -m node
192.168.178.44:3260,1 iqn.2036-12.de.example:storage.target0

Mit folgenden Befehlen wird der User und das Passwort für den Zugriff definiert.

Host ~$ iscsiadm -m node --targetname "iqn.2036-12.de.example:storage.target0" --portal "192.168.178.44:3260" \
        --op=update --name node.session.auth.authmethod --value=CHAP
Host ~$ iscsiadm -m node --targetname "iqn.2036-12.de.example:storage.target0" --portal "192.168.178.44:3260" \
        --op=update --name node.session.auth.username --value=admin
Host ~$ iscsiadm -m node --targetname "iqn.2036-12.de.example:storage.target0" --portal "192.168.178.44:3260" \
        --op=update --name node.session.auth.password --value=geheim

Die Einstellungen dieses Storages-Devices werden in der folgenden Datei gespeichert.

/etc/iscsi/nodes/iqn.2036-12.de.example\:storage.target0/192.168.178.44\,3260\,1/default

Nun loggt man sich ein.

Host ~$ iscsiadm -m node --targetname "iqn.2036-12.de.example:storage.target0" --portal "192.168.178.44:3260" --login
Logging in to [iface: default, target: iqn.2036-12.de.example:storage.target0, portal: 192.168.178.44,3260]
Login to [iface: default, target: iqn.2036-12.de.example:storage.target0, portal: 192.168.178.44,3260]: successful

Das neue Device wird von fdisk -l angezeigt. Hier ist es /dev/sdb.

Host ~$ fdisk -l
...
Disk /dev/sdb: 107.4 GB, 107374182400 bytes
255 heads, 63 sectors/track, 13054 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Disk /dev/sdb doesn't contain a valid partition table

Das Device wird partitnioniert, formatiert und eingebunden (siehe auch http://qemu-buch.de/d/Anhang/_N%C3%BCtzliche_Tools#Partitionierung). Zum Beispiel /dev/sdb:

Host ~$ fdisk /dev/sdb
Host ~$ mkfs.ext3 /dev/sdb1
Host ~$ mount /dev/sdb1 /mnt
Host ~$ df -h /mnt
Filesystem          Size  Used Avail Use% Mounted on
/dev/sdb1          1004M   18M  936M   2% /mnt

[bearbeiten] Verwendung von iSCSI-Devices in QEMU

Es gibt zwei Varianten um iSCSI-Devices in QEMU zu nutzen. Bei der ersten Variante wird das iSCSI-LUN (Logical Unit Number) im Host-System per Mount eingebunden (siehe oben).

Bei der zweiten Variante wird der in QEMU eingebaute iSCSI-Initiator verwendet. Dazu muss QEMU unter Einbindung der Bibliothek libiscsi kompiliert worden sein (--enable-libiscsi). Damit kann QEMU direkt auf eine iSCSI-Resource zugreifen und diese dem Gast-System zur Verfügung stellen. Dabei werden sowohl Festplatten- als auch CD/DVD-Images unterstützt. Die Syntax zur Angabe der iSCSI-LUNs ist folgende:

iscsi://[<username>[:<password>@]]<host>[:<port]/<target-iqn-name>/<lun>

Die Authentifizierung per username/password ist optional und wird nur verwendet, wenn das Ziel die CHAP-Authentifizierung verwendet. In diesem Beispiel erfolgt keine Authentifizierung.

Host ~$ qemu-system-x86_64 --drive file=iscsi://192.168.178.44/iqn.2036-12.de.example:storage.target0/0

In diesem Beispiel erfolgt eine Authentifizierung mit Benutzername admin und Passwort geheim.

Host ~$ qemu-system-x86_64 -drive file=iscsi://admin:geheim@192.168.178.44/iqn.2036-12.de.example:storage.target0/0 

In diesem Beispiel werden Benutzername und Passwort mit Environment-Variablen übergeben.

Host ~$ LIBISCSI_CHAP_USERNAME="admin" 
Host ~$ LIBISCSI_CHAP_PASSWORD="geheim" 
Host ~$ qemu-system-x86_64 --drive file=iscsi://192.168.178.44/iqn.2036-12.de.example:storage.target0/0 


<<<|###| >>>