Hyper-V ホスト OS からの仮想マシン バックアップ失敗後、失敗の原因を取り除いた場合でもバックアップに再度失敗する

こんにちは、Windows プラットフォーム サポートの鎌滝です。

今回は Hyper-V 環境のホスト OS からの VSS を利用した仮想マシン バックアップ失敗のお話です。
バックアップが仮想マシン内部の VSS Writer の影響で失敗した後、失敗の原因を取り除いたにもかかわらず再度バックアップが失敗する事象についてご紹介いたします。

バックアップ失敗直後の再バックアップが 1 回のみ失敗する事象のため、通常運用で実施している手順でのバックアップが何らかの原因で失敗してしまった後、失敗した原因の対処をしたはずなのに直後のバックアップがまた失敗してしまったとき、もう一度バックアップをリトライすると成功する可能性があります。

このブログを読んでいただいているという状況から、既に対処後のバックアップに失敗した後の可能性も高いと思いますので、次回以降のご参考としていただければ幸いです。

以下に詳細をお伝えいたします。

1. 現象


データベース製品などが稼働している仮想マシン環境では、バックアップ時にバックアップ データの整合性を保つために、VSS Writer を利用してスナップショットが作成されます。

ホスト OS から仮想マシンをバックアップした場合、ホスト OS の Hyper-V VSS Writer から仮想マシン内部の VSS にスナップショットの作成要求が送られ、仮想マシン内部の VSS Writer を利用したスナップショットが作成されます。

何らかの原因により、仮想マシン内部の VSS Writer を利用したスナップショットの取得に失敗し、ホスト OS からの仮想マシン バックアップが異常終了した場合、異常終了後にスナップショットの取得に失敗した原因を取り除いても、次のバックアップに失敗いたします。

ホスト OS のアプリケーションのイベント ログに、以下のログが記録されます。
このログは、初回の仮想マシン内部の VSS Writer の影響で失敗したとき、失敗の原因を取り除いた後のバックアップが失敗したときの両方に記録されます。

ログの名前: Application
ソース: VSS
イベント ID: 8229
レベル: 警告
説明:
エラー 0x800423f4, ライターで一時的でないエラーが発生しました。バックアップ処理を再試行しても、
おそらくエラーは再発します。
により、VSS ライターはイベントを拒否しました。イベントの処理中に VSS ライターがライター コンポーネントに加えた変更は、要求側では利用できません。 VSS ライターをホストしているアプリケーションからの関連イベントについては、イベント ログを参照してください。
操作:
PrepareForSnapshot イベント
コンテキスト:
実行コンテキスト: Writer
ライター クラス ID: {66841cd4-6ded-4f4b-8f17-fd23f8ddc3de}
ライター名: Microsoft Hyper-V VSS Writer
ライター インスタンス ID: {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
コマンド ライン: C:\Windows\system32\vmms.exe
プロセス ID: xxxx

 

なお、2 回目の失敗以降に再度バックアップを取得すると、そのバックアップは成功いたします。

 

2. 原因


Hyper-V 環境でホスト OS からのバックアップを取得した場合、仮想マシン内の統合サービスの 1 つである vmicvss サービスが仮想マシン内のスナップショット作成処理を行います。

初回の仮想マシン内部の VSS Writer が原因でスナップショットに失敗する場合、vmicvss サービスが呼び出す内部関数内で発行した PrepareForBackup の処理は、VSS Writer がエラー 0x800423f4 を返したことにより、後続のスナップショットの作成処理を行わずに、Hyper-V VSS Writer にもエラー 0x800423f4 が返されます。

その際に PrepareForBackup 中の VSS Writer からエラーが返されるより前の処理により、スナップショットの内部カウント値 (仮想マシン内でスナップショットが作成されるボリューム数のカウンター) がカウント アップされますが、エラー終了時に本カウント値をクリアする処理が存在しないため、本処理の終了後もスナップショットの内部カウント値が維持されます。

その後、失敗の原因を取り除いたのちに、再度バックアップを取得した際に、この残されたスナップショットの内部カウント値を利用し、再度仮想マシン内のボリューム数分カウント アップを行うため、スナップショットの内部カウント値は (仮想マシン内のボリューム数)× 2 となりますが、実際に作成されるスナップショットは仮想マシン内のボリューム数分しか存在しないために、残りの数のボリュームの作成完了を待ち、タイムアウトが発生することが原因で、Hyper-V VSS Writer がエラーとなります。

そのため、VSS を利用したホスト OS からの仮想マシン バックアップ操作も失敗いたします。

なお、PrepareForBackup の処理がスナップショットの作成まで進み、タイムアウトで失敗した場合は、スナップショットの内部カウント値のクリア処理が行われますので、次回以降のバックアップは問題なく取得可能です。

 

3. 回避策


本事象は、vmicvss サービスが呼び出す PrepareForBackup が仮想マシン内部の VSS Writer のエラーで終了した場合に、スナップショットの内部カウント値のクリアを行わないことが原因となります。

スナップショットの内部カウント値のクリアは vmicvss サービスの再起動でも実施されます。また、仮想マシンの再起動も同様に有効な対処の 1 つとなります。

そのため、仮想マシン内部の VSS Writer が原因でホスト OS からのバックアップが失敗した場合は、次回のバックアップの実行前に以下の手順にて手動で vmicvss サービスの再起動を実施ください。

本手順はバックアップの再実行前に仮想マシン内部より実行します。

vmicvss サービスの再起動手順
====================

1. 仮想マシン OS にログオンします。

2. 管理者権限のコマンド プロンプトから以下のコマンドを実行します。

> net stop vmicvss

> net start vmicvss

 
本ブログが少しでも皆様のお役に立てば幸いです。