DFS-R: отладка проблем с репликацией SYSVOL и Netlogon
Когда в инфраструктуру добавляется новый контроллер домена, может случиться так, что новый DC вообще не получит содержимое папок SYSVOL или Netlogon - эти каталоги просто окажутся пустыми. Когда происходит такая беда с репликацией, первое что приходит на ум - команда:
repadmin /showrepl
В целом-то да, эта команда действительно покажет, как обстоят дела с репликацией разделов Active Directory. Но вот с синхронизацией через DFS-R она никак не помогает.
Проверьте журнал событий на ошибки DFS-R
Гораздо полезнее в таком случае - посмотреть, что творится в журнале событий. dcdiag.exe может намекнуть, что ошибки есть, но сами сообщения он не показывает. Чтобы достать ошибки DFS-R из журнала, можно использовать вот такую команду:
Get-WinEvent -LogName "DFS Replication" -MaxEvents 60 | where LevelDisplayName -eq "Error" | Format-List
Если попадаются события с ID 5008, это говорит о проблемах с подключением. Тут стоит проверить, видят ли друг друга ваши DC по сети. Событие 4012 обычно указывает на проблему с базой данных DFS-R.
В нашем случае сообщение об ошибке говорило, что пострадавший DC слишком долго был отключён от партнёров по репликации:
Error: 9061 (The replicated folder has been offline for too long.)

Установка инструментов для DFS-R
Если вы хотите разобраться в проблемах с DFS-R поглубже, придётся установить админские утилиты от Microsoft для роли FS-DFS-Replication. Сам DFS-R-сервис, конечно, ставится автоматически при установке контроллера домена, но вот инструменты управления - нет.
Поставить их можно вот так:
Install-WindowsFeature -Name "FS-DFS-Replication" -IncludeManagementTools
Эта команда устанавливает как устаревшие утилиты командной строки, так и PowerShell-модули из DFSR.
Главный инструмент в этом наборе - dfsrdiag. Он позволяет следить за активностью репликации. Чтобы посмотреть текущее состояние, можно выполнить:
dfsrdiag replicationstate
Но не стоит сильно надеяться на этот вывод - команда часто показывает нули как для входящих, так и для исходящих соединений, даже если репликация на самом деле работает. Это потому, что replicationstate просто делает снэпшот в момент времени, а если у вас небольшая инфраструктура и репликация происходит нечасто, то этот момент может прийтись "между делом".
Более надёжный способ - проверить очередь несинхронизированных файлов:
dfsrdiag backlog /receivingmember:dc-2 /sendingmember:dc-1 /rgname:"Domain System Volume" /rfname:"SYSVOL share"
Ещё один способ глянуть на отставание в репликации - через PowerShell:
Get-DfsrBacklog -SourceComputerName dc-1 -DestinationComputerName dc-2 | select FullPathName
Если репликация зависла, эта команда покажет список файлов, которые всё ещё ждут своей очереди на синхронизацию.

Чтобы принудительно запустить синхронизацию DFS-R, используйте команду:
dfsrdiag pollAD
А чтобы инициировать репликацию Active Directory на исходном контроллере домена (том самом DC, который должен "раздать" своё содержимое другим), выполните:
repadmin /syncall /AdeP
Эти команды могут подтолкнуть процесс репликации, но если корневая причина не устранена - они проблему не решат. Прежде чем надеяться на ручной запуск, важно разобраться, что именно тормозит или ломает репликацию.

Принудительная авторитетная репликация DFS
Один из популярных способов разрулить ситуацию - провести авторитетную репликацию DFS. Суть в том, чтобы назначить один конкретный DC как источник истины, а все остальные контроллеры синхронизировали содержимое именно с него.
Для этого откройте ADSI Editor и перейдите в OU Domain Controllers внутри Default naming context. Далее раскройте узел нужного DC - того, который вы выберете как отправную точку репликации. Обычно лучше всего подходит тот контроллер, у которого роль PDC Emulator. Если не знаете, кто у вас его держит, можно выяснить через PowerShell:
Get-ADDomainController -Filter {OperationMasterRoles -like "PDC*"}
Теперь откройте свойства объекта CN=SYSVOL Subscription и найдите атрибут msDFSR-Enabled. Установите его значение в False. Повторите эту операцию на всех DC в окружении.

После этого на том контроллере, который вы выбрали в качестве авторитетного, откройте объект CN=SYSVOL Subscription и найдите атрибут msDFSR-Options. Установите для него значение 1.

Когда изменения распространились по всем контроллерам домена, на PDC Emulator выполните команду для принудительной репликации AD:
repadmin /syncall /AdeP
После синхронизации верните атрибут msDFSR-Enabled в значение TRUE на всех DC.
И, напоследок, вручную инициируйте репликацию DFS-R:
dfsrdiag pollAD
Эта команда заставит DFS-R синхронизироваться с глобальным хранилищем конфигурации, чтобы все контроллеры получили последние обновления.
Изменение параметра MaxOfflineTimeInDays
Если DFS-R отказывается синхронизировать папки из-за того, что DC слишком долго был в офлайне, можно попробовать увеличить порог MaxOfflineTimeInDays. Это особенно актуально, если в журнале встречается событие с ID 4012, в котором говорится, что лимит по времени был превышен.
Текущее значение можно проверить так:
Get-WmiObject -Namespace "Root\MicrosoftDFS" -Class DfsrMachineConfig | select MaxOfflineTimeInDays
Чтобы, например, увеличить значение до 300 дней, используйте:
$dfsrConfig = Get-WmiObject -Namespace "Root\MicrosoftDFS" -Class DfsrMachineConfig $dfsrConfig.MaxOfflineTimeInDays = 300 $dfsrConfig.Put()
Удаление базы данных DFS-R
Если всё перечисленное выше не помогло, можно заставить DFS-R пересоздать базу репликации на исходном контроллере. Один из признаков, что репликация зависла - это дата последнего изменения файла $db_normal$, который лежит тут:
C:\System Volume Information\DFSR
Эта дата обычно совпадает с моментом последнего успешного подключения к партнёру по репликации — и соответствует интервалу в сообщении события 4012.
Чтобы посчитать эту дату в PowerShell, используйте:
(get-date).AddDays(-<number of days from Event ID 4012>)
Например, если Event ID 4012 говорит о таймауте в 423 дня:
(get-date).AddDays(-423)

Если служба DFS-R простаивала слишком долго, можно принудительно сбросить её состояние, удалив устаревшую базу данных. Этот шаг удаляет застрявшие данные репликации и заставляет DFS-R заново создать рабочую базу.
Stop-Service dfsr Remove-Item -Path "C:\System Volume Information\DFSR\*" -Recurse -Force Start-Service dfsr
После перезапуска службы проверьте, начала ли отрабатываться очередь репликации:
Get-DfsrBacklog -SourceComputerName dc-1 -DestinationComputerName dc-2 | select FullPathName
Итоги
DFS Replication (DFS-R) отвечает за синхронизацию содержимого SYSVOL и Netlogon между контроллерами домена. А это, в свою очередь, — групповые политики, скрипты входа в систему и вся прочая критичная инфраструктура. Если синхронизация ломается, это напрямую сказывается на работе домена и аутентификации пользователей.
Первое, с чего стоит начинать отладку — это журнал событий и ошибки DFS-R. Если проблема в недоступности других DC — проверьте сетевые подключения. Если сеть в порядке, можно попробовать авторитетную репликацию, начиная с исходного DC (обычно это PDC Emulator).