웹사이트 검색

가상 머신 이미지 형식을 변환하는 방법


소개

원격 클라우드 서버로 작업하는 경우 일반적으로 더 큰 서버 클러스터 내에서 실행되는 전체 운영 체제의 샌드박스 격리된 인스턴스인 가상 머신으로 작업합니다. QEMU 또는 VirtualBox와 같은 소프트웨어를 사용하여 데스크탑에서 로컬로 가상 머신으로 작업할 수도 있습니다. 가상 머신은 전체 데스크탑 인터페이스를 포함하거나 터미널 연결을 허용하기 위해 SSH 서버만 실행할 수 있습니다. 두 경우 모두 기술적으로 유사하며 유사한 가정을 합니다. 대규모 클라우드 최적화와 별개로 가상화 환경 간의 유일한 중요한 차이점은 가상 머신 하드 디스크 및 구성 옵션입니다. 이를 가상 머신 이미지라고 하며 공급자마다 형식이 다릅니다.

이 자습서에서는 가상 머신 이미지 형식(qcow2, vdi, vhdvmdk 포함) 간에 변환하는 방법을 배웁니다. ), 가상 환경을 데스크톱에서 클라우드로 가져갔다가 필요에 따라 다시 되돌릴 수 있습니다.

전제 조건

이 자습서의 명령은 명령줄 도구와 함께 QEMU 및 VirtualBox를 설치할 수 있는 한 Windows, macOS 또는 Linux에서 실행할 수 있습니다. 이 자습서에서는 WSL2를 사용한 설치 지침을 제공합니다.

DigitalOcean 드롭릿에서 실행 중인 경우 최소 2개의 CPU와 2GB의 메모리가 있어야 합니다.

또한 이 자습서의 명령을 실행하려면 최소 10GB의 여유 공간이 필요합니다.

참고: Apple Silicon CPU(2020년 이후 제조)와 함께 macOS를 사용하는 경우 QEMU만 사용할 수 있고 VirtualBox는 사용할 수 없습니다.

QEMU

QEMU는 가장 강력하고 널리 지원되는 오픈 소스 가상화 소프트웨어입니다. 모든 주요 플랫폼(Windows, macOS, Linux 및 Android와 같은 기타 운영 체제 포함)에서 실행되며 필요에 따라 가상화와 에뮬레이션이 모두 가능합니다. 예를 들어 Windows 데스크톱에서 Linux 서버 이미지를 실행하는 경우(일반적인 사용 사례) 두 플랫폼 모두 공통 기본 아키텍처(Intel/AMD x86)를 공유하므로 QEMU는 완전한 가상화를 통한 성능. QEMU를 사용하여 macOS 또는 Android, QEMU는 자동으로 에뮬레이션을 사용하여 아키텍처를 변환합니다.

가상화와 비교할 때 에뮬레이션은 상당한 성능 저하를 추가하기 때문에 프로덕션 환경에서는 일반적으로 사용되지 않습니다. 그러나 가상화와 에뮬레이션을 거의 동등하게 취급하는 QEMU는 모든 시나리오에서 동일한 이미지 형식과 동일한 도구를 사용할 수 있음을 의미하므로 상당한 호환성 이점을 제공합니다.

QEMU는 명령줄 소프트웨어이며 가상 머신을 구성할 수 있는 수많은 옵션으로 인해 VMware 또는 VirtualBox와 같은 데스크톱 가상화 소프트웨어에 비해 학습 곡선이 높습니다. 선택적으로 macOS의 UTM과 같은 GUI 프런트엔드와 함께 사용할 수 있습니다. 이 자습서에서는 QEMU 작업을 위한 명령줄 지침을 제공합니다.

QEMU 설치

QEMU를 설치하려면 Homebrew의 brew install을 사용하세요.

  1. brew install qemu

이것은 명령줄에서 가상 머신 이미지를 변환하는 데 사용되는 qemu-img를 포함하여 QEMU 도구 및 명령의 전체 제품군을 제공합니다. which qemu-img를 실행하여 qemu-img 명령에 대한 액세스 권한이 있는지 확인합니다.

  1. which qemu-img
Output
/usr/local/bin/qemu-img

참고: WSL2 없이 Windows에서 작업하려는 경우 기본 설치 프로그램을 사용하여 Windows에 QEMU를 설치할 수도 있습니다.

