Hoe Virtual Machine Image-indelingen om te zetten

Inleiding

Wanneer je werkt met een externe cloudserver, werk je meestal met een virtuele machine: een afgeschermde, geïsoleerde instantie van een volledig besturingssysteem dat draait binnen een grotere servercluster. Je kunt ook lokaal op je desktop werken met virtuele machines, met behulp van software zoals QEMU of VirtualBox. Virtuele machines kunnen een volledige desktopinterface bevatten, of ze kunnen alleen een SSH-server draaien om terminalverbindingen toe te staan. In beide gevallen zijn ze technisch gezien vergelijkbaar en maken ze vergelijkbare aannames. Afgezien van eventuele grootschalige cloudoptimalisaties is het enige significante verschil tussen virtualisatieomgevingen de harde schijven van de virtuele machine en de configuratieopties. Deze worden aangeduid als virtuele machine-images en zijn op verschillende manieren geformatteerd bij verschillende aanbieders.

In deze tutorial leer je hoe je kunt converteren tussen verschillende formaten van virtuele machine-images (waaronder qcow2, vdi, vhd, en vmdk), zodat je je virtuele omgevingen van je desktop naar de cloud en vice versa kunt overbrengen zoals nodig is.

Vereisten

De commando’s in deze tutorial kunnen worden uitgevoerd op Windows, macOS of Linux, zolang je QEMU en VirtualBox kunt installeren, samen met hun command line tools. Deze tutorial bevat installatie-instructies met behulp van de Homebrew package manager. Je kunt Homebrew installeren op macOS, op Linux, of op Windows onder WSL2.

Als je op een DigitalOcean-droplet draait, moet je minimaal 2 CPU’s en 2 GB geheugen hebben.

Je hebt ook minimaal 10 GB vrije ruimte nodig om de commando’s in deze tutorial uit te voeren.

Opmerking: Als je macOS gebruikt met een Apple Silicon CPU (geproduceerd in 2020 en later), kun je alleen QEMU gebruiken en niet VirtualBox.

QEMU

QEMU is de krachtigste en breed ondersteunde open source virtualisatiesoftware. Het draait op alle belangrijke platforms (inclusief Windows, macOS, Linux, en andere besturingssystemen zoals Android) en is in staat tot zowel virtualisatie als emulatie indien nodig. Als bijvoorbeeld een Linux-serverimage wordt uitgevoerd op een Windows-desktop (een veelvoorkomend gebruiksscenario), delen beide platforms een gemeenschappelijke onderliggende architectuur (Intel/AMD x86), zodat QEMU volledige prestaties kan leveren via virtualisatie. Als je QEMU gebruikt om architecturen te mixen, bijvoorbeeld door x86 Linux of Windows (als het “host” of “guest” besturingssysteem) te draaien met de ARM-architecturen van macOS of Android, zal QEMU automatisch emulatie gebruiken om architecturen te vertalen.

Vergeleken met virtualisatie wordt emulatie meestal niet gebruikt in productieomgevingen omdat het een aanzienlijke prestatieboete met zich meebrengt. Echter, QEMU behandelt virtualisatie en emulatie als bijna gelijkwaardig, wat aanzienlijke compatibiliteitsvoordelen biedt, aangezien dezelfde beeldformaten en dezelfde tools in elke situatie kunnen worden gebruikt.

QEMU is opdrachtregelsoftware en heeft een steile leercurve in vergelijking met desktopvirtualisatiesoftware zoals VMware of VirtualBox vanwege het grote aantal opties waarmee virtuele machines geconfigureerd kunnen worden. Het kan optioneel worden gebruikt met grafische gebruikersinterfaces zoals QtEmu op Windows of Linux en UTM op macOS. Deze handleiding geeft opdrachtregelinstructies voor het werken met QEMU.

QEMU installeren

Om QEMU te installeren, gebruik Homebrew’s brew install:

  1. brew install qemu

Dit zal de volledige suite van QEMU-tools en commando’s leveren, inclusief qemu-img, dat wordt gebruikt om virtuele machine-images op de opdrachtregel om te zetten. Controleer of u toegang hebt tot het qemu-img-commando door which qemu-img uit te voeren:

  1. which qemu-img
