VSS 増分バックアップと差分バックアップのリクエスター ロール
増分または差分バックアップ操作をサポートするには、リクエスターは次の操作を実行する必要があります。
- 使用可能なライター サポートの程度を決定します ( IVssBackupComponents::GetWriterMetadata を使用してライター メタデータ ドキュメントの情報にアクセスします)。特に、サポートされているバックアップ スキーマ (VSS_BACKUP_SCHEMA) を決定します。
- 適切なバックアップ状態を設定します。
- 増分バックアップまたは差分バックアップのファイルおよびファイル セット レベルの仕様を取得します。
- バックアップを実行します。
増分および差分のサポートと構成の要求者の決定
要求者は、増分バックアップまたは差分バックアップに含めるコンポーネントを選択する前に、または独自の状態を設定する前に、ライター サポートに関する情報を取得する必要があります。
-
ライターのサポートの決定
-
リクエスターは、 IVssExamineWriterMetadata::GetBackupSchema メソッドを使用してライターのバックアップ スキーマ マスクを取得することで、特定のライターが VSS 増分バックアップまたは差分バックアップをサポートしているかどうかを判断します。
VSS 増分または差分手法をサポートするライターのバックアップ スキーマ マスクには、 VSS_BS_INCREMENTAL または VSS_BS_DIFFERENTIAL、またはその両方が含まれます。 ライターは、 VSS_BS_EXCLUSIVE_INCREMENTAL_DIFFERENTIAL フラグでの参加に関する制限を示すこともできます。 (バックアップ スキーマの詳細については、「 VSS_BACKUP_SCHEMA 」を参照してください)。
-
リクエスターバックアップ状態の設定
-
リクエスターは、PrepareForBackup イベントを生成する前に IVssBackupComponents::SetBackupState メソッドを使用して、バックアップの種類をVSS_BT_INCREMENTALまたはVSS_BT_DIFFERENTIALに設定することで、バックアップが増分バックアップまたは差分バックアップであることを示します。
IVssBackupComponents::SetBackupState メソッドは、リクエスターが部分ファイルのサポートを提供するかどうかを示すためにも使用されます。これは、特定の増分バックアップおよび復元操作を実装するために頻繁に使用されます。
増分バックアップと差分バックアップのライター仕様の取得
各ライターのライター メタデータ ドキュメントに含まれるファイル セット レベルのファイル バックアップ仕様情報 (VSS_FILE_SPEC_BACKUP_TYPE) は、 IVssBackupComponents::GatherWriterMetadata が正常に返された後に検査できます。
ただし、ライターは、PostSnapshot イベントが正常に処理されるまで、差分ファイルを追加したり、部分的なファイルのサポートを要求したりできます。
ファイルと部分ファイルのサポート仕様が異なると、ファイル仕様のバックアップの種類がオーバーライドされる可能性があるため、要求者は、 IVssBackupComponents::P repareForBackup が正常に戻るまで、増分バックアップと差分バックアップに関するすべてのライター仕様の完全な分析を延期することができます。
-
ファイル バックアップの仕様情報の取得
-
ファイル セット レベルのファイル バックアップ仕様情報 (VSS_FILE_SPEC_BACKUP_TYPE) は、各ライターのライター メタデータ ドキュメントに含まれており、 IVssBackupComponents::GatherWriterMetadata が正常に返された直後に調べることができます。
要求者は、コンポーネントが明示的に含まれていたか暗黙的に含まれていたかに関係なく、増分バックアップまたは差分バックアップに含まれる各ライターのコンポーネントのすべてのファイル セットに対して、ファイル バックアップ仕様マスク (VSS_FILE_SPEC_BACKUP_TYPE) を取得する必要があります。
要求者は、IVssBackupComponents::GetWriterComponentsCount および IVssBackupComponents::GetWriterComponents を使用して、どのライターのライター メタデータ ドキュメントに対してクエリを実行する必要があるかどうかを判断できます。 IVssBackupComponents::GetWriterComponents によって返される IVssWriterComponentsExt インターフェイスのインスタンスは、IVssWriterComponentsExt::GetWriterInfo メソッドを介してライター情報を提供します。
リクエスターは、IVssExamineWriterMetadata::GetComponent を使用して、特定のライターによって管理されるインクルード コンポーネントに対応する IVssWMComponent インターフェイスのインスタンスを介してコンポーネント情報を取得します。
IVssWMComponent インターフェイスに対応するコンポーネントによって管理されるファイル セットに関する情報は、IVssWMComponent::GetFile、IVssWMComponent::GetDatabaseFile、または IVssWMComponent::GetDatabaseLogFile (適宜) の呼び出しによって取得されます。
これらの呼び出しは、コンポーネントのファイル セットごとに IVssWMFiledesc インターフェイスのインスタンスを返すことができます。
ファイル セットのファイル仕様のバックアップの種類は、 IVssWMFiledesc::GetBackupTypeMask を呼び出すことによって取得されます。
-
部分ファイルと相違ファイル情報の取得
-
リクエスターは、 IVssComponent インターフェイスを介して部分的なファイル情報と差分ファイル情報を取得します。
リクエスターは、IVssBackupComponents::GetWriterComponentsCount と IVssBackupComponents::GetWriterComponents を使用して、バックアップに含まれるすべてのライターを反復処理できます。
IVssBackupComponents::GetWriterComponents によって返される IVssWriterComponentsExt インターフェイスのインスタンスは、IVssWriterComponentsExt::GetComponents メソッドと IVssWriterComponentsExt::GetComponentCount メソッドを介して、特定のライターの明示的に含まれるコンポーネントに対応する IVssComponent インターフェイスのすべてのインスタンスにアクセスできます。
要求者は、増分バックアップまたは差分バックアップをサポートするすべてのライター (つまり、IVssExamineWriterMetadata::GetBackupSchema によって返されるバックアップ スキーマ マスクを持つライター) に対して、IVssComponent のすべてのインスタンスを経由する必要があります。バックアップの種類がVSS_BT_INCREMENTALの場合はVSS_BS_INCREMENTAL、バックアップの種類がVSS_BS_DIFFERENTIALされたときにVSS_BS_DIFFERENTIALされます。
部分的なファイル情報は、 IVssComponent::GetPartialFileCount と IVssComponent::GetPartialFile を呼び出すことによって取得されます (「 部分ファイルの操作」を参照)。
ファイルの最後の変更データに基づいてバックアップ操作をサポートするライター ( IVssExamineWriterMetadata::GetBackupSchema によって返されるバックアップ スキーマ マスクを持つライターには 、VSS_BS_LAST_MODIFYが含まれます)、相違したファイル情報は IVssComponent::GetDifferencedFilesCount と IVssComponent::GetDifferencedFile を呼び出すことによって取得されます。
異なるファイルは新しいファイルである可能性があることに注意してください。つまり、特定のライターのライター メタデータ ドキュメントに現在存在するファイル セットのメンバーではないファイルです。
要求者は、部分的なファイル操作と差分ファイルの両方に含まれるファイルを見つけることができません。 要求者がこのような状況に遭遇した場合は、ライター エラーを返してログに記録する必要があります。
リクエスターは引き続き問題のあるライターのファイルのバックアップを続行することを選択できますが、その場合は、相違するファイル情報に記載されている仕様に従って行う必要があります。
増分バックアップまたは差分バックアップの実装
バックアップを実装する前に、要求者は、 増分 バックアップまたは 差分 バックアップをサポートするライター、要求されたすべての部分ファイル操作、すべての相違ファイル、およびその他のすべてのファイルのファイル仕様のバックアップの種類に関する情報を取得する必要があります。
-
サポートされていないライター
-
スキーマが増分バックアップまたは差分バックアップをサポートしていないライター ( IVssExamineWriterMetadata::GetBackupSchema によって返されるバックアップ スキーマ マスクを持つライター ) には、 バックアップの種類がVSS_BT_INCREMENTALされている場合、またはバックアップの種類が VSS_BS_DIFFERENTIAL の場合 にVSS_BS_DIFFERENTIAL が含まれていない場合にVSS_BS_INCREMENTALが含 まれます)、増分バックアップ操作または差分バックアップ操作を直接サポートすることはできません。
これは、ライターのデータが増分バックアップ操作または差分バックアップ操作に関与しないことを意味するとは限りません。 ただし、何を行うかの選択は、要求者の裁量によって行われます。 リクエスターは、次のいずれかを実行できます。
- サポートされていないライターに属するファイルをバックアップしない (ユーザーに明確に示す)
- サポートされていないライターのすべてのファイルをバックアップする
- ファイル システム データとリクエスター独自の履歴ログを使用して、増分バックアップを実行します。
最後の代替手段は細心の注意を払って使用する必要があります。また、関係するライターが VSS メカニズムに依存しないデータの増分バックアップまたは差分バックアップと復元をサポートできるかどうかを要求者が理解している場合にのみ使用してください。
-
ライターのサポート
-
リクエスターは、ライターのすべての 差分ファイルを (順番に) 処理してから、 部分的なファイル 要求を処理し、そのファイル仕様のバックアップの種類 (VSS_FILE_SPEC_BACKUP_TYPE) に従って残りのファイルをバックアップする必要があります。
相違ファイルのバックアップ:
最後の変更データに基づいてバックアップ操作をサポートするライター ( IVssExamineWriterMetadata::GetBackupSchema によって返されるバックアップ スキーマ マスクを持つライターには 、VSS_BS_LAST_MODIFYが含まれます)、リクエスターは、 IVssComponent::GetDifferencedFile によって返されるパス、ファイル指定、再帰フラグ情報を使用して、増分バックアップまたは復元の候補としてファイルの一覧を生成します。
IVssComponent::GetDifferencedFile は、最後の変更の時刻を返すこともできます ( FILETIME 構造体として表されます)。
ライターによって提供された最後の変更時刻が 0 以外の場合、リクエスターは、ファイルを 増分 バックアップまたは 差分 バックアップに含める必要があるかどうかを判断するための基礎として (ファイル システム情報やリクエスター自身の格納データではなく) それを使用します。
たとえば、ライターによって返されたファイルの最終変更時刻が次の場合です。
- 最後の完全バックアップの後、ファイルは増分バックアップと差分バックアップの両方に含める必要があります。
- 最後の完全バックアップの後、最後の増分バックアップより前のファイルは増分バックアップ操作に含める必要がありますが、差分バックアップには含められません。
ライターによって提供された最後の変更時刻が 0 の場合、リクエスターはファイル・システム情報および独自の保管データを使用して、相違ファイルの変更時刻を判別する必要があります。
部分ファイル操作の使用:
ライターが部分ファイル操作を使用してファイルのバックアップを要求した場合、リクエスターはファイル オフセット情報を使用して、指定されたファイル セグメントをバックアップ メディアに保存します。 ( 部分ファイル操作 の詳細については、「部分ファイルの操作」を参照してください)。
前述のように、ライターは、ファイルを差分ファイルとして指定し、部分的なファイル操作の参加要素として指定しないでください。 要求者がこのような状況に遭遇した場合は、ライター エラーを返してログに記録する必要があります。
リクエスターは引き続き問題のあるライターのファイルのバックアップを続行することを選択できますが、その場合は、相違するファイル情報に記載されている仕様に従って行う必要があります。
ファイル仕様のバックアップの種類の操作:
異なるファイルと部分的なファイル操作をすべて処理したリクエスターは、ファイル仕様のバックアップの種類 (VSS_FILE_SPEC_BACKUP_TYPE) に基づいて、バックアップ セット内の残りのすべてのファイルを処理するようになりました。
差分バックアップと増分バックアップに影響する 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。 したがって、ライターがファイル仕様のバックアップの種類を明示的に設定しない限り、要求者は、部分的なファイル操作によって処理されないファイルをコピーする必要があります。または、ほとんどのファイル セット内の指定された相違ファイルは、通常、バックアップ メディア全体にコピーされます。
-
バックアップ スタンプ
-
バックアップ スタンプ (VSS_BS_TIMESTAMP) をサポートするライターは、将来の増分および差分バックアップおよび復元操作をサポートするために使用するバックアップ スタンプ情報を生成することを選択できます。
バックアップ スタンプ情報を含む文字列に含まれる形式と情報は、それらを生成するライターにはプライベートです。要求者はこの情報を処理する方法を知りません。
サポート ライターは、 IVssComponent::SetBackupStamp メソッドを使用して、バックアップ スタンプをバックアップ コンポーネント ドキュメントに文字列として格納します。
バックアップ スタンプ情報を処理するリクエスターの役割は(存在する場合)、将来のバックアップまたは復元操作で IVssBackupComponents::SetPreviousBackupStamp を呼び出してライターが使用できるようにします。