VSS System Writerが表示されずバックアップに失敗する

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

今回は、最近いただいたお問い合わせについてご紹介します。

- 現象
Windows Server 2008 および、Windows Server 2008 R2 で、System State のバックアップを行うとバックアップに失敗する。
vssadmin list writers コマンドにて VSS ライタの状況を確認すると"System Writer" が表示されていない。

VSS ライタ (アプリケーション ライタ) とは
https://blogs.technet.com/b/askcorejp/archive/2009/08/11/dpm-2007-sp1-hyper-v.aspx

"System Writer" が表示されない現象は、以下の要因があげられます。

主な要因について
=================================
1. ファイルのアクセス権が何らかの理由で失われている場合
2. ライターをホストするプロセス、または、COM+ Event System サービスが稼動していない場合
3. サービスのセキュリティ権限が何らかの理由で失われている場合
4. VSS ライターに関する初期化が何らかの理由にて失敗している場合

各要因の説明と対処方法は以下の通りとなります。

1. ファイルのアクセス権が何らかの理由で失われている場合
---------------------------------
ファイルのアクセス権やサービスのセキュリティ権限に問題がある場合、イベント ログに Microsoft-Windows-CAPI2 513 (または 512) イベントが記録されている可能性があります。

このイベントが発生している場合、技術情報 2009272 の対処方法を実施します。

技術情報 2009272 より抜粋
-----------------------
Takeown /f %windir%\winsxs\temp\PendingRenames /a
icacls %windir%\winsxs\temp\PendingRenames /grant "NT AUTHORITY\SYSTEM:(RX)"
icacls %windir%\winsxs\temp\PendingRenames /grant "NT Service\trustedinstaller:(F)"
icacls %windir%\winsxs\temp\PendingRenames /grant BUILTIN\Users:(RX)
Takeown /f %windir%\winsxs\filemaps\* /a
icacls %windir%\winsxs\filemaps\*.* /grant "NT AUTHORITY\SYSTEM:(RX)"
icacls %windir%\winsxs\filemaps\*.* /grant "NT Service\trustedinstaller:(F)"
icacls %windir%\winsxs\filemaps\*.* /grant BUILTIN\Users:(RX)
 
net stop cryptsvc
net start cryptsvc
-----------------------
上記、対処方法を実施後、vssadmin list writers コマンドを実施し、"System Writer" が表示されることを確認します。

System State backup using Windows Server Backup fails with error: System writer is not found in the backup
https://support.microsoft.com/kb/2009272/

2. ライターをホストするプロセス、または、COM+ Event System サービスが稼動していない場合
---------------------------------
System Writer は Cryptographic Services 内のコンポーネントとして動作していますので、Cryptographic Services が動作していない場合には System Writer も動作できません。
また、ライターと VSS との通信は COM 経由で行われますので、COM+ Event System サービスも動作している必要があります。

Cryptgraphic Services および Volume Shadow Copy サービスの起動を確認、起動していない場合は起動させ、"System Writer" が表示されることを確認します。

なお、サービスが起動しない、起動しているのに "System Writer" が表示されない場合、以下の対処を引き続き行います。

3. サービスのセキュリティ権限が何らかの理由で失われている場合
---------------------------------
Cryptgraphic Services および Volume Shadow Copy サービスが起動しない場合、サービスを実行するためのセキュリティ権限が何らかの理由で失われている可能性があります。

各サービスのセキュリティ権限を以下の方法で確認します。

コマンド プロンプトより、つぎのコマンドを実施し、時現在の設定を確認します。

sc sdshow cryptsvc
sc sdshow EventSystem

念のため、上記コマンドの実行時、出力結果をリダイレクトでテキスト ファイルに出力する方法等により、バックアップを取得しておきます。

実行例>
sc sdshow cryptsvc > cryptsvc.txt
sc sdshow EventSystem > EventSystem.txt

出力されたテキスト ファイルと以下の内容と比較します。
D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)

上記と異なる場合には、cs sdset コマンドを実行します。
実行例>
Sc sdset cryptsvc D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)
sc sdset EventSystem D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)

Cryptographic Service を再起動後に "System Writer" が表示されることを確認します。

4. VSS ライターに関する初期化が何らかの理由にて失敗している場合
---------------------------------
VSS ライターの初期化について少し解説します。
VSS Requestor よりバックアップを行う場合、VSS API GatherWriterMetadata を実行し、各 VSS Writerに関する Writer Metadata Document と呼ばれるメタデータ情報を取得する必要があります。
その際、VSSサービスは、System Writerを含むすべてのVSS Writerに対してIdentifyイベントを送り、各自のメタデータ情報を準備させ、参照できるように要求します。

.Net Frameworkが実装されている環境において、System Writerは独自のメタデータ情報を準備するために、%WinDir%\Microsoft.Net\Framework 配下のサブフォルダを列挙して処理を進める必要があります。
このフォルダにあるサブフォルダ数が 1,000 個以上存在する場合、システム実装上の制限によりSystem Writer がメタデータ情報を正しく準備できず、その結果、"System Writer" が表示されない現象が発生します。

 IVssBackupComponents::GatherWriterMetadata method
 https://msdn.microsoft.com/en-us/library/windows/desktop/aa382668(v=vs.85).aspx

 Overview of Backup Initialization - Writer Actions during Backup Initialization
 https://msdn.microsoft.com/en-us/library/windows/desktop/aa384577(v=vs.85).aspx

この現象を回避するには、次の対処を行います。

対処方法
以下に Microsoft.NET\Framework\v2.0.50727 を例に、Temporary ASP.NET Files フォルダを別の場所に移動する方法を紹介します。

1. Temporary ASP.NET Files フォルダの移動先となるフォルダを作成します。
   例 : "c:\ASPTEMP"

2. "C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files" と同じアクセス権を設定します。

3. "C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files" 内のフォルダ、ファイルを手順 1. で作成したフォルダに移動させるか削除を行います。

4. IIS の構成ファイル Web.config を開きます。

   C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\Web.config

5. Web.config に tempDirectory 属性を追加します。

   tempDirectory 属性の追加例:
   <compilation tempDirectory="c:\ASPTEMP">

6. IIS サービスを再起動します。

- 参照資料
 compilation 要素 (ASP.NET 設定スキーマ)
 https://msdn.microsoft.com/ja-jp/library/s10awwz0(v=VS.90).aspx

 How To Edit the Configuration of an ASP.NET Application
 https://support.microsoft.com/kb/815178/en-us
 https://support.microsoft.com/kb/815178/ja  (機械翻訳)

 IIS を再起動する
 https://technet.microsoft.com/ja-jp/library/cc758159(WS.10).aspx

参考までに、Windows Server 2003 でも、"System Writer" が表示されないという類似の事象が発生する場合があります。
この場合には OS が異なりますため上記の対応は利用できませんが、Windows Server 2003 では技術情報 940184 の対応方法があります。
Windows Server 2003 の場合には技術情報 940184 の対応をご検討ください。

 Windows Server 2003 ベースのコンピューターで "vssadmin list writers" コマンドを実行するとエラー メッセージ "エラー: 0x8000FFFF" が表示される
 https://support.microsoft.com/kb/940184/ja