Volsnap 25 イベントについて

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

今回は、ボリューム シャドウコピーを使用されている環境で発生するエラー イベントであり、特に多くお問い合わせをいただいているイベント ソース:VolSnap ID: 25 についてご紹介したいと思います。

シャドウ コピーの作成中に問題が発生し、次のシステムイベントが記録されることがあります。

**************************************************
Event Type: Error
Event Source: VolSnap
Event Category:None
Event ID: 25
Description:
The shadow copies of volume "VolumeName" were aborted because the diff area file could
not grow in time. Consider reducing the IO load on this system to avoid this problem
in the future.

-訳
シャドウコピーの記憶域を時間内に拡大できなかったために、ボリューム"VolumeName" の
シャドウコピーは削除されました。
システムIO負荷を減らすかまた は、シャドウコピーされていないシャドウコピーの
記憶域ボリュームを選んで下さい。
**************************************************

この Volsnap 25 のイベントは、Diff Area の拡張処理が失敗した場合に記録されるイベントです。
このイベントが記録された場合、それまでに取得したスナップショットのファイルが全て削除されます。

この問題の詳細について VSS の動作を含めて説明いたします。

- VSS の動作について

イベントの説明にあります Diff Area とは、ファイルへの書き込みなどによりボリュームへの変更処理が行われた際に、その変更が行われる前の状態を復元するためのデータを保存しておくファイルです。
Diff Area ファイルがないと、以前のバージョンを復元するためのデータを保存することができませんので、必然的に以前のバージョンを復元することができません。
そのため以前のバージョンの管理に必要不可欠な非常に重要なファイルです。

シャドウ コピーの設定を有効にしている状態で、ある時点でスナップショットを作成すると、[以前のバージョン] タブを使用して、スナップショット作成時のファイルの状態を復元することが可能ですが、これは、Diff Area ファイルと差分ファイルを基に実現されています。

具体的には、スナップショットを作成しますと、それまでの Diff Area ファイル内のデータが別の差分ファイルとして抽出され、同時に新たな Diff Area ファイルが作成されます。
その後、新しい Diff Area には引き続き、ボリュームへの変更が行われるたびに元のデータに復元されるための情報が保存されていきます。
スナップショット作成時のファイルの状態に戻す操作が行われた場合には、その操作を行った時点でのファイルの状態から、Diff Area ファイル内の変更履歴をさかのぼることで、スナップショット作成時の状態を復元しております。
さらにもう一世代前のスナップショットの状態に戻す場合には、直前のスナップショットまでさかのぼった後、さらに直近の差分ファイル(これは言い換えれば 1 世代前の Diff Area ファイルです)をさかのぼることで復元します。

※この仕組みについて図にしますと、以下のようなイメージとなります。

 -------------------------------------------
┌─────────────┐
│3 世代前のスナップショット       
└─────────────┘
  ↑
  │(差分ファイル 1)
  │
┌─────────────┐
│2 世代前のスナップショット     
└─────────────┘ 
  ↑
  │(差分ファイル 2)
  │
┌─────────────┐
│1 世代前のスナップショット     
└─────────────┘
  ↑
  │(差分ファイル 3)
  │
┌─────────────┐
│直前のスナップショット           
└─────────────┘
  ↑
  │(Diff Area ファイル)
  │
┌─────────────┐
│現在の状態               
└─────────────┘
現在の状態はリアル タイムで変更されていきますので、その変更分が随時 Diff Area に格納されます。
たとえば、2 世代前のスナップショットの状態に復元する場合、現在のボリュームの状態から、Diff Area ファイル、差分ファイル 3、差分ファイル 2 の順に変更履歴をさかのぼることでファイルを復元します。
-------------------------------------------

繰り返しとなりますが、Diff Area ファイルは非常に重要なファイルです。
このファイルが削除されたり不正な状態になりますと、以前のスナップショットの状態までさかのぼることができなくなるため、結果として以前のどの世代にも戻すことができなくなります。

- DiffArea ファイルについて

続いて、Diff Area ファイルの詳細な扱いについてご説明いたします。

Diff Area ファイルは、スナップショットが作成されたタイミングで新規に作成されますが、その時点では 300MB 程度(環境によりサイズは異なる場合があります)のファイルサイズとして作成されます。
その時点では実際に 300MB のすべての領域を使用しているわけではなく、ボリュームの変更情報を格納するためのバッファ領域として確保されているような状態となります。
その後、ボリュームへの変更が継続して行われますと、それに応じて Diff Area 内に復元のためのデータが格納されていきます。
このデータが積み重なり、初期サイズを超過する可能性がある場合、Diff Area のファイル自体を拡張する処理が行われます。
この拡張処理では、具体的には Diff Area のファイル サイズを300MB から 400MB などに拡張することになりますが、その処理が完了するまでの間に Diff Area ファイルの 300MBを使い切ってしまった場合、本来Diff Area に書き込まれるべき情報を格納する場所がなくなってしまいます。

この場合に Volsnap 25 が記録されることになります。

