部分ファイルの操作

ファイルのセクションのみをバックアップおよび復元すると便利な場合があります。 VSS には 部分的なファイル メカニズムが用意されています。要求者がサポートしている場合、ライターはファイルの部分的なバックアップと復元を指定できます。

部分ファイル操作は、非常に大きなファイルを保持するライターに最も頻繁に使用されます。その中で、バックアップ操作間の変更はごくわずかです。 この場合、バックアップ メディアに変更されたセクションのみをコピーすることが多くの場合に役立ちます。 このため、部分ファイル操作は通常、増分バックアップと復元操作をサポートするために使用されますが、排他的には使用されません。

ライターが部分ファイル操作を実装する場合は、 CVssWriter::IsPartialFileSupportEnabled を使用して、処理しているリクエスターが操作をサポートしているかどうかを判断します。

リクエスターが部分的なファイル操作をサポートし、ファイルを管理するコンポーネント (またはファイルを含むコンポーネント セットを定義するコンポーネント) をバックアップ コンポーネント ドキュメントに追加する場合、ライターは IVssComponent::AddPartialFile を呼び出して保存するファイルのセクション (通常は PrepareForBackup または PostSnapshot イベントの処理中) を示します。

ライターは、パスとファイル名に加えて、範囲 (省略可能) のメタデータ情報を IVssComponent::AddPartialFile に提供します

範囲情報は、次のいずれかを含む文字列として提供されます。

  • バックアップするファイルへのオフセットのペア (バイト単位) と、バックアップするセクションの長さ (バイト単位)、コロンで区切られたオフセットと長さ、コンマで区切られた各ペア (たとえば、 Offset1**:Length1,** Offset2**:**Length2)。

    各値は、それぞれバイト オフセットと長さをバイト単位で指定する 64 ビットの整数 (16 進数または 10 進数形式) です。

  • 次を含むバイナリ範囲ファイルの現在のシステム上のファイル名を含む完全パス。

    • ファイルに含まれる個別のファイル範囲の数値 (64 ビット整数で表されます)
    • 64 ビット整数のペアとして表される各範囲: ペアの最初のメンバーがバックアップされるファイルへのオフセット (バイト単位)、2 番目のメンバーはバックアップするデータの長さ (バイト単位) です。

ライターが範囲ファイルを使用して部分的なファイル操作を指定する場合、リクエスターは、このファイルがバックアップされるか (ファイルが必ずしも既定のバックアップ セットの一部ではない場合でも)、または範囲情報が何らかの方法でバックアップ メディアに保持されることを保証する必要があります。 範囲ファイルの情報がバックアップされていない場合、部分的にバックアップされたファイルを復元することはできません。

ライターは、メタデータを含む文字列を追加することもできます。 このメタデータは、ライターが将来の復元を検証することを目的としているため、ライター固有の形式にすることができます。

この情報を使用すると、サポート要求者は部分的なファイル バックアップを実行できます。

たとえば、ヘッダー (バイト 64 から 512) にレコード数とその他の頻繁に更新される情報が含まれており、最新のデータがファイルの最後の 65536 バイト (0x1239E7577Aに0x1239E8577Aバイト) にある大きなファイルを考えてみます。

ライターは、範囲リストを文字列 "64:448,0x1239E8577A:65536" として指定できます。

復元時に、実際に復元操作を実行する前に、リクエスターはファイルの一部をサポートする必要があるかどうかを確認するためにチェックする必要があります。

これを行うには、リクエスターはまず、IVssBackupComponents::GetWriterComponentsCount と IVssBackupComponents::GetWriterComponents を使用して、バックアップ コンポーネント ドキュメントに格納されているコンポーネントを含むライターを反復処理します。

IVssBackupComponents::GetWriterComponents インターフェイスは、IVssWriterComponentsExt::GetComponents および IVssWriterComponentsExt::GetComponentCount を提供する IVssWriterComponentsExt インターフェイスのインスタンスを返すために使用されます。これにより、要求元が IVssComponent インスタンスを取得できるようになります。

これにより、要求者は、ファイルを管理するコンポーネント (またはファイルを含むコンポーネント セットを定義するコンポーネント) に対応する IVssComponent::GetPartialFile のインスタンスに対して IVssComponent::GetPartialFile を使用して、復元に参加する部分的にバックアップされたファイルに関する情報を取得できます。

部分ファイル操作が範囲ファイルによって制御された場合は、データをディスクにコピーする前に、そのファイルを復元する必要があります。 リクエスターが範囲ファイルをディスク上の新しい場所にコピーし直す必要が生じる場合があります。 この場合、 IVssBackupComponents::SetRangesFilePath を介して行ったことを示します。

その後、リクエスターは、ディスク上の復元先の適切な場所にデータをコピーします。

ライター ( PostRestore イベントの処理中) は、 IVssComponent::GetFileRestoreStatusIVssComponent::GetPartialFile によって示されるファイルを調べることで、部分的なファイル操作が成功したかどうかを判断します。 ライターは、オフセット情報とバックアップ コンポーネント ドキュメントに含まれるメタデータを使用して、この復元の正確性を常に検証する必要があります。

要求者が範囲ファイルを新しい場所に復元する必要がある場合、VSS はこの情報を更新して、 IVssComponent::GetPartialFile によって返されるパスが正しいようにします。