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
"シャドウ コピーが必要" というファイル仕様のバックアップの種類でタグ付けされたファイル セットは、増分、差分、または ALL (増分と差分の両方の操作を含む) バックアップ操作を実行するときに、要求元がシャドウ コピーからデータをコピーする必要があるかどうかを示します。
INCREMENTAL、DIFFERENTIAL、または ALL バックアップ操作に適用される "バックアップが必要" フラグは、ライターが、バックアップ操作の復元後に現在のバージョンのファイル セットのコピーが使用可能であることを想定していることを示します。 通常、これは、ファイル セットに "バックアップが必要" というタグが付けられている場合、バックアップまたは変更が最後に行われた日時に関係なく、増分バックアップまたは差分バックアップ中にすべてのメンバーがバックアップ メディアにコピーされることを意味します。
既定では、ファイル セットは、ファイル仕様のバックアップの種類が VSS_FSBT_ALL_BACKUP_REQUIRED VSS_FSBT_ALL_SNAPSHOT_REQUIRED | のコンポーネントに追加されます。 したがって、ライター開発者が既定を使用しない場合 (別のファイル仕様のバックアップの種類を選択するか、部分的なファイル操作を使用するか、または異なるファイルを使用して)、ほとんどのファイル セット内のファイルは通常、バックアップ メディア全体にコピーされます。
この時点で、ライターのライター メタデータ ドキュメントには、要求者が差分バックアップまたは増分バックアップを開始するために必要なほとんどの情報が完全に設定されます。 バックアップをサポートするファイル セットまたはファイル レベル情報の追加指定は、 PrepareForBackup イベント中に処理されます。
増分バックアップと差分バックアップ中の PrepareForBackup イベントの処理
リクエスターが実際のバックアップ操作を続行する前に、ライターは IVssComponent インターフェイスを使用してリクエスターのバックアップ コンポーネント ドキュメントを変更することで、増分バックアップまたは差分バックアップの仕様を変更できます。
ライターは IVssComponent インターフェイスを使用するため、通常、 PrepareForBackup イベントの処理中にこれらの準備を実行します。
CVssWriter:OnPrepareBackup では、ライターは、一部のファイルのバックアップの評価方法をより正確に指定し、バックアップに使用するメカニズムを指定し、場合によってはバックアップ スタンプを設定できます。
-
部分ファイル
-
リクエスターがそれらをサポートしている場合、ライターは、部分ファイル操作を使用して増分バックアップまたは差分バックアップを実装することを選択できます。 (ライターは、リクエスターが CVssWriter::IsPartialFileSupportEnabled を呼び出すことによって、部分ファイル操作をサポートしているかどうかを判断できます)。
ライターは 、IVssComponent::AddPartialFile を使用して、増分または差分操作中にバックアップする選択したファイルのそれらの部分を示します。 要求者は、この仕様を尊重し、常にファイルの指定されたセクションをバックアップする必要があります。 ( 部分ファイル操作 の詳細については、「部分ファイルの操作」を参照してください)。
ライターは、IVssComponent::AddPartialFile を使用して、以前にコンポーネント セットのいずれかに追加されなかったファイルをバックアップに追加できます (IVssCreateWriterMetadata::AddDatabaseFiles、IVssCreateWriterMetadata::AddDatabaseLogFiles、または IVssCreateWriterMetadata::AddFilesToFileGroup)。 この方法でバックアップに追加される新しいファイルは、このバックアップ用に既にシャドウ コピーされているボリューム上に存在する必要があります。
ファイルが部分的なファイル操作に関係している場合、これはファイル仕様のバックアップの種類に置き換えられます。これは無視されます。
-
相違ファイル
-
最後に変更されたバックアップ スキーマ (VSS_BS_SCHEMA) をサポートするライターは、差分バックアップまたは差分バックアップに 差分ファイル を追加できます。
相違ファイルを指定する場合、ライターは IVssComponent::AddDifferencedFileByLastModifyTime を使用し、パス、ファイル名、再帰フラグを指定します。ただし、これらはコンポーネントに含まれるファイル セットと一致する必要はありません。
実際、ライターは、以前にコンポーネント セットのいずれかに追加されていないファイル ( IVssCreateWriterMetadata::AddDatabaseFiles、 IVssCreateWriterMetadata::AddDatabaseLogFiles、または IVssCreateWriterMetadata::AddFilesToFileGroup) をバックアップに差分ファイルとして追加できます。 この方法でバックアップに追加される新しいファイルは、このバックアップ用に既にシャドウ コピーされているボリューム上に存在する必要があります。
通常、ライターは、ライター独自の履歴メカニズムに基づいて、差分ファイルを追加するときの最終変更時刻も指定します。 この最終変更時刻 (指定されている場合) は、ファイルを増分バックアップまたは差分バックアップに含める必要があるかどうかを判断する際に、要求者が常に使用する必要があります。
ライターは、差分ファイルを増分バックアップ セットまたは差分バックアップ セットに追加するときに、最後の変更時刻を指定しないことを選択できます。 この場合、リクエスターは独自のメカニズム (たとえば、以前のバックアップのログやファイル システム情報) を自由に使用して、差分ファイルを増分バックアップと差分バックアップのどちらに含めるかを判断できます。
相違するファイルのファイル仕様のバックアップの種類は無視されます。
-
バックアップ スタンプ
-
バックアップ スタンプ (VSS_BS_TIMESTAMP) をサポートするライターには、バックアップが最後に発生した日時に関する情報を格納するための独自のプライベート形式があります。 この情報は、バックアップ中にライターによって生成されます。
バックアップ スタンプは、 IVssComponent::SetBackupStamp メソッドによって文字列としてバックアップ コンポーネント ドキュメントに格納されます。 バックアップ スタンプは、 IVssComponent のインスタンスに対応するコンポーネント (またはコンポーネント セット) 内のすべてのファイル セットに適用されます。
リクエスターが以前のバックアップのバックアップ スタンプにアクセスできる場合は、 IVssBackupComponents::SetPreviousBackupStamp を呼び出すことによってライターが使用できるようになります。
ライターは、 IVssComponent::GetPreviousBackupStamp を使用してこのタイム スタンプを調べることができます。
リクエスターは単にバックアップ スタンプを含む文字列を格納して返すだけであることに注意してください。 文字列の形式や使用方法については何も知りません。ライターだけがその情報を持っています。
ライターは、IVssComponent::GetPreviousBackupStamp を呼び出した後、IVssComponent::SetBackupStamp を使用して現在のバックアップ スタンプを更新し、現在の増分または差分バックアップ操作の日付を独自の形式で記録することができます。