Я видел похожую ветку по этому поводу, но выполнение точных шагов в этом потоке у меня не работает. Я хочу загрузить образ 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 [1195242pported] имеет виртуальный размер 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
Справка: