Arbeiten mit Teildateien
Manchmal ist es hilfreich, nur Abschnitte von Dateien zu sichern und wiederherzustellen. VSS bietet partielle Dateimechanismen, die es Writern ermöglichen, teildateisicherungen und -wiederherstellungen anzugeben, wenn sie von Anfordernden unterstützt werden.
Teildateivorgänge sind häufig am häufigsten für Writer von Nutzen, die sehr große Dateien verwalten, von denen sich nur ein kleiner Teil zwischen Sicherungsvorgängen ändert. In diesem Fall ist es häufig hilfreich, nur diesen Abschnitt zu kopieren, der auf Sicherungsmedien geändert wurde. 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 Teildateivorgänge unterstützt und die Komponente, die die Datei verwaltet (oder die Komponente, die den Komponentensatz definiert, der die Datei enthält), dem Sicherungskomponentendokument 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 er IVssComponent::AddPartialFile aufruft.
Zusätzlich zu einem Pfad und einem Dateinamen stellt der Writer den Bereich und optionale Metadateninformationen an IVssComponent::AddPartialFilebereit.
Die Bereichsinformationen werden als Zeichenfolge bereitgestellt, die eine der folgenden Angaben enthält:
Offsetpaare in der datei zu sichernden Datei (in Bytes) und die Länge des zu sichernden Abschnitts (in Bytes), der Offset und die Länge, die durch einen Doppelpunkt getrennt werden, und jedes Paar wird durch ein Komma getrennt, z. B. Offset1:Length1, Offset2**:**Length2.
Jeder Wert ist eine 64-Bit-Ganzzahl (im Hexadezimal- oder Dezimalformat), die einen Byteoffset bzw. eine Länge in Bytes angibt.
Der vollständige Pfad einschließlich des Dateinamens im aktuellen System einer Binärbereichsdatei, die Folgendes enthält:
- Die Zahl (ausgedrückt als 64-Bit-Ganzzahl) unterschiedlicher Dateibereiche, die in der Datei enthalten sind
- Jeder Bereich wird als Paar von 64-Bit-Ganzzahlen ausgedrückt: der erste Member des Paars ist der Offset in die datei, die gesichert wird (in Bytes), und der zweite Member ist die Länge der zu sichernden Daten (in Bytes).
Wenn ein Writer eine Ranges-Datei verwendet, um einen Teildateivorgang anzugeben, muss ein Anforderer sicherstellen, dass diese Datei entweder gesichert wird (auch wenn die Datei nicht notwendigerweise Teil des Standardsicherungssatzes ist) oder dass die Bereichsinformationen auf dem Sicherungsmedium auf andere Weise beibehalten werden. Wenn die Informationen der Ranges-Datei nicht gesichert werden, ist das Wiederherstellen der teilweise gesicherten Datei nicht möglich.
Der Writer kann auch eine Zeichenfolge mit Metadaten hinzufügen. Diese Metadaten können in einem writer-spezifischen Format vorliegen, da sie es dem Writer ermöglichen sollen, zukünftige Wiederherstellungen zu überprüfen.
Mit diesen Informationen kann ein unterstützender Anforderer eine Partielle Dateisicherung ausfü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 aktuelle Daten in den letzten 65536 Bytes der Datei zu finden sind– Bytes, die 0x1239E7577A 0x1239E8577A.
Ein Writer kann 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.
Hierzu durchläuft der Anforderer zunächst die Writer mit gespeicherten Komponenten im Sicherungskomponentendokument mithilfe von IVssBackupComponents::GetWriterComponentsCount und IVssBackupComponents::GetWriterComponents.
Die IVssBackupComponents::GetWriterComponents-Schnittstelle wird dann verwendet, um Instanzen der IVssWriterComponentsExt-Schnittstelle zurückzugeben, die IVssWriterComponentsExt::GetComponent und IVssWriterComponentsExt::GetComponentCountbereitstellen, mit denen der Anforderer IVssComponent-Instanzen abrufen kann.
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 die Instanz von IVssComponent verwendet, die der Komponente entspricht, die die Datei verwaltet (oder die Komponente, die den Komponentensatz definiert, der die Datei enthält).
Wenn der Teildateivorgang durch eine Ranges-Datei gesteuert wurde, sollte diese Datei vor dem Kopieren von Daten zurück auf den Datenträger wiederhergestellt werden. Es kann vorkommen, dass der Anforderer die Ranges-Datei zurück an einen neuen Speicherort auf dem Datenträger kopieren muss. In diesem Fall wird angegeben, dass dies über die IVssBackupComponents::SetRangesFilePatherfolgt ist.
Der Anforderer fährt dann mit dem Kopieren von Daten an die entsprechenden Speicherorte im Wiederherstellungsziel fort, die sich bereits auf dem Datenträger befinden.
Ein Writer (während der Behandlung eines PostRestore-Ereignisses) durch Untersuchen von IVssComponent::GetFileRestoreStatus für die von IVssComponent::GetPartialFile angegebenenDateien bestimmt, ob der Teildateivorgang erfolgreich war. Der Writer sollte immer versuchen, die Richtigkeit dieser Wiederherstellung mithilfe der Offsetinformationen und aller Metadaten zu überprüfen, die im Sicherungskomponentendokument enthalten sind.
Wenn der Anforderer die Bereichsdatei an einem neuen Speicherort wiederherstellen musste, aktualisiert VSS diese Informationen so, dass der von IVssComponent::GetPartialFile zurückgegebene Pfad korrekt ist.