複雑なストアをバックアップする要求者ロール

VSS のすべての重要な操作と同様に、 増分 バックアップと 差分 バックアップでは、要求者とライターの間で緊密な協力が必要です。

バックアップの種類

このインフラストラクチャでは、5 種類のバックアップに特別なサポートが提供されます。 暗号化ステップの説明を次に示します。

  • 完全 (VSS_BT_FULL)。 ファイルは、最後のバックアップ日に関係なくバックアップされます。 各ファイルのバックアップ履歴が更新され、この種類のバックアップを増分バックアップまたは差分バックアップの基礎として使用できます。 ログ ファイルがある場合は、このバックアップの結果として切り捨てられる可能性があります。

    完全バックアップを復元するには、1 つのバックアップ イメージのみが必要です。

  • 差分 (VSS_BT_DIFFERENTIAL)。 VSS API を使用して、最後の完全バックアップ以降に変更または追加されたファイルのみがストレージ メディアにコピーされるようにします。すべての中間バックアップ情報は無視されます。 これには、ファイル全体、またはファイル内の特定の範囲が含まれる場合があります。 差分バックアップは完全バックアップに関連付けられます。通常、完全バックアップが復元されるまでは復元できません。 ログ ファイルがある場合、通常、このバックアップの結果として切り捨てられるわけではありません。

    差分バックアップを復元するには、元のバックアップ イメージと、前回の完全バックアップ以降に作成された最新の差分バックアップ イメージが必要です。

  • 増分 (VSS_BT_INCREMENTAL)。 VSS API を使用して、最後の完全バックアップまたは増分バックアップ以降に変更または追加されたファイルのみがストレージ メディアにコピーされるようにします。 これには、ファイル全体、またはファイル内の特定の範囲が含まれる場合があります。 一部のライターでは、差分バックアップと増分バックアップを混在させません。 ログ ファイルがある場合は、このバックアップの結果として切り捨てられる可能性があります。

    増分バックアップを復元するには、最初のバックアップ以降に作成された元のバックアップ イメージとすべての増分バックアップ イメージが必要です。

  • ログ Backup (VSS_BT_LOG)。 ライターのログ ファイル ( IVssCreateWriterMetadata::AddDataBaseLogFiles メソッドを使用してコンポーネントに追加され、 IVssWMComponent::GetDatabaseLogFile の呼び出しによって取得されたファイル) のみがバックアップされます。 このバックアップの種類は VSS に固有です。 ログ バックアップは頻繁に実行される傾向があります。 通常、このバックアップの結果としてログ ファイルが切り捨てられます。

  • Backupコピー (VSS_BT_COPY)。 VSS_BT_FULLバックアップの種類と同様に、ファイルは最後のバックアップ日に関係なくバックアップされます。 ただし、各ファイルのバックアップ履歴は更新されず、この種のバックアップを増分バックアップまたは差分バックアップの基礎として使用することはできません。 コピー バックアップの結果としてログ ファイルを切り捨ててはいけません。

部分ファイルのサポート

一部のライターは、管理するファイルの一部を上書きすることでファイルの復元をサポートしています。 要求元は、これを利用するように設計されている場合があります。その場合は、 IVssBackupComponents::SetBackupState に情報を設定することでこれを示します。

リクエスターは、IVssBackupComponents::SetBackupStatebackupType パラメーターを使用して実行されるバックアップの種類を指定します。 ライターによって、さまざまな種類のバックアップがサポートされます。 IVssBackupComponents::GatherWriterMetadata が呼び出された後、リクエスターは IVssExamineWriterMetadata::GetBackupSchema を呼び出すことによって、特定のライターがサポートするバックアップの種類を決定できます。 返される値は、さまざまなバックアップの種類のサポートを示すビット マスクです。 VSS_BS_DIFFERENTIAL は、差分バックアップ、 増分バックアップのVSS_BS_INCREMENTAL 、ログ バックアップ のVSS_BS_LOG 、コピー バックアップ のVSS_BS_COPY のサポートを示します。すべてのライターは完全バックアップをサポートする必要があります。 ライターが増分バックアップと差分バックアップの混在をサポートしていない場合は、 VSS_BS_EXCLUSIVE_INCREMENTAL_DIFFERENTIAL フラグも追加されます。 リクエスターが増分バックアップまたは差分バックアップを実行していて、特定のライターがそのバックアップの種類をサポートしていない場合は、そのライターに対して完全バックアップを実行する必要があります。

