DPM 2007 SP1 の Hyper-V バックアップの仕組み

こんにちは。Windows テクノロジー サポートの石井です。

DPM 2007 SP1 以降、Hyper-V の仮想マシンをバックアップできるようになりました。DPM をご利用いただいている皆様が運用、管理を行う上で知っておくとトラブルシューティングに何かと有用な、Hyper-V の VM のバックアップの仕組みを図解付きでご説明したいと思います。

スナップショットについて

まずはじめに、VSS のスナップショットの機能について、簡単にご説明しておきます。

あるアプリケーションが使用中のファイルがあり、バックアップソフトがこのファイルのバックアップを取るものとします。スナップショットを使わないバックアップだと、以下のような状況になります。

- アプリケーションがファイルに排他ロックをかけていると、ファイルを開くことが出来ない為、バックアップに失敗してしまう。

- バックアップにおいて読み取り中にファイルが変化するとバックアップ対象のファイルに首尾一貫性が無くなってしまうので、バックアップ中はアプリケーションがファイルに変更を行うことが出来ない。

- 遅延書き込み (※ 1) の動作の為、バックアップ開始時に物理メモリ上に残っている情報はファイルに反映されておらずに消失してしまう。

(※ 1 ファイル変更情報をメモリにある程度ためておき、一度にディスクに書き込むことでディスク I/O 頻度を減らし、パフォーマンスを向上する仕組みです。)

上記の状況を回避するため、 DPM はボリューム シャドウコピー サービス (VSS) と呼ばれる Windows の機能の中のスナップショットの機能を使用してバックアップを行っています。

スナップショットとは、名前の通り、作成時のファイルの静止状態を仮想的に作成する機能で、バックアップソフトはスナップショットの静止状態からバックアップを行い、アプリケーションはバックアップ中も引き続きファイルへ変更を行うという、バックアップの為の瞬間的な情報の保持と読み取り、アプリケーションによるファイルへの書き込みの両立を実現しています。アプリケーションによっては、さらにこの仕組みを補助する仕組みが実装されていて、物理メモリの内容をディスクに一度フラッシュしてくれるものもあります。(詳細は後述します。)

VSS ライタ (アプリケーション ライタ) とは

上記の通り、バックアップを行う対象のアプリケーションごとに、バックアップを採取するタイミングで、有効なファイルの状態を準備してあげる仕組みを実装しているものがあります。これが、VSS のアプリケーション ライタです。

具体的には、以下のようなことをやっています。

1. 物理メモリ上にキャッシュされているファイルをディスクにフラッシュ (書き出す) する。

2. スナップショットが作成し終わるまで、アプリケーションのディスクへの書き出しをフリーズ (停止) させる。

3. スナップショットが作成し終わると、すぐにアプリケーションの書き込みなどの動作を再開します。

(※ 一般的にスナップショットの作成完了までは数秒程度しかかかりません。)

3 の時点で、スナップショットはもう作成しているので、それ以降の変更はバックアップされるファイルに影響しません。

上記のアプリケーション ライタは、レジストリやシステム状態などの Windows において標準的に存在するものに対しても存在しますし、IIS、Exchange Server、SQL Server や MOSS などにも存在し、独自の動作をしています。それぞれが、VSS からの呼び出しに応答し、それぞれのアプリケーションのファイルを準備することでバックアップを行うことが出来るわけです。

Hyper-V についても、VSS ライタが存在します。この場合、Hyper-V が使うファイルというと、VHD (仮想ハードディスク) や、VM のスナップショットや設定ファイルとなります。

Hyper-V のバックアップの仕組み

Hyper-V のバックアップは多段階にわたりますが、大きく以下の2つに分類できます。

・Hyper-V の VM のスナップショットを作成 (データ転送の前準備)

・バックアップ データの転送

それぞれの詳細について、以下に説明します。

Hyper-V の VM のスナップショットを作成 ( データ転送の前準備)

バックアップを取得する VM の情報を転送する前にスナップショットを作成する必要があります。これは以下の順序で行われます。

1. DPM サーバーが、Hyper-V ホスト上の DPM エージェントを起動させ、バックアップを開始するように命令を送信します。

2. DPM エージェントは、Hyper-V ホスト内の VSS に働きかけます。

3. VSS は、Hyper-V のバックアップにあたって、スナップショットを作るように準備を進めるように命令します。

さて、ここで、Hyper-V の VM のバックアップが 2 種類あることをご紹介しなければなりません。

まずは、VM のオフライン バックアップをご紹介します。

オフライン バックアップ (“Backup Using Saved State”)

 

