= 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で提供されている[[http://www.dreyou.org/ovirt/vdsm32/Packages/|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で編集したいパーティションを指定します。