it-swarm.com.de

Wie konvertiere ich ein mehrteiliges VMDK-Image nach qcow2?

Ich habe ein VMDK-Image, das aus mehreren Dateien besteht:

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

Wenn Sie qemu-img ausführen, um es in das qcow2-Format zu konvertieren, welche Eingabedateinamen sollte ich angeben? Nur guest.vmdk, alle von ihnen, oder so etwas wie guest-*.vmdk?

7
ændrük

In der Vergangenheit musste ich sie zuerst in Rohbilder konvertieren, sie zusammenfügen und dann das resultierende Rohbild in qcow2 konvertieren:

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

Keine Panik, wenn mehr als die letzte Datei kleiner als 2146762752 Byte ist. Einige VMware-Produkte erstellen VMDK-Bereiche mit unterschiedlichen Größen. Die Größe sollte mit dem 512-fachen der Anzahl der Sektoren übereinstimmen, die in der Extent-Beschreibung in der Haupt-vmdk-Datei aufgeführt sind (lesbar mit jedem Texteditor oder "cat").

Es ist vielleicht auch möglich, dies alles auf einmal zu tun, aber ich habe es nicht versucht:

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

Oder wenn es sich nicht wirklich um zusammenhängende Datenträgerabbilder handelt, weiß ich nicht, was ich vorschlagen soll. :)

Viel Glück!


Ein schnelles Terminal-Skript zum gleichzeitigen Konvertieren aller Bilder wäre:

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
11
Kees Cook

Ich hätte parallel verwenden können, um dies zu tun, aber hier ist einer, der das Verzeichnis erstellt:

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

Und dann:

cat *.img >> imagename.raw

Der Teil ls vor der Pipe gibt alle vdmk aus, die am Ende einen s0 und zwei Platzhalter haben. Mit dem Befehl xargs kann % zweimal als Variable an die gesetzt werden Ende des Befehls qemu-img.

1
Andrew Galford

Ich versuche dies in raw umzuwandeln:

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

Dann zu verketten:

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

Dann konvertieren:

qemu-img convert <guest-name>.raw -O qcow2 <guest-name>.qcow2
1
user9684

Hier ist eine einfache Möglichkeit, dies in einer Zeile zu tun, wobei Arrays verwendet wird:

files=(*s0??.vmdk); qemu-img convert -f vmdk -O qcow2 ${files[@]} ${files%-s001.vmdk}.qcow2;
1
ScienceMan

Ich sehe so aus, als ob der Befehl qemu-img jetzt erweitert wurde. Ich habe gerade einige mehrteilige VMware-Images mit dem folgenden Befehl in qcow2 konvertiert:

$ qemu-img convert <base of the image without the S0001,2etc>.vmdk new-image.qcow2
0
Stuart

Eine Option ist die Verwendung von Platzhaltern im Namen von Bildern:

qemu-img convert my-multipart-image*.vmdk my-image.qcow2
0
coffman21