web-dev-qa-db-ja.com

実行中のバックアップKVM qcow2 VPS

実行中に、KVM qcow2ファイルのVPSのバックアップを取得するための堅牢な方法が必要です。長時間検索した後、ライブバックアップに rsync を使用できることがわかりました。私はrsyncに次のコマンドを使用しました:

rsync -avh /vms/base.qcow2 /backup/backup.qcow2

ちゃんと動いた。しかし、書き込みと削除の操作(新しいソフトウェアのインストールや更新など)のためにVPSが変更されている間にバックアップを行うと、バックアップqcow2イメージが破損する可能性があります。

したがって、ライブVPSのスナップショットからバックアップを取ることは、より興味深いオプションのようです。

実行中のVPSのバックアップを取るために、次のコマンドを使用しました。

1.スナップショットを作成:

qemu-img create -f qcow2 -b base.qcow2 snapshot.qcow2

2.スナップショットをraw画像形式(.img)に変換します。

qemu-img convert -O raw snapshot.qcow2 /backup/backup.img

VPSを復元するには:

3. qcow2イメージでrawイメージを変換します。

qemu-img convert -O qcow2 /backup/backup.img base.qcow2

次に、virsh create base.xmlコマンドでVPSを起動できます。

この方法も完全に機能しますが、実行中のVPSのバックアップを取る適切な方法であるかどうかはまだわかりません。 qemu-imgコマンド here および here に関する素晴らしいドキュメントを見つけました。しかし、生のVPSのスナップショットをrawイメージに変換することについては何も述べられていません。

ライブVPSバックアップにより適した方法はどれですか?生画像のスナップショットの変換は安全ですか?

スナップショットファイルとベースファイルが特定の状況でどのように動作するかについての詳細なドキュメントを入手できたら、非常に役立ちます。

スナップショットを変換する代わりに、ベースqcow2イメージをrawバックアップファイルに変換することもできます。したがって、コマンドフローは次のようになります。
1。スナップショットを作成
2。ベースqcow2をバックアップrawイメージに変換します
3。スナップショットの変更をベースイメージにコミットします
4。スナップショットを削除

私はこれを試してみましたが、5GBの小さなVPSで問題なく動作しました。しかし、VPSのサイズが大きい場合、エラーやVPSの破損の可能性はありますか?

前もって感謝します...

8
Bosco D'mello

足りないのは、スナップショットを作成する前にゲストファイルシステムを静止して、整合性を保つことです。これはvirsh domfsfreeze libvirtdを使用している場合。

たとえば、操作の順序は次のとおりです。

# Freeze guest filesystems
virsh domfsfreeze $VM_NAME

# Create snapshot
qemu-img create -f qcow2 -b $VM_NAME.qcow2 snapshot.qcow2

# Thaw guest filesystems
virsh domfsthaw $VM_NAME

# Take backup from snapshot
qemu-img convert -O raw snapshot.qcow2 /backup/backup.img

これにはqemu-guest-agent VMにインストールして実行します。ディストリビューションとインストールの選択に応じて、これが当てはまる場合とそうでない場合があります。

qemu-guest-agentも拡張可能です。スクリプトを追加して、特定のソフトウェアをサポートできます。たとえば、MySQLを一貫した状態にするためのサンプルスクリプトが含まれています。

11
Michael Hampton

バックアップ中に一時的なスナップショットを作成し、後でそれらをコミットする別のアプローチがあります。

# Create a temporary backup snapshot which records changes during backup
virsh snapshot-create-as vm backup-tmp --disk-only --atomic --quiesce --no-metadata --diskspec sda,file=/tmp/sda_temp.qcow2
# Now the main image is frozen and the changes are going into /tmp/sda_temp.qcow2

# Do your backup here
...

# Now we commit back data from temp snapshot into the main image
virsh blockcommit vm sda --active --pivot
# Remove the temporary snapshot file
rm /tmp/sda_temp.qcow2

詳細については、次を参照してください: https://wiki.libvirt.org/page/Live-disk-backup-with-active-blockcommit

1
Thuffir