From qcow to vmdk and vdi
Può capitare di dover convertire le immagini utilizzate col nostro virtualizzatore (nel mio caso KVM con QEMU) nel formato utilizzato da un’altro e viceversa.
Di seguito parlerò delle operazioni da svolgere nel caso in cui ci si trovi a dover migrare un’immagine disco dal formato qcow (utilizzato da qemu) al formato vmdk (utilizzato da VMware) e vdi (utilizzato da VirtualBox), negli esempi che seguiranno è stato utilizzato come sistema operativo linux sia dal guest che dall’host.
Magari alcuni di voi si chiederanno perché esempi con linux come host e guest? Semplice! lato host godremo della praticità e della capacità di sintesi della shell, lato guest eviteremo problemi con hal, acpi e apic che invece affliggono le varie versioni di Windows, inutili da risolvere ai fini di questo howto. Comunque anche se sull’host avete Windows quanto segue è sempre valido, vi basta solo avviare il prompt dei comandi!
NOTA: se il vostro problema è la conversione da vmdk a qcow e vdi potreste trovare interessante il post gemello “from-vmdk-to-qcow-and-vdi“.
NOTA: se siete interessati alla conversione da vdi a qcow date un’occhiata a questo post del buon Noko.
From qcow to vmdk
Una breve parentesi: se volete visualizzare le caratteristiche di un file immagine il comando qemu-img col parametro info seguito dal nome del file immagine permette di mostrare alcune informazioni, formato, dimensione massima, spazio realmente occupato e dimensioni dei cluster. Ecco un esempio:
paolomargara@mrcrow:~$ qemu-img info lennybox.img image: lennybox.img file format: qcow virtual size: 3.0G (3221225472 bytes) disk size: 2.9G cluster_size: 4096
In questo particolare caso la conversione di formato è molto semplice da ottenere, è sufficiente utilizzare qemu-img con l’opzione convert, seguito dal nome dell’immagine che vogliamo convertire, seguito a sua volta dal parametro -O e dal nome del formato dell’immagine risultante (nel nostro caso vmdk) ed infine il nome dell’immagine risultante. Ecco un esempio:
paolomargara@mrcrow:~$ qemu-img convert lennybox.img -O vmdk lennybox.vmdk
Una volta effettuata la conversione il risultato è il seguente:
paolomargara@mrcrow:~$ qemu-img info lennybox.vmdk (VMDK) image open: flags=0x2 filename=lennybox.vmdk image: lennybox.vmdk file format: vmdk virtual size: 3.0G (3221225472 bytes) disk size: 2.8G
Ora siamo pronti per avviare la nostra macchina virtuale con VMware oppure con un altro virtualizzatore in grado di supportare questo formato (lo stesso QEMU o VirtualBox giusto per citarne un paio).
From qcow to vdi
La conversione da qcow a vdi richiede qualche passaggio in più rispetto a quanto visto in precedenza. Per questo esempio l’immagine di partenza è la stessa utilizzata nell’esempio precedente, di seguito le informazioni principali:
paolomargara@mrcrow:~$ qemu-img info lennybox.img image: lennybox.img file format: qcow virtual size: 3.0G (3221225472 bytes) disk size: 2.9G cluster_size: 4096
Per passare da qcow a vdi e necessario effettuare una conversione intermedia al formato raw. L’immagine raw non è altro che il contenuto dell’immagine della macchina virtuale in binario (simile concettualmente ad un dd). Come è evidenziato dall’output di qemu-img eseguito col parametro convert, l’immagine occupa esattamente lo spazio del disco virtuale come ogni dd che si rispetti.
paolomargara@mrcrow:~$ qemu-img convert lennybox.img -O raw /media/sda5/lennybox.raw paolomargara@mrcrow:~$ qemu-img info /media/sda5/lennybox.raw image: /media/sda5/lennybox.raw file format: raw virtual size: 3.0G (3221225472 bytes) disk size: 3.0G
Ora è possibile effettuare la conversione a vdi con il comado VBoxManage (fornito con il package di VirtualBox) seguito dal parametro convertdd, dal nome dell’immagine sorgente e di quella di origine.
paolomargara@mrcrow:~$ VBoxManage convertdd /media/sda5/lennybox.raw /media/sda5/lennybox.vdi VirtualBox Command Line Management Interface Version 1.6.0 (C) 2005-2008 Sun Microsystems, Inc. All rights reserved. Converting VDI: from DD image file="/media/sda5/lennybox.raw" to file="/media/sda5/lennybox.vdi"... Creating fixed image with size 3221225472 bytes (3072MB)...
Equivalente del parametro info di qemu-img è il parametro showvdiinfo di VBoxManage. Ecco il suo output a mostrare il successo dell’operazione appena compiuta, da notare che lo spazio occupato è esattamente la dimensione massima dell’immagine del disco:
paolomargara@mrcrow:~$ VBoxManage showvdiinfo /media/sda5/lennybox.vdi VirtualBox Command Line Management Interface Version 1.6.0 (C) 2005-2008 Sun Microsystems, Inc. All rights reserved. UUID: 2413e42a-ba0a-47c6-7881-4ab5361c1e1f Registered: yes Accessible: yes Size: 3072 MBytes Current size on disk: 3072 MBytes Type: standard Storage type: Virtual Disk Image (VDI) In use by VM: a985a9dd-6541-4a04-59ac-84c9616e4d92 Path: /media/sda5/lennybox.vdi
A questo punto è possibile effettuare un ridimensionamento a quella che è la dimensione realmente occupata dai dati contenuti all’interno dell’immagine…
paolomargara@mrcrow:~$ VBoxManage modifyvdi /media/sda5/lennybox.vdi compact VirtualBox Command Line Management Interface Version 1.6.0 (C) 2005-2008 Sun Microsystems, Inc. All rights reserved. Shrinking '/media/sda5/lennybox.vdi': 0%..........10%.........20%.........30%.........40%.........50%.........60%.........70%.........80%.........90%.........100%
Ecco infine il risultato finale, da notare la differenza fra size e Current size on disk.
paolomargara@mrcrow:~$ VBoxManage showvdiinfo /media/sda5/lennybox.vdi VirtualBox Command Line Management Interface Version 1.6.0 (C) 2005-2008 Sun Microsystems, Inc. All rights reserved. UUID: 2413e42a-ba0a-47c6-7881-4ab5361c1e1f Registered: yes Accessible: yes Size: 3072 MBytes Current size on disk: 2945 MBytes Type: standard Storage type: Virtual Disk Image (VDI) In use by VM: a985a9dd-6541-4a04-59ac-84c9616e4d92 Path: /media/sda5/lennybox.vdi
Ora siamo pronti per avviare la nostra macchina virtuale all’interno di VirtualBox!
Ma spiegami: qemu è in grado di avviare immagini VMDK nativamente, evinco dal post, ma vmware in quale formato salva di default? Il fatto è che volevo appunto tentare di avviare delle immagini fatte con vmware usando qemu, ma non ci ho mai perso del tempo dietro per capire se e come si poteva fare…
Qemu è in grado di avviare le immagini vmdk quando sono su singolo file, il fatto è che se eventualmente hai immagini “multipart” per avviarle hai bisogno di compattarle in un’unico file.
VMWare salva in vmdk vmx a secondadelle versioni.