我看到一个类似的线程,但在该线程中的确切步骤,不适用于我。 我想在转换为VHD映像之后上传一个Linux映像(即qcow2 )到Azure。
我将qcow2图像转换为raw:
qemu-img convert -f qcow2 -O raw myimage.qcow2 myimage.img
接下来,我的原始图像是1M的精确倍数,所以我不需要调整它的大小。
ls -l myimage.img -rw-r--r-- 1 user1 user11 2313158656 Mar 5 00:18 myimage.img
<2313158656是1M>的精确倍数
然后,我使用force选项将原始数据转换为安装了qemu 2.6.1的Ubuntu VM上的VHD:
qemu-img convert -f raw -o subformat=fixed,force_size -O vpc myimage.img myimage.vhd
现在, qemu-img似乎已经增加了512个字节的图像,因此我仍然无法在Azure上传。
ls -l myimage.vhd -rw-r--r-- 1 user1 user1 2313159168 Mar 5 00:39 myimage.vhd
将此虚拟机上传到Azure会导致以下错误:
磁盘“clid01b1a17d9ec0eb1-os-1488675181694”的虚拟硬盘与blob https://vmxstorage.blob.core.windows.net/vhddisks/vFPC-20170216.vhd具有不支持的2206.4765625 MB的虚拟大小。 大小必须是整数(MB)。
如何创build一个具有多个MB的正确大小的VM?
谢谢Anjali
尝试四舍五入:
rawdisk="MyLinuxVM.raw" vhddisk="MyLinuxVM.vhd" MB=$((1024*1024)) size=$(qemu-img info -f raw --output json "$rawdisk" | \ gawk 'match($0, /"virtual-size": ([0-9]+),/, val) {print val[1]}') rounded_size=$((($size/$MB + 1)*$MB)) echo "Rounded Size = $rounded_size"
调整到$ rounded_size
qemu-img resize MyLinuxVM.raw $rounded_size
最后转换
qemu-img convert -f raw -o subformat=fixed,force_size -O vpc MyLinuxVM.raw MyLinuxVM.vhd
参考:
未经背书的分配信息