ボリューム シャドウ コピー サービス (VSS) について

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

本ブログでは、ボリューム シャドウコピー サービス(以下、VSS) についてご紹介いたします。
VSS は Windows において、バックアップの作成や “以前のバージョン” 機能をはじめとする様々な役割を支える重要なテクノロジーです。
弊社では VSS に関連したお問い合わせも多くいただいておりますので、VSS に関して基本的な仕組みとよくあるお問い合わせ事例についてまとめ、公開をさせていただきます。
本ブログが皆様のお役に立てば幸いです。

■ VSS とは?

.
ボリューム シャドウ コピー サービス(VSS)は、ボリュームの静止点であるシャドウ コピーを作成するサービスです。通常、サービスは停止しており、必要に応じて呼び出され、シャドウ コピーを作成します。
このシャドウ コピーをもとにバックアップを作成したり、そのまま保管して古いファイルを復元できるようにするなどの用途で利用されます。シャドウ コピーのことを ”スナップショット” と呼称する場合もございますが、本公開情報では表現をシャドウ コピーに統一します。

■ シャドウ コピーの実体

.
シャドウ コピーとは、実体としては「静止点を確保したタイミングからの差分データ」です。
シャドウ コピーを作成すると、ボリューム全体が一旦静止し、Diff Area と呼ばれる差分データの格納領域が作成されます(下図の②)。つまりこの時点では、差分データを格納するための空の箱が確保された状況であり、この空の箱がシャドウ コピーの実体となるファイルです。ここから、ファイルの更新等によりボリューム内のデータに変更箇所が生じると、変更前のデータを Diff Area に退避させ、格納します(下図の③)。

このように、ボリューム内のデータに変更が発生すると、その都度変更前のデータを Diff Area へ退避してゆくので、静止点を確保したタイミングへファイルを戻したい場合は、Diff Area に保存された以前のデータを使って復元を行うことができます。
ここで、次のシャドウ コピーを作成した場合の動作についても説明をしておきましょう。次のシャドウ コピーを作成すると、これ以降の差分データはこの Diff Area には退避されなくなり、Diff Area は 1 世代前のシャドウ コピーとして確定します (下図の④~⑤)。確定と同時に新たな Diff Area が作成され、以降にデータ更新が発生した場合は、この新 Diff Area にデータが退避されます(下図の⑥)。

この状況でさらにボリューム内のデータに変更が生じた場合 (下図の⑦~下図の⑧)、これまでに待避していなかった箇所への変更が発生した場合は、差分データを Diff Area へ退避させますが、すでに退避したことのある個所への変更であれば、差分データの待避は行われません。

このようにして退避した差分データを確定させ、新たな Diff Area に最新の変更データを退避していくことによりシャドウ コピーは複数の世代を管理することができ、復元したいタイミングのシャドウ コピーを利用して過去のファイルを復元することが可能です。
通常、シャドウ コピーを作成する際に Diff Area を意識する必要はありませんが、シャドウ コピーの実体としては「静止点を確保したタイミングからの差分データ」であることはご理解いただければ幸いです。

■ VSS を構成する 4 つのコンポーネント

.
VSS は、ボリュームの静止点を確保するサービスですが、以下の 4 つのコンポーネントによって動作しています。

・VSS リクエスター (VSS Requester / VSS-R)
VSS を利用する(シャドウコピーの作成を要求する)コンポーネント。バックアップソフトなど。VSS サービスを起動する最初のきっかけであり、バックアップ ソフトウェアなどが保有しています。リクエスターによってシャドウ コピーの作成要求が出され、作成がスタートします。

・VSS サービス (VSS Service / VSS-S) (vssvc.exe)
VSS リクエスターからの要求を受け、VSS ライター(後述)やVSS プロバイダー(後述)を制御し、シャドウコピーの作成の過程のコントロールを行うコンポーネント。

・VSS ライター (VSS Writer / VSS-W)
VSS サービスからの指令により、シャドウ コピーを作成するために、各アプリケーションを一旦静止する役割をもつコンポーネント。すべてのアプリケーションが整合性のとれた状態になるために必要な処理を実施します。アプリケーションごとに存在し、各 VSS ライターは自信に紐づいたアプリケーションの処理を行います。

・VSS プロバイダー (VSS Provider / VSS-P)
VSS サービスからの指令により、シャドウ コピーの作成を行うコンポーネント。整合性が取れることを確認した上でシャドウ コピーを作成するため、VSS サービスを通して VSS ライターとも密に連携して動作します。

