Rolle des Anforderers beim Sichern komplexer Speicher

Wie bei allen wichtigen Vorgängen unter VSS erfordern inkrementelle und differenzielle Sicherungen eine enge Zusammenarbeit zwischen Anforderern und Writern.

Art der Sicherung

Die Infrastruktur bietet besondere Unterstützung für fünf Sicherungstypen. Die Schritte lassen sich wie folgt beschreiben:

  • Vollständig (VSS_BT_FULL). Dateien werden unabhängig vom datum der letzten Sicherung gesichert. Der Sicherungsverlauf jeder Datei wird aktualisiert, und dieser Sicherungstyp kann als Grundlage für eine inkrementelle oder differenzielle Sicherung verwendet werden. Wenn Protokolldateien vorhanden sind, werden diese möglicherweise als Ergebnis dieser Sicherung abgeschnitten.

    Zum Wiederherstellen einer vollständigen Sicherung ist nur ein einzelnes Sicherungsimage erforderlich.

  • Differenzial (VSS_BT_DIFFERENTIAL). Die VSS-API wird verwendet, um sicherzustellen, dass nur Dateien, die seit der letzten vollständigen Sicherung geändert oder hinzugefügt wurden, auf ein Speichermedium kopiert werden. Alle zwischengeschalteten Sicherungsinformationen werden ignoriert. Dies kann ganze Dateien oder bestimmte Bereiche innerhalb von Dateien umfassen. Eine differenzielle Sicherung ist einer vollständigen Sicherung zugeordnet und kann in der Regel erst wiederhergestellt werden, wenn die vollständige Sicherung wiederhergestellt wurde. Wenn Protokolldateien vorhanden sind, werden diese in der Regel nicht als Ergebnis dieser Sicherung abgeschnitten.

    Die Wiederherstellung einer differenziellen Sicherung erfordert das ursprüngliche Sicherungsimage und das neueste differenzielle Sicherungsimage, das seit der letzten vollständigen Sicherung erstellt wurde.

  • Inkrementell (VSS_BT_INCREMENTAL). Die VSS-API wird verwendet, um sicherzustellen, dass nur Dateien, die seit der letzten vollständigen oder inkrementellen Sicherung geändert oder hinzugefügt wurden, auf ein Speichermedium kopiert werden. Dies kann ganze Dateien oder bestimmte Bereiche innerhalb von Dateien umfassen. Einige Writer lassen nicht zu, dass inkrementelle Sicherungen mit differenziellen Sicherungen gemischt werden. Wenn Protokolldateien vorhanden sind, werden diese möglicherweise als Ergebnis dieser Sicherung abgeschnitten.

    Für die Wiederherstellung einer inkrementellen Sicherung sind das ursprüngliche Sicherungsimage und alle seit der ersten Sicherung vorgenommenen inkrementellen Sicherungsimages erforderlich.

  • Protokollsicherung (VSS_BT_LOG). Nur die Protokolldateien eines Writers (Dateien, die einer Komponente mit der IVssCreateWriterMetadata::AddDataBaseLogFiles-Methode hinzugefügt und durch einen Aufruf von IVssWMComponent::GetDatabaseLogFile abgerufen werden) werden gesichert. Dieser Sicherungstyp ist spezifisch für VSS. Protokollsicherungen werden häufig erstellt. In der Regel wird die Protokolldatei als Ergebnis dieser Sicherung abgeschnitten.

  • Sicherung kopieren (VSS_BT_COPY). Wie beim VSS_BT_FULL Sicherungstyp werden Dateien unabhängig vom letzten Sicherungsdatum gesichert. Der Sicherungsverlauf jeder Datei wird jedoch nicht aktualisiert, und diese Art von Sicherung kann nicht als Grundlage für eine inkrementelle oder differenzielle Sicherung verwendet werden. Protokolldateien sollten niemals als Ergebnis einer Kopiersicherung abgeschnitten werden.

Teilweise Dateiunterstützung

Einige Writer unterstützen die Dateiwiederherstellung durch das Überschreiben von Teilen der dateien, die sie verwalten. Ein Anforderer kann dies nutzen, und wenn dies der Fall ist, wird dies durch Festlegen der Informationen in IVssBackupComponents::SetBackupState angegeben.