4a . VM を [保存] の状態にします。VM を一時停止して、VM が使っている物理メモリの情報を、いったんハードディスクに書き出します。 (Hyper-V の管理を行う為に使用する、[Hyper-V マネージャ] で VM を [保存] するのと全く同じ動作です。)

これにより、VM が使っているデータは全てファイルに書き出されるので、このスナップショットを作成し、バックアップを取るだけでよい、という状態になります。

VM を一時的に停止させることから、オフライン バックアップと呼ばれています。

メリットとしては、Linux や Windows Server 2000 など、VSS を実装していないゲスト OS のバックアップが取れることです。

デメリットとしては、[保存] している最中は VM が応答しなくなるため、ユーザーからアクセスできない状態となることです。もっとも、[保存] 完了後はすぐに起動されてくるので、それほど長い時間ではありません。(物理メモリのサイズやディスクのパフォーマンスなどの環境によりますが、私が体感したものでは長くても 5 分ぐらいです。)

オンライン バックアップ (“Backup Using Child Partition Snapshot”)

現時点では Windows Server 2003 と Windows Server 2008 のゲスト OS のみ、オンライン バックアップという選択肢があります。

オンライン バックアップは、上述したオフライン バックアップと違い、バックアップの準備のために VM を一時停止させる必要がありません。

以下に、引き続きオフライン バックアップではなく、オンラインバックアップを行った場合の動作を説明します。

4b. 3 の続きです。Hyper-V ホスト上の Hyper-V ライタは、オンライン バックアップが有効なゲスト OS の内部に対して、[Hyper-V 統合コンポーネント] を通じて働きかけます。

5. Hyper-V 統合コンポーネントは、ゲスト マシンの中の VSS に、ゲストマシン内部の VSS ライタを起動させて、ゲスト マシンの中身のファイルの状態を首尾一貫したものに保つように働きかけます。

6. VM 内部の VSS のスナップショットを作成するため、VM 内の各アプリケーション ライタ (レジストリ、システム情報に加えて、SQL や Exchange Server など) に働きかけて準備をします。

とてもややこしいですが、ゲスト OS の中身をバックアップするため、まずはゲスト OS の中身のスナップショットを取って首尾一貫性のある状態にしてから、ホスト OS のスナップショットを取る、という段階的な動きをしているわけです。これが全て成功すると、はじめてオンライン バックアップの準備が可能です。

オンライン バックアップのメリットは、何より、VM の停止が一切発生しないことから、24 時間停止させたくないサーバーのバックアップが可能なことです。

デメリットは、ゲスト OS が VSS に対応している必要があることから、Windows Server 2003 と 2008 にのみ対応していることと、ゲスト OS 上のアプリケーションの VSS ライタ 1 つの異常でもバックアップの準備に失敗することです。

バックアップ データの転送

上記により、Hyper-V の VM に対してスナップショットが作成され、オンライン/オフラインバックアップの準備が終わると、DPM エージェントが DPM サーバーにファイルを送信します。このときの Hyper-V のバックアップのファイル転送の仕組みを説明します。

既に蓄積している変更差分を送ってしまうだけの、通常のファイルや、SQL、Exchange の データベースのバックアップとは異なり、Hyper-V の高速完全バックアップについては整合性チェックと類似したブロック レベルでのレプリカと保護対象の VM とのデータの照らし合わせを行って、変更差分をバックアップのタイミングで算出する必要があります。

Hyper-V VM の高速完全バックアップの動作の概要としては以下となります。

1. 高速完全バックアップ開始後、DPM サーバー側においては、DPM が保持している VM のレプリカ(以前のバックアップ) の情報を最初からブロック単位で順番に読み出します。

2. エージェントは、VM の情報を最初からブロック単位で順番に読み出します。

3. エージェント側は、2 で読み取ったそれぞれのブロックに対して、一意の値であるチェックサムと呼ばれる情報を算出し、DPM サーバーに送信します。

4. DPM サーバー側は、1 で読み取ったそれぞれのブロックのチェック サムを作成し、3 で送られたエージェント側のチェック サムと比べて、値が異なるか確認します。

5-1. チェック サムに差異がある場合、そのブロックは新しい情報を保持しているものとなりますので、そのブロックの情報をエージェントから DPM サーバーに送信します。送信されたブロック情報は、DPM サーバー上でレプリカに反映されます。

5-2. 差異が無い場合、そのブロックについてはアップデートが不要な為、送信しません。

6. 次のブロックについて順次 2 ~ 5 を繰り返し、VM の情報全てを照らし合わせます。全ての情報を送りきると、DPM サーバーにおいて、レプリカの回復ポイントが作成されてバックアップが完了します。

