Я видел похожую ветку по этому поводу, но выполнение точных шагов в этой ветке у меня не работает. Я хочу загрузить образ 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>
Затем я преобразовал необработанный файл в VHD на виртуальной машине Ubuntu с установленным qemu 2.6.1, используя опцию force:
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 возникает такая ошибка:
VHD для диска clid01b1a17d9ec0eb1-os-1488675181694 с blob https://vmxstorage.blob.core.windows.net/vhddisks/vFPC-20170216.vhd имеет неподдерживаемый виртуальный размер 2206,4765625 МБ. Размер должен быть целым числом в (МБ).
Как создать виртуальную машину с правильным размером, кратным МБ?
Спасибо Анджали
Вместо этого попробуйте округлить:
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
Ссылка: