次の方法で共有


バックアップ前タスクの概要

VSS のバックアップ前タスクでは、バックアップ用のデータを含むボリュームのシャドウ コピーを作成することに重点を置いています。 バックアップ アプリケーションでは、実際のボリュームではなく、シャドウ コピーからデータが保存されます。 詳細については、「 VSS でのバックアップの処理の概要」を参照してください。

要求者は通常、ライターがバックアップの準備とシャドウ コピーの作成を待機します。 ライターは、バックアップに参加するかどうか、およびバックアップとシャドウ コピーの準備が整うファイルとそのファイル自体を構成する必要があります。 次の表は、バックアップ操作の準備に必要な一連のアクションとイベントを示しています。

リクエスター アクション イベント ライター アクション
リクエスターはバックアップ オプションを設定できます ( 「IVssBackupComponents::SetBackupOptions」を参照) なし なし
保存されているバックアップ スタンプを調べることで、増分バックアップ操作と差分バックアップ操作をサポートします ( 「IVssComponent::GetBackupStampIVssBackupComponents::SetPreviousBackupStamp」を参照してください) なし なし
IVssBackupComponents::P repareForBackup を使用してバックアップ操作の準備をライターに通知する PrepareForBackup ライターの準備には、ファイルをバックアップするかどうか、ライターがシャドウ コピーのフリーズに参加するかどうかの判断が含まれます。 ライター固有のメタデータの作成 (「CVssWriter::OnPrepareBackupCVssWriter::IsPathAffectedIVssWriterComponentsIVssComponent::GetBackupOptionsCVssWriter::AreComponentsSelectedIVssComponent::SetBackupMetadataおよび IVssComponent::GetPreviousBackupStamp
リクエスターは、 ライターが IVssAsync を使用してバックアップを設定するのを待機します。 ライターの状態も確認する必要があります ( 「IVssBackupComponents::GatherWriterStatus,IVssBackupComponents ::GetWriterStatus」を参照してください) なし なし
リクエスターは、IVssBackupComponents::D oSnapshotSet を使用してシャドウ コピーを要求します なし なし
なし PrepareForSnapshot CVssWriter::OnPrepareSnapshot: ライターをシャドウ コピーの準備完了状態にします。
なし Freeze CVssWriter::OnFreeze: シャドウ コピーの前の最終セットアップ。
なし 解凍 CVssWriter::OnThaw: 通常の機能 (I/O を含む) を再開できます。
なし PostSnapshot CVssWriter::OnPostSnapshot: シャドウ コピーの準備の最終クリーンアップ。 「IVssComponent::AddDifferencedFilesByLastModifyTime」および「IVssComponent::SetBackupStamp」を参照してください。
リクエスターは、IVssAsync を使用してシャドウ コピーの完了を待機します。ライターの状態も確認する必要があります (IVssBackupComponents::GatherWriterStatusIVssBackupComponents::GetWriterStatus を参照)。
なし なし

 

リクエスターのバックアップ前タスク

さらに、 IVssBackupComponents::P repareForBackup イベントを作成する前に、リクエスターは、各ライターの詳細と要求者がそれらを認識しているかどうかに応じて、 IVssBackupComponents::SetBackupOptions を 使用して個々のライターのバックアップ オプションを設定することもできます。

増分操作と差分操作をサポートするために、要求者はこの時点で、以前のバックアップ操作のタイム スタンプ ( IVssComponent::GetBackupStamp を使用) のコンポーネントを調べ、その情報を使用してライターが処理する以前のタイム スタンプを設定できます ( IVssBackupComponents::SetPreviousBackupStamp を使用)。 詳細については、「 増分バックアップと差分バックアップ 」を参照してください。

リクエスターは、バックアップ前の準備を完了し、シャドウ コピーの作成を処理するようにシステムのライターに指示できるようになりました。

最初に、リクエスターは IVssBackupComponents::P repareForBackup を呼び出して PrepareForBackup イベントを生成します。

参加しているすべてのライターが PrepareForBackup イベント (PrepareForBackup によって返される IVssAsync インターフェイスのインスタンスを使用して要求者が判断する) の処理から戻った後、リクエスターは IVssBackupComponents::D oSnapshotSet を呼び出すことでシャドウ コピーを開始できます。これにより、処理が進むにつれて、ライターの PrepareForSnapshotFreezeThawPostSnapshot イベントが生成されます。

リクエスターがシャドウ コピーを作成する必要がない場合があります。 具体的には、特定のライターのコンポーネントのいずれかで管理される各ファイル セットには、Identify イベント中に設定されたファイル仕様バックアップ マスク (VSS_FILE_SPEC_BACKUP_TYPE値のビットごとの OR で示されます) があります。 このマスクは、特に、バックアップを実行する前にシステムをシャドウ コピーする必要があるかどうかをファイル セットで指定します。

シャドウ コピーを必要とするボリュームにバックアップするファイル セットがない場合は、 IVssBackupComponents::D oSnapshotSet を呼び出す必要はありません。

ライターのバックアップ前タスク

PrepareForBackup イベントを処理する場合、VSS は各ライターの CVssWriter::OnPrepareBackup メソッド (仮想メソッド) を呼び出します。これは、既定では単に true を返します。

ライターは、この既定の実装をオーバーライドし、 処理を使用して、今後のバックアップに関する情報を検索し、アクションを実行できます。

ライターは、次の方法を使用して、考えられるバックアップ操作の種類に関する情報を決定できます。

  1. CVssWriter::GetBackupType
  2. CVssWriter::IsBootableStateBackedUp
  3. CVssWriter::AreComponentsSelected

ライターは、管理するファイルが、 CVssWriter::IsPathAffected を使用してシャドウ コピーに含まれるかどうかを判断します。

さらに重要なのは、VSS が CVssWriter::OnPrepareBackup メソッドを呼び出すときに、 IVssWriterComponents インターフェイスのインスタンスを渡します。これにより、 IVssComponent インターフェイスを介して、要求元のバックアップ コンポーネント ドキュメント に明示的に含まれる コンポーネントのインスタンスに直接アクセスできます。 ライターは、コンポーネント セットを定義する IVssComponent インターフェイスのインスタンスを使用して 、暗黙的に含まれるコンポーネントに アクセスしました ( 「Selectability and working with Component Properties」を参照してください)。

PrepareForBackup イベントの処理中に、ライターは IVssComponent インターフェイスを使用して、コンポーネント別 (またはコンポーネント セットによって設定されたコンポーネント) 操作を実行します。

  1. IVssComponent::AddPartialFile を呼び出して部分ファイルを追加する (サポートされている場合)。
  2. ライターが復元を処理するために必要なプライベート メタデータを設定します。
  3. ライターが増分バックアップと差分バックアップをサポートしている場合 (「 増分バックアップと差分バックアップ」を参照)、次の操作を行います。
  4. 複数のディスク間でのデータの同期など、非常に時間のかかる非同期操作を開始します。 これにより、他の VSS イベントの処理を含め、操作の処理中にライターの作業を続行できます。 これらの操作は 、Freeze イベントの前に終了する必要があります。

IVssBackupComponents::D oSnapshotSet に対するリクエスターの呼び出しによってシャドウ コピーが開始され、ライターが処理する次のイベントが生成されます。

ライターのハンドラーの 3 つ (CVssWriter::OnPrepareSnapshotCVssWriter::OnFreezeおよび CVssWriter::OnThaw) は純粋な仮想メソッドであり、各ライターは既定値に依存するのではなく、それらを実装する必要があります。 ライターのニーズに応じて、ダミー メソッドとしてコーディングし、単に TRUE を返す場合があります。

通常、 Freeze イベントの発行と Thaw イベントの発行の間には時間枠が狭いため、プロセスのシャットダウン、一時ファイルの作成、I/O キューのドレインなど、シャドウ コピーの準備に関する主要な作業のほとんどは 、CVssWriter::OnPrepareSnapshot で処理されます。

シャドウ コピーの作成がライター自身のアーキテクチャに大きく依存する前に、ライターが CSVsWriter::OnPrepareSnapshot を使用してその I/O を処理する方法。

すべての書き込みを保持し、 Freeze の前にデータを絶対一貫性のある状態に維持できるライターは、そうする必要があります。

ライターが I/O を固定できない場合は、バックアップ用の安定したソースを作成し、シャドウ コピーの回復時間を短縮するためのアクションを実行する必要があります。 たとえば、受信 I/O 要求をキューに入れる、またはバックアップのソースとして使用する 別のパス に重複するファイル のセットを生成するなどがあります。

CVssWriter::OnFreeze メソッドは、CVssWriter::OnPrepareSnapshot が正しい状態の I/O を左にし、CVssWriter::OnPrepareBackup によって開始されたすべての非同期タスクが完了したことを確認するなど、簡単で短いタスクを実行します。 このメソッドは、問題がある場合にシャドウ コピーを拒否するライターの最後の機会です ( ライター エラーと Vetoes に関するページを参照してください)。

通常、書き込みプログラムは 、Thaw イベントの後に通常の操作を再開できます。シャドウ コピーは、解凍後すぐにバックアップの準備ができていない可能性がありますが、ライターは通常の操作を再開できる必要があります。 そのため、通常、 ライターは CSVsWriter::OnThaw を使用して事前固定状態に戻ります。 ただし、シャドウ コピーをサポートするために作成された一時ファイルは、 PostSnapshot イベントまで残しておく必要があります。 通常、この種のクリーンアップには CSVsWriter::OnPostSnapshot を使用します。 多くのアプリケーションではこのようなクリーンアップが必要ないため、 CVssWriter::OnPostSnapshot、単に TRUE を返す既定の実装を持つ仮想メソッドです。 増分バックアップまたは差分バックアップが実行されている場合、ライターは IVssComponent::GetPreviousBackupStampIVssComponent::SetBackupStamp を呼び出す可能性があります。 詳細については、「 複雑なストアのバックアップにおけるライター ロール」を参照してください。 この時点で呼び出すことができるもう 1 つのメソッドは、 IVssComponent::AddDifferencedFilesByLastModifyTime です