qemu-img を使用した仮想ディスクフォーマットの変換: VMDK、QCOW2、VDI、VHD

Virtualization tutorial - IT technology blog
Virtualization tutorial - IT technology blog

はじめに

仮想マシン (Virtual Machine – VM) の操作は、ソフトウェア開発、システムテスト、サーバー上でのサービス運用など、IT業界で働くすべての人にとって不可欠なスキルです。

このプロセスにおいて、私たちが頻繁に直面する課題の1つは、仮想ディスクフォーマットの変換の必要性です。たとえば、VMwareからProxmoxへ、あるいはVirtualBoxからより柔軟なKVM/QEMUプラットフォームへVMを移行する必要があるかもしれません。

私自身は、Proxmox VE を使用したホームラボを運用しており、12台以上のVMとコンテナを管理しています。ここは、本番環境に投入する前にあらゆるものを試すのに理想的な場所です。その過程で、ディスクフォーマットの変換が頻繁に行われます。

QCOW2でのパフォーマンス最適化のためであったり、異なるハイパーバイザーとの互換性を確保するためであったりします。これを行うためのツールは数多くありますが、qemu-imgはその強力さ、柔軟性、そしてLinuxコミュニティで広く使用されていることで際立っています。

では、VMDK、QCOW2、VDI、VHDなどの一般的なフォーマットを効率的かつ安全に変換するにはどうすればよいでしょうか?ご心配なく、このガイドは、特に初心者の方が、qemu-imgの使用方法を習得し、この問題を徹底的に解決するのに役立ちます。

コアコンセプト

一般的な仮想ディスクフォーマット

実際に作業を開始する前に、言及する主要な仮想ディスクフォーマットを見ていきましょう。

  • VMDK (VMware Virtual Disk Format): 仮想化分野のパイオニアであるVMware独自のフォーマットです。.vmdkファイルは、VMware Workstation、ESXi、vSphereを扱う人なら誰でもよく知っています。
  • QCOW2 (QEMU Copy-On-Write Version 2): これはQEMU/KVMを使用する際のデフォルトであり推奨されるフォーマットです。スナップショット(VM状態のスナップショット)、シンプロビジョニング(必要に応じて容量を使用する薄いディスク割り当て)、データ圧縮機能など、多くの便利な機能を備えています。Proxmox上での柔軟性から、私はホームラボでこのフォーマットを非常に好んで使用しています。
  • VDI (VirtualBox Disk Image): Oracle VirtualBox独自のディスクフォーマットです。個人用PCでゲストOSを実行するためにVirtualBoxを頻繁に使用している場合、.vdiファイルはおなじみでしょう。
  • VHD (Virtual Hard Disk) / VHDX: Microsoftのフォーマットで、主にWindows ServerおよびWindowsクライアントのHyper-Vで使用されます。VHDXはVHDのアップグレード版であり、より大容量(最大64TB)と優れたエラー回復機能をサポートしています。

qemu-imgツールとは?

qemu-imgは、オープンソースのエミュレータ兼仮想化ソフトウェアであるQEMUに付属するコマンドラインユーティリティです。

QEMUはLinuxサーバー上でゲストOSを実行する機能で有名ですが、qemu-imgユーティリティは仮想ディスクファイルの管理に特化しています。異なる仮想ディスクフォーマット間の作成、検査、変更、そして最も重要な変換を行うことができます。

qemu-imgの強みは、マルチフォーマットをサポートし、ハイパーバイザーとは独立して動作する能力です。これにより、異なる仮想化環境間でVMを簡単に移行するための理想的なツールとなります。

詳細な実践方法

変換前の準備

変換をスムーズかつ安全に進めるために、いくつかの重要な準備手順を実行する必要があります。

  1. QEMU Utilsのインストール: Debian/Ubuntuの場合はqemu-utilsパッケージ、RHEL/CentOSの場合はqemu-imgパッケージがLinuxシステムにインストールされていることを確認してください。このパッケージに、必要なqemu-imgツールが含まれています。
    # Debian/Ubuntuの場合
    sudo apt update
    sudo apt install qemu-utils
    
    # CentOS/RHELの場合
    sudo yum install qemu-img
  2. 元のディスクのバックアップ: これが最も重要なステップです!変換操作を行う前に、必ず元の仮想ディスクファイルをバックアップしてください。エラーが発生した場合でも、いつでも安全な元のバージョンに戻ることができます。
    cp original.vmdk original.vmdk.bak
  3. 十分なディスク容量の確保: 変換プロセスでは新しいディスクファイルが作成されます。それを格納するためにハードドライブに十分な空き容量があることを確認してください。シンプロビジョニングからシックプロビジョニングに変換する場合、元のファイルの2倍の容量が必要になる可能性があることに注意してください。
  4. 仮想マシンのシャットダウン: 仮想マシンが実行中または一時停止状態のときに変換を実行してはなりません。操作を開始する前に、仮想マシンを完全にシャットダウンしてください。

