Windows環境で利用できるVolume Shadow copy Service(VSS)、ボリュームシャドーコピーについて整理します。データのバックアップなどを行うときには意識しておきたい機能です。
■VSSとは
VSSはWindows環境においてデータのスナップショット(ある時点でのコピー)を取得・管理することで一貫性のあるバックアップを取得できるようにする機能です。
■何故VSSが必要か?
一般的に、あるシステムのデータバックアップを整合性のある状態で取得するためには「データが利用されていない」(オフライン)状態でとる形が望ましいです。(バックアップ開始から終了までデータの更新が発生しない状態を作る、ということです)
例えばたくさんのファイルをコピーしようとしたときを考えます。コピー開始時点に取得したファイル(A)に対し、1時間ほど経過してからバックアップ取得したファイル(Z)があるとします。ファイル「Z」を取得するころには「A」が更新されてしまっている可能性が発生します。そうすると、バックアップ「A」と「Z」は各々のファイルのバックアップが取れた時間が異なってしまうため、いざバックアップを復旧するとなっても本来実現したかった「バックアップ取得開始時点の状態を正しく再現する」ことはできないということになります。
現実的に24/365の運用などでオフラインにすることが難しいケースは容易に想像できます。ある時点のファイルシステム上のデータのコピーが取れる仕組みをWindowsが提供するのでそこから一貫性のある状態のバックアップをとることができるようになります。
■VSSの動作イメージ
例えば「C:¥aaa¥test.txt」というファイルを作成、編集、削除したケースの時系列を示します。(実際このような単純なケースでは通常のファイルコピーで事足りるかと思いますが、あくまで考え方です)

VSSによるスナップショットは実行時点のデータの状態をコピーします。以下の例ですと10/8(の取得時間)におけるデータの状態となります。ポイントはこのスナップショットはボリューム(Cドライブなど)単位で取得するので対象は「c:\aaa\test.txt」だけではなく、ファイルシステム上のその他のファイルも含んだ10/8の取得時間のタイミングのデータの状態となります。

上記だけを見ると通常のファイルのコピーによるバックアップと差がないように見えます。大きな違いはVSSではアプリケーションによるデータの参照・更新を一時的にストップさせてその間にドライブ単位でその時点のデータのコピー(これをスナップショットといいます)を取得する点です。
一方、通常のファイルコピーの場合、コピー対象ファイルを他が参照中であったり、更新中であると、他のデータとの整合性が保てない状態でのコピーになる可能性があります。(最初のVSSが必要な理由で述べた通りです)
バックアップアプリケーションはVSSのスナップショットからバックアップを行うことで、バックアップ取得対象の状態の一貫性を保ちながら効率良くデータのバックアップを取得できるようになります。
ちなみに「システムの復元」の機能などでも利用されており、WindowsUpdateによるOS更新前も自動でスナップショットが作成されている場合があります。
■VSSコンポーネント
VSSはスナップショット作成を要求する「リクエスタ―」、マイクロソフト製品を例にするとSQLServerやExchangeServerといったデータを整合性のある状態でバックアップ取得を制御する「ライター」、そして実際のスナップショット作成を行う「プロバイダー」の3つで構成されます。

■VSS関連コマンド
上述の「c:\aaa\test.txt」を例にコマンドラインで提供されているVSS関連コマンドでスナップショットの作成、内容の確認をしてみます。
▼VSSスナップショットの作成
最初に「c:\aaa\test.txt」を以下の内容で作成しておきます。

スナップショットは「vssadin create shadow /for=ドライブ名」で作成します。今回はCドライブを対象とします。
vssadmin create shadow /for=C:
実行すると、ボリューム名の後に「\\?\GLOBALROOT・・」と続く名前を確認しておきます。

▼取得済スナップショットの一覧(確認)
vssadmin list shadows

▼元ファイルの更新
元のファイルを更新して2行目を追加しておきます。

▼スナップショットをマウントして参照
スナップショットから取得時点のファイルを参照してみたいと思います。
まず「mklink」コマンドでスナップショット作成時に確認していた「シャドウコピーボリューム名\フォルダパス」を指定してマウントします。今回はシャドウコピーとして取得したスナップショット内の「C:¥aaa」フォルダを「C:¥vss」としてマウントします。

C:\vss\test.txtはスナップショット取得時における元のファイルですが、以下の通り更新前の状態が確認できました。

■VSSスナップショットの削除
今回は履歴が1つしかないので、「/oldest」オプションは事実上意味を持ちませんが、Cドライブ向けの最も古いスナップショットを確認せず削除すると、という意味のコマンドとなります。
vssadmin delete shadows /for=c: /oldest /quiet

https://learn.microsoft.com/ja-jp/windows-server/storage/file-server/volume-shadow-copy-service
コメントを残す