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


9

実行中にqcow2ファイルのKVM 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.生の画像形式(.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コマンドに関するドキュメントが見つかりまし。しかし、彼らは生のイメージでライブVPSのスナップショットを変換することについて何も言及しませんでした。

ライブVPSバックアップにはどちらの方法が適していますか?生画像のスナップショットの変換は安全ですか?

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

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

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

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


2
これが、仮想マシンを論理ボリューム上に置くことが好きな理由の1つです。固有のスナップショットサポートがあります。
Halfgaar

回答:


12

唯一足りないのは、スナップショットを作成する前にゲストファイルシステムを静止して、整合性を確保することです。これ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-agentVMにをインストールして実行する必要があることに注意してください。ディストリビューションとインストールの選択に応じて、これが当てはまる場合とそうでない場合があります。

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


この答えが欠けている唯一のものは、バックアップ後のスナップショットの削除です:)
dyasny

2
@ BoscoD'mello非常に不良なハードドライブがない限り、1秒未満である必要があります。心配する価値はありません。
マイケルハンプトン

1
残念ながら、スナップショットは私にとってはうまくいきませんでした。しようとする virsh domfsfreeze $VM_NAMEと、ゲストファイルシステムでアクセスが拒否されました。私のゲストファイルシステムは暗号化されていますが、問題はありません。
コーダー、2017年

2
@ Edward_178118それは、ワークロードがほんの一瞬だけ中断されたままでいられるかどうかによって異なります。
マイケルハンプトン

2
@ Edward_178118レイテンシが非常に低いネットワーク操作でしょうか。私は問題になったことは一度もありません。
マイケルハンプトン

1

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

# 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
実行中のvmから取得したバックアップされたディスクが後で再び必要になった場合、どのように復元しますか?RAMの内容も復元に必要ではありませんか?
Adrian Zaugg
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.