qemu-img convertの基本的なコマンド構文

qemu-img convertコマンドの基本的な構文は次のとおりです。

qemu-img convert -f <ソースフォーマット> -O <ターゲットフォーマット> <ソースファイル> <ターゲットファイル>
  • -f <ソースフォーマット>: 元のディスクファイル(入力フォーマット)のフォーマットを指定します。例: vmdk, qcow2, vdi, vhd
  • -O <ターゲットフォーマット>: 変換したいフォーマット(出力フォーマット)を指定します。例: qcow2, vmdk, vdi, vhd。ここでの「O」はOutputの略です。
  • <ソースファイル>: 元の仮想ディスクファイルへのパス。
  • <ターゲットファイル>: 変換後の仮想ディスクファイルのパスとファイル名。

一般的な変換ケース

VMDKからQCOW2への変換

これは、特にVMwareからProxmox VEまたはKVMに仮想マシンを移行する必要がある場合に、私が最も頻繁に行うケースの1つです。QCOW2は優れたパフォーマンスと私に必要な多くの機能をサポートしています。

qemu-img convert -f vmdk -O qcow2 my_vm_disk.vmdk my_vm_disk.qcow2

QCOW2からVMDKへの変換

逆に移行する必要がある場合、たとえばVMware Workstationで実行するためにQEMU/KVMディスクを準備する場合、このコマンドが役立ちます。

qemu-img convert -f qcow2 -O vmdk my_vm_disk.qcow2 my_vm_disk.vmdk

VDIからQCOW2への変換

VirtualBoxからProxmoxまたはKVMサーバーに仮想マシンを移行する場合、VDIからQCOW2への変換は必要かつ一般的です。

qemu-img convert -f vdi -O qcow2 virtualbox_vm.vdi virtualbox_vm.qcow2

QCOW2からVDIへの変換

QEMU/KVM仮想マシンのコピーを作成してVirtualBoxで一時的に使用したい場合、このコマンドは簡単に実行できます。

qemu-img convert -f qcow2 -O vdi my_vm_disk.qcow2 my_vm_disk.vdi

VHDからQCOW2への変換

Hyper-V環境の仮想マシンがあり、それをKVM/Proxmoxで実行したい場合は、互換性を確保するためにQCOW2に変換してください。

qemu-img convert -f vhd -O qcow2 hyperv_vm.vhd hyperv_vm.qcow2

QCOW2からVHDへの変換

同様に、QCOW2からHyper-V互換のディスクを作成するには、次のコマンドを使用できます。

qemu-img convert -f qcow2 -O vhd my_vm_disk.qcow2 my_vm_disk.vhd

いくつかの便利な高度なオプション

qemu-img convertには、変換プロセスをより細かく制御するための他のオプションもあります。

  • 進捗表示 (-p): 大容量のディスクファイル(数百GBなど)の場合、進捗状況を把握し、完了までの時間を推定するために、進捗状況を監視することが非常に重要です。
  • qemu-img convert -p -f vmdk -O qcow2 my_vm_disk.vmdk my_vm_disk.qcow2
  • ターゲットディスクの圧縮 (-c): このオプションを使用すると、zlibアルゴリズムでターゲットディスクファイルを圧縮できるため、ストレージスペースを大幅に節約できます。ただし、圧縮すると、仮想マシンのI/Oパフォーマンスが低下するため、主要なディスクには通常推奨されません。バックアップやアーカイブに適しています。
  • qemu-img convert -c -f qcow2 -O qcow2 my_vm_disk.qcow2 compressed_my_vm_disk.qcow2
  • ターゲットフォーマットのオプション (-o <option>=<value>): 一部のフォーマット、特にQCOW2は、最適化のために特定のオプションで作成できます。例えば、より最適化されたcluster_sizeを持つQCOW2ファイルを作成したり、スナップショットのbacking_fileを設定したりする場合:
    # シンプロビジョニングとcluster_size 128KでQCOW2を作成
    qemu-img convert -f vmdk -O qcow2 -o cluster_size=128K my_vm_disk.vmdk my_vm_disk_optimized.qcow2

結論

qemu-imgは、仮想ディスクフォーマット変換という問題をうまく解決してくれる、非常に便利で柔軟なツールです。

仮想ディスクに何らかの操作を行う前に、データのバックアップがいかに重要であるかをもう一度強調したいと思います。安全性は常に最優先事項です!

あなたの環境で上記のコマンドを試してみてください(バックアップ上で実行することを忘れないでください!)。qemu-imgのようなコマンドラインツールに慣れることは、仮想化システムをよりよく制御し、より強力なITプロフェッショナルになるのに役立ちます。

Share: