Как преобразовать образ диска из нескольких частей VMDK в qcow2?

У меня есть образ диска VMDK, который существует в виде нескольких файлов:

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

При запуске qemu-img для преобразования его в формат qcow2, какое имя входного файла мне следует указать? Просто guest.vmdk, все они или что-то вроде guest-*.vmdk?

7
задан 20 September 2010 в 05:05

6 ответов

В прошлом мне приходилось сначала преобразовывать их в необработанные изображения, объединять их вместе, а затем преобразовывать полученное необработанное изображение в 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

Не паникуйте, если не просто последний файл меньше 2146762752 байт. Некоторые продукты VMware создают палитры vmdk разных размеров. Размер должен совпадать с 512-кратным числом секторов, перечисленных в описании экстента в основном файле vmdk (читается любым текстовым редактором или «cat»).

Может быть возможно сделать это все одновременно, но я не пробовал это:

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

Или, если они на самом деле не являются смежными образами дисков, то я не уверен что предложить. :)

Удачи!


Быстрый скрипт терминала для конвертации всех изображений одновременно:

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
0
ответ дан 20 September 2010 в 05:05

Я пробую это для преобразования в сырые данные:

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

Затем соединяться:

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

Затем преобразовать:

qemu-img convert <guest-name>.raw -O qcow2 <guest-name>.qcow2
1
ответ дан 20 September 2010 в 05:05

Я мог бы использовать parallel, чтобы сделать это, но вот тот, который сделает каталог:

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

А затем:

cat *.img >> imagename.raw

Часть ls перед труба напечатает все vdmk, которые имеют в конце s0 и две подстановочные знаки, команда xargs позволяет ему дважды подставлять % в качестве переменной до конца команды qemu-img.

0
ответ дан 20 September 2010 в 05:05

Похоже, что команда qemu-img была улучшена. Я только что преобразовал несколько образов VMware из нескольких частей в qcow2 с помощью команды:

$ qemu-img convert <base of the image without the S0001,2etc>.vmdk new-image.qcow2
0
ответ дан 20 September 2010 в 05:05

Вот простой способ сделать это в одну строку, используя массивы :

files=(*s0??.vmdk); qemu-img convert -f vmdk -O qcow2 ${files[@]} ${files%-s001.vmdk}.qcow2;
0
ответ дан 20 September 2010 в 05:05

Можно использовать подстановочный знак в имени изображений:

qemu-img convert my-multipart-image*.vmdk my-image.qcow2
0
ответ дан 20 September 2010 в 05:05

Другие вопросы по тегам:

Похожие вопросы: