SYSVOL, NETLOGON und SysvolReady

Jeder Domain Controller stellt neben LDP, GC, Kerberos und anderen Diensten auch per SMB die Freigaben SYSVOL und NETLOGON bereit. Wenn das nicht klappt, ist der DC kein richtig funktionierender Domain Controller. Dann stellt sich die Frage, warum das so ist.

SYSVOL/NETLOGON

Der Regelfall ist, dass der Domain Controller die Freigaben beim Hochfahren erstellt. Ein schneller Blick in die Netzwerkumgebung, der Aufruf von "NET SHARE" oder per PowerShell liefert direkt Ergebnisse:

In dem Beispiel liegen die Verzeichnisse physikalisch auf C:\Windows\SYSVOL aber wenn ihre Domain früher unter Windows 2000/2003 erstellt und laufend migriert wurde, dann sehen Sie vielleicht auch ein "SYSVOL_DFRS" im Pfad. Über die Einrichtung von SYSVOL bei der Installation des ersten DCs oder beim addieren eines weiteren DCs habe ich auf SYSVOL Initialisierung mehr Details beschrieben.

NETLOGON-Service und SysvolReady

Wer etwas recherchiert, findet sehr schnell heraus, dass ein Schlüssel in der Registrierung das Verhalten des NETLOGON-Dienstes beeinflusst.

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters]
"SysVol"="C:\\Windows\\SYSVOL\\sysvol"
"SysvolReady"=dword:00000000

Über einen Schlüssel in der Registrierung steuern Sie den NETLOGON-Dienst, die SYSVOL/NETLOGON-Freigaben zu erstellen und damit auch "aktiv" zu werden. Änderungen an dem Schlüssel werden von NETLOGON quasi "sofort" und nicht erst bei einem Neustart umgesetzt. Wenn der NETLOGON-Dienst läuft, dann haben wir folgendes Verhalten:

Wechsel von->auf Vorher Danach

1->0

SYSVOL/NETLOGON sind freigegeben

SYSVOL/NETLOGON sind NICHT MEHR freigegeben

0->1

SYSVOL/NETLOGON sind NICHT MEHR freigegeben

SYSVOL/NETLOGON sind freigegeben

Diese Änderung erfolgt aber nur, wenn der Dienst NETLOGON auch gestartet ist. Wenn der Dienst beendet ist, dann wird die aktuelle Einstellung erst beim Start des Dienstes angewendet

Die Arbeit von NETLOGON ist überschreibend, d.h. sollten Sie eine der Freigaben bei gestoppten NETLOGON-Dienst z.B. mit "NET SHARE SYSVOL /Delete" entfernt haben, dann werden Sie beim nächsten Start von NETLOGON wieder bereitgestellt.

Achtung: Wenn die Freigaben nicht vorhanden sind, dann sollten Sie DFS-Replikation prüfen, denn DFRS ist für die Bereitstellung relevant Siehe auch DFS, FRS, DFRS

In der Regel sollten Sie den Schlüssel nie manuell ändern müssen.

Achtung:
Wenn Sie auf allen DCs den Wert "SysvolReady=0" setzen, dann bietet kein DC mehr Anmeldedienste an und sie haben ihr AD quasi komplett außer Funktion genommen. Vielleicht hilft ihnen dann aber die Beschreibung auf DC Anmeldung scheitert weiter

SysvolReady und DFRS/FRS

Damit stellt sich natürlich die Frage, wer den Wert wann setzt. Hier kommt die Rolle des DFRS (Distributed File Replication Service) in den Blick, welche die Inhalte von SYSVOL zwischen den verschiedenen Domaincontrollern repliziert. Sie haben ein bestehendes Active Directory und installieren einen weiteren Domain Controller. Schon während der Installation wird das LDAP-Verzeichnis repliziert aber die Einrichtung von SYSVOL dauert etwas länger. Nach dem ersten Neustart des Domain Controllers wartet NETLOGON darauf, dass DFRS die Inhalte von einem anderen DC, bevorzugt ist das der PDC-Emulator, repliziert. Erst dann wird von "DFRS Replication"-Service der Wert gesetzt.

Eine Suche im DFRS-Log in c:\windows\debug nach SYSVOL liefert jede Menge Treffer, die die Funktionsweise demonstrieren.

C:\>findstr /i sysvol C:\Windows\debug\Dfsr00149.log

