KVMのVMの定期的オンラインバックアップの関連技術情報が少なかったため以下整理します。
- Snapshot(特定時点のVMイメージ保持の仕組み)を利用してVMを動かしたままバックアップ
- 差分バックアップの効率化とファイル分割のオーバヘッドやリスクとのトレードオフを考慮
Snapshotの分類
- 外部Snapshot(こちらを利用)
- Snapshot作成時点で元のVMイメージファイルを固定し、新しく別のイメージファイル(下記ではVM名-snap.qcow2)にそれ以降の変更差分を記録
- virsh snapshot-create-as --domain VM名 Snapshot名 "説明" --disk-only --diskspec vda,snapshot=external,file=VM名-snap.qcow2 --atomic
- 内部Snapshot
- 元と同じVMイメージファイル内にSnapshot作成以降の変更差分をそのまま記録
分割されたイメージファイルの統合
- blockcommit(こちらを利用)
- 新しいイメージの変更差分を古いイメージに反映して統合
- virsh blockcommit VM名 vda --active --verbose --pivot
- blockpull
- 古いイメージを新しいイメージに反映して統合
バックアップ方針
- 管理を容易にするためイメージファイルを分割しない場合(こちらで運用中)
- バックアップ前に外部Snapshotを作成し、固定された元イメージファイルをコピー
- バックアップ後に外部Snapshotで新たに作成された差分イメージをblockcommitで元イメージに反映し、外部Snapshotを削除
- イメージファイルを分割し効率化する場合:ベース(A)←差分(B)に分割
- バックアップ前に外部Snapshotで更新(C)を作成
- 差分(B)が一定サイズ以上なら、blockcommit(--base A --top B)でベース(A)に反映して(A)をバックアップコピー後、ベース(A)←(Bに代わり)差分(C)とし(B)削除
- スクリプト作成上はこの時点で差分(B)と(C)のファイル名が都度交代する点に注意
- さもなければ差分(B)をバックアップコピー後、更新(C)をblockcommitで(B)に反映し削除