VSS 増分バックアップと差分バックアップでのライター ロール

増分バックアップと差分バックアップへのライターの参加は、通常、 Identify (CVssWriter::OnIdentify)、 PrepareForBackup (CVssWriter:OnPrepareBackup)、 PostSnapshot (CVssWriter:OnPostSnapshot) イベントの処理中に行われます。 ライターが参加する方法は、バックアップ スタンプと最終変更時刻をサポートしているかどうか、およびバックアップを実行する要求元が 部分ファイル操作をサポートしているかどうかによって形成されます。

増分バックアップと差分バックアップ中のイベントの識別の処理

Identify イベントの処理中に、ライターは、バックアップ スキーマ (VSS_BACKUP_SCHEMA) とファイル仕様のバックアップの種類 (VSS_FILE_SPEC_BACKUP_TYPE) マスクを使用して、増分および差分バックアップ操作の基本的なアーキテクチャを確立します。

ライターは、 VSS_BACKUP_SCHEMA値の ビット マスクを作成し、 IVssCreateWriterMetadata::SetBackupSchema メソッドに渡すことによって、ライター メタデータ ドキュメントでサポートする操作を示します。 これにより、ライターは以下をサポートしているかどうかを示すことができます。

  • 増分バックアップ (VSS_BS_INCREMENTAL)
  • 差分バックアップ (VSS_BS_DIFFERENTIAL)
  • 増分バックアップと差分バックアップを混在させることはできません (VSS_BS_EXCLUSIVE_INCREMENTAL_DIFFERENTIAL)
  • バックアップ スタンプを使用した増分バックアップと差分バックアップ (VSS_BS_TIMESTAMPED)
  • ファイルの最終変更 (VSS_BS_LAST_MODIFY) に関する情報に基づく増分バックアップと差分バックアップ

ライターは、ファイル指定のバックアップの種類のマスクを使用して、増分バックアップまたは差分バックアップにファイルを含める方法に関するファイル セット レベルの情報を要求者に提供します。

ライターは、VSS_FILE_SPEC_BACKUP_TYPE値のビット マスクを作成し、IVssCreateWriterMetadata::AddDatabaseFiles、IVssCreateWriterMetadata::AddDatabaseLogFiles、または IVssCreateWriterMetadata::AddFilesToFileGroup に渡すことによって、ファイル セットをコンポーネントに追加するときに、ファイル セットのファイル仕様のバックアップの種類マスクを設定できます。

差分バックアップと増分バックアップに影響する VSS_FILE_SPEC_BACKUP_TYPE 列挙には、次の 3 つの "バックアップが必要な" 値があります。

  • VSS_FSBT_ALL_BACKUP_REQUIRED
  • VSS_FSBT_INCREMENTAL_BACKUP_REQUIRED
  • VSS_FSBT_DIFFERENTIAL_BACKUP_REQUIRED

次の 3 つの "シャドウ コピーが必要" の値があります。

  • VSS_FSBT_ALL_SNAPSHOT_REQUIRED
  • VSS_FSBT_INCREMENTAL_SNAPSHOT_REQUIRED
  • VSS_FSBT_DIFFERENTIAL_SNAPSHOT_REQUIRED

ファイル指定のバックアップの種類として "シャドウ コピーが必要" というタグが付いたファイル セットは、INCREMENTAL、DIFFERENTIAL、ALL (増分操作と差分操作の両方を含む) バックアップ操作を実行するときに、要求元がシャドウ コピーからデータをコピーする必要があるかどうかを示します。

INCREMENTAL、DIFFERENTIAL、または ALL バックアップ操作に適用される "バックアップが必要" フラグは、ライターが、バックアップ操作の復元後に現在のバージョンのファイル セットのコピーを使用できるようになることを示します。 通常、これは、ファイル セットに "バックアップが必要" というタグが付いている場合、バックアップまたは変更が最後に行われた日時に関係なく、増分バックアップまたは差分バックアップ中にすべてのメンバーがバックアップ メディアにコピーされることを意味します。

既定では、ファイル セットは、ファイル仕様のバックアップの種類が VSS_FSBT_ALL_BACKUP_REQUIRED | VSS_FSBT_ALL_SNAPSHOT_REQUIRED のコンポーネントに追加されます。 したがって、ライター開発者が既定値を使用しない場合 (別のファイル仕様のバックアップの種類を選択するか、部分的なファイル操作を使用するか、異なるファイルを使用して) しない限り、ほとんどのファイル セット内のファイルは通常、バックアップ メディアに完全にコピーされます。

この時点で、ライターのライター メタデータ ドキュメントには、要求者が差分バックアップまたは増分バックアップを開始するために必要なほとんどの情報が完全に設定されます。 バックアップをサポートするためのファイル セットまたはファイル レベル情報の追加指定は、 PrepareForBackup イベント中に処理されます。

