Como faço para converter uma imagem de disco VMDK de várias partes em qcow2?

7

Eu tenho uma imagem de disco VMDK que existe em vários arquivos:

2.0G guest-s001.vmdk  1.8G guest-s003.vmdk  128K guest-s005.vmdk
2.0G guest-s002.vmdk  1.7G guest-s004.vmdk  4.0K guest.vmdk

Ao executar qemu-img para convertê-lo no formato qcow2, que arquivo (s) de entrada devo especificar? Apenas guest.vmdk , todos eles, ou algo parecido com guest-*.vmdk ?

    
por ændrük 20.09.2010 / 00:49

4 respostas

9

No passado, eu tive que convertê-las primeiro em imagens raw, concatená-las juntas e depois converter a imagem bruta resultante em qcow2:

qemu-img convert guest-s001.vmdk guest-s0001.raw
qemu-img convert guest-s002.vmdk guest-s0002.raw
qemu-img convert guest-s003.vmdk guest-s0003.raw
qemu-img convert guest-s004.vmdk guest-s0004.raw
qemu-img convert guest-s005.vmdk guest-s0005.raw
cat guest-s0001.raw guest-s0002.raw guest-s0003.raw guest-s0004.raw guest-s0005.raw > guest.raw
qemu-img convert guest.raw guest.qcow2

Não entre em pânico se mais do que apenas o último arquivo for menor que 2146762752 bytes. Alguns produtos da VMware criam vmdk spans com tamanhos diferentes. O tamanho deve corresponder a 512 vezes o número de setores listados na descrição da extensão no arquivo vmdk principal (legível com qualquer editor de texto ou "gato").

Também é possível fazer isso tudo de uma vez, mas eu não tentei fazer isso:

qemu-img convert guest-s001.vmdk guest-s002.vmdk guest-s003.vmdk guest-s004.vmdk guest-s005.vmdk guest.qcow2

Ou, se não forem imagens de disco contíguas, não sei o que sugerir. :)

Boa sorte!

Um script de terminal rápido para converter todas as imagens de uma só vez seria:

for i in *.vmdk; do qemu-img convert -f vmdk $i -O raw $i.raw; done
cat *.raw > tmpImage.raw
qemu-img convert tmpImage.raw finalImage.qcow2
rm *.raw
    
por Kees Cook 23.09.2010 / 01:37
1

Estou tentando converter isso para raw:

find . -type f -iname <guest-name>\*-f0\*vmdk -exec qemu-img convert {} {}.raw \;

Então, para catenar:

cat <guest-name>*-f0[0-1][1-9]*raw >> <guest-name>.raw

Então, para converter:

qemu-img convert <guest-name>.raw -O qcow2 <guest-name>.qcow2
    
por user9684 27.01.2011 / 01:47
1

Eu poderia ter usado parallel para fazer isso, mas aqui está um que fará o diretório:

ls *s0??.vdmk | xargs -n 2 -I % qemu-img convert % %.img

E então:

cat *.img >> imagename.raw

A parte ls antes do pipe imprimirá todos os vdmk que têm no final um s0 e dois curingas o comando xargs permite substituir % duas vezes como variável ao final do qemu-img comando.

    
por Andrew Galford 05.11.2014 / 07:09
1

Veja uma maneira simples de fazer isso em uma linha, fazendo uso de arrays :

files=(*s0??.vmdk); qemu-img convert -f vmdk -O qcow2 ${files[@]} ${files%-s001.vmdk}.qcow2;
    
por ScienceMan 08.05.2015 / 00:31

Tags