KVM のディスクイメージの形式を変換する (qcow2, raw)

KVM仮想マシンのディスクイメージには、主に次の3種類のフォーマットが使用できる。

  • raw
    • non-sparse
    • sparse
  • qcow2

それぞれの違いとしては以下のような点があげられる。

  • 容量をあらかじめ確保するかどうか
  • スナップショットの可否
  • IO パフォーマンス など

詳しくは参考文献などを参照のこと。

それで今回は、それぞれの形式を相互変換する方法をまとめる。

変換方法

qcow2, raw (non-sparse) -> raw (sparse)

$ qemu-img convert -O raw ${SRC} ${DST}
  • ${SRC}: 元のファイル名
  • ${DST}: 変換後のファイル名

raw (sparse) -> raw (non-spase)

$ cp --sparse=never ${SRC} ${DST}

qcow2 -> raw (non-sparse)

どうやら直接はできなさそうなので、上の2つを組み合わせる必要がありそう。

raw (sparse, non-sparse) -> qcow2

$ qemu-img convert -O qcow2 ${SRC} ${DST}

変換後の確認

ディスクイメージの実使用量やフォーマットは qemu-img info で確認できる。

$ qemu-img info ${FILE}

例) sparse な raw イメージの場合:

$ qemu-img info example.img
image: example.img
file format: raw
virtual size: 80G (85899345920 bytes)
disk size: 809M

このように、指定した容量 (virtual size) より実使用量 (disk size) が小さいことがわかる。

また、sparse なディスクイメージの実使用量は ls の -s オプションや du でも確認できる。

$ ls -lsh ${FILE}
$ du -h ${FILE}

例) sparse な raw イメージの場合:

$ ls -lsh example.img
810M -rw-r--r-- 1 root root 80G Nov 23 13:32 example.img
$ du -h example.img
810M    example.img