Der Anforderer gibt an, welcher Sicherungstyp über den backupType-Parameter von IVssBackupComponents::SetBackupState ausgeführt wird. Verschiedene Writer unterstützen verschiedene Sicherungstypen. Nachdem IVssBackupComponents::GatherWriterMetadata aufgerufen wurde, kann der Anforderer ermitteln, welche Sicherungstypen ein bestimmter Writer unterstützt, indem er IVssExamineWriterMetadata::GetBackupSchema aufruft. Der zurückgegebene Wert ist eine Bitmaske, die die Unterstützung für verschiedene Sicherungstypen angibt. VSS_BS_DIFFERENTIAL gibt die Unterstützung für differenzielle Sicherungen, VSS_BS_INCREMENTAL für inkrementelle Sicherungen , VSS_BS_LOG für Protokollsicherungen und VSS_BS_COPY für Kopiersicherungen an. Alle Writer müssen vollständige Sicherungen unterstützen. Wenn ein Writer das Mischen von inkrementellen Sicherungen mit differenziellen Sicherungen nicht unterstützt, wird auch das flag VSS_BS_EXCLUSIVE_INCREMENTAL_DIFFERENTIAL hinzugefügt. Wenn der Anforderer eine inkrementelle oder differenzielle Sicherung ausführt und ein bestimmter Writer diesen Sicherungstyp nicht unterstützt, sollte für diesen Writer eine vollständige Sicherung ausgeführt werden.

Sicherungsstempel

Inkrementelle und differenzielle Sicherungen sind immer an eine vorherige Sicherung gebunden. Es gibt zwei Möglichkeiten, Sicherungen zu binden. Bei einfachen Datenspeichern kann der Anforderer die Korrelation zwischen Sicherungen nachverfolgen. Für komplexere Datenspeicher muss der Writer jedoch einen eigenen Zeitstempel mit der Sicherung beibehalten. Dieser Zeitstempel kann die Protokollposition, Prüfpunktinformationen usw. nachverfolgen. Der Anforderer kann bestimmen, ob ein bestimmter Writer seinen eigenen Zeitstempel speichern muss, indem er auf das VSS_BS_TIMESTAMPED Bit im wert sucht, der von IVssExamineWriterMetadata::GetBackupSchema zurückgegeben wird.

Writer, die einen Zeitstempel in einer Sicherung speichern, fügen den Zeitstempel entweder während der Verarbeitung von IVssBackupComponents::P repareForBackup oder während der Verarbeitung von IVssBackupComponents::D oSnapshotSet hinzu. Der Anforderer kann diesen Zeitstempel abrufen, indem er IVssComponent::GetBackupStamp aufruft. Beim Ausführen einer inkrementellen oder differenziellen Sicherung muss der Anforderer die aktuelle Sicherung an eine vorherige Sicherung binden. Dazu wird der Zeitstempel aus der vorherigen Sicherung einer bestimmten Komponente abgerufen und an die IVssBackupComponents::SetPreviousBackupStamp-Funktion übergeben. Dies muss für jede Komponente erfolgen, die in der vorherigen Sicherung gesichert wurde.

Sichern von Dateien

Sichern von Dateien, die vom Writer gemeldet werden

Jede Dateispezifikation, die ein Writer seinen Metadaten während der GatherWriterMetadata-Phase hinzufügt, enthält eine Sicherungstypmaske, die angibt, wann die Datei gesichert werden soll. Der Anforderer bestimmt, was diese Maske ist, indem er IVssWMFiledesc::GetBackupTypeMask aufruft. Die Werte in dieser Maske werden verwendet, um zu bestimmen, für welche Sicherungstypen die Dateispezifikation gesichert werden muss. Die Maske kann einen oder mehrere der folgenden Bitwerte enthalten:

VSS_FSBT_FULL_BACKUP_REQUIRED

Erforderlich für vollständige Sicherungen.

VSS_FSBT_DIFFERENTIAL_BACKUP_REQUIRED

Erforderlich für differenzielle Sicherungen.

VSS_FSBT_INCREMENTAL_BACKUP_REQUIRED

Erforderlich für inkrementelle Sicherungen.

VSS_FSBT_LOG_BACKUP_REQUIRED

Erforderlich für Protokollsicherungen.

