Хотите очистить AD? Ntdsutil поможет

Если сеть компании функционирует под управлением Windows 2000, скорее всего, в ней установлена служба Active Directory. Для хранения информации в службе AD, как и в большинстве других служб каталогов, используется база данных; в этом случае речь идет об одной из версий процессора баз данных Microsoft Extensible Storage Engine (ESE). AD — центральный компонент Windows 2000. Данную службу можно уподобить сердцу системы, поэтому администратор должен с особым вниманием следить за ее состоянием. Этому будут способствовать выполняемые в автономном режиме регулярные сеансы дефрагментации с помощью утилиты Ntdsutil ntdsutil.exe

Знакомство с AD и с вариантами дефрагментации

Прежде чем приступать к работе с утилитой Ntdsutil, необходимо познакомиться с важнейшими файлами базы данных AD — edb.log, ntds.dit, res1.log, res2.log и edb.chk. По умолчанию все они хранятся в каталоге \%systemroot% tds контроллера домена (domain controller, DC). Как показано на Экране 1, в процессе установки службы AD администратор может с помощью Dcpromo указать другие каталоги для хранения указанных файлов журналов и самой базы данных каталога. Если речь идет о контроллере домена Windows 2000, лучше всего устанавливать файлы операционной системы, журналы регистрации транзакций и файлы базы данных на отдельных физических дисках. Чаще всего эти файлы устанавливаются на отдельных зеркалированных накопителях (например, на системах RAID уровня 1).

Экран 1. Указание размещения базы данных AD и файлов журналов.

После любого изменения содержимого AD выполняется операция записи; все изменения записываются как в файл базы данных, так и в файл журнала. При внесении операционной системой обновлений в базу данных служба AD периодически сбрасывает на диск содержимое буфера журнального файла. Скорость записи данных определяется характеристиками системы. По завершении процесса AD отменяет все открытые за это время транзакции. В ходе установки службы AD Windows 2000 создает файлы res1.log и res2.log. При этом размер каждого из них составляет 10 Мбайт. Если окажется, что все дисковое пространство занято и системе некуда записывать изменения, служба AD присвоит файлам res1.log и res2.log новые имена и начнет их использовать.

Дефрагментация выполняется в двух режимах: в оперативном (online defragmentation) и в автономном (offline defragmentation). По умолчанию дефрагментация в оперативном режиме, являющаяся частью реализованного в службе AD процесса «уборки мусора», осуществляется автоматически раз в 12 ч. Данный процесс автономно выполняется на каждом контроллере домена; его результатом является высвобождение пространства внутри файла базы данных службы AD. Более подробная информация о процессе содержится в подготовленной специалистами Microsoft статье «The Active Directory Database Garbage Collection Process», размещенной по адресу: http://support.microsoft.com/?kbid=198793.

Достоинство дефрагментации в оперативном режиме состоит в том, что процесс выполняется автоматически и без отключения контроллера домена. Но есть у него и недостаток: общий размер файла ntds.dit при этом не сокращается. Рассматриваемый режим дефрагментации высвобождает лишь свободное пространство внутри самого файла. Для сокращения общего размера базы данных на диске необходимо выполнить дефрагментацию в автономном режиме; при этом файл ntds.dit будет сжат. Чтобы определить, когда требуется выполнить дефрагментацию в автономном режиме, проще всего установить уровень регистрации «сбора мусора» равным 1. В этом случае агент службы каталога directory service agent (DSA) будет регистрировать событие, извещающее о размере базы данных и о приблизительном объеме свободного пространства на диске.

Если вам приходится выполнять лишь повседневные операции, оснований для проведения дефрагментации AD в автономном режиме может и не возникнуть. Но после перемещения крупного объекта или после перехода на Windows 2000 такая процедура обычно бывает весьма полезной. Предпосылки к проведению дефрагментации в автономном режиме могут возникнуть, к примеру, в следующей ситуации. Администратор использует продукт независимого поставщика, который сначала создает дубликаты учетных записей в AD, затем объединяет эти формальные записи с оригиналами и позднее в процессе высвобождения пространства удаляет ранее созданные дубликаты. Подобные операции по добавлению и удалению элементом могут привести к внутренней фрагментации AD, однако можно с помощью утилиты Ntdsutil выполнить дефрагментацию файлов и сжать базу данных так, чтобы необходимое дисковое пространство было освобождено. Заметим, что, если в обычных условиях свободное дисковое пространство тома системы настолько мало, что его можно существенно увеличить за счет сжатия базы данных, может оказаться, что Ntdsutil будет не в состоянии решить эту проблему.

Следует помнить о том, что контроллеры доменов лишь тиражируют изменения, а значит, выполнение дефрагментации файла ntds.dit на одном контроллере домена никоим образом не влияет на файлы ntds.dit, хранящиеся на других контроллерах доменов. А значит, придется вручную выполнять дефрагментацию в автономном режиме на каждом контроллере домена. Внутренняя организация службы AD такова, что размеры файла ntds.dit для разных контроллеров доменов будут разными.

Работа с утилитой Ntdsutil

