プロジェクト

全般

プロフィール

Linux KVMストレージ

はじめに

Linux KVMで仮想ゲストのストレージ(ディスク)をどの形式、どんなパラメータで用意すればよいかを整理するためのページです。

Linux KVMのストレージ形式

「Red Hat Enterprise Linux 6 仮想化管理ガイド」第11章 ストレージプール より

  • ディスクベース
    ディスクを1台まるまるKVMで使用します。
  • パーティションベース
    /dev/sdb1 のようにディスク(ハードディスク等)のあるパーティションを専用に使用します。
  • ディレクトリベース
    KVMホスト上の特定のディレクトリに作成したイメージファイルを使用します。
  • LVMベース
    LVMボリュームグループを使用します。
  • iSCSIベース
    iSCSI上に作成したLVMまたはディレクトリベースを使用します。マニュアルによるとディレクトリベースは性能面で推奨できないとあります。
  • NFSベース

ディレクトリベース

Linux KVMホスト上のファイルシステムのある場所をKVMゲストイメージ格納場所(ストレージプール)として使用し、その中に各KVMゲストのディスクをファイルとして用意します。

KVMゲストイメージファイルの形式

ファイルの形式には、次の3つがあります。
  • RAW形式(スパースなし)
  • RAW形式(スパースあり)
  • QCOW2形式

この中でQCOW2形式だけがスナップショットを取れます。
性能は、RAW形式(スパースなし)> RAW形式(スパースあり) > QCOW2形式 と思われますが定量的な値は持っていません。

各形式はコンバート可能なので、構築時はスナップショットを活用するためQCOW2で作成しておき、安定稼動したらRAW形式(スパースなし)に変換するといったテクニックが使えます。

QCOW2形式

スパース化ありなので実際に使用したサイズがファイルサイズとなります。また、スナップショット機能があり、作成したスナップショットに戻すことができます。OSのインストール時などファイルの書き込みが大量に発生するときは拡張しながら書き込む処理となるので性能が落ちます。

パラメータ

qemu-imgコマンドでqcow2形式を指定したときに、合わせて指定できるオプションがあります。
  • バッキングファイル
  • 暗号化
  • クラスターサイズ
  • 事前アロケート
クラスターサイズ

512バイト~2Mバイトの間を指定します。サイズを大きくすると性能が向上し、サイズを小さくするとイメージサイズが小さく済みます。デフォルトは64KBのようです(CentOS 6上でqemu-imgコマンドでqcow2形式ファイルをデフォルトで作成時)。

事前アロケート

メタデータを事前アロケートしておくと、初期ファイルサイズは大きくなりますが、イメージを拡張するときの性能が向上します。

作成方法

カレントディレクトリにqcow2形式のイメージファイルを作成、ファイル名はmyguest.imgで容量は16GBとする例を次に示します。

~$ qemu-img create -f qcow2 myguest.img 16G

イメージファイルの情報

イメージファイルの情報は次のように見ます。

~$ qemu-img info myguest.img
file format: qcow2
virtual size: 16G (17179869184 bytes)
disk size: 1.2G
cluster_size: 65536
~$ ls -l myguest.img
-rw-------. 1 root root 1298268160  5月  9 00:15 2014 myguest.img

16GBのサイズを指定して作成したqcow2形式のファイルです。実際に使用しているサイズは1.2GBです。

スナップショットの作成(ファイル内)

qcow2のファイル内にスナップショットを作成します。頻繁にスナップショットの作成と復元を繰り返すと壊れるという話もあるようです。
次のコマンドを実行します。foo.imgはqcow2形式のKVMイメージファイルです。

# qemu-img snapshot -c 20150530base /var/lib/libvirt/images/foo.img

スナップショットが作成されたかどうかを確認します。

  1. qemu-img snapshot -l /var/lib/libvirt/images/foo.img
    Snapshot list:
    ID TAG VM SIZE DATE VM CLOCK
    1 20150530base 0 2015-05-30 17:08:52 00:00:00.000

メモ

RAW形式(スパースなし)をcpコマンドでコピーするとRAW形式(スパースあり)に化けてしまう

KVMゲストイメージファイルをバックアップのためコピーしたときに直面したのですが、cpコマンドでコピーしたらRAW形式(スパースなし)がRAW形式(スパースあり)に化けてしまいました。

原因

Linuxのcpコマンドが勝手に連続するゼロを見つけてスパース化してしまうためです。

対策

cpコマンドのオプション--sparse=neverを指定します。
忘れやすいので、KVM保守作業用ユーザーにalias等で以下のようにイメージコピーを用意するといいかと思います。

alias cp-img='cp --sparse=never'

クリップボードから画像を追加 (サイズの上限: 1 GB)