Usn rollback как вылечить

Usn rollback как вылечить thumbnail

Что такое USN Rollback

Представьте себе, что в один не очень прекрасный день вы решили восстановить один из ваших контроллеров домена (КД) из резервной копии, которую вы по привычке сделали старым проверенным средством снятия образа диска, типа Acronis TrueImage. Или решили откатить ваш виртуализованный КД к старому снимку, сделанному средствами гипервизора (и всё это работало не под Windows Server 2012). Или же вам, как и мне однажды, не повезло: из-за сбоя RAID-контроллера, который управляет аппаратным зеркальным томом, содержащим систему КД, некоторое время тому назад из  этого зеркала вылетел один диск, а после перезапуска RAID-контроллер решил загрузить систему именно с этой, устаревшей половинки зеркала.

И вот, после перезагрузки вы обнаруживаете, что ваш контроллер домена — уже не совсем контроллер домена: он совершенно не желает авторизовывать пользователей и реплицировать изменения базы данных Active Directory (AD) с другими КД.  Если провести стандартную диагностику проблем AD с помощью утилит dcdiag, то мы увидим следующее (часть выдачи dcdiag для краткости опущена, важные для дальнейшего изложения признаки выделены жирным шрифтом):

C:UsersAdministrator.DOMAIN>dcdiag

…………………………………………………………………

Doing primary tests

Testing server: Default-First-Site-NameDC2
Starting test: Advertising
Warning: DsGetDcName returned information for \DC1.domain.loc, when
we were trying to reach DC2.
SERVER IS NOT RESPONDING or IS NOT CONSIDERED SUITABLE.
         ……………………. DC2 failed test Advertising
…………………………………………………………………

Starting test: Replications
         [Replications Check,Replications Check] Inbound replication is
         disabled.
To correct, run «repadmin /options DC2 -DISABLE_INBOUND_REPL»
[Replications Check,DC2] Outbound replication is disabled.
To correct, run «repadmin /options DC2 -DISABLE_OUTBOUND_REPL»
  ……………………. DC2 failed test Replications
Starting test: RidManager
……………………. DC2 passed test RidManager
Starting test: Services
w32time Service is stopped on [DC2]
            NETLOGON Service is paused on [DC2]
         ……………………. DC2 failed test Services
— то есть, контроллер домена не объявляет себя контроллером домена, репликация базы данных AD отключена, а служба Netlogon («Сетевой вход в систему» в русской версии) находится в приостановленном состоянии. Если вы посмотрите в журнал событий Active Directory, то вы обнаружите в нём два характерных сообщения об ошибках:

с Event ID  2095

и с Event ID 2103

Первое из этих событий фиксируется лишь однажды, при первой после возникновения проблемы перезагрузке, второе же будет появляться и при каждой последующей перезагрузке контроллера домена.

Если вы наблюдаете эти признаки, то это означает, что вы столкнулись с героем этой статьи — USN Rollback: возвращением текущего максимального последовательного номера изменений (USN) КД к старому, меньшему значению  (с помощью номеров последовательных изменений — USN — Active Directory отслеживает, какие именно изменения следует передавать при репликации между контроллерами домена, подробнее об этом ниже). Прочитать официальную информацию от Microsoft об этой проблеме можно в Technet Library (применительно к специфике виртуализованных контроллеров домена) или статье 885875 MS KB (на английском языке).

Хотя механизм возникновения данной проблемы изложен в указанных выше статьях, считаю необходимым для полноты изложения остановиться на нём и в этой статье (те, кому это не интересно или некогда это читать, могут перейти сразу к описанию процедуры восстановления в разделе Собственно рецепт). Потому что, чтобы понять, чем плохо возвращение текущего максимального универсального номера последовательных изменений к старому значению, нужно знать, как используются эти номера при обновлении копий базы данных Active Directory.

Active Directory спроектирована таким образом, чтобы при синхронизации (репликации) можно было передавать на целевой КД не всю базу данных, а только те изменения, которые не были ещё получены целевым КД. Для этого каждый измененный (в т.ч. вновь созанный) в базе данных AD объект или атрибут объекта маркируется в своих метаданных идентификатором КД (Invocation ID), на котором было первоначально произведено это изменение, и последовательным номером (USN) этого изменения на данном первоначальном КД (посмотреть метаданные для любого объекта и всех его атрибутов можно командой repadmin /showmeta ). При каждом изменении, первоначально произведенном на данном КД,  этот номер увеличивается.  Кроме того, каждый КД хранит у себя список максимальных номеров реплицированных изменений для каждого из известных ему КД-источников обновлений (идентифицируемых по Invocation ID) для каждого из разделов каталога — up-to-dateness vector (его можно посмотреть командой repadmin /showutdvec ). И при репликации КД запрашивает только те изменения, номер USN которых выше максимального номера уже полученного изменения.

