In diesem Beitrag möchte ich Ihnen ein wenig mehr über Active Directory-Snapshots erklären und wie Sie sie verwenden können oder nicht.

Zunächst einmal möchten wir eines klarstellen: VM-Snapshots von Domain Controllern werden nicht unterstützt!

Noch einmal: Wenn Sie einen virtualisierten Domain Controller haben und einen Snapshot dieser VM von Ihrem Host (Hyper-V, VMWare oder einem anderen öffentlichen Cloud-Anbieter) machen wollen, lassen Sie es sein!

Sie können hier lesen, wie offiziell von Microsoft angegeben http://technet.microsoft.com/en-us/library/virtual_active_directory_domain_controller_virtualization_hyperv(WS.10).aspx

'Erstellen oder verwenden Sie keinen Snapshot eines virtuellen Domänencontrollers.

Das Gleiche gilt für das Kopieren der virtuellen Festplatte eines Domain-Controllers, die Verwendung von Differenzierungsplatten oder andere noch nicht erfundene Funktionen, mit denen die VM selbst in der Zeit zurückgerollt werden kann, ohne dass eine unterstützte Sicherungs- und Wiederherstellungsmethode verwendet wird.

Lassen Sie uns nun ein wenig über das Warum sprechen.

Wenn Domänencontroller replizieren, verwenden sie einen Mechanismus namens Aktualitätsvektor, um die replizierten Änderungen zu verfolgen.

Angenommen, wir haben zwei Domänencontroller DC1 und DC2, beide DCs in der Domäne corp.contoso.com. Jeder dieser Domänencontroller hat eine lokale Update-Sequenznummer (USN), die Änderungen in der lokalen Datenbank verfolgt. Diese USNs sind lokal und werden nicht repliziert (daher sind sie zwischen den beiden Domänencontrollern unterschiedlich).

Stellen Sie sich die USNs als Zähler vor, die die Änderungen an jedem DC vor Ort zählen. Ein Beispiel aus dem wirklichen Leben könnte ein Wachmann am Eingang eines Konzerts sein, der die hereinkommenden Leute zählt. Stellen Sie sich nun vor, dieses Konzert hat zwei Eingänge mit zwei Sicherheitsleuten. Wäre die Zahl gleich hoch? Mit Sicherheit nicht!

Nehmen wir also an, unser DC1 hat eine höchste gebundene USN von 5000 und DC2 hat eine höchste gebundene USN von 6000. (Um auf das Beispiel mit den Wachleuten zurückzukommen: Wachmann #1 hat 5000 Personen gezählt, die hereinkamen, und Wachmann #2 hat 6000 Personen gezählt, die hereinkamen).

Was hat das mit dem Up-to-Datiness-Vektor zu tun? Nun, der UTD-Vektor führt lokal auf jedem DC eine Liste mit der höchsten USN, die beim letzten Replikationsversuch übertragen wurde. Wenn wir also die Replikation im aktuellen Zustand auslösen, zeigt der UTD-Vektor auf DC1 nach erfolgreichem Abschluss der Replikation an:

DC2 6000

Und der UTD-Vektor auf dem DC2 würde angezeigt:

DC1 5000

Hinweis: Sie können den Aktualitätsvektor auch mit dem Befehl repadmin anzeigen:

Repadmin /showutdvec DCName PartitionDN

Wenn wir also auf das Beispiel der Sicherheitsleute zurückkommen, bedeutet das, dass sie sich irgendwann gegenseitig anrufen und sagen: "Hey, ich habe bis 5000 gezählt, hier sind ihre Namen", und der andere sagt: "Toll, ich habe bis 6000 gezählt, hier sind ihre Namen: Toll, ich habe bis 6000 gezählt, hier sind ihre Namen.

Sehen wir uns nun an, was bei einer Snapshot-Wiederherstellung (Rollback des Servers in der Zeit) passiert.

Nehmen wir an, wir stellen DC1 zu einem Zeitpunkt wieder her, an dem seine höchste festgeschriebene USN 3000 war. Denken Sie daran, dass die UTD-Vektortabelle auf DC2 immer noch den Wert der höchsten übertragenen USN von DC1 als 5000 speichert. Wenn sie versuchen zu replizieren, sagt DC1: "Hey, ich habe Änderungen bis zu 3000. DC2 schaut ihn komisch an und sagt: "Aber bei der letzten Replikation hatten Sie Änderungen bis zu 5000′, was ist los?

Beispiel Sicherheitsbeamte? Nach diesem ersten Anruf kommt ein weiterer Anruf, bei dem Wachmann Nr. 1 sagt: "Hey, ich habe 3000 Leute gezählt.", und Wachmann Nr. 2 antwortet? 'Bei unserem letzten Gespräch sagten Sie, Sie hätten bis 5000 gezählt′, was ist los?

Sehen Sie das Problem darin?

Diese Situation wird als USN-Rollback bezeichnet, und zu diesem Zeitpunkt haben die DCs aufgehört, miteinander zu kommunizieren und Informationen zu replizieren.

Und wie wird das gelöst?

Wenn Sie mit einer unterstützten Methode wiederherstellen, ändert der Wiederherstellungsprozess tatsächlich die Art und Weise, wie der Domänencontroller in der Up-to-Datiness-Vektortabelle erscheint, indem er die GUID der Datenbank (auch InvocationID genannt) ändert. Bei den Einträgen im Up-to-Datiness-Vektor handelt es sich nicht um DC-Namen, sondern um die Datenbank-GUIDs der Domänencontroller, die für den jeweiligen Benennungskontext repliziert werden.

Hinweis: Wenn Sie Repadmin /showutdvec DCName PartitionDN /nocache ausführen, werden die genannten GUIDs angezeigt.

Wenn also ein DC mit einer unterstützten Methode wiederhergestellt wird, wird die GUID der Datenbank geändert, so dass DC2 weiß, dass es nicht mehr mit DC1 repliziert wird, sondern mit DC1a (das immer noch denselben Computernamen, dieselbe Server-GUID usw. hat, aber eine andere AD-Datenbank, die für die Replikation wichtig ist).

In diesem Szenario ist es also so, als ob DC2 mit der Replikation mit einem brandneuen Domain Controller begonnen hat, so dass kein USN-Rollback stattfindet.

Das ist die vollständige Erklärung, warum Snapshots nicht unterstützt werden!

Nun, da das klar ist, was sind gute Schnappschüsse?

Gute Snapshots sind die, die mit dem Befehl ntdsutil erstellt werden, der unter der Haube VSS verwendet, um einen Snapshot der Active Directory-Datenbank zu erstellen. Diese Snapshots können zwar nicht zur Wiederherstellung der Datenbank verwendet werden (aus genau demselben Grund wie oben erläutert), aber sie können gemountet, inspiziert und einige Informationen daraus extrahiert werden, die dann mit Tools wie ldifde.exe und anderen in die Produktionsdatenbank eingefügt werden können.

Eine wichtige Erkenntnis aus diesem Artikel. Verwenden Sie die Systemstatus-Sicherung, um Ihre Domänencontroller zu sichern, und stellen Sie sicher, dass Sie wissen, wie Sie sie in jedem einzelnen möglichen Szenario wiederherstellen können.