TT Lab
はじめる
学ぶ 学習パス コース

仮想化とQEMU/KVM

qcow2イメージを扱う

TT Labで続きを見る

目標

qcow2イメージを作り、情報を読み、変換し、バッキングチェーンを立てて、ゴールデンイメージのパターンを手で再現します。

なぜ重要なのか

qcow2の本当の力は、バッキングファイルです。読み取りはバッキングから、書き込みはオーバーレイだけに行うため、ゴールデンイメージ1つでVMを数十台作れます。ここには2つのルールがついてきます。バッキングファイルは絶対に変更してはならず(オーバーレイが静かに壊れます)、バッキングのパスがイメージの中に記録されるので、ファイルを移したら、rebaseで参照を直す必要があります。そして、qemu-img infoのvirtual sizeとdisk sizeを区別できないと、シンプロビジョニングのオーバーコミットを見逃します。

ステップ

  1. /root/vmディレクトリを作成し、/root/vm/base.qcow2を2Gのサイズのqcow2として作成してください。
  2. そのイメージの仮想サイズ(バイト)と実際の占有(バイト)を1行ずつ(仮想サイズが先)/root/vm/size.txtに書いてください。実際の占有が仮想サイズよりずっと小さい必要があります。
  3. /root/vm/plain.rawをrawフォーマットの2Gで作成し、qcow2とrawの実際の占有を、qcow2=<바이트> / raw=<바이트>の2行(プレースホルダーはバイト数です)で/root/vm/formats.txtに書いてください。
  4. plain.rawをqcow2に変換して、/root/vm/converted.qcow2を作成してください。qemu-img infoで、フォーマットがqcow2と出る必要があります。
  5. base.qcow2をバッキングにするオーバーレイ/root/vm/vm01.qcow2を作成してください。バッキングのフォーマットを明示する必要があります。
  6. cluster_sizeを1Mに指定した/root/vm/big.qcow2を4Gで作成し、qemu-img infoの出力でcluster_sizeが見える行を/root/vm/cluster.txtに保存してください。
  7. base.qcow2を/root/vm/golden/base.qcow2に移し、vm01.qcow2のバッキング参照を新しいパスに直してください。直したあと、qemu-img info --backing-chain /root/vm/vm01.qcow2がエラーなしで2つのイメージをどちらも表示する必要があり、その出力を/root/vm/chain.txtに保存してください。
  8. /root/vm/inventory.csvを作成してください。1行目はfile,format,virtual_size,backingのヘッダーで、vm01.qcow2、converted.qcow2、big.qcow2の3つのイメージについて、それぞれ1行ずつ書いてください。backingは、バッキングファイルのパスまたはnoneです。

参考

qcow2イメージを作る

/root/vmディレクトリを作成し、/root/vm/base.qcow2を2Gのサイズのqcow2として作成してください。

qemu-img createは、フォーマット、ファイル名、サイズを受け取ります。サイズの単位は、Gのような接尾辞を使います。

仮想サイズと実際のサイズ

そのイメージの仮想サイズ(バイト)と実際の占有(バイト)を1行ずつ(仮想サイズが先)/root/vm/size.txtに書いてください。実際の占有が仮想サイズよりずっと小さい必要があります。

JSON出力を使うと、パースが楽です。virtual-sizeとactual-sizeの2つの値を探してください。

rawとの比較

/root/vm/plain.rawをrawフォーマットの2Gで作成し、qcow2とrawの実際の占有を、qcow2=<바이트> / raw=<바이트>の2行(プレースホルダーはバイト数です)で/root/vm/formats.txtに書いてください。

rawもスパースファイルとして作られますが、メタデータがありません。2つのフォーマットの実際の占有を比べてみてください。

フォーマットの変換

plain.rawをqcow2に変換して、/root/vm/converted.qcow2を作成してください。qemu-img infoで、フォーマットがqcow2と出る必要があります。

convertは、-fで入力フォーマットを、-Oで出力フォーマットを指定します。圧縮オプションもあります。

バッキングファイルでオーバーレイを作る

base.qcow2をバッキングにするオーバーレイ/root/vm/vm01.qcow2を作成してください。バッキングのフォーマットを明示する必要があります。

-bでバッキングファイルを、-Fでそのフォーマットを指定します。-Fを抜かすと、警告やエラーが出ます。

cluster_sizeの指定

cluster_sizeを1Mに指定した/root/vm/big.qcow2を4Gで作成し、qemu-img infoの出力でcluster_sizeが見える行を/root/vm/cluster.txtに保存してください。

-oでフォーマット別のオプションを指定します。infoの出力のFormat specific informationで確認できます。

バッキングのパスを変える

base.qcow2を/root/vm/golden/base.qcow2に移し、vm01.qcow2のバッキング参照を新しいパスに直してください。直したあと、qemu-img info --backing-chain /root/vm/vm01.qcow2がエラーなしで2つのイメージをどちらも表示する必要があり、その出力を/root/vm/chain.txtに保存してください。

rebaseの-uは、データを移さず、参照だけを直します。先にファイルを移してから、参照を合わせてください。

イメージのインベントリ

/root/vm/inventory.csvを作成してください。1行目はfile,format,virtual_size,backingのヘッダーで、vm01.qcow2、converted.qcow2、big.qcow2の3つのイメージについて、それぞれ1行ずつ書いてください。backingは、バッキングファイルのパスまたはnoneです。

各イメージのフォーマットと仮想サイズを集めてください。バッキングファイルがあるものとないものを、区別する必要があります。