Из этого описания видно, что если текущий максимальный номер USN по какой-то причине уменьшится, то изменения, промаркированные номерами USN в промежутке между новым текущим максимальным номером USN и запомненными на других КД максимальными номерами реплицированных изменений, никогда не будут реплицированы на эти другие КД, то есть, база данных AD окажется в рассогласованном состоянии — её содержимое на разных контроллерах доменов навсегда останется разным.

Поскольку все алгоритмы работы AD опираются на то, что содержимое баз данных на разных КД является (или достаточно быстро становится) одинаковым, то описанное выше положение дел является недопустимым. Чтобы его избежать, в механизм репликации AD был добавлен элемент контроля, проверяющий в момент первой репликации КД, что текущий максимальный номер USN на контроллере домена не меньше, чем максимальный номер реплицированных изменений, известных его партнерам по репликации. Если это условие не соблюдается, то AD блокирует входящую и исходящую репликацию, а также помечает (в реестре) свою копию базы данных как недоступную для записи по причине возвращения номера USN к меньшему значению — что как раз вызывает те самые симптомы, что описаны в начале статьи.

Читайте также:  Как вылечить остеохондроз солью

Обнаружение USN Rollback срабатывает, к сожалению, не всегда. Если контроллер домена после восстановления из образа долго не имеет связи с другими КД, и на нём за это время происходит много изменений, то после восстановления связи может оказаться, что на момент первой репликации после восстановления текущий максимальный номер USN окажется больше максимального номера реплицированных изменений, то условие отсутствия USN Rollback будет формально соблюдено, фактически имевший место откат назад номеров изменений обнаружен не будет и часть изменений так и останется не реплицированной. Такой вариант вполне реален при восстановлении КД после катастрофического отказа где-нибудь в филиале, где из-за того же отказа пострадала и связь. Так что, обнаружив приведенные в начале статьи симптомы, можно даже порадоваться — всё могло быть и хуже.

Как лечить USN Rollback

Лучшее лечение — это, как известно, профилактика. В применении к теме данной статьи это означает: делать резервные копии базы данных AD (она входит в раздел Состояние системы для КД) регулярно, и делать их программой, которая знает, как копировать и, главное — как восстанавливать базу данных AD. Простейшая из таких программ — это встроенная Windows Server Backup. Использование правильных программ исключает большинство возможных случаев возникновения USN Rollback, а если вдруг такая беда случилась (например, из-за сбоя RAID-контроллера, зеркалирующего системный диск) — без особых проблем восстановить базу данных AD.

Но вот что делать если беда уже случилась, а резервной копии базы данных AD нет? Рекомендации производителя — Microsoft — просты и незатейливы: понизить принудительно контроллер домена, удалить его метаданные из AD и повысить обратно. Процедуры эти просты и многократно описаны, здесь я на них останавливаться не буду. В большинстве случаев это можно проделать вполне безболезненно, и, собственно говоря, при наличии возможности именно так и стоит делать.

Интереснее другой вопрос — что делать, если принудительное понижение с последующим понижением — не вариант? Например, если на КД стоит какая-то программа, которая, с немалой степенью вероятности, не перенесёт такие манипуляции. Или USN Rollback возник на единственном контроллере вновь созданного домена, в котором уже были созданы учётные записи новых пользователей. Или вот,  например, был случай на русском форуме Technet, когда системный администратор умудрился загнать в состояние USN Rollback все контроллеры корневого домена леса — как сохранить лес? В таких случаях рекомендованный производителем способ решения проблемы не годится. Но выход, тем не менее, есть.Чтобы понять, как этот выход работает, следует рассмотреть две вещи: как при корректном восстановлении базы данных AD удаётся избежать USN Rollback, и какие именно изменения вносятся в конфигурацию КД при обнаружении этого состояния.

Для обеспечения корректности работы восстановленной базы данных программа восстановления делает одну простую вещь: она после завершения восстановления (а оно производится при загрузке в режиме службы восстановления каталогов) записывает в реестр новое значение для Invocation ID в параметр «HKEY_LOCAL_MACHINESystemCurrentControlSetServicesNTDSParametersNew Database GUID», заставляя AD при запуске во время следующей загрузки в нормальном режиме сменить Invocation ID — то есть заставляет выглядеть (с точки зрения механизма репликации базы данных AD) восстановленный контроллер домена как новый, совершенно другой КД, изменения на котором учитываются независимо от прежних, сделанных его до восстановления.

