DFS-R: отладка проблем с репликацией SYSVOL и Netlogon

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).

Report Page