仮想マシンのバックアップ
Vaporは、仮想マシンのディスクイメージおよび状態をデータ破損、ハードウェア障害、または管理上のエラーから保護するための組み込みメカニズムを提供します。システムはフル、増分、および差分のバックアップトポロジをサポートし、Changed Block Tracking (CBT) とGuest Agentの同期を利用してアプリケーションの一貫性とストレージ効率を保証します。
1. バックアップトポロジ
フルバックアップ
フルバックアップは、仮想ディスクイメージ(.qcow2)全体を最初から最後までコピーし、依存関係のない独立した復元ポイントを作成します。シンプルである一方、大きなストレージ容量と実行時間を必要とするため、大規模なデータセットに対する頻繁な実行には適していません。
増分バックアップ (Changed Block Tracking - CBT)
増分バックアップは、Changed Block Tracking (CBT) 技術を使用して、前回のバックアップ以降に変更されたディスクセクターのみを監視します。
- ダーティビットマップ: Vaporは、QCOW2イメージ内の変更されたブロックを追跡する永続的な「ダーティビットマップ」を作成および維持します。
- 効率性: 増分バックアップの実行中、Vaporはダーティビットマップを照会し、変更されたブロックのみをコピーします。これにより、バックアップ時間とストレージ容量が大幅に削減されます。
- 復元要件: 増分バックアップの復元には、最初のフルバックアップ(ベースライン)と、それ以降のすべての増分チェックポイントデータが必要になります。
2. 高度な統合と一貫性の確保
サードパーティのバックアップソリューション(エンタープライズエージェントなど)やカスタム自動化スクリプトとの連携のために、Vaporはハイパーバイザー制御のエンドポイントを公開しています:
ファイルシステムクワイエス(静止化:FSFreeze & FSThaw)
アクティブなデータベーストランザクションや高負荷な書き込み処理中においてファイルシステムとアプリケーションの一貫性を保証するため、VM内のQEMU Guest Agentを使用します:
- FSFreeze: バックアップチェックポイントをキャプチャする前に、
POST /virtualization/computes/{uuid}/guest-agent/fsfreezeへの呼び出しにより、ゲストOSのキャッシュバッファをディスクにフラッシュし、ファイルシステムI/O処理を一時的に凍結(フリーズ)します。 - FSThaw: ハイパーバイザーがチェックポイントを登録した直後に、
POST /virtualization/computes/{uuid}/guest-agent/fsthawへの呼び出しによりファイルシステムを解凍(アンフリーズ)し、ゲストOSが書き込みを再開できるようにします。この処理は通常1秒未満で完了するため、ゲストアプリケーションがタイムアウトすることはありません。
NBD (Network Block Device) プルモードバックアップ
Vaporは、NBD (Network Block Device) プロトコルを使用してネットワーク経由で生仮想ディスクを公開します。これにより、外部のバックアップシステムがホストCPUに負荷をかけることなくブロックを直接読み取ることができます:
- セッションライフサイクル: NBDセッションは
POST /virtualization/computes/{uuid}/backups/nbd/startを介して初期化され、incremental_from_checkpoint、nbd_port、およびnbd_listenなどのパラメータを受け入れます。 - ダイレクトストリーム: NBDサーバーはホスト上の指定されたポート(例:
10899)にバインドし、VMディスクの生のブロックストリームを公開します。 - セッション終了: バックアップ終了時、セッションは
POST /virtualization/computes/{uuid}/backups/nbd/stopを使用して安全にクローズされます。
3. TUSプロトコルによるレジューム可能なアップロード
大規模なVMバックアップ(数ギガバイトの .qcow2 ファイル)をインポートまたはアップロードするために、Vaporは TUS (Resumable Upload) プロトコル v1.0.0 を実装し、ネットワークの切断を安全に処理します。
- 初期化:
POST /virtualization/computes/backups/uploadにUpload-LengthおよびUpload-Metadataヘッダー(base64でエンコードされたプロパティ:filename、vm_name、backup_type、compression、encryption、description、retention_days)を指定して要求を送信します。 - データ転送:
PATCH /virtualization/computes/backups/upload/{upload_id}を使用して、Upload-Offsetを指定しながらバイナリチャンクをストリーミングします。 - 確定:
POST /virtualization/computes/backups/upload/{upload_id}/completeにより、アップロードされたファイルを確定した復元ポイントとして登録します。
4. UIおよびAPIによるバックアップ操作
Web UIでのバックアップ作成
- Virtualization > Virtual Machines に移動し、対象の仮想マシンインスタンスを選択します。
- Backups タブを開き、Create Backup をクリックします。
- 設定を構成します:
- Mode: Full または Incremental(既存のCBTベースラインチェックポイントが必要)を選択します。
- Storage Pool: バックアップアーカイブを保存するターゲットストレージプールを選択します。
- FSFreeze: ファイルシステムレベルのトランザクション整合性を強制するために有効にします。
- Retention: バックアップが自動削除されるまでの保持日数(ライフサイクル)を定義します。
- Submit をクリックしてバックアップジョブを送信します。
APIエンドポイントリファレンス
- バックアップ一覧の取得:
GET /api/v1/virtualization/computes/{id}/backups - バックアップの作成:
POST /api/v1/virtualization/computes/{id}/backups - バックアップの削除:
DELETE /api/v1/virtualization/computes/backups/{backup_id} - バックアップの復元:
POST /api/v1/virtualization/computes/restore(backup_id、new_vm_name、overwriteを受け入れ) - バックアップのインポート:
POST /api/v1/virtualization/computes/backups/import(ホスト上に存在するバックアップパスを登録)