Что же касается реакции на USN Rollback то она включает в себя две вещи: во-первых, для подверженного ей КД отключается  (установкой флагов DISABLE_INBOUND_REPL и DISABLE_OUTBOUND_REPL в атрибуте Options объекта «NTDS Settings», связанного с объектом данного КД в разделе конфигурации) входящая и исходящая репликация, во-вторых в реестре этого КД в параметре «HKEY_LOCAL_MACHINESystemCurrentControlSetServicesNTDSParametersDSA not writeable» (типа REG_DWORD) фиксируется, что база данных AD не является допустимой по причине возникновения USN Rollback (значение параметра устанавливается равным 4). При обнаружении этого последнего параметра происходит запись в журнал события с кодом 2103, а служба Netlogon ставится в приостановленное состояние.

И в свете всего вышеизложенного становится понятно, что нужно делать, чтобы вывести контроллер домена из состояния USN Rollback:

Собственно рецепт.

Предупреждение. Приведенные ниже действия не опираются на официальные рекомендации Microsoft (хотя и проверены мной лично). Они могут привести к возникновению рассогласованных копий базы данных Active Directory на разных контроллерах доменов (см. ниже). Поэтому используйте их под свою ответственность и только в крайнем случае.

Предупреждение 2. Если на пострадавшем контроллере домена в БД AD были внесены какие-либо изменения после возникновения состояния USN Rollback, то эти изменения, скорее всего, никогда не будут реплицированы на другие контроллеры домена, даже после восстановления по указанной ниже процедуре (причины были рассмотрены в предыдущем разделе). Из-за этого произойдёт рассогласование копий БД. И впоследствии это может вылиться в странное поведение (например, несовпадающие пароли учётных записей) или даже в нарушение репликации (ошибка 8606). Если USN Rollback был обнаружен сразу же, и контроллер домена был вовремя заблокирован, то вероятность возникновения таких ошибок невелика. Но если это был, например, восстановленный из образа диска контроллер где-нибудь в филиале, то последствия могут быть весьма неприятными. Я надеюсь рассмотреть, как можно заранее вычислить такие изменения и сделать их доступным для репликации, в одной из следующих статей.

1. Заставить AD изменить Invocation ID. Хотя можно сделать это, напрямую записав соответствующий параметр в реестр, я считаю предпочтительным сделать это с помощью штатного Backup/Restore — это заодно устранит и возможные рассогласования копий папки SYSVOL на пострадавшем контроллере домена и других КД и позволит избедать возможных проблем с её репликацией (это другая тема, которую я тут не затрагиваю). Последовательность действий примерно следующая (я не расписываю подробно все шаги, поскольку они отражены во многих руководствах):

Читайте также:  Как вылечить кролика от болезни в ушах

1а. Подготовительные действия. Установить, если ещё не установлен, компонент архивации и подготовить место, куда будет записана резервная копия (либо чистый локальный либо съёмный диск, либо пустую общую сетевую папку). Рекомендую также посмотреть (командой repadmin /showrepl ) зафиксировать текущий Invocation ID контроллера домена.

1б. Выполнить резервное копирование состояния системы (а лучше, если позволяет время и место на диске/папке — всего системного тома).

1в. Загрузиться в режиме восстановления службы каталогов и восстановить состояние системы. Рекомендую делать это от имени локальной учётной записи администратора режима восстановления службы каталогов (я наблюдал случаи, когда попытка восстановления состояния системы при регистрации под доменным администраторам приводила к необъяснимым сбоям).

1г. Загрузить контроллер домена в обычном режиме.

2. Разрешить входящую и исходящую репликацию для контроллера домена. Перед включением репликации в качестве меры предосторожности рекомендую проверить, что показываемое командой  repadmin /showrepl значение Invocation ID изменилось по сравнению со старым, зафиксированным на шаге 1а

Включение репликации производится командами

repadmin /options имя_КД -DISABLE_INBOUND_REPL

и

repadmin /options имя_КД -DISABLE_OUTBOUND_REPL

3. Удалить отметку о том, что база данных AD находится в недопустимом для записи состоянии по причине USN Rollback. Для этого надо запустить редактор реестра, выбрать ключ HKEY_LOCAL_MACHINESystemCurrentControlSetServicesNTDSParameters, найти в нём параметр «DSA not writeable» (его значение должно быть равно 4) и удалить этот параметр.

4. Запустить из приостановленного состояния (если она ещё не запустилась сама) службу Netlogon

