이전 실습에서 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
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
Azure는 fixed-size VHD만 지원하므로, qemu-img를 사용하여 변환해야 한다. qemu-img CLI 를 이용하여 변환한다.
qemu-img CLI 설치
brew install qemu