ボリューム シャドウコピーの履歴が消える現象について

Windows テクノロジー サポートの奥原です。

ボリューム シャドウコピーを使用されている環境で、ボリューム シャドウコピーの履歴が消える現象が発生するときがあります。
また、この現象について弊社公開情報もいくつか確認でき、公開情報の多くは、Windows Server 2003 を中心に記載されていますが、Windows Server 2008, Windows Server 2008 R2 環境でも条件がそろった場合発生します。

まずは、ボリューム シャドウコピーの機能と履歴が消える現象についてご説明します。
シャドウ コピーは現在のボリュームの情報からの差分情報を Diff Area の領域に保持することで、以前の情報を保持しています。
この Diff Area に格納されている差分情報が履歴となり、復元時は、この履歴情報をさかのぼることで、ファイルを復元します。

Diff Area は、スナップショットが作成されたタイミングで作成されますが、その時点では一定のファイル サイズ (環境によりサイズは異なります) で作成されます。
作成された Diff Area は、すべての領域を使用しているわけではなく、ボリュームの変更情報を順次格納するためのバッファ領域として確保されます。
その後、ボリュームへの変更が継続して行われると、それに応じて Diff Area 内に差分情報が格納されていきます。
このデータが積み重なり、初期サイズを超過する可能性がある場合、Diff Area を拡張する処理が行われます。

この Diff Area の拡張処理で問題が発生し、差分情報が正しく書き込めないことがあります。
差分情報が正しく書き込めなかった場合、履歴情報をさかのぼることができなくなり、格納している差分情報はすべて使用できなくなります。
この結果、使用不能となった差分情報が削除され、ボリューム シャドウコピーの履歴が消える現象が発生します。

Diff Area 拡張処理での問題として多く寄せられますのが、以下の 2 点となります。

 ・Diff Area 拡張処理が完了するまでに Diff Area の領域が使い切ってしまった。
  この場合、イベントログ上に Volsnap 25 のエラーイベントが記録されます。

 ・Diff Area 拡張処理を行った際に処理が失敗した。
  処理が失敗する多くの原因は、システムリソース不足により失敗することが報告されています。
  この場合、イベントログ上に Volsnap 20 のエラーイベントが記録されます。

ボリューム シャドウコピーの履歴が消える現象の発生を少なくする方法としては、以下があげられます。

1. あらかじめ Diff Area の初期サイズを増やしておく
========================================
ボリューム シャドウコピーのご使用環境によって使用する領域は異なりますが、Diff Area の初期サイズを増やしておくことで、上述の問題が発生する頻度が低下します。

Diff Area の初期値の拡張について
----------------------------------------
Diff Area の領域を変更するには、以下のレジストリ値を編集します。
Diff Area の初期値は、次回シャドウ コピー実行のタイミングで反映されます。

- MinDiffAreaFileSize の変更手順
------------------------------------
1. [スタート] - [ファイル名を指定して実行] をクリックし、regedit と入力し、OK ボタンをクリックします。

2. 以下のレジストリキーをご確認いただき、クリックします。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\VolSnap

3. メニューバーより、[編集] - [新規] を選択し、[DWORD 値] をクリックします。

4. MinDiffAreaFileSize と入力し、Enter キーを押します。

5. 続けて、[編集] - [修正] をクリックします。

6. 設定する Diff Area のサイズ※を入力し、[OK] をクリックします。
※デフォルトの設定は 300 MB となり、最大値は 3 GB となります。

7. メニューバーより、[ファイル] - [レジストリエディタの終了] で終了します。

- 参考資料
MinDiffAreaFileSize
https://msdn.microsoft.com/en-us/library/bb891959(VS.85).aspx#mindiffareafilesize

技術情報: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/ja (機械翻訳)

  技術情報:925799 は、Windows Server 2003 を対象にした情報ですが、
  レジストリ値 MinDiffAreaFileSize は Windows Server 2008 以降でも有効です。
  

2. 取得するボリューム シャドウコピーの履歴 (世代) 数を減らす
========================================
取得可能なスナップショットの世代数は、最大で 64 となりますが、世代数が多いとDiff Area の領域が大きくなり、環境によってはリソースに関連した問題が発生する場合がございます。
世代数は以下のレジストリ値により変更が可能です。

世代数の変更について
----------------------------------------
スナップショットの世代数を変更するには、以下のレジストリ値を編集します。
スナップショットの世代数は、コンピュータの再起動することで反映されます。

- MaxShadowCopies の変更手順
------------------------------------
1. [スタート] - [ファイル名を指定して実行] をクリックし、regedit と入力し、OK ボタンをクリックします。

2. 以下のレジストリキーをご確認いただき、クリックします。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\VSS\Settings

3. メニューバーより、[編集] - [新規] を選択し、[DWORD 値] をクリックします。

4. MaxShadowCopies と入力し、Enter キーを押します。

5. 続けて、[編集] - [修正] をクリックします。

6. 設定する世代数※を入力し、[OK] をクリックします。
※最大値は 64 となります。

7. メニューバーより、[ファイル] - [レジストリエディタの終了] で終了します。
8. コンピュータを再起動します。

補足
Diff Area の設定値の確認方法
========================================
現在の Diff Area に割り当てられた値は、vssadmin list shadowstorage コマンドにて
ご確認いただけます。

実行結果例)
シャドウ コピーの記憶域関連付け
   "/For" ボリューム: (E:)\\?\Volume{xxxxxxxx-xxxx-xxxx-xxxx-xxxx}\
   シャドウ コピーの記憶域ボリューム: (E:)\\?\Volume{xxxxxxxx-xxxx-xxxx-xxxx-xxxx}\
   シャドウ コピーの記憶域の使用領域: 3.078 MB
   シャドウ コピーの記憶域の割り当て領域: 500 MB
   シャドウ コピーの記憶域の最大領域: UNBOUNDED  

vssadmin list shadowstorage コマンドの結果で表示される項目について
----------------------------------------
"/For" ボリューム : ボリューム シャドウコピーの対象ドライブ
シャドウ コピーの記憶域ボリューム : Diff Area の格納先
シャドウ コピーの記憶域の使用領域 : 現在使用している Diff Area の使用容量
シャドウ コピーの記憶域の割り当て領域 : 現在割り当てられている Diff Area のサイズ
シャドウ コピーの記憶域の最大領域 : Diff Area サイズの変更で割り当てた最大サイズになります。(既定では、無制限:UNBOUNDED)

参考情報
Volsnap 25 イベントについて
https://blogs.technet.com/b/askcorejp/archive/2012/02/22/volsnap-25.aspx
Volsnap 25 イベントの解説と、VSS の動作について詳しく説明されております。