Мониторя состояние домена с помощью утилиты DCDIAG я обнаружил сбой в работе службы репликации файлов(NTFRS).
Выполнив команду dcdiag /q я обнаружил вот такое:
«Some objects relating to the DC AD-DC have problems:
[1] Problem: Conflict Mangled Value
Base Object: CN=DC1,OU=Domain Controllers,DC=test,DC=com
Base Object Description: «DC Account Object»
Value Object Attribute: frsComputerReferenceBL
Value Object Description: «SYSVOL FRS Member Object»
Mangled Value:
CN={d26129d2-a606-454d-ab95-d227213f9d59},CN=dfs,CN=dfs,CN=DFS Volumes\0ACNF:d4ba7543-1499-4cc2-9997-9479a6176526,CN=File Replication Service,CN=System,DC=test,DC=com
Recommended Action: Check that there is not more than one SYSVOL
FRS Member Object for this DC, and if so clean up the older
duplicates.
[1] Problem: Missing Expected Value
Base Object:
CN=NTDS Settings,CN=DC1,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=test,DC=com
Base Object Description: «DSA Object»
Value Object Attribute Name: serverReferenceBL
Value Object Description: «SYSVOL FRS Member Object»
Recommended Action: See Knowledge Base Article: Q312862
……………………. AD-DC failed test VerifyReferences»
Посмотрев в журнал регистрации событий «File Replication Service» обнаружил там предупреждения с EventID 13562 и 13508
В описании этих событий может быть разный текст, но суть сводится к тому, что имеются проблемы с файловой репликацией.
Из-за отсутствия файловой репликации между контроллерами невозможно было изменить групповые политики в домене.
Немного о самом домене. В домене «test.com» один сайт с тремя контроллерами домена: DC1, DC2, DC3. DC1 — является PDC.
Для более детальной дигностики можно использовать утилиту ntfrsutl с ключом ds. Она позволяет точнее увидеть потерянные атрибуты или их значения, но как показала практика, это не имеет решающего значения. Проще все увидеть наглядно прямо в дереве LDAP.
Тем не менее, выполняю команду ntfrsutl ds на ВСЕХ контроллерах. На двух из трех получаю вот такой результат:
DC1 и DC2 фактически не реплицируются, а вот репликация между DC2 и DC3 в нормальном состоянии.
Исправление возникшей ситуации.
Собственно, поводом для написание данной статьи послужило то, что инструкция Microsoft Q312862 написана так, что довольно трудно понять что надо делать. Для этого я добавлю немного картинок, которые, надеюсь, прояснят ситуацию в вопросе что делать.
Алгоритмов исправления данной ситуации может быть много, но все они сводятся к следующим шагам:
- Восстановление атрибутов FRS;
- Очистка корня DFS;
- Восстановление дерева SYSVOL;
В зависимости от потребности и ситуации последовательность действий может быть разной, какие-то шаги можно опустить.
В моем случае я постараюсь восстановить файловую репликацию не останавливая саму службу ntfrs.
Итак, первым шагом я сделаю восстановление атрибутов FRS.
Восстановление атрибутов FRS.
Запуская команду ntfrsutl ds на всех контроллерах домена я обнаружил, что на контроллере DC1 в результатах есть такие строки «Member ref: (null)», это является признаком того, что в дереве домена есть проблемы. Чтобы их увидеть, можно использовать две стандартные оснастки ADSIedit.msc и LDP.exe.
Запускаю ADSIedit.msc, открываю дерево CN=File Replication Service,CN=System,DC=test,DC=com
Как видно из скрина у объекта CN=File Replication Service,CN=System,DC=test,DC=com есть два дочерних объекта:
- CN=DFS Volumes
- CN=Domain System Volume (SYSVOL share),CN=File Replication Service,CN=System,DC=test,DC=com
Объект CN=Domain System Volume (SYSVOL share),CN=File Replication Service,CN=System,DC=test,DC=com содержит объекты для всех членов репликации:
Иногда разрушение этой части дерева может быть таким, что вообще не будет объекта CN=Domain System Volume (SYSVOL share),CN=File Replication Service,CN=System,DC=test,DC=com и его дочерних реплик. В моем случае отсутствует реплика для контроллера DC1. Восстановление в моем случае проще, так как сохранились реплики для двух других контроллеров. Из сохранившихся других реплик можно взять текст для недостающих атрибутов.
Для копирования текста значений атрибутов хорошо использовать оснастку ldp.exe. Я немного отступлю от основной темы, чтобы показать как запустить и использовать ldp.exe. Итак, ПУСК—Выполнить—ldp.exe, открывается окно программы
Для манипуляций с деревом необходимо подключиться к этому дереву, это делается с помощью меню «Connection»—«Connect…»
Открывается окно в котором для параметра «Server:» уже показан текущий домен
остается только нажать ОК.
Если подключение прошло нормально, то вы увидите примерно такой текст
Далее необходимо сделать привязку, нажимаем «Connection»—«Bind»
В открывшемся окне указываем пользователя, от имени которого мы будем выполнять операции. Для копирования параметров атрибутов подойдет и рядовой пользователь домена. Нажимаем ОК.
Если все прошло хорошо, в окне можно увидеть такой текст как на скриншоте ниже
Для отображения дерева нажимаем View-Tree
В открывшемся окне выбираем требуемую часть дерева
и нажимаем ОК.
Все, теперь можно разворачивать объекты дерева и проводить различные манипуляции.
Возвращаюсь к основной теме, а именно, мне надо было получить текст значения атрибутов из сохранившихся реплик. Приступаю.
Для создания недостающего объекта с типом nTFRSMember возвращаюсь в ADSIedit и нажимаю правой клавишей мышки на объект CN=Domain System Volume (SYSVOL share),CN=File Replication Service,CN=System,DC=test,DC=com, выбираю пункт меню New—Object…
Выбираем тип объекта nTFRSMember и нажимаем Next
Далее необходимо задать имя объекта, в моем случае это имя контроллера DC1
В следующем окне для редактирования атрибутов объекта нажимаем кнопку More Attributes
Для создания объекта мне необходимо задать значения двух атрибутов:
- frsComputerReference
- serverReference
В окне изменения атрибутов выбираю в поле «Select property to view:» первый параметр frsComputerReference, затем возвращаюсь в оснастку ldp.exe, разворачиваю дерево до целого объекта. DC2 или DC3 не принципиально и получаю все свойства атрибутов целого объекта
Теперь мне остается выделить и скопировать значение атрибута frsComputerReference целого объекта
и вставить это значение в поле «Edit Attribute:» в ADSIedit
Остается только вручную отредактировать и сохранить атрибут, нажав кнопку SET
Аналогично поступаю для второго атрибута serverReference
Все, объект создан.
Теперь надо проверить атрибут fRSMemberReference обьекта CN=Domain System Volume (SYSVOL share),CN=NTFRS Subscriptions,CN=DC1,OU=Domain Controllers,DC=test,DC=com, этот атрибут тоже потерял свое значение. Поступаю аналогично, только значение атрибута копирую в ldp не из свойств атрибутов, а прямо копирую distinguished name нужного объекта.
Возвращаюсь в ADSIedit, нажимаю правой клавишей мышки на объект CN=Domain System Volume (SYSVOL share),CN=NTFRS Subscriptions,CN=DC1,OU=Domain Controllers,DC=test,DC=com, выбираю пункт меню Properties
В открывшемся окне нахожу в списке атрибут fRSMemberReference, выделяю и нажимаю кнопку Edit. Обратите внимание, что значение у этого атрибута Not Set
Открывается окно редактирования атрибута
Значение я беру с помощью в ldp.exe, копируя distinguished name у объекта CN=DC1,CN=Domain System Volume (SYSVOL share),CN=File Replication Service,CN=System,DC=test,DC=com нажатием правой клавишей мышки на объект и выбирая пункт меню Copy DN
Вставляю скопированное значение в атрибут fRSMemberReference и нажимаю ОК
Все, все поврежденные атрибуты объектов и сами объекты восстановлены.
Через несколько минут служба репликации восстановилась и в системных событиях появились события 13553, 13554.
Появление события 13516 говорит о том, что служба ntfrs больше не препятствует быть этому компьютеру контроллером домена .
Выполнив dcdiag вижу что все отлично
После перезагрузки контроллера DC1 добавилось событие 13516, все работает.
Очистка корня DFS
Если вы используете корень DFS а тем более если вы используете репликацию в DFS, то у вас после восстановления службы FRS может сохраниться событие 13508 в журнале, а DCDIAG в результатах может выдавать такую ошибку «Conflict Mangled Value». Это происходит из-за разных причин, но в основном из-за вручную удаленных объектов репликации.
Если ссылок в корне DFS не много, то самым быстрым способом будет пересоздать все ссылки, очистив дерево. При этом очистив дерево от ненужных объектов, а также очистив реестры всех контроллеров домена. Тогда при повторном создании корня DFS все объекты дерева и ветки реестра будут созданы заново.
Итак, что я удаляю в такой ситуации:
Сначала я запускаю оснастку «Distributed File System». У меня всего две корневых ссылки, в одной из них включена репликация.
Затем я удаляю целевые папки
Если вы удаляете последнюю целевую папку для корневой ссылки, то при этом удаляется и сама ссылка.
Удаляю оставшуюся корневую ссылку
Теперь удаляю корневые целевые папки, папку с текущего контроллера удаляю последней
Удаление последней целевой папки удаляю весь корень DFS.
Все, корень DFS удален, но в дереве все объекты остались, удаляем и их. Делаю это с помощью ADSIedit.
Первый объект, который я удаляю, это объект
CN=DFS Volumes,CN=File Replication Service,CN=System,DC=test,DC=com. Удаляю его полностью со всем содержимым.
Второе место в котором я чищу ссылки это объект «CN=NTFRS Subscriptions» для каждого контроллера домена, который участвовал в репликации. В моем случае:
«CN=DFS Volumes\0ACNF:98627048-5ae0-492c-b929-911c72c54100,CN=NTFRS Subscriptions,CN=DC1,OU=Domain Controllers,DC=test,DC=com» — для контроллера DC1
«CN=DFS Volumes\0ACNF:2d3688fd-094c-4bdd-b017-8e2b29a51c5f,CN=NTFRS Subscriptions,CN=DC2,OU=Domain Controllers,DC=test,DC=com» — для контроллера DC2
Так как контроллер DC3 не учувствовал в репликации ссылок DFS, то у него и не создавались подобные объекты.
После очистки дерева необходимо почистить реестр каждого контроллера домена. Запускаю regedit и открываю ветку реестра «HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NtFrs\Parameters\Replica Sets». В этой ветке должно быть несколько реплик, которые относятся к службе FRS. Нахожу реплики, которые относятся к DFS. У этих реплик значение параметра «Replica Set Type» будет равно «DFS»
Реплики
удаляю в двух ветках реестра:
- «HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NtFrs\Parameters\Replica Sets»
- «HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NtFrs\Parameters\Cumulative Replica Sets»
Все реплики удалены
Аналогично удаляю на всех контроллерах домена.
После создания корня DFS заново все выглядит вот так:
А в системных событиях появились записи о событиях 13553 и 13554 говорящие о успешном запуске репликации ссылок DFS.
Восстановление дерева SYSVOL
Иногда при восстановлении службы FRS может понадобиться восстановление дерева SYSVOL.
Данная процедура описана в документе Майкрософт Q315457
Но еще раз по пунктам весь процесс и с картинками:
1.Останавливаем службу ntfrs НА ВСЕХ КОНТРОЛЛЕРАХ ДОМЕНА командой net stop ntfrs;
2.Переписываем все файлы из c:\WINDOWS\SYSVOL\domain в какую-либо папку на том же самом диске. Данную процедуру я обычно делаю с помощью Total Commander, так как в нем есть возможность явно указать сохранение существующих прав при копировании или перемещении(«Копировать права доступа NTFS…»). Если будете пользоваться проводником, то копируйте только в пределах тома. По умолчанию в проводнике при копировании в пределах тома права сохраняются.
3.Из папок c:\WINDOWS\SYSVOL\domain\Policies и c:\WINDOWS\SYSVOL\domain\scripts очищаем все содержимое. В самом конце процесса в эти папки нужно будет вернуть содержимое из бэкапа.
Проверяем структуру всех папок. Должно быть вот так:
c:\WINDOWS\SYSVOL\domain\
c:\WINDOWS\SYSVOL\domain\Policies\
c:\WINDOWS\SYSVOL\domain\scripts\
c:\WINDOWS\SYSVOL\staging\
c:\WINDOWS\SYSVOL\staging\domain\
c:\WINDOWS\SYSVOL\staging areas\
c:\WINDOWS\SYSVOL\staging areas\test.com\
c:\WINDOWS\SYSVOL\sysvol\
c:\WINDOWS\SYSVOL\sysvol\test.com\
4.Проверяем junction points в папках :
- c:\WINDOWS\SYSVOL\staging areas
- c:\WINDOWS\SYSVOL\sysvol
Если их нет, восстанавливаем утилитой linkd.
Для папки c:\WINDOWS\SYSVOL\sysvol команда выглядит вот так:
linkd C:\WINDOWS\sysvol\sysvol\test.com C:\WINDOWS\sysvol\sysvol
Для папки
C:\WINDOWS\sysvol\staging areas команда выглядит вот так: linkd «C:\WINDOWS\sysvol\staging areas\test.com» c:\windows\sysvol\staging\domain Кавычки в команде обязательны, так как в пути есть пробелы
5.Правим реестр. Выбираем самый «хороший» контроллер, который будет главным(авторитетным) при восстановлении. На авторитетном контроллере устанавливаем значение параметра BurFlags в значение D4 на остальных контроллерах D2. Параметр BurFlags есть во всех репликах, которые находятся в реестре в разделе HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NtFrs\Parameters\Cumulative Replica Sets В моем случае реплики две.
Количество реплик в реестре зависит от того учувствует ли контроллер в репликации корня DFS(ссылок) или нет. На остальных контроллерах ставим D2.
6.Запускаем службу ntfrs командой net start ntfrs на главном(авторитетном) контроллере. Потом запускаем на всех остальных.
При успешном старте службы ntfrs на контроллере в системных событиях должна появиться событие 13516.
7.На главном(авторитетном) контроллере возвращаем содержимое папок c:\WINDOWS\SYSVOL\domain\Policies и c:\WINDOWS\SYSVOL\domain\scripts из бэкапа. Оно должно тут же реплицироваться на все остальные конроллеры. При копировании не забываем про права.
Если вам понравилась статья, то «на чашку кофе» можно перевести вот сюда:
Для посетителей из РФ: кошелек ЮMoney https://yoomoney.ru/to/4100116592326121
Для посетителей из РБ: оплата через ЕРИП: «Банковские, финансовые услуги»-«Банки, НКФО»-«Альфа-Банк»-«Пополнение счета | код услуги 4485471» На счет: BY05ALFA30147131190010270000
У меня в сети 2 контроллера домена и была эта ошибка, репликация не работала. Совершив манипуляции из данной статьи получил результат: 1 контроллер перестал видеть домен, в сети началась жопа полная. Спасло восстановление состояния системы из backup. Ошибка репликации после восстановления конечно же осталась, худо бедно, но сервера работают. Лишний раз вспомнил слова «Пока работает не лезь».
Очень жаль что так вышло. Что еще было причиной в вашем случае — не скажу. Но исправлять все равно придется, иначе не реплицируются групповые политики и скрипты. Можно, конечно , пойти по такому пути: определить работоспособный контроллер, захватить на него все роли FSMO. Вывести из домена нерабочий контроллер, установить и ввести в домен новый контроллер обязательно под другим именем!!!