Output
/usr/local/bin/qemu-img

Opmerking: U kunt ook QEMU op Windows installeren met behulp van de native installer, als u liever op Windows werkt zonder WSL2.

QEMU biedt de meeste functionaliteit die u nodig zult hebben in deze handleiding. U kunt ook VirtualBox installeren, een ander populair virtualisatiepakket.

VirtualBox

VirtualBox is open source virtualisatiesoftware geleverd door Oracle. Het ondersteunt alle x86-besturingssystemen (Windows, Linux en macOS-computers vervaardigd vóór 2020). Het ondersteunt geen emulatie of niet-x86-architecturen, waardoor het voornamelijk nuttig is voor het uitvoeren van Linux onder Windows en vice versa. Het is echter ook eenvoudiger te gebruiken dan QEMU, biedt standaard instellingen die breed compatibel zijn, en bevat standaard een desktopinterface.

Het biedt niet zoveel functionaliteit via de opdrachtregel als QEMU, dus het wordt vaak gekoppeld aan speciale orchestratiesoftware zoals Vagrant om virtuele machineconfiguraties te automatiseren en reproduceren. Het bevat echter wel de VBoxManage opdrachtregeltool, die kan worden gebruikt om enkele virtuele machine-images te manipuleren.

VirtualBox installeren

Om VirtualBox te installeren op macOS, gebruik brew install met de --cask vlag, omdat VirtualBox wordt gedistribueerd als een volledige toepassingsbundel, die Homebrew een cask noemt:

  1. brew install --cask virtualbox

Om VirtualBox te installeren op Ubuntu of op Debian-gebaseerde Linux-distributies (inclusief onder WSL2), gebruik eerst apt update om uw pakketbronnen te vernieuwen, daarna apt install:

  1. sudo apt update
  2. sudo apt install virtualbox

Om VirtualBox te installeren op Windows zonder WSL2, raadpleeg de downloadpagina.

Na het installeren van VirtualBox, controleer of u toegang heeft tot de vboxmanage opdracht door which vboxmanage uit te voeren:

  1. which vboxmanage
Output
​​/usr/local/bin/vboxmanage

Er zijn alternatieven beschikbaar voor QEMU en VirtualBox voor virtualisatie. De meeste hiervan zijn echter platformspecifiek (zoals Hyper-V op Windows) of ontworpen voor grootschalig zakelijk gebruik (zoals VMware). Deze worden niet direct behandeld in deze handleiding, maar je zult hun imageformaten converteren in de volgende stappen.

Het maken van een virtuele machine-image met QEMU

Om het converteren van virtuele machine-images te demonstreren, kun je beginnen met het maken van een image met QEMU. Je kunt deze sectie overslaan als je al een image hebt om te converteren.

Gebruik het qemu-img create commando met de -f qcow2 vlag om een image te maken in het standaard qcow2 formaat van QEMU:

  1. qemu-img create -f qcow2 ubuntu-desktop-22.04.qcow2 10G

Op dit punt heb je een leeg virtueel machine-image gemaakt. Ook al heb je het ubuntu-desktop-22.04.qcow2 genoemd en een capaciteit van 10G opgegeven, op dit moment zal het noch Ubuntu 22.04 geïnstalleerd hebben, noch 10GB groot zijn.

Output
Formatting '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 zullen altijd zo min mogelijk ruimte innemen op je schijf, terwijl ze hun maximale opgegeven capaciteit weerspiegelen aan alle software die binnen de virtuele machine draait. In dit geval zou 10GB de capaciteit zijn die je virtuele machine denkt beschikbaar te hebben, en de maximale grootte waarnaar het virtuele machine-image automatisch zal worden geschaald.

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.

Het converteren van een QEMU-image naar een ander formaat

Als je een VM-image hebt gemaakt, kun je qemu-img convert gebruiken om het naar andere formaten te converteren. vdi is het standaardbeeldformaat van VirtualBox. Standaard zal dit het oorspronkelijke VM-image niet wissen, maar alleen een nieuw maken:

  1. qemu-img convert -f qcow2 ubuntu-desktop-22.04.qcow2 -O vdi ubuntu-desktop-22.04.vdi

