목적

이전 실습에서 VM 볼륨으로부터 Export했던 disk.img 파일을 Azure에서 VM으로 만들어 사용해보자.

가정

앞의 실습에서 VM을 Raw 포맷의 disk.img와 같은 파일로 저장했다는 가정하에 진행한다.

포맷이 어떤 타입인지는 다음 명령어로 확인할 수 있다.

qemu-img info disk.img

아래와 같이 file format이 raw로 뜨면 된다.

image: disk.img
**file format: raw**
virtual size: 4 GiB (4294967296 bytes)
disk size: 4 GiB
Child node '/file':
    filename: disk.img
    protocol type: file
    file length: 4 GiB (4294967296 bytes)
    disk size: 4 GiB

disk size 정렬

https://docs.redhat.com/ko/documentation/red_hat_enterprise_linux/9/html/deploying_rhel_9_on_microsoft_azure/convert-the-image_deploying-a-virtual-machine-on-microsoft-azure#convert-the-image_deploying-a-virtual-machine-on-microsoft-azure

Azure는 fixed-size VHD만 지원하므로 disk 크기가 1MB(1048576 바이트) 단위로 정렬되어 있어야 한다.

align.sh 파일을 열어 아래와 같은 mac 기준 스크립트를 저장한다.

#!/bin/bash

MB=$((1024 * 1024))

# JSON 파싱을 jq로 변경 (macOS 호환)
size=$(qemu-img info -f raw --output json "$1" | jq -r '.["virtual-size"]')

# size가 비어 있거나 오류 발생 시 종료
if [[ -z "$size" || "$size" == "null" ]]; then
  echo "Error: Could not retrieve virtual size from image."
  exit 1
fi

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

위 스크립트를 이용하여 VHD 포맷으로 변환한다.

sh align.sh disk.img

포맷 변환(raw → VHD)

https://docs.redhat.com/ko/documentation/red_hat_enterprise_linux/9/html/deploying_rhel_9_on_microsoft_azure/convert-the-image_deploying-a-virtual-machine-on-microsoft-azure#convert-the-image_deploying-a-virtual-machine-on-microsoft-azure

Azure는 fixed-size VHD만 지원하므로, qemu-img를 사용하여 변환해야 한다. qemu-img CLI 를 이용하여 변환한다.

qemu-img CLI 설치

brew install qemu