У меня есть образ диска 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
?
В прошлом мне приходилось сначала преобразовывать их в необработанные изображения, объединять их вместе, а затем преобразовывать полученное необработанное изображение в 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
Я пробую это для преобразования в сырые данные:
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
Я мог бы использовать parallel
, чтобы сделать это, но вот тот, который сделает каталог:
ls *s0??.vdmk | xargs -n 2 -I % qemu-img convert % %.img
А затем:
cat *.img >> imagename.raw
Часть ls
перед труба напечатает все vdmk, которые имеют в конце s0
и две подстановочные знаки, команда xargs
позволяет ему дважды подставлять %
в качестве переменной до конца команды qemu-img
.
Похоже, что команда qemu-img была улучшена. Я только что преобразовал несколько образов VMware из нескольких частей в qcow2 с помощью команды:
$ qemu-img convert <base of the image without the S0001,2etc>.vmdk new-image.qcow2
Вот простой способ сделать это в одну строку, используя массивы :
files=(*s0??.vmdk); qemu-img convert -f vmdk -O qcow2 ${files[@]} ${files%-s001.vmdk}.qcow2;
Можно использовать подстановочный знак в имени изображений:
qemu-img convert my-multipart-image*.vmdk my-image.qcow2