QEMU는 이 자습서에서 필요한 대부분의 기능을 제공합니다. 널리 사용되는 또 다른 가상화 패키지인 VirtualBox를 설치할 수도 있습니다.

버추얼박스

VirtualBox는 Oracle에서 제공하는 오픈 소스 가상화 소프트웨어입니다. 모든 x86 운영 체제(2020년 이전에 제조된 Windows, Linux 및 macOS 컴퓨터)를 지원합니다. 에뮬레이션 또는 비 x86 아키텍처를 지원하지 않으므로 주로 Windows에서 Linux를 실행하는 데 유용하며 그 반대의 경우도 마찬가지입니다. 그러나 QEMU보다 사용하기 더 쉽고 광범위하게 호환되는 기본 설정을 제공하며 기본적으로 데스크톱 인터페이스를 포함합니다.

QEMU만큼 많은 명령줄 기능을 제공하지 않으므로 Vagrant와 같은 전용 오케스트레이션 소프트웨어와 쌍을 이루어 가상 머신 구성을 자동화하고 재현하는 경우가 많습니다. 그러나 일부 가상 머신 이미지를 조작하는 데 사용할 수 있는 VBoxManage 명령줄 도구가 포함되어 있습니다.

버추얼박스 설치

macOS에 VirtualBox를 설치하려면 –cask 플래그와 함께 brew install을 사용하세요. VirtualBox는 Homebrew에서 cask 라고 부르는 전체 애플리케이션 번들로 배포되기 때문입니다. :

  1. brew install --cask virtualbox

Ubuntu 또는 Debian 파생 Linux 배포판(WSL2 포함)에 VirtualBox를 설치하려면 먼저 apt update를 사용하여 패키지 소스를 새로 고친 다음 apt install을 사용하십시오.

  1. sudo apt update
  2. sudo apt install virtualbox

WSL2 없이 Windows에 VirtualBox를 설치하려면 해당 다운로드 페이지를 참조하십시오.

VirtualBox를 설치한 후 which vboxmanage를 실행하여 vboxmanage 명령에 대한 액세스 권한이 있는지 확인합니다.

  1. which vboxmanage
Output
/usr/local/bin/vboxmanage

가상화를 위해 QEMU 및 VirtualBox에 사용할 수 있는 대안이 있습니다. 그러나 이들 중 대부분은 플랫폼에 따라 다릅니다(예: VMware). 이 자습서에서는 직접 다루지 않지만 다음 단계에서 이미지 형식을 변환합니다.

QEMU를 사용하여 가상 머신 이미지 생성

가상 머신 이미지 변환을 시연하기 위해 QEMU로 이미지를 생성하여 시작할 수 있습니다. 변환할 이미지가 이미 있는 경우 이 섹션을 건너뛸 수 있습니다.

qemu-img create 명령을 -f qcow2 플래그와 함께 사용하여 QEMU의 기본 qcow2 형식으로 이미지를 생성합니다.

  1. qemu-img create -f qcow2 ubuntu-desktop-22.04.qcow2 10G

이 시점에서 빈 가상 머신 이미지가 생성됩니다. 이름을 ubuntu-desktop-22.04.qcow2로 지정하고 10G의 용량을 제공했지만 이 시점에서 Ubuntu 22.04가 설치되지 않고 10GB도 되지 않습니다.

Output
Formatting 'ubuntu-desktop-22.04.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=10737418240 lazy_refcounts=off refcount_bits=16

QEMU 이미지는 가상 머신 내에서 실행되는 모든 소프트웨어에 선언된 최대 용량을 반영하면서 항상 디스크에서 가능한 한 적은 공간을 차지합니다. 이 경우 10GB는 가상 머신이 사용 가능한 것으로 생각하는 용량이며 가상 머신 이미지가 자동으로 확장되는 최대 크기입니다.

일반적인 다음 단계는 QEMU 설명서를 사용하여 가상 머신에 Ubuntu 22.04를 설치하는 것입니다.

QEMU 이미지를 다른 형식으로 변환

