4.8. 将镜像转换为固定 VHD 格式

所有 Microsoft Azure VM 镜像都必须是固定的 VHD 格式。镜像必须在将镜像转换为 VHD 之前被对齐到 1 MB 边界。要将镜像从 qcow2 转换为固定的 VHD 格式,并保持一致,请参阅以下流程。转换镜像后,您可以将其上传到 Azure。

流程

  1. 将镜像从 qcow2 转换为 raw 格式。

    $ qemu-img convert -f qcow2 -O raw <image-name>.qcow2 <image-name>.raw
  2. 创建一个具有以下内容的 shell 脚本:

    #!/bin/bash
    MB=$((1024 * 1024))
    size=$(qemu-img info -f raw --output json "$1" | gawk 'match($0, /"virtual-size": ([0-9]+),/, val) {print val[1]}')
    rounded_size=$((($size/$MB + 1) * $MB))
    if [ $(($size % $MB)) -eq  0 ]
    then
     echo "Your image is already aligned. You do not need to resize."
     exit 1
    fi
    echo "rounded size = $rounded_size"
    export rounded_size
  3. 运行脚本。本例使用名称 align.sh

    $ sh align.sh <image-xxx>.raw
    • 如需显示 "Your image is already aligned.You do not need to resize.",执行以下步骤。
    • 如果显示了一个值,代表您的镜像没有被对齐。
  4. 使用以下命令来将文件转换为固定的 VHD 格式:

    示例使用 qemu-img 版本 2.12.0。

    $ qemu-img convert -f raw -o subformat=fixed,force_size -O vpc <image-xxx>.raw <image.xxx>.vhd

    转换后,VHD 文件就可以上传到 Azure。

  5. 如果 raw 镜像不一致,请完成以下步骤使其保持一致。

    1. 使用运行验证脚本时显示的舍入值来调整 raw 文件的大小。

      $ qemu-img resize -f raw <image-xxx>.raw <rounded-value>
    2. raw 镜像文件转换为 VHD 格式。

      示例使用 qemu-img 版本 2.12.0。

      $ qemu-img convert -f raw -o subformat=fixed,force_size -O vpc <image-xxx>.raw <image.xxx>.vhd

      转换后,VHD 文件就可以上传到 Azure。