20240920 16:26:41.523  660 SYSM  5580 Migration::SysVolUtil::RemoveNtfrsDependencyOnNtds [MIG] Remove NTDS from NTFRS DependOnService
20240920 16:26:43.895 5972 CREG  1419 Config::RegReader::IsSysVolCommitFlagSet key: System\CurrentControlSet\Services\DFSR\Parameters\SysVols\Demoting SysVols valueName:'SysVol Information is Committed' result:0
20240920 16:26:43.895 5972 ADWR  1292 Config::AdWriter::CreateSysVolObjects [SYSVOL] IsDc:1 isSysVolCreated:0
20240920 16:26:43.895 5972 CREG  1419 Config::RegReader::IsSysVolCommitFlagSet key: System\CurrentControlSet\Services\DFSR\Parameters\SysVols\Promoting SysVols valueName:'SysVol Information is Committed' result:0
20240920 16:26:43.895 5972 ADWR  1310 Config::AdWriter::CreateSysVolObjects [SYSVOL] Promoting SysVol Commit Flag not set
20240920 16:26:43.895 5972 CFAD  7260 Config::AdConfig::ConstructSysVolObjects [SYSVOL] LocalSettings:cn=DFSR-LocalSettings,CN=DC01,OU=Domain Controllers,DC=UCLABOR,DC=DE
20240920 16:26:43.895 5972 CFAD  7261 Config::AdConfig::ConstructSysVolObjects [SYSVOL] subscriber:cn=Domain System Volume,cn=DFSR-LocalSettings,CN=DC01,OU=Domain Controllers,DC=UCLABOR,DC=DE
20240920 16:26:43.895 5972 CFAD  7262 Config::AdConfig::ConstructSysVolObjects [SYSVOL] subscription:cn=SYSVOL Subscription,cn=Domain System Volume,cn=DFSR-LocalSettings,CN=DC01,OU=Domain Controllers,DC=UCLABOR,DC=DE
20240920 16:26:43.895 5972 CFAD  7263 Config::AdConfig::ConstructSysVolObjects [SYSVOL] GlobalSettings:cn=DFSR-GlobalSettings,cn=system,DC=UCLABOR,DC=DE
20240920 16:26:43.895 5972 CFAD  7264 Config::AdConfig::ConstructSysVolObjects [SYSVOL] ReplicationGroup:cn=Domain System Volume,cn=DFSR-GlobalSettings,cn=system,DC=UCLABOR,DC=DE
20240920 16:26:43.895 5972 CFAD  7265 Config::AdConfig::ConstructSysVolObjects [SYSVOL] Content:cn=Content,cn=Domain System Volume,cn=DFSR-GlobalSettings,cn=system,DC=UCLABOR,DC=DE
20240920 16:26:43.895 5972 CFAD  7266 Config::AdConfig::ConstructSysVolObjects [SYSVOL] Topology:cn=Topology,cn=Domain System Volume,cn=DFSR-GlobalSettings,cn=system,DC=UCLABOR,DC=DE
20240920 16:26:43.895 5972 CFAD  7267 Config::AdConfig::ConstructSysVolObjects [SYSVOL] Content Set:cn=SYSVOL Share,cn=Content,cn=Domain System Volume,cn=DFSR-GlobalSettings,cn=system,DC=UCLABOR,DC=DE
20240920 16:26:43.895 5972 CFAD  7268 Config::AdConfig::ConstructSysVolObjects [SYSVOL] Member:cn=DC01,cn=Topology,cn=Domain System Volume,cn=DFSR-GlobalSettings,cn=system,DC=UCLABOR,DC=DE
20240920 16:26:43.911 5972 SYSM  3830 Migration::SysVolMigration::Connect [MIG] Trying to connect to Local or any writable Dc AD
20240920 16:26:43.927 5972 SYSM  2035 Migration::SysVolMigration::ShouldExit [MIG] ShouldExit=true
20240920 16:26:43.942 5972 CREG  1419 Config::RegReader::IsSysVolCommitFlagSet key: System\CurrentControlSet\Services\DFSR\Parameters\SysVols\Seeding SysVols valueName:'SysVol Information is Committed' result:0
20240920 16:26:43.942 5972 CPAR   587 Config::StringParam::Print ReplicatedFolderDn: CN=SYSVOL Share,CN=Content,CN=Domain System Volume,CN=DFSR-GlobalSettings,CN=System,DC=UCLABOR,DC=DE [Flags:0x1]
20240920 16:26:43.942 5972 CPAR   587 Config::StringParam::Print ReplicatedFolderName: SYSVOL Share [Flags:0x1]
20240920 16:26:43.942 5972 CPAR   957 Config::PathParam::Print RootPath: C:\Windows\SYSVOL\domain [Flags:0x1]
20240920 16:26:43.942 5972 CPAR   957 Config::PathParam::Print StagingPath: C:\Windows\SYSVOL\staging areas\UCLABOR.DE [Flags:0x1]
20240920 16:26:43.942 5972 CPAR   957 Config::PathParam::Print ConflictPath: C:\Windows\SYSVOL\domain\DfsrPrivate\ConflictAndDeleted [Flags:0x1]
20240920 16:26:43.942 4608 SYSM   363 Migration::SysvolMigrationTask::Step [MIG] Entering SYSVOL Migration task
20240920 16:26:43.942 4608 SYSM  3830 Migration::SysVolMigration::Connect [MIG] Trying to connect to Local or any writable Dc AD
20240920 16:26:43.958 4608 SYSM  5019 Migration::SysVolMigration::CreateLocalStateIfNone [MIG] Local State is 'Eliminated'
20240920 16:26:43.958 4608 SYSM  3354 Migration::SysVolMigration::GetSysVolReadyFlag [MIG] Sysvol Is Ready
20240920 16:26:43.958 4608 SYSM  2035 Migration::SysVolMigration::ShouldExit [MIG] ShouldExit=true
20240920 16:26:43.958 4608 SYSM   540 Migration::SysvolMigrationTask::Step [MIG] Migration state is already at MIG_STATE_ELIMINATED. Exiting SYSVOL Migration Thread
20240920 16:26:44.020 6856 VLMG  5754 VolumeManager::AddContentSet Starting a new ContentSetManager. csId:{0829092C-B0F2-400D-99A0-F3A82F04232F} csName:SYSVOL Share volId:{DA5F7BCC-C53C-4072-8407-799090927207} volPath:\\.\C: volState:INITIALIZING
20240920 16:26:44.020 6856 CSMG   196 ContentSetManager::ContentSetManager New content set. csId:{0829092C-B0F2-400D-99A0-F3A82F04232F} csName:SYSVOL Share rootPath:C:\Windows\SYSVOL\domain state:Normal ptr:0000026E7F5EDCE0 csInfoHistoryGuid:{00000000-0000-0000-0000-000000000000}
20240920 16:26:44.020 6856 CSMG  3150 ContentSetManager::ScheduleRestart Scheduling restart. restartCount:0 csId:{0829092C-B0F2-400D-99A0-F3A82F04232F} csName:SYSVOL Share rootPath:C:\Windows\SYSVOL\domain state:Normal ptr:0000026E7F5EDCE0 csInfoHistoryGuid:{94F3DEAA-F825-4D60-A3F1-B9DF7C96C61E}
20240920 16:26:44.020 3868 CSMG  9039 ContentSetManager::Run Running task. csId:{0829092C-B0F2-400D-99A0-F3A82F04232F} csName:SYSVOL Share rootPath:C:\Windows\SYSVOL\domain state:Normal ptr:0000026E7F5EDCE0 csInfoHistoryGuid:{94F3DEAA-F825-4D60-A3F1-B9DF7C96C61E}
20240920 16:26:44.020 3868 SYSM   632 Migration::SysvolMigrationTask::DfsrSysvolDeleted [MIG] DFSR Initial sync event reset
20240920 16:26:44.020 3868 CSMG  9074 ContentSetManager::Run Scheduling restart now. csId:{0829092C-B0F2-400D-99A0-F3A82F04232F} csName:SYSVOL Share rootPath:C:\Windows\SYSVOL\domain state:Normal ptr:0000026E7F5EDCE0 csInfoHistoryGuid:{94F3DEAA-F825-4D60-A3F1-B9DF7C96C61E}
20240920 16:26:44.020 3868 CSMG  9039 ContentSetManager::Run Running task. csId:{0829092C-B0F2-400D-99A0-F3A82F04232F} csName:SYSVOL Share rootPath:C:\Windows\SYSVOL\domain state:Normal ptr:0000026E7F5EDCE0 csInfoHistoryGuid:{94F3DEAA-F825-4D60-A3F1-B9DF7C96C61E}
20240920 16:26:44.020 3868 CSMG  7667 ContentSetManager::Initialize Initializing. csId:{0829092C-B0F2-400D-99A0-F3A82F04232F} csName:SYSVOL Share rootPath:C:\Windows\SYSVOL\domain state:Normal ptr:0000026E7F5EDCE0 csInfoHistoryGuid:{94F3DEAA-F825-4D60-A3F1-B9DF7C96C61E}
20240920 16:26:44.020 3868 CSMG  8676 [WARN] ContentSetManager::IsOfflineTooLong This replicated folder has not connected with other partners for too long. lastOnlineTime:20160916 00:28:09.298 offlineDays:2926 maxOfflineDays:60 csId:{0829092C-B0F2-400D-99A0-F3A82F04232F} csName:SYSVOL Share rootPath:C:\Windows\SYSVOL\domain state:InitialBuilding ptr:0000026E7F5EDCE0 csInfoHistoryGuid:{94F3DEAA-F825-4D60-A3F1-B9DF7C96C61E}
20240920 16:26:44.020 3868 CSMG  8424 [ERROR] ContentSetManager::Initialize Failed to initialize ContentSetManager csId:{0829092C-B0F2-400D-99A0-F3A82F04232F} csName:SYSVOL Share rootPath:C:\Windows\SYSVOL\domain state:InitialBuilding ptr:0000026E7F5EDCE0 csInfoHistoryGuid:{94F3DEAA-F825-4D60-A3F1-B9DF7C96C61E} Error:
20240920 16:26:44.020 3868 EVNT  1214 EventLog::Report         eventId:4012 parameter3:C:\Windows\SYSVOL\domain
20240920 16:26:44.020 3868 EVNT  1214 EventLog::Report         eventId:4012 parameter6:SYSVOL Share
20240920 16:26:44.020 3868 CSMG  3150 ContentSetManager::ScheduleRestart Scheduling restart. restartCount:1 csId:{0829092C-B0F2-400D-99A0-F3A82F04232F} csName:SYSVOL Share rootPath:C:\Windows\SYSVOL\domain state:InitialBuilding ptr:0000026E7F5EDCE0 csInfoHistoryGuid:{94F3DEAA-F825-4D60-A3F1-B9DF7C96C61E}
20240920 16:26:44.020 3868 CSMG  9039 ContentSetManager::Run Running task. csId:{0829092C-B0F2-400D-99A0-F3A82F04232F} csName:SYSVOL Share rootPath:C:\Windows\SYSVOL\domain state:InitialBuilding ptr:0000026E7F5EDCE0 csInfoHistoryGuid:{94F3DEAA-F825-4D60-A3F1-B9DF7C96C61E}
20240920 16:26:44.020 3868 SYSM   632 Migration::SysvolMigrationTask::DfsrSysvolDeleted [MIG] DFSR Initial sync event reset
20240920 16:26:44.020 3868 CSMG  9078 ContentSetManager::Run Scheduling restart in 1 minutes. csId:{0829092C-B0F2-400D-99A0-F3A82F04232F} csName:SYSVOL Share rootPath:C:\Windows\SYSVOL\domain state:InitialBuilding ptr:0000026E7F5EDCE0 csInfoHistoryGuid:{94F3DEAA-F825-4D60-A3F1-B9DF7C96C61E}