上記動作がもたらす結論は以下です。

1. Hyper-V のバックアップにおいては、保護対象の VM と DPM サーバー上のレプリカの一度全ての読み出す必要がある為、I/O 負荷は比較的大きい。また、ブロック単位のチェックサム算出分の CPU 負荷もかかるため、他のデータ ソース (ファイルサーバーや、SQL Server のデータベースなど) よりも負荷の大きい処理となる。

2. 転送されるデータとしては、バックアップ中の VM のチェックサムの情報の少量のトラフィックと、VHD のブロック レベルの変更差分となる。

3. DPM サーバー上で変更される容量は、VM の VHD のブロック レベルの変更差分のみとなる。

トラブルシュートについて

全てを網羅することは出来ませんが、Hyper-V のバックアップ エラーのトラブルシュートに上記の基本動作を当てはめると、例えば以下のような対応が出来ます。

1. 同一の Hyper-V ホスト上のバックアップ全てが失敗するようなら、Hyper-V ホスト上のイベントログから Hyper-V、 VSS、Volsnap などのエラーがないか確認してみたり、Hyper-V ライタ (vmms.exe) を再起動させることで、vmms.exeの異常ではないかどうか確認します。(※ Hyper-V ライタの再起動は、Hyper-V ホストにてコマンド プロンプトを管理者権限で開き、“net stop vmms” に続いて、”net start vmms” を実行します。)

また、可能であればオンライン バックアップからオフライン バックアップに変えてみて、VM を一時停止してもいい時間にバックアップを取得します。(オンライン バックアップを行っているサーバーをオフラインバックアップに切り替える手順は後述する参考情報をご確認下さい。)

2. 単独の VM のバックアップのみ失敗する現象が出た場合は、上記のステップ 6 や 7 で失敗している可能性があるため、ゲスト OS 側のイベント ログを確認します。

3. データの転送中に失敗する場合、バックアップの準備自体は成功しているので、上記の VSS のエラーではなく、通信切断などが考えられます。DPM サーバーと Hyper-V ホスト側でのイベント ログや DPM サーバーのエラーを確認してみることが有効です。

4. 複数の Hyper-V ホストからのバックアップに失敗する場合、DPM サーバーと保護対象の通信状態や DC との通信エラーを疑います。

参考情報:

オンライン バックアップの制約は他にも以下があります。Hyper-V の VSS ライタは、以下を自動的に判定し、可能な場合は必ずオンラインバックアップを既定としています。

A. Hyper-V の統合サービスがインストールされている。

B. VM 内にダイナミック ディスクが存在しないこと。

C. VM の全てのボリュームが NTFS でフォーマットされていること。

D. VM の NTFS ボリュームの全てが 1 GB 以上の容量で、かつ 300 MB 以上の空き容量があること。(VSS の制限事項です。)

E. VM 内のシャドウ コピーの以前のバージョンの機能が無効化されているか、同一のボリュームに対して設定されている。

F. VM が実行中である。

※ オンライン バックアップが可能な VM について、意図的にオフライン バックアップを行うのであれば、以下の手順で VM ごとに設定を行って下さい。

1. Hyper-V ホストにログオンします。

2. [Hyper-V マネージャ] を開きます

3. バックアップに失敗する VM をウインドウの中央から探し、[右クリック] – [設定] を選びます。

4. [<VM 名> の設定] ウインドウが開きますので、左ペインの “統合サービス” をクリックします。

5. 右側の “バックアップ (ボリューム スナップショット)” のチェックをはずし、[OK] をクリックします。

(上述したとおり、バックアップ開始時には数分間 VM が停止しますのでご注意下さい。)

DPM 2007 を利用して、Hyper-V の VM のバックアップを行うには、DPM 2007 SP1 が必要です。

DPM 2007 SP1 の入手やインストールについては、以下のブログ コンテンツを参照してください。

DPM 2007 SP1 のインストール ステップ バイ ステップ

https://blogs.technet.com/askcorejp/archive/2009/08/11/dpm-2007-sp1.aspx

DPM の構築手順や、Hyper-V の保護環境の構築についての公式資料は以下となります。

System Center Data Protection Manager 2007 (DPM) 技術資料

https://technet.microsoft.com/ja-jp/dpm/bb931334.aspx

“System Center Data Protection Manager 2007 実践ガイド” をダウンロードしてください。

次の DPM のトピックは、Hyper-V のバックアップを行うにあたっての推奨される更新プログラム一覧です。