/ virtualisierung

Von bhyve zu ... VMWare ESXi (ein Freenas-Post)

Bhyve ist der FreeBSD Hypervisor, der besonders im Zusammenspiel mit ZFS einige sehr coole Features hat. Leider bleibt er auf FreeNAS weiter hinter seinen Möglichkeiten (die er in der "normalen" FreeBSD-Version hat), weshalb man dann doch irgendwann mit dem Gedanken spielt seine Server anders zu virtualisieren

Unter FreeNAS hat man 2 Möglichkeiten, bhyve anszusprechen: Zum einen das Tool iohyve, dass die Konfiguration von byhve zwar stark vereinfacht, aber leider in einer sehr veralteten Version im aktuellen Freenas enthalten ist und dementsprechend wenig Features bietet.

Zum anderen hat man in den neuen Freenas-Versionen di Möglichkeit, Virtuelle Maschinen über das WebUI zu steuern. Hier sind die Möglichkeiten aber auch mehr als beschränkt, es fehlen z. b. Device-Passtrhough, was bhyve eigentlich kann und man dann doch irgendann braucht.

Am Ende ist Freenas doch ein (sehr gutes) NAS und kein All-in-One- oder gar Virtualisierungs-Server.

Also ist es nicht verwunderlich wenn man irgendwann an die Grenzen der Virtualisierung unter FreeNAS stößt und daher seine VMs zu einem anderen Virtualisierungssystem umziehen möchte, z. B. VMWare esxi, Virtualbox etc.

Entschließt man sich zu diesem Schritt möchte man natürlich seine VMs mitnehmen.
Dank ZFS geht dies auch relativ simpel.

Die grundlegende Ablauf ist folgender:

  • Aktuelle Zustand der VM speichern
  • Ein Raw-Image des ZVOL erstellen
  • RAW-Image in gewünschtes Zielformat konvertieren

Ein Problem ist jedoch, dass unter FreeNAS zvols grundsätzlich im modus dev (volmode=dev) erstellt werden, welches zwar einige Vorteile bietet, sich jedoch nicht einfach so wie eine "normale" Festplatte ansprechen und damit auch weiterverarbeiten lässt (z. B. ein RAW-Image erstellen mittels dd). Wir brauchen daher das zvol das die HDD unserer VM darstellt im Format geom.

Daher kommt hier jetzt die Lösung dieses Problems und ein kurzes Howto wie man eine VM die mit iohyve oder aber auch mitden neueren Versionen von FreeNAS mittels WebGUI (hier sind nur die Pfade ein bisschen anders) erstellt wurden, umwandelt, exportiert und konvertiert.

  • stoppe vm
    iohyve stop name-der-vm

  • erstelle snapshot von zvol / dataset via wi in freenas oder cli
    zfs snapshot ssdtank/iohyve/server/disk0@migration

  • erstelle clone von diesem snapshot, jedoch mit option "-o volmode=geom"
    zfs clone -o volmode=geom ssdtank/iohyve/server/disk0@migration ssdtank/jail/server-geom

  • überprüfe ob das neue zvol (der clone) als "normale" hdd erkannt wird
    gpart show /dev/zvol/ssdtank/server/server-geom

  • es sollte folgende ausgabe kommen

# root@freenas:~ # gpart show /dev/zvol/ssdtank/iohyve/server/server-geom
# =>      63  83886017  zvol/ssdtank/iohyve/server/server-geom  MBR  (40G)
#        63      1985                                                           - free -  (993K)
#      2048  67106816                                                        1  linux-data  [active]  (32G)
#  67108864      2046                                                           - free -  (1.0M)
#  67110910  16773122                                                        2  ebr  (8.0G)
#  83884032      2048                                                           - free -  (1.0M)
  • danach mit dd ein raw-file erstellen
    dd if=/dev/zvol/ssdtank/iohyve/server/server-geom of=/mnt/myvolume/images/server-geom-raw-image.raw bs=1m

  • danach dann weiterbehandeln, z. b. mit qemu-img (unter windows)
    qemu-img.exe convert -f raw -O vmdk C:\pfad\zum\server-geom-raw-image.raw D:\pfad\zum\server-virtualbox.vmdk

Um das file dann sauber in ESXi zu importieren bzw. besser gesagt, das VMDK-File als Festplatte einer VM nutzen zu können, muss die Datei dann nochmal unter ESXI selber "konvertiert" werden:

[root@localhost:/vmfs/volumes/382310cd-12345678] vmkfstools -i "server-vmdk.vmdk" "server-repaired.vmdk"
Destination disk format: Thin
Cloning disk 'server-vmdk.vmdk'...
Clone: 100% done.

Jetzt sollten neben der server-reparied.vmdk auch noch die server-repaired.flat im entsprechenden Verzeichnis vorhanden sein. Jetzt kann die VMDK-Datei bei einer neue Virtuellen Maschine als Festplatte eingebunden werden und die VM startet ohne Probleme von dieser.

Und die Migration ist somit abgeschlossen.