KVMのストレージメモ
sparceでないrawイメージを作る
qemu-imgでrawイメージを作成すると、サイズの大きなイメージでも一瞬で作ることができます。
# time qemu create -f raw test.raw 100G Formatting 'test.raw', fmt=raw size=107374182400 real 0m0.011s
ls -sで実際のファイルサイズを確認すると、サイズが0であることが分かります。
# ls -s 0 test.raw
これは、qemu-imgでイメージを作成するとsparseファイルとして作成されるためです。sparseファイルは初回書き込み時のアクセス性能が落ちます。sparseでないファイルイメージを作成するには、ddを使います。
# dd if=/dev/zero of=test.raw bs=1G count=100
sparceファイルの扱い
sparceでないファイルの0で埋まっている箇所をsparceと扱いコピーするには、
# cp --sparce=always org.raw dest.raw
差分イメージを作成
仮想マシンイメージを作成するごとに、OSをインストールするのは手間です。そんなときは、テンプレートイメージを作成しておき、 テンプレートイメージからの差分のみ記録するイメージを作成するとディスクを効率的に利用でき、イメージ作成も早くすることができます。 テンプレートイメージからイメージ作成は、次のようにします。
# qemu-img create -b CentSO64_BASE.qcow -f qcow2 CentOS64_Working.qcow
ベースイメージは、raw形式も利用することができます。
ディスクのオンラインスナップショット
オンラインスナップショットは、VMを動作させたまま、ディスクのスナップショットを取る方法です。ディスクのバックアップに利用することができます。
下記の機能は比較的新しい機能で、RHEL系OSだとRHEVで提供されている qemu-kvm-rhevが必要となります。また、Ubuntuでは、13.04以降が必要となります。
# virsh snapshot-create-as --domain DOMAIN snap1 "Snapshot Description" --disk-only \ --diskspec vda,snapshot=external,file=/tmp/snap1.qcow2 \ -- atomic
上記のコマンドを実行すると、もともとの仮想マシンイメージは、読み込み専用となり、新しい追記は、/tmp/snap1.qcoww2に行われます。 スナップショットを取得してから、仮想マシンイメージのバックアップを取ることにより、安全にバックアップと取ることができます。 (バックアップ中にディスクへの書き込みが発生すると整合性の取れないバックアップディスクになるためです)
現在書き込み中のストレージは下記のコマンドで確認できます。
# virsh domblklist DOMNAME Target Source ---------------------------------------------------- vda /tmp/snap1.qcoww2
バックアップが終了したら、blockpullで差分イメージを元のイメージに統合し、スナップショットを削除します。
# virsh blockpull --domain DOMNAME --path \ /tmp/snap1.qcow2 \ --base /var/lib/libvirt/images/DOMNAME.img --verbose --wait # virsh snapshot-delete ALMTest snap1 --metadata
イメージの編集
libguestfs-toolsを利用すると、簡単にイメージをマウントして編集することができます。 例えば、下記のような感じです。
# export LIBGUESTFS_BACKEND=direct # guestmount -a cirros-jp-0.3.3-x86_64-disk.img -m /dev/sda1 --rw /mnt
-mで編集したいパーティションを指定します。