気づけば遠くに来たもんだ

がちゃぽん!

サポートブログ

外部スナップショットをつかってKVMをバックアップしてみる(2)

投稿日:

前回外部スナップショットをつかってKVMをバックアップしてみる(1)で見事に大失敗したので、もう最初からやり直してみます。

現在のディスクイメージファイルと仮想マシンの状況を確認。

# qemu-img info skyline
image: skyline
file format: qcow2
virtual size: 80G (85899345920 bytes)
disk size: 3.7G
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: true
    refcount bits: 16
    corrupt: false
# virsh list
 Id    名前                         状態
----------------------------------------------------
 17    rhel6.6                        実行中

ディスクイメージファイルの名前は「skyline」で、80GB割り当て中の3.7GB使用しています。また、仮想マシンの名前は「rhel6.6」で実行中です。

では、仮想マシン内で400MBのファイルを作成してみます。

dd if=/dev/urandom of=/home/400MB.img bs=1M count=400

そして、ディスクイメージファイルがどうなったかを確認します。

# qemu-img info skyline
image: skyline
file format: qcow2
virtual size: 80G (85899345920 bytes)
disk size: 4.1G
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: true
    refcount bits: 16
    corrupt: false

400MB分増えていますね。

ここで、前回も参考にしたページで紹介されている --quiesce を付加したコマンドで外部スナップショットを取ってみます。

# virsh snapshot-create-as rhel6.6 --disk-only --atomic --quiesce
エラー: ゲストエージェントが応答しません: ゲストエージェントが今のところ利用できません

なんじゃこりゃ…

もう一つの引数 --no-metadata を付加してスナップショットを取ってみます。

# virsh snapshot-create-as rhel6.6 --disk-only --atomic --quiesce --no-metadata
エラー: ゲストエージェントが応答しません: ゲストエージェントが今のところ利用できません

だめじゃん。

これらのコマンドを実行中に仮想マシンも一時的に止まってしまうのですが、それじゃが外部スナップショットを取るメリットが減ってしまうのですが…

じゃあ通常のやりかたで外部スナップショットを取ってみます。

# virsh snapshot-create-as rhel6.6 --disk-only --atomic
ドメインのスナップショット 1466068834 が作成されました

作れました。

では、仮想マシンが参照してるディスクイメージファイルを確認しています。

# virsh domblklist rhel6.6
ターゲット ソース
------------------------------------------------
vda        /kvm/skyline.1466068834

ディスクイメージファイルが変わっていますね。

ディスクイメージファイルの状況を確認してみます。

# qemu-img info skyline
image: skyline
file format: qcow2
virtual size: 80G (85899345920 bytes)
disk size: 4.1G
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: true
    refcount bits: 16
    corrupt: false
# qemu-img info skyline.1466068834
image: skyline.1466068834
file format: qcow2
virtual size: 80G (85899345920 bytes)
disk size: 452K
cluster_size: 65536
backing file: /kvm/skyline
backing file format: qcow2
Format specific information:
    compat: 1.1
    lazy refcounts: false
    refcount bits: 16

新しくディスクイメージファイルができています。

ここで、仮想マシン内で400MBのファイルを作成してみます。

dd if=/dev/urandom of=/home/400MB-2.img bs=1M count=400

ディスクイメージファイルを確認してみます。

# qemu-img info skyline
image: skyline
file format: qcow2
virtual size: 80G (85899345920 bytes)
disk size: 4.1G
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: true
    refcount bits: 16
    corrupt: false
# qemu-img info skyline.1466068834
image: skyline.1466068834
file format: qcow2
virtual size: 80G (85899345920 bytes)
disk size: 401M
cluster_size: 65536
backing file: /kvm/skyline
backing file format: qcow2
Format specific information:
    compat: 1.1
    lazy refcounts: false
    refcount bits: 16
    corrupt: false

新しいファイルの方に400MB増えていることが確認できました。

では、blockcommitで一つのファイルにまとめてみたいと思います。

# virsh blockcommit rhel6.6 vda
エラー: 無効な引数: commit of 'vda' active layer requires active flag

あら、active 引数が必要だとさ。

# virsh blockcommit rhel6.6 vda --active
Active Block Commit started

# virsh blockjob rhel6.6 vda
Active Block Commit: [100 %]

やっぱり終わらないぢゃん。

