はじめに
OVA形式の仮想マシンイメージを、KVM系(Harvesterなど)で利用するためにQCOW2へ変換するケースはよくあります。
本記事では:
- OVA → QCOW2 の変換手順(Mac / Windows)
-
qemu-imgの基本と挙動 - 「サイズが増える/減る」理由の正しい理解
- 実務的なベストプラクティス
を整理します。
※Coriolis Applianceを題材にしていますが、内容は一般化されています。
OVAの正体(まずここが重要)
OVAは「仮想マシンの形式」ではなく、単なるアーカイブです。
.ova = tarファイル
中身:
-
.ovf→ 定義ファイル -
.vmdk→ ディスク本体
つまりやることは:
OVA → 展開 → VMDK → QCOW2変換
全体フロー(共通)
① OVA展開
② VMDKを特定
③ QCOW2へ変換
④ 必要なら圧縮
Mac編
1. QEMUインストール
brew install qemu
2. OVA展開
tar -xvf coriolis-appliance.ova
3. QCOW2へ変換
qemu-img convert -p -f vmdk -O qcow2 disk-0.vmdk output.qcow2
4. 圧縮(任意)
qemu-img convert -c -f qcow2 -O qcow2 output.qcow2 output-compressed.qcow2
Windows編
1. QEMUインストール
Windows版QEMU(Stefan Weilビルドなど)を使用
👉 64-bit版を選択(通常はこれ一択)
2. OVA展開
PowerShellまたはコマンドプロンプト:
tar -xvf coriolis-appliance.ova
3. QCOW2変換
& "C:\Program Files\qemu\qemu-img.exe" convert -p -f vmdk -O qcow2 disk-0.vmdk coriolis.qcow2
結果
PS C:\Users\...> & "C:\Program Files\qemu\qemu-img.exe" convert -p -f vmdk -O qcow2 disk-0.vmdk coriolis.qcow2
(100.00/100%)
PS C:\Users\...>
ls
ディレクトリ: C:\Users\...
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2026/05/09 15:26 tmp
-a---- 2026/05/07 15:11 7207802880 coriolis-appliance-2603.1.ova
-a---- 2026/04/20 23:29 9403 coriolis-appliance-2603.1.ovf
-a---- 2026/05/09 15:33 16880697344 coriolis.qcow2
-a---- 2026/04/20 23:29 7207779840 disk-0.vmdk
4. 圧縮(任意)
qemu-img.exe convert -c -f qcow2 -O qcow2 output.qcow2 output-compressed.qcow2
サイズが変わる理由(重要)
今回のようなケース:
VMDK(OVA内) 約 7GB
QCOW2(非圧縮) 約 16GB
QCOW2(圧縮) 約 7GB
これは正常です。
なぜ起きるのか
① VMDKは配布用に最適化されている
- ゼロ領域を持たない
- 圧縮されていることが多い
👉 見た目サイズが小さい
② QCOW2変換で一度「展開」される
qemu-img convert -f vmdk -O qcow2
この時:
- 実データとして再構成される
- 結果的にサイズが増えることがある
③ 圧縮で再び縮む
qemu-img convert -c ...
👉 再度圧縮されるため元サイズに近づく
sparse と compression の違い
ここは混同しやすいポイントです。
| 項目 | 内容 |
|---|---|
| sparse | 未使用領域を物理的に持たない |
| compression | データそのものを圧縮 |
ポイント
- qcow2はデフォルトで sparse
- ただし「実データ部分」は減らない
- 圧縮は
-cを付けた時のみ有効
確認コマンド
qemu-img info output.qcow2
例:
virtual size: 40 GiB
disk size: 15.7 GiB
意味:
- virtual size → VMから見えるサイズ
- disk size → 実際のファイルサイズ
ファイル確認
ls -lh output.qcow2
du -h output.qcow2
-
ls→ 論理サイズ -
du→ 実使用サイズ
ベストプラクティス
最初から圧縮付きで変換:
qemu-img convert -p -c -f vmdk -O qcow2 disk-0.vmdk output.qcow2
まとめ
- OVAはただのtar
- 本体はVMDK
- QCOW2変換は
qemu-imgが基本 - サイズ変化は正常挙動
- 圧縮は明示的に行う必要あり
- 実務では「圧縮済QCOW2」が最適
おわりに
一見単純なフォーマット変換ですが、
- ディスクの論理構造
- 圧縮の扱い
- 仮想化基盤の違い
が絡むため、理解しておくとかなり応用が効きます。
特にKVM系(Harvester / OpenStack / Proxmox)を扱う場合は、基本スキルとして押さえておく価値があります。
