Drei verschiedene Arten, eine VM von einem TrueNAS-Host auf einen Proxmox-Host zu übertragen.
Vor einer Weile hat sich die IT-Crew der MS Stubnitz damit beschäftigt, die internen Dienste von unserem alten Server (der unter TrueNAS Core lief) auf unseren neuen Proxmox-Server zu übertragen. Das alte TrueNAS-System setzte dabei auf ZFS auf, das neue Proxmox-System hat aber ein LVM darunter, weshalb die Daten nicht einfach mit zfs-send übertragen werden können.
die Aufgabenstellung
Für das daraus entstehende Problem “eine Debian-VM mit den darauf liegenden Nutzdaten von TrueNAS Core auf Proxmox umziehen” haben wir drei verschiedene Lösungen gefunden:
-> 1. auf dem neuen Host eine neue VM anlegen und die dreieinhalb config-Daten von Debian-VM zu Debian-VM kopieren.
-> 2. das ZFS-Block Device auf dem alten Host direkt mit netcat in ein neues Block Device im LVM auf dem neuen Host schreiben und dieses einer neuen VM als Festplatte verfügbar machen.
-> 3. das ZFS-Block Device auf dem alten Host in eine Datei schreiben, das Verzeichnis übers Netzwerk auf dem neuen Host mounten und die Datei mit ‘qm importdisk’ in eine neue VM importieren.
Bisschen ausführlicher erläutert:
Weg Nr. 1, “the coward’s way”:
Eine neue VM anlegen, ein neues System installieren und die Anwendungen aus dem Backup wiederherstellen.
Für die Systemeinstellungen einen Share vom alten System auf dem neuen System mounten, die benötigten config-Dateien aus /etc und /var rauskopieren. Relativ einfach von der Sache her, aber umständlich, wenn es viel Software einzurichten gibt. Je nach Einzelfall entweder ein guter Weg, um mal aufzuräumen, oder eben Quelle neuer Probleme durch den Versionswechsel und unerwartete Inkonsistenzen.
Weg Nr. 2, “the true hacker way”:
Step 1: Auf dem neuen System eine neue VM anlegen. Dazu auf dem LVM eine neue Platte erzeugen und für diese bytegenau die Größe ändern, so dass diese dem Umfang der alten Platte auf dem alten System entspricht.
Step 2: Mit ’netcat port 1234’ auf dem neuen System einen Listener mit Umleitung in die neu erzeugte Platte vm-disk-10x aufmachen.
Step 3: Mit ’netcat port 1234’ auf dem alten System einen Sender aus dem alten Block Device dev/zvol/VMhostname/images/VMname aufmachen und den kompletten Datenstrom in die neue Datei leiten.
Dabei muss man aber auf einen unerwarteten Fallstrick aufpassen: wenn in dem Diskimage durch/von ZFS Snapshots angelegt worden sind, ist das im besten Fall vergeudeter Platz auf dem neuen System, weil diese in dem LVM nicht 1:1 unterstützt werden.
Weg Nr. 3, “by the book”:
Step 1: Auf dem alten System das Diskimage exportieren, entweder mit zfs snapshot, oder einfacher: gleich mit dd in eine Datei schreiben.
Step 2: Auf dem neuen System einen sshfs-mount vom alten System einbinden.(Ggfs müssen hierfür noch keys generiert werden, wenn die beiden Computer vorher noch nicht miteinander gesprochen haben)
Step 3: Wenn die Verbindung steht, kann man das Image über den offiziellen Weg mit ‘qm importdisk’ in Proxmox importieren.
zu beachten sowohl für 2.) und 3.):
Da Proxmox unter der Haube KVM verwendet, TrueNAS Core aber seine VMs unter bhyve angelegt, sind die defaults für neue VMs unterschiedlich. Unter Proxmox muss man deshalb bei der Konfiguration der neuen VM extra “OVMF (UEFI)” als BIOS auswählen und eine gesonderte EFI-Partition erzeugen.
Und es gibt auch noch einen weiteren Punkt zum drauf aufpassen: nach dem Boot auf dem neuen Host muss in der Debian-VM der Name des Networkinterface angepasst werden, damit die ihre Netzwerkkarte wiederfindet, weil diese jetzt anders heißt. Ansonsten gab es aber bei uns keine Probleme, die VM läuft ohne Änderungen so auf dem neuen Host.
Links:
Anleitung mit zfs-send: https://memetichenry.com/books/it-and-devops/page/importing-vms-from-truenas-core-bhyve-to-proxmox