VSS_FSBT_ALL_BACKUP_REQUIRED

Erforderlich für alle Sicherungstypen; Dies ist die Standardeinstellung.

Diese Spezifikation überschreibt die Selektivitätsspezifikation der Komponente. Betrachten Sie beispielsweise eine Komponente, deren Dateien alle mit VSS_FSBT_LOG_BACKUP_REQUIRED , aber nicht mit VSS_FSBT_FULL_BACKUP_REQUIRED gekennzeichnet sind. Angenommen, diese Komponente ist für die Sicherung nicht auswählbar (bSelectable war false, als IVssCreateWriterMetadata::AddComponent aufgerufen wurde). Im Fall einer Protokollsicherung bedeutet dies, dass immer alle Dateien in dieser Komponente gesichert werden müssen. Im Falle einer vollständigen Sicherung muss jedoch keine der Dateien gesichert werden, obwohl die Selektivität der Komponente impliziert, dass sie gesichert werden sollte.

Sicherung nach Zeitpunkt der letzten Änderung

Die in der Phase IVssBackupComponents::GatherWriterMetadata angegebenen Dateispezifikationsinformationen geben dem Anforderer keine Informationen darüber, was sich seit der letzten Sicherung geändert hat. Eine Möglichkeit für einen Writer, Änderungen an dem Anforderer anzugeben, ist die Verwendung des differenzierten Dateimechanismus. Ein Writer kann angeben, dass bestimmte Dateien in einer Komponente nur gesichert werden sollen, wenn sie seit einer bestimmten Zeit geändert wurden. Der Writer kann diese Dateien entweder in IVssBackupComponents::P repareForBackup oder in IVssBackupComponents::D oSnapshotSet angeben. Ein Anforderer kann diese Dateien ermitteln, indem er IVssComponent::GetDifferencedFilesCount und IVssComponent::GetDifferencedFile aufruft. Wenn die Dateispezifikation mit einem Satz in IVssBackupComponents::GatherWriterMetadata übereinstimmt (die derzeit basierend auf der Sicherungstypmaske gültig ist), überschreiben die differenzierten Dateiinformationen die vorherigen Informationen. Das heißt, die Dateien, die dieser Dateispezifikation entsprechen, werden jetzt nur gesichert, wenn sie seit dem angegebenen Zeitpunkt geändert wurden. Der Zeitpunkt der letzten Änderung wird mithilfe einer FILETIME-Struktur kommuniziert. Wenn der Wert dieser Struktur null ist, bedeutet dies, dass der Zeitpunkt der letzten Änderung basierend auf dem Datensatz des Anforderers zum Zeitpunkt der letzten Sicherung bestimmt werden sollte.

Partielle Dateisicherung

Eine andere Möglichkeit für einen Writer, Änderungen an dem Anforderer anzugeben, ist die Verwendung des Partiellen Dateimechanismus. Ein Writer kann Bytebereiche in Komponentendateien angeben, die gesichert werden müssen. Der Writer kann diese Dateibereiche entweder in IVssBackupComponents::P repareForBackup oder in IVssBackupComponents::D oSnapshotSet angeben. Ein Anforderer kann diese Dateien ermitteln, indem er IVssComponent::GetPartialFileCount und IVssComponent::GetPartialFile aufruft. IVssComponent::GetPartialFile gibt einen Pfad und einen Dateinamen zurück, der auf die Datei verweist, sowie eine Bereichszeichenfolge, die angibt, was in der Datei gesichert werden muss. Wie bei unterschiedlichen Dateien: Wenn pfad und Dateiname mit einer Dateispezifikation übereinstimmen, die vom Writer in IVssBackupComponents::GatherWriterMetadata festgelegt wurde, überschreibt die partielle Dateiinformation die vorherige Einstellung. Die Ranges-Zeichenfolge kann zwei Formate aufweisen: Sie kann entweder die Bereiche direkt angeben oder eine Datei angeben, die Bereichsinformationen enthält. Wenn Bereiche direkt angegeben werden, ist die Syntax eine durch Trennzeichen getrennte Liste der Form offset1:length1, offset2:length2, wobei jeder Offset und jede Länge eine 64-Bit-Ganzzahl ohne Vorzeichen ist. Wenn Sie eine Bereichsdatei angeben, sollte die Bereichszeichenfolge auf File= filename festgelegt werden, wobei filename der vollständige Pfad zur Bereichsdatei ist. Die Bereichsdatei selbst ist eine Binärdatei, die als Liste von 64-Bit-Ganzzahlen ohne Vorzeichen formatiert ist. Die erste ganze Zahl gibt an, wie viele Bereiche in der Datei dargestellt werden. Jedes nachfolgende Ganzzahlpaar stellt den Offset und die Länge eines Bereichs dar. Der Anforderer muss auch diese Bereichsdatei sichern und wiederherstellen.