VM 이미지를 만든 후에는 qemu-img convert를 사용하여 다른 형식으로 변환할 수 있습니다. vdi는 VirtualBox의 기본 이미지 형식입니다. 기본적으로 이렇게 하면 원본 VM 이미지가 지워지지 않고 새 이미지만 생성됩니다.

  1. qemu-img convert -f qcow2 ubuntu-desktop-22.04.qcow2 -O vdi ubuntu-desktop-22.04.vdi

-f 플래그는 입력 형식과 입력 파일 이름을 지정하는 데 사용됩니다. -O 플래그는 출력 형식과 출력 파일 이름을 지정하는 데 사용됩니다. 또한 -p 플래그를 포함하여 매우 큰 이미지를 변환할 때 유용한 진행 표시줄을 표시할 수 있습니다. 마지막 단계에서 생성한 이미지는 아직 내용이 없기 때문에 즉시 변환됩니다. ls를 사용하여 ubuntu-desktop-22.04.vdi를 생성했는지 확인할 수 있습니다.

  1. ls ubuntu-desktop-22.04.vdi
Output
ubuntu-desktop-22.04.vdi

다른 일반적인 형식으로는 VMware에서 주로 사용하는 vmdk와 Microsoft의 Hyper-V에서 주로 사용하는 vhd가 있습니다. 소프트웨어에 필요한 경우 다음 단계에 따라 "원시\ 이미지를 생성할 수도 있습니다.

다른 가상 머신 형식을 QEMU로 변환

vdi 형식의 이미지가 있는 경우 VirtualBox에서 제공하는 vboxmanage 명령을 사용하여 변환할 수 있습니다.

  1. vboxmanage clonemedium ubuntu-desktop-22.04.vdi ubuntu-desktop-22.04.img --format raw
Output
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% Clone medium created in format 'raw'. UUID: 0501e707-c94e-4103-9069-d7b64a933d78

이렇게 하면 생성된 이미지가 로컬 VirtualBox 구성에 자동으로 등록되므로 일시적인 복사본을 생성하려는 경우 불편할 수 있습니다. 실수로 중복 항목을 등록한 경우 VirtualBox 인터페이스에서 새 항목을 수동으로 제거해야 할 수 있습니다.

원시 가상 머신 이미지는 전혀 압축되지 않으므로 이 명령은 이전과 달리 실제로 전체 10GB 파일을 생성합니다. 마지막 단계의 구문을 반대로 하여 QEMU에서 사용하기 위해 다시 qcow2 형식으로 변환할 수 있습니다.

  1. qemu-img convert -f raw ubuntu-desktop-22.04.img -O qcow2 ubuntu-desktop-22.04-new.qcow2

이제 원시 이미지를 삭제하여 디스크 공간을 확보할 수 있습니다.

  1. rm ubuntu-desktop-22.04.img

마지막으로 qemu-img checkqemu-img info 명령을 사용하여 가상 머신 이미지에서 일부 메타데이터를 출력할 수 있습니다.

  1. qemu-img check ubuntu-desktop-22.04.qcow2
Output
No errors were found on the image. Image end offset: 262144
  1. qemu-img info ubuntu-desktop-22.04.qcow2
Output
image: ubuntu-desktop-22.04.qcow2 file format: qcow2 virtual size: 10 GiB (10737418240 bytes) disk size: 196 KiB cluster_size: 65536 Format specific information: compat: 1.1 compression type: zlib lazy refcounts: false refcount bits: 16 corrupt: false extended l2: false

qemu-img로 이미지를 변환하는 방법에 대한 자세한 내용은 공식 문서를 참조하세요.

참고: DigitalOcean의 사용자 지정 이미지 설명서에 따라 이러한 가상 머신 이미지를 DigitalOcean에 업로드하여 클라우드 서버 이미지로 사용할 수도 있습니다.

결론

이 자습서에서는 QEMU 및 VirtualBox의 명령줄 도구를 사용하여 가상 머신 이미지를 만들고 변환하고 내보냈습니다. 가상 머신 이미지 형식의 몇 가지 일반적인 예와 가상 머신 작업에 대한 몇 가지 유용한 기본 가정을 검토했습니다. 특히 아키텍처나 클라우드 공급자를 마이그레이션해야 하는 경우 가상화와 같은 일반적인 개념의 기반이 되는 기술을 이해하는 것이 항상 도움이 됩니다.

다음으로 필요에 따라 가상 머신 확장에 대한 가이드를 검토할 수 있습니다.