In diesem Beitrag möchte ich etwas näher auf Active-Directory-Snapshots eingehen und erläutern, wie Sie diese nutzen können – und wie nicht.

„Zunächst einmal möchten wir eines ganz klarstellen: VM-Snapshots von Domänencontrollern werden nicht unterstützt!“

Lassen Sie mich das noch einmal wiederholen: Wenn Sie über eine virtualisierte „ domain controller “ verfügen und vorhaben, von Ihrem Host (Hyper-V, VMware oder einem beliebigen öffentlichen Cloud-Anbieter) aus einen Snapshot dieser VM zu erstellen, hören Sie bitte sofort damit auf!

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 Sie keinen Snapshot einer virtuellen „ domain controller “ und verwenden Sie diesen nicht.“

Das Gleiche gilt für das Kopieren der virtuellen Festplatte eines Domain controller, die Verwendung von Differenz-Datenträgern oder jede andere, noch nicht entwickelte Funktion, mit der die VM selbst ohne eine unterstützte Sicherungs- und Wiederherstellungsmethode auf einen früheren Zeitpunkt zurückgesetzt werden kann.

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 festgelegte USN von 5000 und DC2 eine höchste festgelegte USN von 6000. (Um auf das Beispiel mit den Sicherheitskräften zurückzukommen: Sicherheitskraft Nr. 1 hat 5000 eintreffende Personen gezählt und Sicherheitskraft Nr. 2 hat 6000 eintreffende Personen gezählt.)

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 Sicherheitskräfte zurückkommen, bedeutet das, dass sie sich irgendwann gegenseitig anrufen und sagen: „Hey, ich habe 5.000 Personen gezählt“, hier sind deren Namen, und der andere antwortet: „Großartig, ich habe 6.000 gezählt, hier sind deren Namen.“

Sehen wir uns nun an, was bei einer Snapshot-Wiederherstellung geschieht (Rückversetzung des Servers in einen früheren Zeitpunkt).

Angenommen, wir stellen DC1 auf einen Zeitpunkt wieder her, zu dem die höchste festgeschriebene USN bei 3000 lag. Bedenken Sie nun, dass die UTD-Vektortabelle auf DC2 weiterhin den Wert der höchsten festgeschriebenen USN von DC1 als 5000 speichert. Wenn versucht wird, die Daten zu replizieren, meldet DC1: „Ich habe Änderungen bis einschließlich 3000.“ DC2 „schaut ihn verwundert an“ und sagt: „Aber bei der letzten Replikation hatten Sie Änderungen bis 5000 – was ist los?“

Ein Beispiel mit Sicherheitskräften? Nach diesem ersten Telefonat folgt ein weiteres, in dem Sicherheitskraft Nr. 1 sagt: „Hey, ich habe 3.000 Personen gezählt.“ Wie lautet die Antwort von Sicherheitskraft Nr. 2? „Als wir das letzte Mal gesprochen haben, sagten Sie, Sie hätten 5.000 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 die Wiederherstellung mit einer unterstützten Methode durchführen, verändert der Wiederherstellungsprozess tatsächlich die Art und Weise, wie die „ Domain Controller “ in der Aktualitätsvektortabelle erscheint, indem die GUID der Datenbank (auch als „InvocationID“ bezeichnet) geändert wird. Bei den Einträgen im Aktualitätsvektor handelt es sich nicht um DC-Namen, sondern um die Datenbank-GUIDs der Domänencontroller, die für den jeweiligen Namenskontext repliziert werden.

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

Wenn also ein Domänencontroller mithilfe einer unterstützten Methode wiederhergestellt wird, ändert sich die GUID der Datenbank; daher weiß DC2, dass die Replikation nun nicht mehr mit DC1 erfolgt, sondern mit DC1a (das zwar denselben Computernamen, dieselbe Server-GUID usw. aufweist, jedoch über eine andere AD-Datenbank verfügt, was für die Replikation entscheidend ist).

In diesem Szenario ist es also so, als hätte DC2 gerade mit der Replikation mit einem brandneuen Domain Controller begonnen, sodass kein USN-Rollback stattfindet.

Das ist die vollständige Erklärung dafür, 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.