増分バックアップと差分バックアップ中の PrepareForBackup イベントの処理

リクエスターが実際のバックアップ操作を続行する前に、ライターは IVssComponent インターフェイスを介してリクエスターの Backup Components Document を変更することで、増分バックアップまたは差分バックアップの仕様を変更できます。

ライターは IVssComponent インターフェイスを使用するため、通常、 PrepareForBackup イベントの処理中にこれらの準備を実行します。

CSVsWriter:OnPrepareBackup では、ライターは、一部のファイルのバックアップの評価方法をより正確に指定し、バックアップに使用するメカニズムを指定し、場合によってはバックアップ スタンプを設定できます。

部分ファイル

要求者がサポートしている場合、ライターは、部分的なファイル操作を使用して増分バックアップまたは差分バックアップを実装することを選択できます。 (ライターは、要求元が CVssWriter::IsPartialFileSupportEnabled を呼び出すことによって部分ファイル操作をサポートしているかどうかを判断できます)。

ライターは 、IVssComponent::AddPartialFile を使用して、増分または差分操作中にバックアップする選択したファイルのそれらの部分を示します。 要求者は、この仕様を遵守し、常にファイルの指定されたセクションをバックアップする必要があります。 (部分ファイル操作の詳細については、「 部分ファイルの操作 」を参照してください)。

ライターは、IVssComponent::AddPartialFile を使用して、以前にコンポーネント セットのいずれかに追加されていないファイルをバックアップに追加できます (IVssCreateWriterMetadata::AddDatabaseFilesIVssCreateWriterMetadata::AddDatabaseLogFiles、または IVssCreateWriterMetadata::AddFilesToFileGroup)。 この方法でバックアップに追加される新しいファイルは、このバックアップ用に既にシャドウ コピーされているボリューム上に存在する必要があります。

ファイルが部分的なファイル操作に関係している場合、これは無視されるファイル仕様のバックアップの種類よりも優先されます。

相違ファイル

最後に変更されたバックアップ スキーマ (VSS_BS_SCHEMA) をサポートするライターは、差分バックアップまたは差分バックアップに 差分ファイル を追加できます。

異なるファイルを指定する場合、ライターは IVssComponent::AddDifferencedFileByLastModifyTime を 使用し、パス、ファイル名、再帰フラグを指定します。ただし、これらはコンポーネントに含まれるファイル セットと一致する必要はありません。

実際、ライターは、以前にコンポーネント セットのいずれかに追加されていないファイル ( IVssCreateWriterMetadata::AddDatabaseFilesIVssCreateWriterMetadata::AddDatabaseLogFiles、または IVssCreateWriterMetadata::AddFilesToFileGroup) をバックアップに差分ファイルとして追加できます。 この方法でバックアップに追加される新しいファイルは、このバックアップ用に既にシャドウ コピーされているボリューム上に存在する必要があります。

通常、ライターは、ライター独自の履歴メカニズムに基づいて、差分ファイルを追加するときの最後の変更時刻も指定します。 この最終変更時刻 (指定されている場合) は、ファイルを増分バックアップまたは差分バックアップに含める必要があるかどうかを判断するために、要求元が常に使用する必要があります。

ライターは、差分ファイルを増分バックアップ セットまたは差分バックアップ セットに追加するときに、最終変更時刻を指定しないことを選択できます。 その場合、要求者は独自のメカニズム (以前のバックアップのログやファイル システム情報など) を自由に使用して、差分バックアップと差分バックアップのどちらを差分バックアップに含める必要があるかを判断できます。

相違するファイルのファイル仕様のバックアップの種類は無視されます。

Backupスタンプ

バックアップ スタンプ (VSS_BS_TIMESTAMP) をサポートするライターには、バックアップが最後に発生した日時に関する情報を格納するための独自のプライベート形式があります。 この情報は、バックアップ中にライターによって生成されます。

バックアップ スタンプは、IVssComponent::SetBackupStamp メソッドによって文字列として Backup コンポーネント ドキュメントに格納されます。 バックアップ スタンプは、 IVssComponent のインスタンスに対応するコンポーネント (またはコンポーネント セット) 内のすべてのファイル セットに適用されます。

要求元が以前のバックアップのバックアップ スタンプにアクセスできる場合は、 IVssBackupComponents::SetPreviousBackupStamp を呼び出すことによってライターが使用できるようになります。

ライターは、 IVssComponent::GetPreviousBackupStamp を使用してこのタイム スタンプを調べることができます。

リクエスターは、バックアップ スタンプを含む文字列を格納して返すだけであることに注意してください。 文字列の形式や使用方法については何も知りません。ライターだけがその情報を持っています。

ライターは、 IVssComponent::GetPreviousBackupStamp を呼び出した後、IVssComponent::SetBackupStamp使用して現在のバックアップ スタンプを更新し、現在の増分または差分バックアップ操作の日付を独自の形式で記録することができます。