Arbeiten mit partiellen Dateien

Es ist manchmal nützlich, nur Abschnitte von Dateien zu sichern und wiederherzustellen. VSS bietet partielle Dateimechanismen , die es Autoren ermöglichen, partielle Dateisicherungen und -wiederherstellungen anzugeben, wenn die Anforderer dies unterstützen.

Partielle Dateivorgänge sind häufig von größtem Nutzen für Autoren, die sehr große Dateien verwalten, von denen sich nur ein kleiner Bruchteil zwischen Sicherungsvorgängen ändert. In diesem Fall ist es häufig nützlich, nur den geänderten Abschnitt in Sicherungsmedien zu kopieren. Aus diesem Grund werden partielle Dateivorgänge in der Regel, aber nicht ausschließlich, verwendet, um inkrementelle Sicherungs- und Wiederherstellungsvorgänge zu unterstützen.

Wenn ein Writer einen partiellen Dateivorgang implementieren möchte, verwendet er CVssWriter::IsPartialFileSupportEnabled , um zu bestimmen, ob der Anforderer, mit dem er arbeitet, den Vorgang unterstützt.

Wenn der Anforderer partielle Dateivorgänge unterstützt und die Komponente, die die Datei verwaltet (oder die Komponente, die den Komponentensatz definiert, der die Datei enthält) zum Dokument Sicherungskomponenten hinzufügt, gibt ein Writer an, welche Abschnitte der Datei gespeichert werden sollen (in der Regel bei der Behandlung eines PrepareForBackup- oder PostSnapshot-Ereignisses ), indem IVssComponent::AddPartialFile aufgerufen wird.

Zusätzlich zu einem Pfad und dateinamen stellt der Writer den Bereich und optionale Metadateninformationen für IVssComponent::AddPartialFile bereit.

Die Bereichsinformationen werden als Zeichenfolge bereitgestellt, die folgendes enthält:

  • Paare von Offsets in der zu sichernden Datei (in Bytes) und der Länge des zu sichernden Abschnitts (in Bytes), der Offset und die Länge werden durch einen Doppelpunkt getrennt, und jedes Paar durch ein Komma getrennt, z. B. Offset1**:Length1,** Offset2**:**Length2.

    Jeder Wert ist eine ganze 64-Bit-Zahl (im Hexadezimal- oder Dezimalformat), die einen Byteoffset und eine Länge in Bytes angibt.

  • Der vollständige Pfad, einschließlich des Dateinamens, auf dem aktuellen System einer Binärbereichsdatei, die Folgendes enthält:

    • Die Zahl (ausgedrückt als ganze 64-Bit-Zahl) unterschiedlicher Dateibereiche, die in der Datei enthalten sind
    • Jeder Bereich, der als Paar von ganzen 64-Bit-Zahlen ausgedrückt wird: Das erste Element des Paares ist der Offset in die zu sichernde Datei (in Bytes), und das zweite Element ist die Länge der zu sichernden Daten (in Bytes).

Wenn ein Writer eine Bereichsdatei verwendet, um einen partiellen Dateivorgang anzugeben, muss ein Anforderer sicherstellen, dass diese Datei gesichert wird (auch wenn die Datei nicht unbedingt Teil des Standardsicherungssatzes ist) oder dass die Bereichsinformationen auf dem Sicherungsmedium auf andere Weise beibehalten werden. Wenn die Informationen der Bereichsdatei nicht gesichert werden, ist das Wiederherstellen der teilweise gesicherten Datei nicht möglich.

Der Writer kann auch eine Zeichenfolge hinzufügen, die Metadaten enthält. Diese Metadaten können in einem Writer-spezifischen Format vorliegen, da sie es dem Writer ermöglichen sollen, alle zukünftigen Wiederherstellungen zu überprüfen.

Mit diesen Informationen kann ein unterstützender Anforderer eine partielle Dateisicherung durchführen.

Betrachten Sie beispielsweise eine große Datei, deren Header (Bytes 64-512) eine Datensatzanzahl und andere häufig aktualisierte Informationen enthält und deren neueste Daten in den letzten 65536 Bytes der Datei zu finden sind – Bytes, die zu 0x1239E7577A 0x1239E8577A.

Ein Writer könnte eine Bereichsliste als Zeichenfolge "64:448,0x1239E8577A:65536" angeben.

Bei der Wiederherstellung und vor der tatsächlichen Durchführung eines Wiederherstellungsvorgangs sollte ein Anforderer überprüfen, ob Dateien teilweise Dateiunterstützung erfordern.

Dazu durchläuft der Anforderer zunächst die Writer mit gespeicherten Komponenten in seinem Dokument für Sicherungskomponenten mithilfe von IVssBackupComponents::GetWriterComponentsCount und IVssBackupComponents::GetWriterComponents.

Die IVssBackupComponents-Schnittstelle::GetWriterComponents-Schnittstelle wird dann verwendet, um Instanzen der IVssWriterComponentsExt-Schnittstelle zurückzugeben, die IVssWriterComponentsExt::GetComponent und IVssWriterComponentsExt::GetComponent bereitstellen, die es dem Anforderer ermöglichen, IVssComponent-Instanzen abzurufen.

Dadurch kann ein Anforderer Informationen zu den teilweise gesicherten Dateien abrufen, um an einer Wiederherstellung teilzunehmen, indem er IVssComponent::GetPartialFileCount und IVssComponent::GetPartialFile für den instance von IVssComponent entsprechend der Komponente, die die Datei verwaltet (oder die Komponente, die den Komponentensatz definiert, der die Datei enthält) entspricht.

Wenn der partielle Dateivorgang von einer Bereichsdatei gesteuert wurde, sollte diese Datei vor dem Kopieren von Daten auf den Datenträger wiederhergestellt werden. Es kann vorkommen, dass der Anforderer die Bereichsdatei zurück an einen neuen Speicherort auf dem Datenträger kopieren musste. In diesem Fall gibt dies an, dass dies über IVssBackupComponents::SetRangesFilePath erfolgt ist.

Der Anforderer fährt dann mit dem Kopieren von Daten an die entsprechenden Speicherorte im Wiederherstellungsziel fort, die bereits auf dem Datenträger vorhanden sind.

Ein Writer (bei der Behandlung eines PostRestore-Ereignisses ) bestimmt, indem er IVssComponent::GetFileRestoreStatus auf die von IVssComponent::GetPartialFile angegebenen Dateien untersucht, ob der Teildateivorgang erfolgreich war. Der Writer sollte immer versuchen, die Richtigkeit dieser Wiederherstellung mithilfe der Offsetinformationen und aller metadaten im Dokument Sicherungskomponenten zu überprüfen.

Wenn der Anforderer die Bereichsdatei an einem neuen Speicherort wiederherstellen musste, aktualisiert VSS diese Informationen, sodass der von IVssComponent::GetPartialFile zurückgegebene Pfad richtig ist.