ジョブを中断します。

# virsh blockjob rhel6.6 vda --abort

それでは、blockpullをつかって一つのファイルにまとめてみたいと思います。

# virsh blockpull rhel6.6 vda
ブロック取り出しが開始しました

# virsh blockjob rhel6.6 vda --info
ブロック取り出し: [  8 %]

おお、今度はちゃんと処理されている、いる。

ここで、ディスクイメージファイルの状況を確認。

# qemu-img info skyline
image: skyline
file format: qcow2
virtual size: 80G (85899345920 bytes)
disk size: 4.5G
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: true
    refcount bits: 16
    corrupt: false
# qemu-img info skyline.1466068834
image: skyline.1466068834
file format: qcow2
virtual size: 80G (85899345920 bytes)
disk size: 1.1G
cluster_size: 65536
backing file: /kvm/skyline
backing file format: qcow2
Format specific information:
    compat: 1.1
    lazy refcounts: false
    refcount bits: 16
    corrupt: false

おお、新しいディスクイメージファイルの方にデータが書き込まれている、いる。

もう一回確認。

# virsh blockjob rhel6.6 vda --info
ブロック取り出し: [ 23 %]
# qemu-img info skyline
image: skyline
file format: qcow2
virtual size: 80G (85899345920 bytes)
disk size: 4.5G
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: true
    refcount bits: 16
    corrupt: false
# qemu-img info skyline.1466068834
image: skyline.1466068834
file format: qcow2
virtual size: 80G (85899345920 bytes)
disk size: 2.0G
cluster_size: 65536
backing file: /kvm/skyline
backing file format: qcow2
Format specific information:
    compat: 1.1
    lazy refcounts: false
    refcount bits: 16
    corrupt: false

新しいディスクイメージファイルが着実にデータが増えていってます。

もう一回確認。

# virsh blockjob rhel6.6 vda --info
ブロック取り出し: [ 85 %]
# qemu-img info skyline.1466068834
image: skyline.1466068834
file format: qcow2
virtual size: 80G (85899345920 bytes)
disk size: 3.1G
cluster_size: 65536
backing file: /kvm/skyline
backing file format: qcow2
Format specific information:
    compat: 1.1
    lazy refcounts: false
    refcount bits: 16
    corrupt: false

よし、よし。

しばらく待って blockpull が終わったので状況を確認。

# virsh blockjob rhel6.6 vda --info
No current block job for vda
# qemu-img info skyline
image: skyline
file format: qcow2
virtual size: 80G (85899345920 bytes)
disk size: 4.5G
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: true
    refcount bits: 16
    corrupt: false
# qemu-img info skyline.1466068834
image: skyline.1466068834
file format: qcow2
virtual size: 80G (85899345920 bytes)
disk size: 3.1G
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: false
    refcount bits: 16
    corrupt: false

スナップショットとして用意した方のファイルにはbacking fileの情報がなくなりました。
元ファイルとサイズの差がありますが、これは最適化されたことにより不必要に確保されていた領域が解放されたからかと思われます。

また仮想マシン内で400MBファイルを追加してみます。

dd if=/dev/urandom of=/home/400MB-2.img bs=1M count=400
# qemu-img info skyline
image: skyline
file format: qcow2
virtual size: 80G (85899345920 bytes)
disk size: 4.5G
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: true
    refcount bits: 16
    corrupt: false
# qemu-img info skyline.1466068834
image: skyline.1466068834
file format: qcow2
virtual size: 80G (85899345920 bytes)
disk size: 3.5G
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: false
    refcount bits: 16
    corrupt: false

新しいファイルの方が増えてますね。

これらのことより、外部スナップショットを使ったバックアップを取る場合には blockpull を使って古いディスクイメージファイルを新しいディスクイメージファイルに移行して、そして、古いディスクイメージファイルを削除するの方法がいいかも知れないですね。

あ、最後に忘れずにsnapshotのmetadataを削除しておきます。これを忘れると、libvirt的に新しいディスクイメージファイルがずっとsnapshotイメージファイルであると認識しつづけてしまいますので。

# virsh snapshot-delete rhel6.6 1466068834 --metadata
ドメインのスナップショット 1466068834 が削除されました

 

-サポートブログ

Copyright© がちゃぽん! , 2017 All Rights Reserved.