VirtualBox mit iSCSI auf ZFS (Linux): Unterschied zwischen den Versionen
Rabe (Diskussion | Beiträge) K (→Konfiguration VirtualBox: Datei:Screenshot VirtualBox iSCSI 20140302.png) |
Rabe (Diskussion | Beiträge) (→Performancetest: 2. tTest: Snapshot und Rollback) |
||
Zeile 126: | Zeile 126: | ||
== Performancetest == | == Performancetest == | ||
Ein Ubuntu Server 12.04 im VirtualBox Gast wird installiert, dabei wird bei der Installation LVM verwendet. Die VM hat 2GB RAM, der PC, in dem VirtualBox läuft hat 8GB RAM. Nach der Installation kann mittels dd ein einfacher Performance-Test durchgeführt werden: | Ein Ubuntu Server 12.04 im VirtualBox Gast wird installiert, dabei wird bei der Installation LVM verwendet. Die VM hat 2GB RAM, der PC, in dem VirtualBox läuft hat 8GB RAM. | ||
=== 1. Test === | |||
Nach der Installation kann mittels dd ein einfacher Performance-Test durchgeführt werden: | |||
<pre> | <pre> | ||
Zeile 135: | Zeile 138: | ||
Angesichts der Ausstattung sind 72MBytes/sec lineares Schreiben aus einer VM heraus ganz passabel. YMMV. | Angesichts der Ausstattung sind 72MBytes/sec lineares Schreiben aus einer VM heraus ganz passabel. YMMV. | ||
=== 2. Test: Snapshot+Rollback === | |||
;In der VM: | |||
<pre> | |||
rabe@foo:~$ dd if=/dev/zero of=/var/tmp/big.8G bs=1024k count=8192 | |||
8192+0 Datensätze ein | |||
8192+0 Datensätze aus | |||
8589934592 Bytes (8,6 GB) kopiert, 165,985 s, 51,8 MB/s | |||
</pre> | |||
;Auf dem Server: | |||
<pre> | |||
# zpool iostat -v 10 | |||
[…] | |||
capacity operations bandwidth | |||
pool alloc free read write read write | |||
-------------------------------- ----- ----- ----- ----- ----- ----- | |||
tank 1,95T 3,48T 54 6,62K 71,5K 51,7M | |||
mirror 1,90T 836G 28 407 34,7K 2,58M | |||
wwn-0x50014ee2b0b4a6c5-part1 - - 12 80 52,7K 2,85M | |||
wwn-0x50014ee058e266cd-part1 - - 15 84 62,7K 3,10M | |||
mirror 52,6G 2,67T 26 6,23K 36,9K 49,1M | |||
wwn-0x50014ee25e76e28b-part1 - - 14 429 58,7K 49,4M | |||
wwn-0x50014ee209153668-part1 - - 12 424 50,7K 48,8M | |||
-------------------------------- ----- ----- ----- ----- ----- ----- | |||
[…] | |||
</pre> | |||
Immernoch >50MB/sec. | |||
* Erstmal herunter fahren: | |||
<pre> | |||
rabe@foo:~$ sudo poweroff | |||
[sudo] password for rabe: | |||
rabe@foo:~$ | |||
An alle Benutzer verteilte Nachricht von rabe@foo | |||
(/dev/pts/0) um 5:45 ... | |||
Das System wird sich JETZT zum Ausschalten herunterfahren! | |||
Connection to foo.fritz.box closed by remote host. | |||
Connection to foo.fritz.box closed. | |||
</pre> | |||
* ZFS Snapshot erzeugen: | |||
<pre> | |||
# zfs snapshot tank/img/foo@test02 | |||
</pre> | |||
* VM wieder starten und Testdateien in /var/tmp löschen: | |||
<pre> | |||
rabe@foo:~$ ls -la /var/tmp/ | |||
insgesamt 8388620 | |||
drwxrwxrwt 2 root root 4096 Mär 2 05:38 . | |||
drwxr-xr-x 12 root root 4096 Mär 2 05:46 .. | |||
-rw-rw-r-- 1 rabe rabe 8589934592 Mär 2 05:41 big.8G | |||
rabe@foo:~$ df -h /var/tmp/ | |||
Dateisystem Größe Benutzt Verf. Verw% Eingehängt auf | |||
/dev/mapper/foo--vg-root 28G 9,0G 17G 35% / | |||
rabe@foo:~$ rm /var/tmp/big.8G | |||
rabe@foo:~$ df -h /var/tmp/ | |||
Dateisystem Größe Benutzt Verf. Verw% Eingehängt auf | |||
/dev/mapper/foo--vg-root 28G 985M 25G 4% / | |||
</pre> | |||
* VM wieder herunterfahren: | |||
<pre> | |||
rabe@foo:~$ sudo poweroff | |||
</pre> | |||
* ZFS Rollback: | |||
Geht leider nicht so direkt: | |||
<pre> | |||
# zfs rollback tank/img/foo@test02 | |||
cannot remove device links for 'tank/img/foo': Das Gerät oder die Ressource ist belegt: dataset is busy | |||
</pre> | |||
Vorher iscsitarget anhalten: | |||
<pre> | |||
# service iscsitarget stop | |||
# zfs rollback tank/img/foo@test02 | |||
# service iscsitarget start | |||
</pre> | |||
* VM wieder hochahren, Daten sind wieder da: | |||
<pre> | |||
rabe@foo:~$ ls -la /var/tmp/ | |||
insgesamt 8388620 | |||
drwxrwxrwt 2 root root 4096 Mär 2 05:38 . | |||
drwxr-xr-x 12 root root 4096 Mär 2 05:46 .. | |||
-rw-rw-r-- 1 rabe rabe 8589934592 Mär 2 05:41 big.8G | |||
rabe@foo:~$ du -sh /var/tmp/ | |||
8,1G /var/tmp/ | |||
</pre> | |||
[[Kategorie:Anwendungsbeispiel]] | [[Kategorie:Anwendungsbeispiel]] | ||
[[Kategorie:Hack]] | [[Kategorie:Hack]] |
Version vom 2. März 2014, 04:55 Uhr
Dieser Artikel beschreibt die Nutzung von iSCSI-Targets in VirtualBox (OpenSource). Ziel ist es das Festplatten-Image einer Virtuellen Maschine per iSCSI anzusprechen.
Bestandteile
Server
- Debian Wheezy
- zfsonlinux, zpool v28
- zvol mit 30GB
- iscsitarget
Client
- Ubuntu 13.04
- VirtualBox 4.2.10-dfsg-0ubuntu2.1
Aufbau iSCSI Target
Das iSCSI Target soll ein ZFS-Volume sein. Man könnte der Einfachheit halber auch einfach ein 30GB großes Flatfile nehmen. Wir nehmen ZFS.
ZFS
Wir gehen davon aus, dass der Server mit Debian wheezy installiert ist und bereits zfsonlinux/debian-zfs installiert ist. Wir nehmen ferner an, dass es einen zpool namens "tank" gibt, der ausreichend viel Platz und Performance bietet:
# zpool list NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT tank 5,44T 1,95T 3,48T 35% 1.00x ONLINE -
# zpool status pool: tank state: ONLINE scan: scrub repaired 0 in 11h40m with 0 errors on Wed Jan 22 11:25:42 2014 config: NAME STATE READ WRITE CKSUM tank ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 wwn-0x50014ee2b0b4a6c5-part1 ONLINE 0 0 0 wwn-0x50014ee058e266cd-part1 ONLINE 0 0 0 mirror-1 ONLINE 0 0 0 wwn-0x50014ee25e76e28b-part1 ONLINE 0 0 0 wwn-0x50014ee209153668-part1 ONLINE 0 0 0 errors: No known data errors
- Anlegen eines Filesystems mit dem Namen "tank/img". Das dient lediglich der Ordnung:
# zfs create tank/img
- Anlegen eines 30GB großen zvol mit dem Namen "tank/img/foo"
# zfs create -V 30GB tank/img/foo
Es entsteht nun ein Device /dev/zvol/tank/img/foo welches ein Symlink auf /dev/zd16 ist (in diesem Beispiel):
# ls -la /dev/zvol/tank/img/foo lrwxrwxrwx 1 root root 13 Mär 2 04:06 /dev/zvol/tank/img/foo -> ../../../zd16 # ls -la /dev/zd16 brw-rw---T 1 root disk 230, 16 Mär 2 04:06 /dev/zd16
iSCSI
Quelle: [1]
- Zunächst müssen die Packages iscsitarget und iscsitarget-dkms installiert werden
# apt-get install iscsitarget iscsitarget-dkms
- Anlegen einer Konfiguration, hier sinngemäß:
# cat /etc/iet/ietd.conf Target iqn.2014-02.de.sigsys:storage.vbox.foo.disk0 IncomingUser foo Neiz8eehah3zah5ho9ei OutgoingUser foo ShaeKoa8Quei MaxRecvDataSegmentLength 65536 MaxXmitDataSegmentLength 65536 Lun 0 Path=/dev/zvol/tank/img/foo,Type=blockio Alias vboxfoo0
Wichtig ist hier, dass MaxRecvDataSegmentLength und MaxXmitDataSegmentLength auf 65536 gesetzt werden. Nimmt man hier kleinere Werte kann der ganze Server crashen, wenn VirtualBox darauf zugreift.
- Aktivieren von iscsitarget in
# cat /etc/default/iscsitarget ISCSITARGET_ENABLE=true # ietd options # See ietd(8) for details ISCSITARGET_OPTIONS=""
- iscsitarget neu starten:
# service iscsitarget restart Removing iSCSI enterprise target devices: :. Removing iSCSI enterprise target modules: :. Starting iSCSI enterprise target service:Mar 2 05:10:26 kellermeister kernel: [ 5041.971210] iSCSI Enterprise Target Software - version 1.4.20.3 Mar 2 05:10:26 kellermeister kernel: [ 5041.971326] iscsi_trgt: Registered io type fileio Mar 2 05:10:26 kellermeister kernel: [ 5041.971330] iscsi_trgt: Registered io type blockio Mar 2 05:10:26 kellermeister kernel: [ 5041.971333] iscsi_trgt: Registered io type nullio . .
Damit ist der iSCSI-target (Storage Server) fertig eingerichtet. Das ZFS-Volume kann nun mit den ZFS üblichen Methoden verwaltet werden, zB snapshots anlegen und zurückrollen.
Konfiguration VirtualBox
- Zunächst soll eine VM namens "foo" angelegt werden. Das kann mit dem GUI erfolgen. Dabei wird dann keine Festplatte erzeugt, die Warnung ignorieren wir zunächst.
- Das GUI hat scheinbar keine Möglichkeit ein iSCSI-Target zu verwalten. Mit dem Commandline Tool "VBoxManage" geht es allerdings und wird dann auch im GUI entsprechend angezeigt:
$ VBoxManage storageattach foo --storagectl "SATA" --port 1 --device 0 --type hdd --medium iscsi --server 192.168.0.20 --target iqn.2014-02.de.sigsys:storage.vbox.foo.disk0 --username foo --password Neiz8eehah3zah5ho9ei
Der Rest funktioniert wie gewohnt, zum Beispiel die Installation eines OS per CD-Image.
Performancetest
Ein Ubuntu Server 12.04 im VirtualBox Gast wird installiert, dabei wird bei der Installation LVM verwendet. Die VM hat 2GB RAM, der PC, in dem VirtualBox läuft hat 8GB RAM.
1. Test
Nach der Installation kann mittels dd ein einfacher Performance-Test durchgeführt werden:
$ dd if=/dev/zero of=/tmp/big.8G bs=1024k count=8192
Das Ergebnis liegt hier bei ca 72MBytes/sec. Dabei ist anzumerken, dass der zpool "tank" auf dem iSCSI-Server über 4 Platten verteilt ist (2x Mirror). Erschwerend kommt noch hinzu, dass der Server "nur" ein HP microServer N36L ist, d.h. 1.3GHz CPU. Die Anbindung zwischen PC (VirtualBox) und Server (iSCSI Target) ist GBit über einen einfachen Switch (Latenzen!).
Angesichts der Ausstattung sind 72MBytes/sec lineares Schreiben aus einer VM heraus ganz passabel. YMMV.
2. Test: Snapshot+Rollback
- In der VM
rabe@foo:~$ dd if=/dev/zero of=/var/tmp/big.8G bs=1024k count=8192 8192+0 Datensätze ein 8192+0 Datensätze aus 8589934592 Bytes (8,6 GB) kopiert, 165,985 s, 51,8 MB/s
- Auf dem Server
# zpool iostat -v 10 […] capacity operations bandwidth pool alloc free read write read write -------------------------------- ----- ----- ----- ----- ----- ----- tank 1,95T 3,48T 54 6,62K 71,5K 51,7M mirror 1,90T 836G 28 407 34,7K 2,58M wwn-0x50014ee2b0b4a6c5-part1 - - 12 80 52,7K 2,85M wwn-0x50014ee058e266cd-part1 - - 15 84 62,7K 3,10M mirror 52,6G 2,67T 26 6,23K 36,9K 49,1M wwn-0x50014ee25e76e28b-part1 - - 14 429 58,7K 49,4M wwn-0x50014ee209153668-part1 - - 12 424 50,7K 48,8M -------------------------------- ----- ----- ----- ----- ----- ----- […]
Immernoch >50MB/sec.
- Erstmal herunter fahren:
rabe@foo:~$ sudo poweroff [sudo] password for rabe: rabe@foo:~$ An alle Benutzer verteilte Nachricht von rabe@foo (/dev/pts/0) um 5:45 ... Das System wird sich JETZT zum Ausschalten herunterfahren! Connection to foo.fritz.box closed by remote host. Connection to foo.fritz.box closed.
- ZFS Snapshot erzeugen:
# zfs snapshot tank/img/foo@test02
- VM wieder starten und Testdateien in /var/tmp löschen:
rabe@foo:~$ ls -la /var/tmp/ insgesamt 8388620 drwxrwxrwt 2 root root 4096 Mär 2 05:38 . drwxr-xr-x 12 root root 4096 Mär 2 05:46 .. -rw-rw-r-- 1 rabe rabe 8589934592 Mär 2 05:41 big.8G rabe@foo:~$ df -h /var/tmp/ Dateisystem Größe Benutzt Verf. Verw% Eingehängt auf /dev/mapper/foo--vg-root 28G 9,0G 17G 35% / rabe@foo:~$ rm /var/tmp/big.8G rabe@foo:~$ df -h /var/tmp/ Dateisystem Größe Benutzt Verf. Verw% Eingehängt auf /dev/mapper/foo--vg-root 28G 985M 25G 4% /
- VM wieder herunterfahren:
rabe@foo:~$ sudo poweroff
- ZFS Rollback:
Geht leider nicht so direkt:
# zfs rollback tank/img/foo@test02 cannot remove device links for 'tank/img/foo': Das Gerät oder die Ressource ist belegt: dataset is busy
Vorher iscsitarget anhalten:
# service iscsitarget stop # zfs rollback tank/img/foo@test02 # service iscsitarget start
- VM wieder hochahren, Daten sind wieder da:
rabe@foo:~$ ls -la /var/tmp/ insgesamt 8388620 drwxrwxrwt 2 root root 4096 Mär 2 05:38 . drwxr-xr-x 12 root root 4096 Mär 2 05:46 .. -rw-rw-r-- 1 rabe rabe 8589934592 Mär 2 05:41 big.8G rabe@foo:~$ du -sh /var/tmp/ 8,1G /var/tmp/