После выполнения этих шагов я рекомендую (хотя это не обязательно) ещё раз перезагрузить контроллер домена и выполнить его диагностику с помощью команды dcdiag: после ликвидации USN Rollback могут проявиться и другие ошибки (см. например уже упоминавшийся случай на русском форуме Technet — там пришлось устранять и проблемы с SYSVOL, и не удалённые вовремя («застрявшие») из-за неработавшей репликации объекты).

Удачного вам восстановления. И больше так не делайте.

Источник

Любовь некоторых администраторов к ПО Acronis откровенно удивляет. Это ПО полезно, но без оглядки применять его везде и всюду не стоит…

Как правило «веселые ребята» которые упорно бэкапят контроллеры, после восстановления сильно удивляются тому что останавливается репликация и ничего кроме проблем это восстановление не приносит.

При большой любви к Acronis-у и прочим ничто не мешает выполнять сначала резервирование состояния системы (system State Backup) а потом уже снапшот диска. И коли есть желание восстановиться то можно восстановить снапшот а потом System State.

Не буду вдаваться в теорию (совсем немного) и предлагаю рассмотреть следующий сценарий.

Update Sequence Number (USN) это элемент метаданных репликации, называемый номером последовательного обновления. Каждый контроллер домена поддерживает USN, который ему специфичен. При внесении изменений в Active Directory к значению USN прибавляется 1. USN существует только в пределах контроллера домена, никакого отношения к USN на соседнем контроллере он не имеет.

Для простоты понимания можно привести следующий пример.

У двух контроллеров TEST-DC01 (USN=100) TEST-DC02(USN=200) свои значения USN. При репликации они ими обмениваются и каждый запоминает значение USN партнера, что бы после оповещения об изменениях партнер забрал произведенные изменения.

Теоретические изыски дальше будет излишними т.к. это тема для отдельной статьи.

Теперь пример.

У клиента два контроллера TEST-DC1 и TEST-DC2 на Windows Server 2003 и куча проблем в виде неработающей репликации и пр. иначе бы не позвонили

Проблема.

  • Репликация между контроллерами остановилась. Местные «админы» заводят пользователей поочереди на обоих контроллерах.
  • Контроллеры домена находятся в онлайне и их имена разрешаются через DNS.
  • Все необходимые для работы записи присутствуют в DNS.

Приступаем к диагностике.

  • Контроллер домена виртуализирован на сервере Hyper-V и его восстановили из снапшота двух недельной давности (хороший пример для USN rollback)
  • В журнале присутствует сообщение с ID 2095

Event Type: Error
Event Source: NTDS Replication
Event Category: Replication
Event ID: 2095
Date: 1/06/2011
Time: 4:30:20 PM
User: NT AUTHORITYANONYMOUS LOGON
Computer: TEST-DC2
Description:
During an Active Directory replication request, the local domain controller (DC) identified a remote DC which has received replication data from the local DC using already-acknowledged USN tracking numbers.

  • Так же в журнале присутствует сообщение ID 2103

Event Type: Error
Event Source: NTDS General
Event Category: Service Control
Event ID: 2103
Date: 1/06/2011
Time: 4:30:20 PM
User: NT AUTHORITYANONYMOUS LOGON
Computer: TEST-DC2
Description:
The Active Directory database has been restored using an unsupported restoration procedure.
Active Directory will be unable to log on users while this condition persists. As a result, the Net Logon service has paused.

При проверке состояния сервиса NetLogon мы убеждаемся что он действительно стоит на паузе.

Читайте также:  Как вылечить задолженность носа

C:>sc query netlogon
SERVICE_NAME: netlogon
TYPE : 20 WIN32_SHARE_PROCESS
STATE : 7 PAUSED
(STOPPABLE, PAUSABLE, IGNORES_SHUTDOWN))
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0

Изучая ситуацию дальше, запускаем на первом контроллере TEST-DC1 команду:

C:>repadmin /showutdvec test-dc1 dc=lab,dc=local
Caching GUIDs.
..
Default-First-Site-NameTEST-DC2 @ USN 13435 @ Time 2011-06-01 15:37:49
Default-First-Site-NameTEST-DC1 @ USN 12146 @ Time 2011-06-01 15:52:08

На TEST-DC2 аналогичную команду:

C:>repadmin /showutdvec test-dc2 dc=lab,dc=local
Caching GUIDs.
..
Default-First-Site-NameTEST-DC2 @ USN 13409 @ Time 2011-06-01 15:52:49
Default-First-Site-NameTEST-DC1 @ USN 12146 @ Time 2011-06-01 15:04:22

В итоге, проблема заключается в том что TEST-DC1 имеет USN равный 13435, а TEST-DC2 знает о том что входящий USN был равен 13409 (ты где был? я не верю что это ты!) и как следствие выполняется блокировка обновления службы каталогов.