Процесс дефрагментации в автономном режиме разъясняется в подготовленной специалистами Microsoft статье «Performing Offline Defragmentation of the Active Directory Database», с которой можно ознакомиться по адресу: http://support.microsoft.com/?kbid=232122. Я резюмировал ее содержание, добавив лишь несколько дополнительных пунктов. Это было сделано в качестве меры предосторожности для того, чтобы ошибки неопытных пользователей не имели катастрофических последствий.

  • С помощью NTBackup следует создать резервную копию состояния системы контроллера домена.
  • Нажав на кнопку F8 при запуске, необходимо загрузить контроллер домена в режиме Directory Services Restore Mode; в этом режиме можно запускать сервер без активизации службы AD, а значит — работать с файлами AD, которые в обычном режиме являются открытыми.
  • Если на диске данного контроллера домена достаточно свободного пространства для размещения полной копии текущего файла ntds.dit, нужно скопировать его во временный каталог. Эта резервная копия должна оставаться на диске до тех пор, пока не станет окончательно ясно, что дефрагментация прошла успешно. Следует иметь в виду, что этот файл нельзя переименовывать — иначе не будет выполнен процесс сжатия.
  • В окне командной строки требуется последовательно ввести команды

    ntdsutil
    files
    info
    и запомнить путь к активному файлу ntds.dit.
  • Ввести строку
    compact to «c:
    ew»,
    после чего в каталоге C: ew будет создан новый сжатый файл ntds.dit. Если такого каталога нет, утилита Ntdsutil автоматически сформирует его.
  • Чтобы выйти из программы Ntdsutil, нужно последовательно ввести следующие команды:
    quit
    quit
  • Необходимо заменить текущий файл ntds.dit (путь к которому вы запомнили на этапе 4) сжатым файлом ntds.dit из каталога C: ew.
  • В соответствии с указаниями Ntdsutil, которые отображены на Экране 2, следует удалить все журнальные файлы (*.log) из каталога, где хранится активная база данных AD.
  • Перезапустить контроллер домена. Повторная инициализация должна осуществляться в обычном режиме.

Сразу же по завершении дефрагментации в автономном режиме нужно сделать полную резервную копию контроллера домена или, по крайней мере, выполнить резервное копирование состояния системы. После окончания этой операции — и после того, как станет ясно, что служба AD функционирует нормально, — можно удалить временную резервную копию файла ntds.dit, созданного на этапе 3.

Испытание процедуры

Для того чтобы определить, какой объем дискового пространства можно вновь высвободить с помощью утилиты Ntdsutil, я создал в изолированной сети автономный тестовый сервер и установил на нем пакет обновлений Windows 2000 Advanced Server Service Pack 3 (SP3). Выполнив программу Dcpromo и установив службу AD, я написал на языке Visual Basic (VB) приложение, которое добавляет в AD 25 тыс. пользователей и 25 тыс. групп. После добавления этих 50 тыс. объектов размеры файла ntds.dit увеличились с 10,256 до 221,1 Мбайт. Я запустил утилиту Ntdsutil; размеры файла сократились до 184,6 Мбайт. Затем я удалил 50 тыс. добавленных ранее объектов.

При удалении входящего в состав AD объекта последний не удаляется в буквальном смысле слова; он лишь особым образом помечается для того, чтобы быть удаленным позднее. Этот процесс именуется «установкой метки на удаление» (tombstoning), и такие метки по умолчанию защищают удаленные файлы в течение 30 дней. Метод «установки меток на удаление» (вместо немедленного удаления файлов) применяется для того, чтобы обеспечить достаточное время для репликации удаления по всему лесу. Процесс «сбора мусора» постоянно отыскивает объекты, срок действия «меток на удаление» которых истек, и удаляет их. Чтобы ускорить процесс удаления, я воспользовался средством ADSI Edit (этот вспомогательный инструмент, входящий в комплект поставки Windows 2000, можно установить из каталога support ools компакт-диска Windows 2000). Итак, с помощью ADSI Edit я установил атрибут (garbageCollPeriod) процесса «сбора мусора» равным одному часу, перевел на 30 дней вперед дату на тестовом сервере и перезагрузил систему. Важно помнить о том, что в производственных сетях переводить вперед системное время для форсированного удаления защищенных «метками на удаление» объектов ни в коем случае нельзя. Такое действие может повлечь за собой проблемы, связанные с тиражированием, резервным копированием и сроками действия цифровых сертификатов системы аутентификации Kerberos.

Я оставил сервер включенным на всю ночь, чтобы служба AD могла выполнить обычную дефрагментацию в оперативном режиме. На следующее утро я вновь запустил утилиту Ntdsutil. Файл базы данных уменьшился до своего стандартного размера — 10,256 Мбайт.

Профилактическое обслуживание AD

Изо дня в день служба AD выполняет такие задачи, как добавление учетных записей пользователей, их удаление и изменение состава групп. Поэтому неудивительно, что в течение короткого периода времени может произойти фрагментация AD. Добиться функционирования AD на оптимальном уровне помогут тщательный мониторинг и профилактическое обслуживание. Эти меры также важны в контексте обеспечения нормального функционирования всей сети Windows 2000. Операционная система не обладает собственными средствами для выполнения описанных задач, однако на рынке имеется ряд подходящих продуктов, в том числе AppManager Suite компании NetIQ, а также DirectoryAnalyzer компании NetPro.

Марк Ингланд — старший архитектор в HP Services, Microsoft Infrastructure Practice, специализирующийся на Windows и Exchange. Имеет сертификаты MCSE, MCT, MCNE, CNI.С ним можно связаться по адресу: mark.d.england@hp.com.