それぞれのコンポーネントが連携してシャドウ コピーを作成します。大まかな動作の流れは以下のようになっています。

■ Diff Area について

.
・Diff Area のサイズについて

既にご説明の通り、Diff Area はシャドウ コピーを作成するときに用意される、差分データ退避用の空の箱です。既定の初期サイズはボリュームのサイズと残りの空き領域のサイズに応じて OS 内部ロジックによって計算され、32 MB ~ 3 GB のサイズで確保されます。この領域に差分データが次々と格納されていきますが、差分データが初期サイズを上回ることが予想された場合、システムによって Diff Area は自動的に拡張され、継続して差分データが保存されてゆきます。
Diff Area の初期サイズは、レジストリ設定によって固定することも可能です。Windows Server 2012R2 までの OS での固定可能な最大サイズは 3 GB、最小サイズは 300 MB です。Windows Server 2016 では、最大サイズが拡張されており、50 GB まで指定が可能です。

注 1 : Windows Server 2012R2 では、以下の修正プログラムを適用することで Diff Area の固定可能な最大サイズを Windows Server 2016 と同じ 50 GB まで引き上げることができます。

文書番号: KB3145384
MinDiffAreaFileSize registry value limit is increased from 3 GB to 50 GB in Windows 8.1 or Windows Server 2012 R2
https://support.microsoft.com/en-us/kb/3145384

注 2 : Diff Area サイズの指定は、ボリュームごとの指定ではなく、すべてのボリュームに一律で適用されます。従って、例えば Windows Server 2016 でDiff Area のサイズを 50 GB に指定した場合、C ドライブなど容量が十分に確保できていないボリュームに関してはシャドウ コピーが作成できなくなります。ご注意ください。

・Diff Area の確保される場所について

Diff Area は既定では、シャドウ コピーを作成する対象のボリューム内に確保されます。シャドウ コピーを作成すると、ボリューム内に隠しフォルダとして、”System Volume Information” という名称のフォルダが自動的に作成されます。シャドウ コピーはその中にファイルとして確認することができます。

次のシャドウ コピーを作成すると、Diff Area はその時点までの差分データとして確定され、それ以上の差分データはここには保存されません。同時に新たなDiff Area が確保され、以降の差分データはこの新しい Diff Area に保存されるようになります。Diff Area がその時点までの差分データとして確定される際に、Diff Area 内に空き容量があれば、この空き容量は解放されます。

・シャドウ コピーとバックアップ

これまでのご説明の通り、シャドウ コピーとは、確保した Diff Area に差分データを退避しているだけであり、ボリュームの完全なコピーを保管しているわけではありません。この意味ではシャドウ コピーはバックアップではない、と言えます。Diff Area の拡張に失敗したり、新たな Diff Area を確保できない場合に、シャドウ コピーの作成に失敗したり、古いシャドウ コピーが削除されることがありますので、バックアップとしての用途をお考えの場合は、バックアップ ソフトウェアでバックアップを取得する方がより確実です。

また、バックアップ ソフトウェアでバックアップを取得する際も、バックアップ中にボリューム内のデータに変更が発生する可能性があるため、一旦シャドウ コピーが作成されて、これをもとにデータをコピーする仕組みが一般的です。
コピーが完了してバックアップが完了すると、シャドウ コピーは削除されます。

■ よくいただくご質問

.
ここからは、よくいただくご質問と事象ごとに詳しくご案内している弊社公開情報をご紹介いたします。

Q1. シャドウ コピーの保管先の場所を変更したい。現在は既定値のまま、シャドウ コピーを作成したボリューム内に格納しているので、これを消さずに別の場所へ移動させたい。

A1. シャドウ コピーの保管先の場所を変更すること自体は可能です。しかしながら、既存のシャドウ コピーを維持したまま変更することはできません。一旦既存のシャドウ コピーをすべて削除したうえで、保管先を変更する必要があります。保管先の変更は、以下の手順で行います。

(1) ボリュームを右クリックし、[プロパティ] を開きます。
(2) [シャドウ コピー] のタブを開きます。
(3) 対象ボリュームが選択されていることを確認して、[設定] をクリックします。
(4) “記憶域” の項目でプルダウン メニューからシャドウ コピー保管先のボリュームを変更します。

Q2. シャドウ コピー機能は無効の状態なのに、勝手に作成されている。