Dateispezifikationsregeln

Dateispezifikationen, die über die Mechanismen "differenced-file" und "partielle Datei" hinzugefügt werden, ändern entweder die in IVssBackupComponents::GatherWriterMetadata festgelegten Dateispezifikationen oder fügen vollständig neue Dateien hinzu. Wenn Sie die in IVssBackupComponents::GatherWriterMetadata festgelegten Dateispezifikationen mithilfe des Mechanismus für partielle Dateien ändern, kann ein Anforderer erwarten, dass die Dateispezifikation genau mit einer der Dateispezifikationen übereinstimmt, die in der Komponente in IVssBackupComponents::GatherWriterMetadata festgelegt sind. Die Dateispezifikation überlappt sich nicht teilweise mit einer anderen Dateispezifikation, und sie stimmt nicht mit dateispezifikationen in anderen Komponenten dieses Writers überein. Dateispezifikationen, die mithilfe des Partiellen Dateimechanismus hinzugefügt wurden, können sich jedoch teilweise über eine andere Dateispezifikation überschneiden. Wenn dies zutrifft, setzt die Spezifikation für die differenzierte Datei oder partielle Datei die in IVssBackupComponents::GatherWriterMetadata festgelegte Spezifikation außer Kraft. Allgemeine Dateispezifikationen können einen Wert für einen alternativen Speicherort aufweisen (der von IVssWMFiledesc::GetAlternateLocation zurückgegeben wird), der einen alternativen Ort angibt, von dem die Datei zum Zeitpunkt der Sicherung abgerufen werden kann. Wenn die Dateispezifikationen, die über die Mechanismen für differenzierte Dateien oder partielle Dateien festgelegt werden, mit einer vorhandenen Dateispezifikation übereinstimmen, die einen alternativen Speicherort hat, sollten die Daten von diesem alternativen Speicherort abgerufen werden. Wenn die dateispezifikationen, die über die Mechanismen für differenzierte Dateien oder partielle Dateien festgelegt werden, nicht mit vorhandenen Spezifikationen für die Komponente übereinstimmen, sollten diese Dateibereiche jetzt der Sicherung hinzugefügt werden. Der Anforderer kann davon ausgehen, dass nur Dateien auf Volumes, die bereits in den Schattenkopiesatz aufgenommen wurden, mithilfe eines dieser Mechanismen hinzugefügt werden.

Sicherung ohne Schattenkopie

Bestimmte Dateitypen müssen möglicherweise nicht von einem Schattenkopievolume gesichert werden. Dies gilt beispielsweise häufig für Datenbankprotokolldateien. Da Protokolldateien monoton wachsen und ein Writer genau angeben kann, welche Teile der Datei mithilfe von Teildateien gesichert werden sollen, ist es häufig möglich, die Abmeldung vom ursprünglichen Volume zu sichern. Zur Optimierung kann ein Writer mithilfe der Sicherungstypmaske markieren, welche Dateien Schattenkopien für verschiedene Sicherungstypen erfordern. Der von IVssWMFiledesc::GetBackupTypeMask zurückgegebene Wert kann einen oder mehrere der folgenden Bitwerte enthalten:

VSS_FSBT_FULL_SNAPSHOT_REQUIRED

Schattenkopie für vollständige Sicherungen erforderlich.

VSS_FSBT_DIFFERENTIAL_SNAPSHOT_REQUIRED

Schattenkopie für differenzielle Sicherungen erforderlich.

VSS_FSBT_INCREMENTAL_SNAPSHOT_REQUIRED

Schattenkopie für inkrementelle Sicherungen erforderlich.

