由于大小不正确而创建要上传到 Azure 的 Linux 映像/VM 时出错

由于大小不正确而创建要上传到 Azure 的 Linux 映像/VM 时出错

我看到了类似的帖子,但按照帖子中的步骤操作对我来说不起作用。我想上传 Linux 映像(qcow2) 转换为 VHD 映像后,传输到 Azure。

我转换了qcow2图像转为原始图像:

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 的整数倍>

然后,我使用强制选项在安装了 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 时出现以下错误:

带有 blob 的磁盘“clid01b1a17d9ec0eb1-os-1488675181694”的 VHDhttps://vmxstorage.blob.core.windows.net/vhddisks/vFPC-20170216.vhd具有不受支持的虚拟大小 2206.4765625 MB。该大小必须为整数 (MB)。

如何创建具有 MB 倍数的正确大小的虚拟机?

谢谢 Anjali

答案1

尝试改为四舍五入:

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

参考:

未认可发行版的信息

相关内容