Diff Area の拡張処理は、通常の Diff Area への書き込み処理とは非同期で行われておりますため、拡張処理が完了するまでの間に Diff Area への書き込み処理が大量に行われると、先に Diff Area が一杯になってしまい、Diff Area への書き込みができなくなることになります。

これは、二つの処理が非同期で行われていることで、どうしても発生し得る現象となります。

また、この処理を同期的に行おうとした場合、Diff Area の拡張処理が完了するまでの間 Diff Area への書き込みを発生させない、つまり対象ボリュームに対する変更処理自体を待たせる必要があり、通常のファイル サーバー等としての機能を一時的に停止させるような大きな影響を与えることになると想定されます。
この現象が発生しますと、上述したイメージ図にてスナップショットを復元させるための基となる Diff Area ファイルをさかのぼることができなくなりますので、結果的にすべての世代に戻すことができなくなります。これまでに保存されていた差分ファイルは意味をなさなくなりますため、すべての差分ファイルが削除される動作となります。

- 対処するには?

最も重要なポイントは Diff Area の拡張処理が間に合わないことがあるという点になりますが、これは、I/O の頻度に大きく依存することになります。

シャドウ コピーの記憶域ボリュームと対象ボリュームが同じボリュームに設定されている場合に顕著に I/O が増加する傾向にありますが、これは具体的な要因としては
Copy-On-Write の影響があげられます。
対象ボリュームと記憶域ボリュームが同じボリュームに設定されている場合、Copy-On-Write など VSS に関連する書き込み処理が一つのボリュームに集中するため、対象ボリュームと記憶域ボリュームを異なるボリュームに設定する場合より Disk I/O の負荷が相対的に高くなります。

また、I/O が増加する要因として、ボリュームの断片化による影響も考えられます。
シャドウコピーの記憶域が割り当てられているボリュームの断片化が進んでいる際にこの影響を受けて拡張処理に時間がかかる可能性があります。
Diff Area ファイル自体は連続したディスク領域である必要があり、そのため Diff Area ファイルの拡張においても、既存の Diff Area ファイルから、さらに連続領域として確保が必要となります。
このため、拡張処理の際に場合によってはボリューム上のデータ ブロックの移動という最適化処理を行う必要があり、その分 Disk I/O が増加することがあります。
さらに、ボリュームの空き容量が少ない場合は、断片化が発生しやすくなり、その上最適化処理の処理時間も長期化するなど、より Disk I/O が増加するため、Volsnap 25 の発生頻度が高まります。

実際に弊社にお問い合わせいただく同様の事例では同じボリュームに設定されていることが原因である場合がほとんどです。もちろん、ディスク性能の劣化等、I/O 速度の問題などで、異なるボリュームでも発生する可能性はございますが、通常は問題ありません。

弊社では I/O 負荷の理由によりシャドウ コピーが削除される場合があることは認識しており、これを回避するためにシャドウ コピーの対象ボリュームと記憶域ボリュームを分けていただくことを推奨しております。

そのため、同じボリュームの構成にて現象が発生した場合には、異なるボリュームへの変更が最適な対処方法となります。
しかしながら、構成上異なるボリュームへの変更が難しい場合は、断片化の影響をできるだけ受けないよう、定期的に古いシャドウ コピーの削除をするなど空き容量を確保し、ボリュームの容量を使い切らないようにすることで、Volsnap 25 の発生確率を減らすこともご検討ください。

また重要なデータに関しては、こういった削除の可能性も踏まえ、シャドウ コピーだけでなくデータのバックアップを別途組み合わせてご使用いただくことも必要となります。

以下の Web サイトにてこの点も含めた注意点をご案内しておりますので、こちらも併せてご確認くださいますようお願いいたします。

共有フォルダーのシャドウコピーに関するヒント集
https://technet.microsoft.com/ja-jp/library/cc753975.aspx

(一部抜粋)
・シャドウ コピー用の記憶域には、異なるディスク上にある別のボリュームを使用する
ディスク上の記憶域のうちシャドウコピーされていない領域を選択します。
別のディスク上にある個別のボリュームを使用することで、I/O 負荷の上昇が
原因でシャドウ コピーが削除される可能性がなくなり、パフォーマンスが向上します。
使用頻度の激しいファイルサーバーではこの構成をお勧めします。

・ファイル サーバーのバックアップを定期的に実行する
共有フォルダーのシャドウコピーは定期的なバックアップの実行の代わりにはなりません。
データ保護のために、共有フォルダーのシャドウコピーだけでなく、バックアップ
ユーティリティ (たとえば、Windows Server 2008 または Windows Server 2008 R2 の
Windows Server バックアップ) も併用してください。

-- 参考情報--
VolSnap 33 が大量に出てしまう問題について
https://blogs.technet.com/b/askcorejp/archive/2009/06/05/volsnap-33.aspx

-- 参考情報--
Article ID: 925799
Error message when a Windows Server 2003-based computer has a high level of I/O activity:
"The shadow copies of volume Volume_Name were aborted because the diff area file could not grow in time"
https://support.microsoft.com/kb/925799/en-us
https://support.microsoft.com/kb/925799/ja (機械翻訳)