web-dev-qa-db-ja.com

ライブQEMU / KVM VMを(適切に)バックアップする方法は?

私は現在、KVM VMのバックアップソリューションを、従来のバックアップの追加手段として設計しています。

残念ながら、これまでに出会った現在(2013年8月)のすべての既存のソリューション:

  • VM(RAM状態を失う、ダーティイメージを作成するなど))のconsistentバックアップを確認しないでください。
  • または、長いdowntime(complete VMバックアップ中にシャットダウン)が必要です。

QEMU/libvirtのスナップショット作成機能を知っていますが、次の理由からまだ使用できません。

  • image-internalスナップショットは常に変化するイメージファイルを提示し、ダーティバックアップの可能性があります(qcow2イメージをまったく使用しないと仮定します)。
  • 現在アクティブな外部スナップショットを元のバッキングイメージにまだマージすることはできません( "blockcommit")。

上記の理由から、今は次のようなスクリプトを実装しています。

  1. VMの状態を保存して停止します
  2. VMのディスクイメージと状態が存在するデバイスマッパースナップショットを設定します
  3. VMを再開します
  4. 手順2のスナップショットをマウントします。
  5. VMのディスクと状態をバックアップします(便宜上の構成)
  6. スナップショットをマージして戻します。

すべてが正しければ、これはVMの一貫したバックアップを数秒(もしあれば、1〜3が速いため、おそらく1秒未満)のダウンタイムで実行します。もちろん、復元するとき、VMは過去にwayになりますが、少なくとも私にオプションを与えます正常なシャットダウン/再起動。

このソリューションで何か不足していますか?それとも誰かが実際にこれをすでに実装していますか?

7
Roman

VMを停止しても、実行中のIOはフラッシュされません。VMを静止するには、qemu-gaを使用する必要があります。

QEMUはブロック移行を導入したので、それを使用してVMをバックアップイメージに移行し、メモリの状態とディスクの両方を保存することができます

3
dyasny

https://wiki.libvirt.org/page/Live-disk-backup-with-active-blockcommit

これは、QEMU 2.1(以降)、libvirt-1.2.9(以降)のバージョンで可能です。

$ virsh domblklist vm1
Target     Source
------------------------------------------------
vda        /export/images/base.img 

$ virsh snapshot-create-as --domain vm1 guest-state1 \
--diskspec vda,file=/export/images/overlay1.qcow2 \
--disk-only --atomic --quiesce

$ rsync -avhW --progress /export/images/base.img \
/export/images/copy.img

$ virsh blockcommit vm1 vda --active --verbose --pivot
3
Ivan Baldo