VSS_FSBT_LOG_SNAPSHOT_REQUIRED

Schattenkopie für Protokollsicherungen erforderlich.

VSS_FSBT_ALL_SNAPSHOT_REQUIRED

Schattenkopie für alle Sicherungstypen erforderlich; Dies ist die Standardeinstellung.

Wenn ein bestimmtes Volume nur Komponenten enthält, die keine Schattenkopie für diese Sicherung erfordern, kann der Anforderer den Schritt zum Erstellen einer Schattenkopie für dieses Volume überspringen. Alle Daten auf diesem Volume können direkt vom ursprünglichen Volume auf die Sicherungsmedien kopiert werden.

Wiederherstellen von Dateien

Sequenzielle Wiederherstellungen

Nachdem der Anforderer einen Wiederherstellungsvorgang ausgeführt hat, sendet er das PostRestore-Ereignis an alle Writer. In der Regel behandeln Writer dieses Ereignis, indem sie Wiederherstellungsvorgänge oder andere Vorgänge nach der Wiederherstellung ausführen. Die Wiederherstellung von inkrementellen Sicherungen erfolgt jedoch in der Regel als Abfolge von Wiederherstellungsvorgängen, eine pro inkrementeller Sicherung. Der Anforderer muss den Writer darüber informieren, dass eine solche Wiederherstellung ausgeführt wird, um die Wiederherstellung oder andere unerwünschte Vorgänge zu verhindern, bis die Wiederherstellung vollständig abgeschlossen ist. Dazu wird IVssBackupComponents::SetAdditionalRestores aufgerufen. Diese Methode wird pro Komponente aufgerufen und gibt dem Writer an, dass weitere Wiederherstellungen für diese Komponente anstehen. Für die endgültige Wiederherstellung in der Sequenz sollte das Flag für zusätzliche Wiederherstellungen auf false (standardwert) festgelegt werden, was angibt, dass dies die letzte Wiederherstellung in der Sequenz für diese Komponente ist.

Neue Ziele

Wenn dies vom Writer unterstützt wird, kann der Anforderer Datendateien an einem anderen Speicherort als dem ursprünglichen Sicherungszeitspeicherort wiederherstellen. Der Anforderer kann diese Unterstützung überprüfen, indem er IVssExamineWriterMetadata::GetBackupSchema aufruft. Das VSS_BS_WRITER_SUPPORTS_NEW_TARGET Bit wird festgelegt, wenn der Writer dieses Verhalten unterstützt. Der Anforderer informiert den Writer über den neuen Speicherort, indem er IVssBackupComponents::AddNewTarget für jede verschobene Dateispezifikation aufruft. Der Anforderer kann auch entscheiden, eine bestimmte Bereichsdatei an einem anderen Speicherort wiederherzustellen. Der Anforderer informiert den Writer über diese Änderung, indem er IVssBackupComponents::SetRangesFilePath aufruft.

Gerichtete Ziele

Bei komplizierten Wiederherstellungsszenarien möchte ein Writer möglicherweise Bereiche einer gesicherten Datei verschiedenen Bereichen derselben oder einer anderen Datei zuordnen. Dies kann mithilfe des Gerichteten Zielmechanismus erfolgen. Der Anforderer kann nach der IVssBackupComponents::P reRestore-Phase ermitteln, dass dieser Mechanismus für eine Komponente verwendet wird, indem er IVssComponent::GetRestoreTarget aufruft und auf eine Rückgabe von VSS_RT_DIRECTED überprüft. Der Anforderer kann alle diese umgeleiteten Wiederherstellungen abrufen, indem er IVssComponent::GetDirectedTargetCount und IVssComponent::GetDirectedTarget aufruft. IVssComponent::GetDirectedTarget gibt einen vollständigen Pfad zu einer Quelldatei in der Sicherung und einen vollständigen Pfad zu einer Zieldatei zurück, in der wiederhergestellt wird. Außerdem wird für jede dieser Dateien eine Bereichsliste zurückgegeben. Der Anforderer ist dann für die Wiederherstellung der angegebenen Bereiche in der Quelldatei in den zugeordneten Bereichen in der Zieldatei verantwortlich. Das Format der Ranges-Zeichenfolge ist dasselbe wie in IVssComponent::GetPartialFile.