La recente acquisizione di un MacBook "13.3 late 2008" mi ha portato a voler sperimentare in modo un po' più approfondito i vari sistemi di virtualizzazione disponibili per Linux. Prima col mio G4 potevo al massimo far girare qemu standalone.
Mi sono quindi trovato nella condizione di voler convertire un di volume vdi, creato con VirtualBox, in un formato leggibile da KVM. Ecco la soluzione per confìvertire vdi in qcow2...

Ci vengono in aiuto i vditool, disponibili con VirtualBox-OSE, e qemu-img. Nello specifico io ho utilizzato Ubuntu 8.10 il cui pacchetto virtualbox corrisponde alla versione 2.04 OSE, per cui i vditool sono nel path. Tuttavia scaricando manualmente qualsiasi versione OSE di vbox li troverete nella directory di installazione.
Passiamo dal formato vdi al formato raw:

root@spitfire# vditool COPYDD file.vdi file.raw

Quindi convertiamo il raw in vdi tramite quemu-img:

root@spitfire# qemu-img convert -f raw file.raw -O qcow2 file.qcow2

Il risultato è direttamente utilizzabile come disco virtuale da KVM/qemu.

Fin qui la pratica. Per i più nerd propongo però qualche interessante considerazione:


1) Entrambe le operazioni sono tendenzialmente lunghe. La prima delle due porterà alla creazione di un file raw di dimensione pari a quella massima raggiungibile dal volume dinamico vdi di partenza. Se per esempio file.vdi fosse un volume ad espansione dinamica da 10 GB, anche avendone solamente 3 occupati misurati con du, il  file.raw avrà dimensione 10 GB. La conversione in qcow2 genererà invece un file di dimensioni confrontabili al vdi. Fatevi quindi bene i conti dello spazio necessario per le conversioni, prima di cominciare.

2) Il virtualizzatore che andrete ad usare per avviare il disco qcow2 potrebbe avere (anzi sicuramente avrà) dell'hardware virtuale diverso da quello che usavate per avviare il corrispondente vdi. Questo significa che il sistema operativo guest avrà difficoltà ad avviarsi a causa di driver diversi o kernel non compatibile (ACPI, IO-APIC, hal ecc.). Nel mio caso si trattava di un WinXP SP3 portato da VirtualBox a KVM e il BSOD non è mancato. La soluzione cambia da OS a OS, come MRG ha già avuto modo di spiegare qui, ma se vi interessa io ho dovuto procedere ad un repair tramite il disco di installazione di Windows.

Per le conversioni da qcow2 a vdi/vmdk e da vmdk a qcow/vdi  vi rimando a questi articoli di mrgcorner.