Backupスタンプ

増分バックアップと差分バックアップは、常に以前のバックアップに関連付けられます。 バックアップを関連付ける方法は 2 つあります。 単純なデータ ストアの場合、リクエスターはバックアップ間の相関関係を追跡できます。 ただし、より複雑なデータ ストアの場合、ライターはバックアップで独自のタイムスタンプを維持する必要があります。このタイムスタンプは、ログの位置、チェックポイント情報などを追跡できます。 リクエスターは、IVssExamineWriterMetadata::GetBackupSchema によって返される値にVSS_BS_TIMESTAMPED ビットがあるかどうかを調べて、特定のライターが独自のタイムスタンプを格納する必要があるかどうかを判断できます。

バックアップにタイムスタンプを格納するライターは、 IVssBackupComponents::P repareForBackup の処理中、または IVssBackupComponents::D oSnapshotSet の処理中にタイムスタンプを追加します。 リクエスターは、 IVssComponent::GetBackupStamp を呼び出すことで、このタイムスタンプを取得できます。 増分バックアップまたは差分バックアップを実行する場合、リクエスターは現在のバックアップを以前のバックアップに関連付ける必要があります。 これを行うには、特定のコンポーネントの以前のバックアップからタイムスタンプを取得し、 それを IVssBackupComponents::SetPreviousBackupStamp 関数に渡します。これは、前のバックアップでバックアップされたコンポーネントごとに行う必要があります。

ファイルのバックアップ

ライターによって報告されたファイルのバックアップ

GatherWriterMetadata フェーズ中にライターがそのメタデータに追加するすべてのファイル仕様には、ファイルをバックアップするタイミングを指定するバックアップの種類のマスクが含まれています。 リクエスターは、 IVssWMFiledesc::GetBackupTypeMask を呼び出すことによって、このマスクが何であるかを決定します。 このマスクの値は、ファイル仕様をバックアップする必要があるバックアップの種類を決定するために使用されます。 マスクには、次のビット値の 1 つ以上を含めることができます。

VSS_FSBT_FULL_BACKUP_REQUIRED

完全バックアップに必要です。

VSS_FSBT_DIFFERENTIAL_BACKUP_REQUIRED

差分バックアップに必要です。

VSS_FSBT_INCREMENTAL_BACKUP_REQUIRED

増分バックアップに必要です。

VSS_FSBT_LOG_BACKUP_REQUIRED

ログ バックアップに必要です。

VSS_FSBT_ALL_BACKUP_REQUIRED

すべてのバックアップの種類に必要です。これが既定値です。

この仕様は、コンポーネントの選択性仕様をオーバーライドします。 たとえば、ファイルがすべてVSS_FSBT_LOG_BACKUP_REQUIREDでマークされているが 、VSS_FSBT_FULL_BACKUP_REQUIRED ではマークされていないコンポーネントを考 えてみます。 このコンポーネントがバックアップ用に選択できないとします (IVssCreateWriterMetadata::AddComponent が呼び出されたときに bSelectable が false でした)。 ログ バックアップの場合は、このコンポーネント内のすべてのファイルを常にバックアップする必要があることを意味します。 ただし、完全バックアップの場合、コンポーネントの選択性がバックアップする必要があることを意味するにもかかわらず、どのファイルもバックアップする必要はありません。

最終変更時刻別のBackup

IVssBackupComponents::GatherWriterMetadata フェーズで指定されたファイル仕様情報は、前回のバックアップ以降に変更された内容に関する要求元情報を提供しません。 ライターがリクエスターに対する変更を示す方法の 1 つは、違うファイル メカニズムを使用することです。 ライターは、コンポーネント内の特定のファイルが一定の時間以降に変更された場合にのみバックアップするように指定できます。ライターは、これらのファイルを IVssBackupComponents::P repareForBackup または IVssBackupComponents::D oSnapshotSet で指定できます。 要求者は、 IVssComponent::GetDifferencedFilesCountIVssComponent::GetDifferencedFile を呼び出すことによって、これらのファイルを決定できます。 ファイル仕様が IVssBackupComponents::GatherWriterMetadata (現在はバックアップの種類のマスクに基づいて有効) の 1 つのセットと一致する場合、相違したファイル情報は前の情報をオーバーライドします。つまり、そのファイル仕様に一致するファイルは、指定された時刻以降に変更された場合にのみバックアップされます。 最終変更時刻は、 FILETIME 構造体を使用して通信されます。 この構造体の値が 0 の場合、これは、最終変更時刻を、前回のバックアップ時刻の要求者のレコードに基づいて決定する必要があることを意味します。

