创build用于上传到Azure的Linux映像/虚拟机的错误,因为大小不正确

我看到一个类似的线程,但在该线程中的确切步骤,不适用于我。 我想在转换为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 

参考:

未经背书的分配信息