複合ストアのバックアップにおけるリクエスター ロール

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

バックアップの種類

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

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

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

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

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

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

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

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

  • バックアップのコピー (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 フラグも追加されます。 リクエスターが増分バックアップまたは差分バックアップを実行していて、特定のライターがそのバックアップの種類をサポートしていない場合は、そのライターに対して完全バックアップを実行する必要があります。

バックアップ スタンプ

増分バックアップと差分バックアップは、常に以前のバックアップに関連付けられます。 バックアップを結び付ける方法は 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 でした)。 ログ バックアップの場合、これは、このコンポーネント内のすべてのファイルを常にバックアップする必要があることを意味します。 ただし、完全バックアップの場合は、コンポーネントの選択性がバックアップする必要があることを意味するにもかかわらず、どのファイルもバックアップする必要はありません。

最終変更時刻によるバックアップ

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

ファイルの部分的なバックアップ

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

ファイル指定規則

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

シャドウ コピーを使用しないバックアップ

特定の種類のファイルをシャドウ コピー ボリュームからバックアップする必要がない場合があります。 たとえば、これは多くの場合、データベース ログ ファイルに当てはまります。 ログ ファイルは単調に拡張され、ライターは部分ファイルを使用してバックアップするファイルの部分を正確に指定できるため、多くの場合、元のボリュームからログオフをバックアップできます。 最適化として、ライターは、バックアップの種類のマスクを使用して、さまざまなバックアップの種類にシャドウ コピーを必要とするファイルをマークできます。 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 を呼び出すことによって行われます。 このメソッドはコンポーネントごとに呼び出され、そのコンポーネントに対してより多くの復元が行われることをライターに示します。 シーケンスの最後の復元では、additional-restores フラグを false (既定値) に設定する必要があります。これは、これがそのコンポーネントのシーケンスの最後の復元であることを示します。

新しいターゲット

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

有向ターゲット

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