部分ファイルのBackup

ライターがリクエスターに対する変更を示すもう 1 つの方法は、部分ファイル メカニズムを使用することです。 ライターは、バックアップする必要があるコンポーネント ファイル内のバイト範囲を指定できます。ライターは、これらのファイル範囲を IVssBackupComponents::P repareForBackup または IVssBackupComponents::D oSnapshotSet で指定できます。 要求者は、 IVssComponent::GetPartialFileCountIVssComponent::GetPartialFile を呼び出すことによって、これらのファイルを決定できます。 IVssComponent::GetPartialFile は、ファイルを指すパスとファイル名、およびファイルにバックアップする必要のあるものを示す範囲文字列を返します。 ファイルが異なる場合と同様に、パスとファイル名が IVssBackupComponents::GatherWriterMetadata のライターによって設定されたファイル仕様と一致する場合、部分ファイル情報は前の設定をオーバーライドします。 範囲文字列には、範囲を直接指定することも、範囲情報を含むファイルを指定することもできます。 範囲を直接指定する場合、構文は形式 offset1:length1、offset2:length2 のコンマ区切りのリストで、各オフセットと長さは 64 ビット符号なし整数です。 範囲ファイルを指定する場合、範囲文字列は File= filename に設定する必要があります。ファイル は範囲ファイルへの完全なパスです。 範囲ファイル自体は、64 ビット符号なし整数のリストとして書式設定されたバイナリ ファイルです。 最初の整数は、ファイル内で表される範囲の数を示します。 後続の整数の各ペアは、範囲のオフセットと長さを表します。 要求元は、この範囲ファイルのバックアップと復元にも注意する必要があります。

ファイル仕様規則

差分ファイルと部分ファイルメカニズムを介して追加されたファイル仕様は、 IVssBackupComponents::GatherWriterMetadata で設定されたファイル仕様を変更するか、完全に新しいファイルを追加します。 部分ファイル メカニズムを使用して IVssBackupComponents::GatherWriterMetadata で設定されたファイル仕様を変更する場合、リクエスターは、ファイル仕様が IVssBackupComponents::GatherWriterMetadata のコンポーネントに設定されているファイル仕様のいずれかと完全に一致することを期待できます。 ファイル仕様は、別のファイル仕様と部分的に重複しません。また、その他の書き込みプログラムのコンポーネントのどのファイル仕様にも一致しません。 ただし、部分ファイル メカニズムを使用して追加されたファイル仕様は、別のファイル仕様と部分的に重複する可能性があります。 これが true の場合、相違ファイルまたは部分ファイルの仕様は 、IVssBackupComponents::GatherWriterMetadata で設定された仕様をオーバーライドします。 一般的なファイル仕様には、バックアップ時からファイルを取得する別の場所を示す代替の場所の値 ( IVssWMFiledesc::GetAlternateLocation によって返される) を指定できます。 差分ファイルまたは部分ファイル・メカニズムを使用して設定されたファイル仕様が、別の場所を持つ既存のファイル仕様と一致する場合は、この代替ロケーションからデータを取得する必要があります。 差分ファイルまたは部分ファイルメカニズムによって設定されたファイル仕様がコンポーネントの既存の仕様と一致しない場合は、これらのファイル範囲をバックアップに追加する必要があります。 リクエスターは、これらのメカニズムのいずれかを使用して、シャドウ コピー セットに既に含まれているボリューム上のファイルのみが追加されることを期待できます。

シャドウ コピーを使用しないBackup

