Einführung
Wenn Sie mit einem entfernten Cloud-Server arbeiten, arbeiten Sie in der Regel mit einer virtuellen Maschine: einer isolierten Instanz eines vollständigen Betriebssystems, die innerhalb eines größeren Serverclusters ausgeführt wird. Sie können auch lokal auf Ihrem Desktop mit virtuellen Maschinen arbeiten, indem Sie Software wie QEMU oder VirtualBox verwenden. Virtuelle Maschinen können eine gesamte Desktop-Benutzeroberfläche enthalten oder sie können nur einen SSH-Server ausführen, um Terminalverbindungen zu ermöglichen. In beiden Fällen sind sie technisch ähnlich und treffen ähnliche Annahmen. Abgesehen von etwaigen Cloud-Optimierungen im großen Maßstab besteht der einzige signifikante Unterschied zwischen Virtualisierungsumgebungen in den Festplatten und Konfigurationsoptionen der virtuellen Maschine. Diese werden als virtuelle Maschinen-Images bezeichnet und sind bei verschiedenen Anbietern unterschiedlich formatiert.
In diesem Tutorial erfahren Sie, wie Sie zwischen Formaten von virtuellen Maschinen-Images (einschließlich qcow2
, vdi
, vhd
und vmdk
) konvertieren können, damit Sie Ihre virtuellen Umgebungen bei Bedarf von Ihrem Desktop in die Cloud und zurück nehmen können.
Voraussetzungen
Die Befehle in diesem Tutorial können unter Windows, macOS oder Linux ausgeführt werden, solange Sie QEMU und VirtualBox sowie deren Befehlszeilentools installieren können. Dieses Tutorial enthält Installationsanweisungen für den Homebrew-Paketmanager. Sie können Homebrew auf macOS, Linux oder unter Windows unter WSL2 installieren.
Wenn Sie auf einem DigitalOcean-Droplet arbeiten, sollten Sie mindestens 2 CPUs und 2 GB Speicher haben.
Sie benötigen außerdem mindestens 10 GB freien Speicherplatz, um die Befehle in diesem Tutorial ausführen zu können.
Hinweis: Wenn Sie macOS mit einem Apple Silicon CPU (hergestellt im Jahr 2020 und später) verwenden, können Sie nur QEMU verwenden und nicht VirtualBox.
QEMU
QEMU ist die leistungsstärkste und weit verbreitete Open-Source-Virtualisierungssoftware. Es läuft auf allen wichtigen Plattformen (einschließlich Windows, macOS, Linux und anderen Betriebssystemen wie Android) und ist sowohl zur Virtualisierung als auch zur Emulation fähig, je nach Bedarf. Zum Beispiel, wenn Sie ein Linux-Server-Image auf einem Windows-Desktop ausführen (ein häufiger Anwendungsfall), teilen sich beide Plattformen eine gemeinsame zugrunde liegende Architektur (Intel/AMD x86), so dass QEMU durch Virtualisierung eine volle Leistung erzielen kann. Wenn Sie QEMU verwenden, um Architekturen zu mischen und anzupassen, zum Beispiel durch Ausführen von x86 Linux oder Windows (entweder als „Host“ oder als „Gast“ Betriebssystem) mit den ARM-Architekturen von macOS oder Android, wird QEMU automatisch Emulation verwenden, um Architekturen zu übersetzen.
Verglichen mit Virtualisierung wird Emulation normalerweise nicht in Produktionsumgebungen verwendet, da sie einen signifikanten Leistungsverlust mit sich bringt. Dennoch bietet QEMU, indem es Virtualisierung und Emulation als nahezu gleichwertig behandelt, signifikante Kompatibilitätsvorteile, da dieselben Bildformate und dieselben Tools in jeder Situation verwendet werden können.
QEMU ist eine Kommandozeilensoftware und weist im Vergleich zu Desktop-Virtualisierungssoftware wie VMware oder VirtualBox aufgrund der Vielzahl von Optionen, mit denen virtuelle Maschinen konfiguriert werden können, eine hohe Lernkurve auf. Es kann optional mit GUI-Frontends wie QtEmu unter Windows oder Linux und UTM unter macOS verwendet werden. Dieses Tutorial wird Anweisungen zur Verwendung von QEMU über die Befehlszeile bereitstellen.
Installation von QEMU
Um QEMU zu installieren, verwenden Sie Homebrews brew install
:
- brew install qemu
Dies stellt die gesamte Suite von QEMU-Tools und Befehlen bereit, einschließlich qemu-img
, das zum Konvertieren von virtuellen Maschinenbildern in der Befehlszeile verwendet wird. Überprüfen Sie, ob Sie Zugriff auf den Befehl qemu-img
haben, indem Sie which qemu-img
ausführen:
- which qemu-img
Output/usr/local/bin/qemu-img
Hinweis:Sie können QEMU auch unter Windows mit seinem nativen Installationsprogramm installieren, wenn Sie lieber ohne WSL2 unter Windows arbeiten.
QEMU bietet die meisten Funktionen, die Sie in diesem Tutorial benötigen werden. Sie können auch VirtualBox installieren, ein weiteres beliebtes Virtualisierungspaket.
VirtualBox
VirtualBox ist eine Open-Source-Virtualisierungssoftware von Oracle. Es unterstützt alle x86-Betriebssysteme (Windows, Linux und macOS-Computer, die vor 2020 hergestellt wurden). Es unterstützt keine Emulation oder Nicht-x86-Architekturen, was es hauptsächlich nützlich macht, Linux unter Windows und umgekehrt auszuführen. Es ist jedoch auch einfacher zu bedienen als QEMU, bietet weitgehend kompatible Standardeinstellungen und enthält standardmäßig eine Desktop-Benutzeroberfläche.
Es bietet nicht so viel Befehlszeilenfunktionalität wie QEMU, daher wird es oft mit dedizierter Orchestrierungssoftware wie Vagrant kombiniert, um virtuelle Maschinenkonfigurationen zu automatisieren und zu reproduzieren. Es enthält jedoch das Befehlszeilentool VBoxManage
, mit dem einige virtuelle Maschinenbilder manipuliert werden können.
Installation von VirtualBox
Um VirtualBox unter macOS zu installieren, verwenden Sie brew install
mit der Option --cask
, da VirtualBox als vollständiges Anwendungsbündel verteilt wird, das Homebrew als cask bezeichnet:
- brew install --cask virtualbox
Um VirtualBox unter Ubuntu oder Debian-basierten Linux-Distributionen (einschließlich unter WSL2) zu installieren, verwenden Sie zunächst apt update
, um Ihre Paketquellen zu aktualisieren, und dann apt install
:
- sudo apt update
- sudo apt install virtualbox
Um VirtualBox unter Windows ohne WSL2 zu installieren, konsultieren Sie dessen Download-Seite.
Nach der Installation von VirtualBox überprüfen Sie, ob Sie Zugriff auf den Befehl vboxmanage
haben, indem Sie which vboxmanage
ausführen:
- which vboxmanage
Output/usr/local/bin/vboxmanage
Es gibt Alternativen zu QEMU und VirtualBox für die Virtualisierung. Allerdings sind die meisten davon plattformspezifisch (wie Hyper-V unter Windows) oder für den Einsatz in großen Unternehmen konzipiert (wie VMware). Diese werden in diesem Tutorial nicht direkt behandelt, aber du wirst ihre Bildformate in den folgenden Schritten konvertieren.
Erstellen eines virtuellen Maschinen-Images mit QEMU
Um die Konvertierung von virtuellen Maschinen-Images zu demonstrieren, kannst du damit beginnen, ein Image mit QEMU zu erstellen. Du kannst diesen Abschnitt überspringen, wenn du bereits ein Image zum Konvertieren hast.
Verwende den Befehl qemu-img create
mit der Option -f qcow2
, um ein Image im Standardformat qcow2
von QEMU zu erstellen:
- qemu-img create -f qcow2 ubuntu-desktop-22.04.qcow2 10G
An diesem Punkt hast du ein leeres virtuelles Maschinen-Image erstellt. Auch wenn du es ubuntu-desktop-22.04.qcow2
genannt und eine Kapazität von 10G
angegeben hast, wird es zu diesem Zeitpunkt weder Ubuntu 22.04 installiert haben noch 10 GB groß sein.
OutputFormatting 'ubuntu-desktop-22.04.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=10737418240 lazy_refcounts=off refcount_bits=16
QEMU-Images werden immer so wenig Platz wie möglich auf deiner Festplatte einnehmen, während sie ihre maximal deklarierte Kapazität für jede Software innerhalb der virtuellen Maschine widerspiegeln. In diesem Fall wäre 10 GB die Kapazität, von der deine virtuelle Maschine denkt, dass sie verfügbar ist, und die maximale Größe, auf die das virtuelle Maschinen-Image automatisch skaliert wird.
A typical next step would be to install Ubuntu 22.04 onto the virtual machine, using a Ubuntu 22.04 ISO. However, you can skip this step for this tutorial, as you won’t actually be working directly with this virtual machine. An ISO is another type of disk image that is usually read-only, and was historically written onto CD and DVD installation media, rather than an image of a writable hard disk. Other software exists for manipulating ISO images, such as mkisofs and dd. To learn more about installing Linux using QEMU, refer to the QEMU documentation.
Umwandlung eines QEMU-Images in ein anderes Format
Wenn Sie ein VM-Image erstellt haben, können Sie qemu-img convert
verwenden, um es in andere Formate zu konvertieren. vdi
ist das Standardbildformat von VirtualBox. Standardmäßig wird das ursprüngliche VM-Image nicht gelöscht, sondern nur ein neues erstellt:
- qemu-img convert -f qcow2 ubuntu-desktop-22.04.qcow2 -O vdi ubuntu-desktop-22.04.vdi
Das Flag -f
wird verwendet, um das Eingabeformat und den Eingabedateinamen anzugeben. Das Flag -O
wird verwendet, um das Ausgabeformat und den Ausgabedateinamen anzugeben. Sie können auch das Flag -p
einschließen, um eine Fortschrittsanzeige anzuzeigen, was beim Konvertieren sehr großer Bilder hilfreich ist. Das Bild, das Sie im letzten Schritt erstellt haben, wird sofort konvertiert, da es noch keine Inhalte enthält. Sie können bestätigen, dass Sie ubuntu-desktop-22.04.vdi
erstellt haben, indem Sie ls
verwenden:
- ls ubuntu-desktop-22.04.vdi
Outputubuntu-desktop-22.04.vdi
Weitere gängige Formate sind vmdk
, das hauptsächlich von VMware verwendet wird, und vhd
, das hauptsächlich von Microsofts Hyper-V verwendet wird. Sie können auch ein „rohes“ Bild erstellen, wenn Ihre Software dies erfordert, indem Sie den nächsten Schritt befolgen.
Umwandlung anderer Formate virtueller Maschinen in QEMU
Wenn Sie ein Bild im vdi
-Format haben, können Sie das von VirtualBox bereitgestellte vboxmanage
-Befehl verwenden, um es zu konvertieren:
- vboxmanage clonemedium ubuntu-desktop-22.04.vdi ubuntu-desktop-22.04.img --format raw
Output0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone medium created in format 'raw'. UUID: 0501e707-c94e-4103-9069-d7b64a933d78
Beachten Sie, dass dadurch das erstellte Bild automatisch mit Ihrer lokalen VirtualBox-Konfiguration registriert wird, was umständlich sein kann, wenn Sie versuchen, transiente Kopien zu erstellen. Sie müssen möglicherweise manuell alle neuen Einträge aus der VirtualBox-Schnittstelle entfernen, wenn Sie versehentlich Duplikate registrieren.
Raw Virtual Machine-Bilder sind überhaupt nicht komprimiert, daher wird dieser Befehl tatsächlich eine vollständige 10-GB-Datei erstellen, im Gegensatz zu vorher. Sie können es zurück ins qcow2
-Format konvertieren, um es mit QEMU zu verwenden, indem Sie die Syntax des letzten Schritts umkehren:
- qemu-img convert -f raw ubuntu-desktop-22.04.img -O qcow2 ubuntu-desktop-22.04-new.qcow2
Sie können das Rohbild jetzt löschen, um Speicherplatz freizugeben:
- rm ubuntu-desktop-22.04.img
Abschließend können Sie die Befehle qemu-img check
und qemu-img info
verwenden, um einige Metadaten Ihrer virtuellen Maschinenbilder auszugeben:
- qemu-img check ubuntu-desktop-22.04.qcow2
OutputNo errors were found on the image.
Image end offset: 262144
- qemu-img info ubuntu-desktop-22.04.qcow2
Outputimage: ubuntu-desktop-22.04.qcow2
file format: qcow2
virtual size: 10 GiB (10737418240 bytes)
disk size: 196 KiB
cluster_size: 65536
Format specific information:
compat: 1.1
compression type: zlib
lazy refcounts: false
refcount bits: 16
corrupt: false
extended l2: false
Weitere Informationen zur Konvertierung von Bildern mit qemu-img
finden Sie in der qemu-img-Manualseite oder in der offiziellen Dokumentation.
Hinweis:Sie können diese Virtual Machine-Bilder auch auf DigitalOcean hochladen, um sie als Cloud-Server-Bilder zu verwenden, indem Sie der Custom Image-Dokumentation von DigitalOcean folgen.
Fazit
Im diesem Tutorial hast du QEMU und die Befehlszeilentools von VirtualBox verwendet, um virtuelle Maschinenbilder zu erstellen, zu konvertieren und zu exportieren. Du hast einige gängige Beispiele für Formate von virtuellen Maschinenbildern sowie nützliche Standardannahmen für die Arbeit mit virtuellen Maschinen überprüft. Es ist immer hilfreich, die Technologien zu verstehen, die den gängigen Konzepten wie Virtualisierung zugrunde liegen, insbesondere wenn du Architekturen oder Cloud-Anbieter migrieren musst.
Als Nächstes möchtest du vielleicht unseren Leitfaden zur Skalierung virtueller Maschinen nach deinen Bedürfnissen durchgehen.
Source:
https://www.digitalocean.com/community/tutorials/how-to-convert-virtual-machine-image-formats