De -f-vlag wordt gebruikt om het invoerformaat en de invoerbestandsnaam op te geven. De -O-vlag wordt gebruikt om het uitvoerformaat en de uitvoerbestandsnaam op te geven. Je kunt ook de -p-vlag opnemen om een voortgangsbalk weer te geven, wat handig is bij het converteren van zeer grote afbeeldingen. Het afbeeldingsbestand dat je in de laatste stap hebt gemaakt, zal onmiddellijk converteren, omdat het nog geen inhoud heeft. Je kunt bevestigen dat je ubuntu-desktop-22.04.vdi hebt gemaakt met behulp van ls:

  1. ls ubuntu-desktop-22.04.vdi
Output
ubuntu-desktop-22.04.vdi

Andere veelvoorkomende formaten zijn onder andere vmdk, voornamelijk gebruikt door VMware, en vhd, voornamelijk gebruikt door Microsoft’s Hyper-V. Je kunt ook een “raw” afbeelding maken als je software dit vereist, volgens de volgende stap.

Het converteren van andere virtuele machineformaten naar QEMU

Als je een afbeelding in vdi-formaat hebt, kun je de vboxmanage-opdracht van VirtualBox gebruiken om deze te converteren:

  1. vboxmanage clonemedium ubuntu-desktop-22.04.vdi ubuntu-desktop-22.04.img --format raw
Output
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% Clone medium created in format 'raw'. UUID: 0501e707-c94e-4103-9069-d7b64a933d78

Houd er rekening mee dat dit de gemaakte afbeelding automatisch registreert bij je lokale VirtualBox-configuratie, wat onhandig kan zijn als je probeert tijdelijke kopieën te maken. Je moet mogelijk handmatig nieuwe vermeldingen uit de VirtualBox-interface verwijderen als je per ongeluk duplicaten registreert.

Raw virtuele machine-afbeeldingen zijn helemaal niet gecomprimeerd, dus deze opdracht zal eigenlijk een volledig bestand van 10 GB maken, in tegenstelling tot voorheen. Je kunt het terug converteren naar qcow2-formaat voor gebruik met QEMU door de syntaxis van de laatste stap om te keren:

  1. qemu-img convert -f raw ubuntu-desktop-22.04.img -O qcow2 ubuntu-desktop-22.04-new.qcow2

Je kunt nu de ruwe afbeelding verwijderen om schijfruimte terug te winnen:

  1. rm ubuntu-desktop-22.04.img

Tenslotte kun je de qemu-img check en qemu-img info opdrachten gebruiken om enkele metadata van je virtuele machine-afbeeldingen uit te voeren:

  1. qemu-img check ubuntu-desktop-22.04.qcow2
Output
No errors were found on the image. Image end offset: 262144
  1. qemu-img info ubuntu-desktop-22.04.qcow2
Output
image: 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

Voor meer informatie over het converteren van afbeeldingen met qemu-img, raadpleeg de qemu-img handleiding of de officiële documentatie.

Opmerking: Je kunt deze virtuele machine-afbeeldingen ook uploaden naar DigitalOcean om te gebruiken als cloudserver-afbeeldingen, door de Custom Image-documentatie van DigitalOcean te volgen.

Conclusie

In deze tutorial heb je QEMU en de commandline-tools van VirtualBox gebruikt om virtuele machine-images te maken, te converteren en te exporteren. Je hebt enkele veelvoorkomende voorbeelden van virtuele machine-imageformaten bekeken, evenals enkele handige standaard aannames voor het werken met virtuele machines. Het is altijd nuttig om de technologieën te begrijpen die aan gemeenschappelijke concepten zoals virtualisatie ten grondslag liggen, vooral als je architecturen of cloudproviders moet migreren.

Daarna wil je misschien onze gids voor het schaalbaar maken van virtuele machines naar jouw behoeften bekijken.

Source:
https://www.digitalocean.com/community/tutorials/how-to-convert-virtual-machine-image-formats