Wir sehen hier auch das DFRS beim Start sowohl nach Registrierungsschlüssen wie "Demoting SysVols " und "Promoting SysVols", die bei einem laufenden DC natürlich nicht da sind. Auch der Schlüssel mit dem Wert "Seeding SysVols" ist nicht mehr gesetzt, aber kommt beim Start eines neuen DCs eine wichtige Bedeutung zu. Über ihn wird gesteuert, woher der neue DC sich seine initiale Kopie von SYSVOL zieht. Das habe ich aber alles auf SYSVOL Initialisierung etwas aus ausführlicher beschrieben

Initiales Setzen

Bislang konnte ich noch nicht ermitteln, welcher Prozess zu welcher Zeit und unter welchen Bedingungen erstmalig das Feld "SysvolReady=1" setzt. DCPROMO kann es nicht sein, dass ein neu aufgesetzter DC am Anfang noch keine Freigaben hat, obwohl NETLOGON schon gestartet ist. Als ich nach einem DCPROMO den PDC-Emulator "unerreichbar" gemacht habe, konnte DFRS das SYSVOL-Verzeichnis nicht replizieren und die Freigaben wurden nicht angelegt.

Ich vermute, dass DFRS für das Setzen des Werts zuständig ist

Das basiert auf der Suche nach dem String "SysvolReady" in den verschiedenen EXE und DLLs und ich wurde in "C:\Windows\System32\dfsrs.exe" dahingehend fündig. dass folgende Texte darin zu finden war

[MIG]SettingSysvolReadyFlat to TRUE
[MIG]SettingSysvolReadyFlat to TRUE.Migration
[MIG]SysvolIsReadyMigration::SysVolMigration::GetSysVolReadyFlag
[MIG]SysvolIsReadyMigration::SysVolMigration::GetSysVolReadyFlag

Ich habe aber keinen Eintrag gefunden, der den Wert auf "False" setzt und auch wenn ich bei zwei laufenden Domain Controllern die SYSVOL-Replikation auf einem DC absichtlich anhalte, bleibt der Wert SysvolReady=1, obwohl die Dateien auf dem Server nicht mehr aktualisiert werden.

Sie sollten daher nicht nur die AD-Replikation überwachen, sondern auch die Konsistenz der SYSVOL-Replikation. DFRS ist zwar zuverlässiger als das alte Windows 2000/2003 FRS aber dennoch können Fehler passieren.

Weitere Links