Метод №1

Данный метод не является лечением от USN Rollback, он скорее предотвращает его возникновение т.к. основан на ключе реестра который сообщает что служба каталогов была восстановлена из резервной копии.

При восстановлении снапшота виртуальной машины (можно читать как при восстановлении с помощью Акрониса) необходимо.

  • Загрузить контроллер в DSRM (Directory Service Restore Mode) режиме. Если вы загрузились в обычном режиме то переходите к методу №2.
  • Открыть редактор реестра, найти ветку

HKLMSystemCurrentControlSetServicesNTDSParameters

в ней ищем параметр DSA Previous Restore Count и ставим его в 0. Если значения нет то создавать его не надо.

  • Добавляем Database restored from backupв

HKLMSystemCurrentControlSetServicesNTDSParameters
Data type: REG_DWORD
Value: 1

  • Выполняем перезагрузку.
  • Проверяем что значение DSA Previous Restore Count стало равным 1.
  • В журнале Directory Service проверьте события ID 1109 или ID 1587. Эти события подтверждают что база Active Directory восстановлена нормально.

Метод №2

Тут все немного сложнее.

Вам придется с проблемного контроллера удалять Active Directory, затем очистить метаданные из AD и восстанавливать роль контроллера.

  • На проблемном контроллере запускаем утилиту dcpromo с ключом /forceremoval
  • После завершения процедуры выключаем контроллер.
  • Процедура чистки метаданных подробно описана в статье базы знаний микрософта, но я для объема полноты приведу пошаговую инструкцию.

C:>ntdsutil
ntdsutil: metadata cleanup
metadata cleanup: connections
server connections: connect to server test-dc1
Binding to test-dc1 …
Connected to test-dc1 using credentials of locally logged on user.
server connections: quit
metadata cleanup: select operation target
select operation target: list domains
Found 1 domain(s)
0 – DC=lab,DC=local
select operation target: select domain 0
No current site
Domain – DC=lab,DC=local
No current server
No current Naming Context
select operation target: list sites
Found 1 site(s)
0 – CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=lab,DC=local
select operation target: select site 0
Site – CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=lab,DC=local
Domain – DC=lab,DC=local
No current server
No current Naming Context
select operation target: list servers in site
Found 2 server(s)
0 – CN=TEST-DC1,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=lab,DC=local
1 – CN=TEST-DC2,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=lab,DC=local
select operation target: select server 1
Site – CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=lab,DC=local
Domain – DC=lab,DC=local
Server – CN=TEST-DC2,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=lab,DC=local
DSA object – CN=NTDS Settings,CN=TEST-DC2,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=lab,DC=local
DNS host name – TEST-DC2.lab.local
Computer object – CN=TEST-DC2,OU=Domain Controllers,DC=lab,DC=local
No current Naming Context
select operation target: quit
metadata cleanup: remove selected server
Transferring / Seizing FSMO roles off the selected server.
Removing FRS metadata for the selected server.
Searching for FRS members under “CN=TEST-DC2,OU=Domain Controllers,DC=lab,DC=local”.
Deleting subtree under “CN=TEST-DC2,OU=Domain Controllers,DC=lab,DC=local”.
The attempt to remove the FRS settings on CN=TEST-DC2,CN=Servers,
CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=lab,DC=local failed because “Element not found.”;
metadata cleanup is continuing.
“CN=TEST-DC2,CN=Servers,CN=Default-First-Site-Name,CN=Sites,
CN=Configuration,DC=lab,DC=local” removed from server “test-dc1”
metadata cleanup: quit
ntdsutil: quit
Disconnecting from test-dc1…

Осталось совсем немного.

На вкладке «Name Servers» оснастки DNS удаляем записи контроллера из Forest и Domain DNS зон. В завершении открываем оснастку Active Directory Sites and Services и удаляем проблемный контроллер.

PS. Собственно разговор начинался с того что использование Акрониса для бэкапа контроллеров домена не есть хорошая практика, а в итоге получилась заметка про USN rollback.

Думаю что моя статья поможет кому то в борьбе со зверем или заставит скорректировать свои «бэкапные» предпочтения.

С использованием материалов blog.wadmin.ru/2011/07/usn-rollback/

Другие материалы по теме:

https://technet.microsoft.com/ru-ru/library/cc961924

https://kb.acronis.com/content/1505

https://www.acronis.com/en-eu/support/documentation/ABR11.5/index.html#22881.html

https://support.microsoft.com/kb/875495  (рус)

https://kb.acronis.com/content/15827  (acronis11)

Источник