A2. "次回実行時刻=無効" の設定は、スケジュールによるシャドウ コピー作成が無効となっている事を示しています。そのため、実際のシャドウ コピーの作成および保存動作とは異なり、VSSを使用するバックアップを実施した場合などシャドウコピーが保存されることがあります。
なお、”有効” となっている場合は、定期的にシャドウ コピーが作成されるようにスケジュールが組まれていることを示し、既定では ”無効” となっています。

Q3. サード パーティ製のバックアップ ソフトウェアで、日次でバックアップを取得している。一時的に作成されるシャドウ コピーはどこに作成されるのか。

A3. バックアップ ソフトウェアに依存いたします。例えば、Windows Server 標準のバックアップ ソフトウェアである ”Windows Server バックアップ” でバックアップを取得いただく場合、バックアップ対象ボリューム内にシャドウ コピーは作成されます。しかし、サード パーティ製のバックアップ ソフトウェアでは、全ボリュームの空き容量を確認し、最も空いているボリュームを自動的に選択してシャドウ コピーを作成する動作となっているものもございます。

■ VSS に関連する弊社公開情報のご紹介

.
シャドウ コピーやバックアップに関連した公開情報が複数ありますので、ご紹介いたします。各事象については本ブログよりも詳細に説明していますので、詳しくは各公開情報を参照ください。

“Volsnap 25 イベントについて”
https://blogs.technet.microsoft.com/askcorejp/2012/02/21/volsnap-25/

イベント ログにソース:Volsnap、ID:25 のエラーのイベントが記録され、それまでに取得していたシャドウ コピーが全て消えてしまう事象についてご紹介しています。

“ボリューム シャドウコピーの履歴が消える現象について”
https://blogs.technet.microsoft.com/askcorejp/2012/09/21/12390/

上述の「Volsnap 25 イベントについて」と近い内容となっていますが、具体的な対処策の手順を説明していますので、合わせてご確認いただくことをお勧めします。

“VolSnap 33 が大量に出てしまう問題について”
https://blogs.technet.microsoft.com/askcorejp/2009/06/04/volsnap-33/

イベント ログにソース:Volsnap、ID:33 のエラーのイベントが記録され、それまでに取得していたシャドウ コピーが全て消えてしまう事象についてご紹介しています。

“vssadmin コマンドでシャドウ コピーが削除できない場合の対処方法について”
https://blogs.technet.microsoft.com/askcorejp/2013/11/28/vssadmin-2096/

気づいたらシャドウ コピーがボリュームの容量を圧迫していることがあります。必要に応じてシャドウ コピーを削除することで、空き領域を作ることができるのですが、まれに削除に失敗することがあります。シャドウ コピーが削除できなくてお困りの時はこちらの公開情報をご確認ください。

“Windows Server バックアップにおける容量と世代管理について”
https://blogs.technet.microsoft.com/askcorejp/2016/05/27/windows\_server\_backup\_space\_management/

バックアップとシャドウ コピーには深い関連があります。
この公開情報は、主にWindows Server バックアップについて紹介していますが、シャドウ コピーに関しても説明がありますので、お役に立つ情報と思います。

“エクスプローラーで全ファイルを選択したときのファイル合計サイズとディスクのプロパティの使用領域との差異は何故おきるのか?”
https://blogs.technet.microsoft.com/askcorejp/2014/09/19/356/

シャドウ コピーが保存される”System Volume Information” フォルダについてご説明している公開情報です。

“Registry Keys and Values for Backup and Restore”
https://docs.microsoft.com/ja-jp/windows/desktop/Backup/registry-keys-for-backup-and-restore\#mindiffareafilesize

Diff Area の初期サイズは、通常はボリュームのサイズと空き領域のサイズで OS によって計算され、サイズが決定しますが、レジストリ設定によって固定することが可能です。具体的なレジストリの場所については上記公開情報の ”MinDiffAreaFileSize” の項目をご確認ください。

“MinDiffAreaFileSize レジストリ に関しての更新プログラムが公開されました。”
https://blogs.technet.microsoft.com/askcorejp/2016/05/23/mindiffareafilesize-レジストリ-に関しての更新プログラムが公/

“Diff Area について” の項目で触れましたが、Windows Server 2012 R2 では、修正プログラムを適用することで Diff Area の固定可能な最大サイズを Windows Server 2016 と同じ 50 GB まで引き上げることができます。この公開情報で修正プログラムのご説明をしています。

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