Anfordererrolle 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 spezielle Unterstützung für fünf Sicherungstypen. Die Schritte lassen sich wie folgt beschreiben:

  • Full (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 sie möglicherweise aufgrund dieser Sicherung abgeschnitten.

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

  • Differenziell (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 sollen. alle Zwischensicherungsinformationen werden ignoriert. Dies kann ganze Dateien oder bestimmte Bereiche in Dateien umfassen. Eine differenzielle Sicherung ist einer vollständigen Sicherung zugeordnet und kann im Allgemeinen erst wiederhergestellt werden, nachdem die vollständige Sicherung wiederhergestellt wurde. Wenn Protokolldateien vorhanden sind, werden sie aufgrund dieser Sicherung in der Regel nicht abgeschnitten.

    Zum Wiederherstellen einer differenziellen Sicherung sind das ursprüngliche Sicherungsimage und das letzte differenzielle Sicherungsimage erforderlich, 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 in Dateien umfassen. Einige Writer lassen nicht zu, dass inkrementelle Sicherungen mit differenziellen Sicherungen kombiniert werden. Wenn Protokolldateien vorhanden sind, werden sie möglicherweise aufgrund dieser Sicherung abgeschnitten.

    Zum Wiederherstellen einer inkrementellen Sicherung sind das ursprüngliche Sicherungsimage und alle inkrementellen Sicherungsimages erforderlich, die seit der ersten Sicherung erstellt wurden.

  • 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::GetDatabaseLogFileabgerufen werden) werden gesichert. Dieser Sicherungstyp ist spezifisch für VSS. Protokollsicherungen werden häufig durchgeführt. In der Regel wird die Protokolldatei aufgrund dieser Sicherung abgeschnitten.

  • Kopiesicherung (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 nie als Ergebnis einer Kopiersicherung abgeschnitten werden.

Partielle Dateiunterstützung

Einige Writer unterstützen die Dateiwiederherstellung durch das Überschreiben von Teilen der dateien, die sie verwalten. Ein Anforderer kann so entworfen werden, dass er dies nutzt. Wenn dies der Fall ist, wird dies durch Festlegen der Informationen in IVssBackupComponents::SetBackupStateangegeben.

Der Anfordernde gibt an, welcher Sicherungstyp über den backupType-Parameter von IVssBackupComponents::SetBackupStateausgefü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 IVssExwriterMetadata::GetBackupSchemaaufruft. Der zurückgegebene Wert ist eine Bitmaske, die die Unterstützung für verschiedene Sicherungstypen angibt. VSS _ BS _ DIFFERENTIAL gibt 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 Kopiesicherungen an. Alle Writer müssen vollständige Sicherungen unterstützen. Wenn ein Writer das Kombinieren inkrementeller Sicherungen mit differenziellen Sicherungen nicht unterstützt, wird auch das FLAG _ VSS BS _ EXCLUSIVE INCREMENTAL _ _ DIFFERENTIAL hinzugefügt. Wenn der Anfordernde eine inkrementelle oder differenzielle Sicherung durchführt und ein angegebener Writer diesen Sicherungstyp nicht unterstützt, sollte eine vollständige Sicherung für diesen Writer 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 ermitteln, ob ein angegebener Writer seinen eigenen Zeitstempel speichern muss, indem er das _ VSS BS _ TIMESTAMPED-Bit in dem wert überprüft, der von IVssExchildWriterMetadata::GetBackupSchemazurü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 oSnapshotSethinzu. Der Anfordernde kann diesen Zeitstempel abrufen, indem er IVssComponent::GetBackupStamp aufruft. Beim Ausführen einer inkrementellen oder differenziellen Sicherung muss der Anforderer die aktuelle Sicherung mit einer vorherigen Sicherung verknüpfen. Hierzu wird der Zeitstempel aus der vorherigen Sicherung einer bestimmten Komponente erhalten und an die Funktion IVssBackupComponents::SetPreviousBackupStamp ü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 den Metadaten während der GatherWriterMetadata-Phase hinzufügt, enthält eine Sicherungstypmaske, die angibt, wann die Datei gesichert werden soll. Der Anfordernde bestimmt, was diese Maske ist, indem er IVssWMFiledesc::GetBackupTypeMaskaufruft. 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:

VOLLSTÄNDIGE VSS _ _ _ FSBT-SICHERUNG _ ERFORDERLICH

Erforderlich für vollständige Sicherungen.

VSS _ FSBT _ DIFFERENTIAL BACKUP _ _ ERFORDERLICH

Erforderlich für differenzielle Sicherungen.

INKREMENTELLE VSS _ _ _ FSBT-SICHERUNG _ ERFORDERLICH

Erforderlich für inkrementelle Sicherungen.

VSS _ _ FSBT-PROTOKOLLSICHERUNG _ _ ERFORDERLICH

Erforderlich für Protokollsicherungen.

VSS _ FSBT _ – ALLE _ _ SICHERUNGEN ERFORDERLICH

Für alle Sicherungstypen erforderlich. 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 kann nicht für die Sicherung ausgewählt werden (bSelectable war false, als IVssCreateWriterMetadata::AddComponent aufgerufen wurde). Im Fall einer Protokollsicherung bedeutet dies, dass alle Dateien in dieser Komponente immer gesichert werden müssen. Bei 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 Anfordernden keine Informationen darüber, was sich seit der letzten Sicherung geändert hat. Eine Möglichkeit für einen Writer, Änderungen an der Anfordernden anzugeben, ist die Verwendung des Differenzdateimechanismus. Ein Writer kann angeben, dass bestimmte Dateien in einer Komponente nur dann gesichert werden sollen, wenn sie seit einem bestimmten Zeitpunkt geändert wurden. Der Writer kann diese Dateien entweder in IVssBackupComponents::P repareForBackup oder in IVssBackupComponents::D oSnapshotSetangeben. Ein Anfordernder kann diese Dateien ermitteln, indem er IVssComponent::GetDifferencedFilesCount und IVssComponent::GetDifferencedFile aufruft. Wenn die Dateispezifikation mit einem Satz in IVssBackupComponents::GatherWriterMetadata übereinstimmt (der 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 0 (null) ist, bedeutet dies, dass der Zeitpunkt der letzten Änderung basierend auf dem Datensatz des Anfordernden zum Zeitpunkt der letzten Sicherung bestimmt werden sollte.

Partielle Dateisicherung

Eine weitere Möglichkeit für einen Writer, Änderungen an der Anfordernden 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 oSnapshotSetangeben. Ein Anfordernder kann diese Dateien ermitteln, indem er IVssComponent::GetPartialFileCount und IVssComponent::GetPartialFile aufruft. IVssComponent::GetPartialFile gibt einen Pfad und einen Dateinamen zurück, die auf die Datei zeigen, sowie eine Bereichszeichenfolge, die angibt, was in der Datei gesichert werden muss. Wie bei differenzierten Dateien überschreiben die Partiellen Dateiinformationen die vorherige Einstellung, wenn der Pfad und der Dateiname mit einer Dateispezifikation übereinstimmen, die vom Writer in IVssBackupComponents::GatherWriterMetadatafestgelegt wurde. Die Ranges-Zeichenfolge kann zwei Formate aufweisen: Sie kann entweder die Bereiche direkt angeben oder eine Datei mit Bereichsinformationen angeben. 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 Ranges-Datei angeben, sollte die Ranges-Zeichenfolge auf File= filename festgelegt werden, wobei filename der vollständige Pfad zur Ranges-Datei ist. Die Ranges-Datei 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 Paar von ganzen Zahlen stellt den Offset und die Länge eines Bereichs dar. Der Anforderer muss diese Bereichsdatei ebenfalls sichern und wiederherstellen.

Dateispezifikationsregeln

Dateispezifikationen, die durch die Mechanismen differenced-file und partial-file hinzugefügt werden, ändern entweder die in IVssBackupComponents::GatherWriterMetadata festgelegten Dateispezifikationen oder fügen völlig neue Dateien hinzu. Wenn Dateispezifikationen geändert werden, die in IVssBackupComponents::GatherWriterMetadata mithilfe des Partiellen Dateimechanismus festgelegt sind, kann ein Anforderer erwarten, dass die Dateispezifikation genau mit einer der Dateispezifikationen übereinstimmt, die in der Komponente in IVssBackupComponents::GatherWriterMetadata festgelegt sind. Die Dateispezifikation überschneidet 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 überlappen. Wenn dies zutrifft, überschreibt die Spezifikation differenced-file oder partial-file den in IVssBackupComponents::GatherWriterMetadata festgelegten Spezifikationssatz. Allgemeine Dateispezifikationen können einen Wert für einen alternativen Speicherort aufweisen (zurückgegeben von IVssWMFiledesc::GetAlternateLocation),der einen alternativen Ort angibt, von dem die Datei zum Zeitpunkt der Sicherung abzurufen ist. Wenn die Dateispezifikationen, die über die Mechanismen differenced-file oder partial file festgelegt werden, mit einer vorhandenen Dateispezifikation übereinstimmen, die einen alternativen Speicherort hat, sollten die Daten von diesem alternativen Speicherort übernommen werden. Wenn die Dateispezifikationen, die über die Mechanismen differenced-file oder partial-file festgelegt wurden, nicht mit vorhandenen Spezifikationen für die Komponente übereinstimmen, sollten diese Dateibereiche jetzt der Sicherung hinzugefügt werden. Der Anfordernde kann davon ausgehen, dass nur Dateien auf Volumes, die bereits im Schattenkopiesatz enthalten sind, mit einem 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 zunehmen und ein Writer genau angeben kann, welche Teile der Datei mithilfe von Teildateien gesichert werden sollen, ist es häufig möglich, das Protokoll vom ursprünglichen Volume zu sichern. Als 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:

VOLLSTÄNDIGE VSS _ _ _ FSBT-MOMENTAUFNAHME _ ERFORDERLICH

Schattenkopie für vollständige Sicherungen erforderlich.

VSS _ FSBT _ DIFFERENTIAL SNAPSHOT _ _ ERFORDERLICH

Schattenkopie für differenzielle Sicherungen erforderlich.

INKREMENTELLE VSS _ _ _ FSBT-MOMENTAUFNAHME _ ERFORDERLICH

Schattenkopie erforderlich für inkrementelle Sicherungen.

VSS _ _ FSBT-PROTOKOLLMOMENTAUFNAHME _ _ ERFORDERLICH

Schattenkopie für Protokollsicherungen erforderlich.

VSS _ FSBT _ – ALLE _ MOMENTAUFNAHMEN _ ERFORDERLICH

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

Wenn ein bestimmtes Volume nur Komponenten enthält, für die für diese Sicherung keine Schattenkopie erforderlich ist, 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 das Sicherungsmedium kopiert werden.

Wiederherstellen von Dateien

Sequenzielle Wiederherstellungen

Nachdem der Anforderer einen Wiederherstellungsvorgang ausgeführt hat, sendet er das PostRestore-Ereignis an alle Writer. Im Allgemeinen behandeln Writer dieses Ereignis, indem sie Wiederherstellungsvorgänge oder andere Vorgänge nach der Wiederherstellung ausführen. Die Wiederherstellung inkrementeller 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 zu verhindern, dass die Wiederherstellung oder andere unerwünschte Vorgänge ausgeführt werden, bis die Wiederherstellung vollständig abgeschlossen ist. Dazu wird IVssBackupComponents::SetAdditionalRestoresaufgerufen. 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 die zusätzlichen Wiederherstellungen auf FALSE festgelegt werden (standardwert), 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 Anfordernde kann diese Unterstützung überprüfen, indem er IVssExwriterMetadata::GetBackupSchema aufruft. Das BIT VSS _ BS WRITER SUPPORTS NEW _ _ _ _ TARGET wird festgelegt, wenn der Writer dieses Verhalten unterstützt. Der Anfordernde 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 Anfordernde informiert den Writer über diese Änderung, indem er IVssBackupComponents::SetRangesFilePath aufruft.

Directed Targets

Bei komplizierten Wiederherstellungsszenarien kann ein Writer Bereiche einer gesicherten Datei verschiedenen Bereichen derselben oder einer anderen Datei zuordnen. Dies kann mithilfe des gerichteten Zielmechanismus erfolgen. Der Anfordernde kann nach der IVssBackupComponents::P reRestore-Phase ermitteln, ob 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 durch Aufrufen von IVssComponent::GetDirectedTargetCount und IVssComponent::GetDirectedTargetabrufen. 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 eine Bereichsliste für jede dieser Dateien 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 Bereichszeichenfolge ist dasselbe wie in IVssComponent::GetPartialFile.