特定の種類のファイルは、シャドウ コピー ボリュームからバックアップする必要がない場合があります。 たとえば、これは多くの場合、データベース ログ ファイルに当てはまります。 ログ ファイルは単調に拡張され、ライターは部分ファイルを使用してバックアップするファイルの部分を正確に指定できるため、多くの場合、元のボリュームからログをバックアップできます。 最適化として、ライターは、バックアップの種類のマスクを使用して、さまざまなバックアップの種類にシャドウ コピーが必要なファイルをマークできます。 IVssWMFiledesc::GetBackupTypeMask から返される値には、次のビット値のうち 1 つ以上を含めることができます。

VSS_FSBT_FULL_SNAPSHOT_REQUIRED

完全バックアップにはシャドウ コピーが必要です。

VSS_FSBT_DIFFERENTIAL_SNAPSHOT_REQUIRED

差分バックアップに必要なシャドウ コピー。

VSS_FSBT_INCREMENTAL_SNAPSHOT_REQUIRED

増分バックアップにはシャドウ コピーが必要です。

VSS_FSBT_LOG_SNAPSHOT_REQUIRED

ログ バックアップにはシャドウ コピーが必要です。

VSS_FSBT_ALL_SNAPSHOT_REQUIRED

すべてのバックアップの種類にシャドウ コピーが必要です。これが既定値です。

特定のボリュームに、このバックアップにシャドウ コピーを必要としないコンポーネントのみが含まれている場合、要求者は、このボリュームのシャドウ コピーを作成する手順をスキップできます。 このボリューム上のすべてのデータは、元のボリュームから直接バックアップ メディアにコピーできます。

ファイルの復元

順次復元

要求元は、復元操作の実行が完了すると、PostRestore イベントをすべてのライターに送信します。 一般に、ライターは復旧またはその他の復元後操作を実行して、このイベントを処理します。 ただし、増分バックアップの復元は、通常、増分バックアップごとに 1 つずつ、一連の復元操作として行われます。 復元が完全に完了するまで回復やその他の望ましくない操作が発生しないように、要求元は、このような復元が進行中であることをライターに通知する必要があります。 これを行うには、 IVssBackupComponents::SetAdditionalRestores を呼び出します。 このメソッドはコンポーネントごとに呼び出され、そのコンポーネントに対してさらに多くの復元が行われることをライターに示します。 シーケンス内の最後の復元では、追加復元フラグを false (既定値) に設定する必要があります。これは、これがそのコンポーネントのシーケンスの最後の復元であることを示します。

新しいターゲット

ライターでサポートされている場合、リクエスターは元のバックアップ時の場所以外の場所にデータ ファイルを復元できます。 要求元は、 IVssExamineWriterMetadata::GetBackupSchema を呼び出すことによって、このサポートを確認できます。 ライターがこの動作をサポートしている場合、 VSS_BS_WRITER_SUPPORTS_NEW_TARGET ビットが設定されます。 リクエスターは、再配置されたファイルの仕様ごとに IVssBackupComponents::AddNewTarget を 呼び出して、ライターに新しい場所を通知します。 要求者は、特定の範囲ファイルを別の場所に復元することもできます。 要求元は、 IVssBackupComponents::SetRangesFilePath を呼び出して、この変更をライターに通知します。

対象ターゲット

複雑な復元シナリオの場合、ライターは、バックアップされたファイルの範囲を同じファイルまたは別のファイルの異なる範囲にマップすることができます。 これを行うには、ダイレクト ターゲット メカニズムを使用します。 要求者は、 IVssBackupComponents::P reRestore フェーズの後で、 IVssComponent::GetRestoreTarget を呼び出し、 VSS_RT_DIRECTEDの戻り値を確認することで、このメカニズムがコンポーネントに使用されていることを確認できます。 要求者は、 IVssComponent::GetDirectedTargetCountIVssComponent::GetDirectedTarget を呼び出すことによって、これらのリダイレクトされた復元をすべて取得できます。 IVssComponent::GetDirectedTarget は、バックアップのソース ファイルへの完全なパスと、復元先のファイルへの完全パスを返します。 また、これらの各ファイルの範囲リストも返します。 要求元は、ソース ファイル内の指定された範囲を、コピー先ファイル内のマップされた範囲に復元する役割を担います。 範囲文字列の形式は、 IVssComponent::GetPartialFile の形式と同じです。