Проверка базы данных каталога

Команда samba-tool dbcheck позволяет выявлять и исправлять ошибки в локальной базе данных Эллес.

Подкоманда выполняется от имени пользователя root.

Формат вызова

Общий формат вызова:

samba-tool dbcheck [<DN>] [options]

Если при вызове передано уникальное имя (DN) конкретного объекта службы каталогов, проверка выполняется только для него. Если имя не передано, по умолчанию выполняется проверка объектов в основном разделе каталога.

Параметры

Параметры вызова:

  • --scope — диапазон поиска; может принимать следующие значения:

    • SUB — при указании данной опции процесс поиска опускается вниз по иерархии от указанного DN (либо, если DN не указан, базового DN домена) до самого нижнего уровня в информационном дереве каталога;

    • ONE — при указании данной опции процесс поиска опускается на один уровень от указанного DN (либо, если DN не указан, базового DN домена);

    • BASE — при указании данной опции поиск ведется только для указанного DN (либо, если DN не указан, базового DN домена);

  • --fix — исправить все найденные ошибки;

  • --yes — не запрашивать отдельное подтверждение для каждого изменения;

    При указании данной опции все изменения применяются в рамках одной транзакции.

  • --cross-ncs — при указании данной опции выполняется проверка всех разделов каталога (контекстов именования) AD;

    Если опция не указана (по умолчанию), проверка выполняется только для основного раздела каталога домена.

  • -v|--verbose — вывод детальной информации;

  • -q|--quiet — тихий режим (отключает вывод диагностических сообщений во время работы подкоманды);

  • --attrs=ATTRS — список атрибутов (через пробел) для проверки;

  • --reindex — выполнить принудительную переиндексацию базы данных;

  • --force-modules — включить принудительную загрузку модулей Эллес и игнорировать запись @MODULES;

  • --reset-well-known-acls — сбросить разрешения (ACL) для объектов, для которых существуют общепринятые значения по умолчанию;

  • --quick-membership-checks — пропустить проверку отсутствующих или неполных взаимных ссылок типа memberOf между объектами;

    Использование данной опции позволяет значительно ускорить проверку базы данных каталога, в котором присутствуют группы большого размера.

  • -H URL|--URL=URL — URI LDAP-сервера; может содержать указание на протокол, имя хоста и номер порта;

  • --filter — выполнить проверку по LDAP-фильтру;

  • --backlinks-only — узкоспециализированная оптимизированная проверка обратных ссылок.

    Может использоваться вместе с параметром восстановления --fix.

    Предполагается разовое использование данной опции, если было выявлено, что не хватает обратных ссылок при присоединении к домену. Например, подобная ситуация возможна, если данные были мигрированы из доменов старых версий (до Windows 2000).

Рекомендации

Проверка должна запускаться локально на каждом отдельном контроллере домена Эллес, поскольку в некоторых случаях исправления могут затрагивать нереплицированные атрибуты. В этом случае внесенные изменения не попадут на другие контроллеры домена через механизм репликации.

Для проверки базы данных AD выполните:

sudo samba-tool dbcheck --cross-ncs

Опция --cross-ncs указывает на необходимость проверки всех разделов каталога (контекстов именования) AD. В отсутствие данной опции проверка выполняется только для основного раздела каталога домена.

Для исправления выявленных ошибок выполните:

samba-tool dbcheck --cross-ncs --fix

В процессе работы команды для каждой из обнаруженных ошибок будет выдаваться запрос подтверждения необходимости ее исправления. Чтобы исправить все однотипные ошибки, при запросе достаточно выбрать all.

При вызове команды может быть передан параметр --yes. В этом случае все запросы будут подтверждены автоматически.

Если не передать --yes, в ходе проверки базы данных для каждого объекта будет выполнено три вызова fsync(). Это может привести к существенному увеличению времени выполнения команды. Например, при работе в одной и той же тестовой среде с параметром --yes на исправление 3500 объектов команде потребовалось около 10 секунд; без параметра на ту же операцию ушло 4 минуты 50 секунд.

После завершения процесса внесения исправлений повторно запустите проверку, чтобы убедиться в успешности выполнения операции.

Принцип работы проверки

В ходе проверки проверяется согласованность всех объектов в базе данных. Данные анализируются по определенным правилам, которые позволяют выявлять известные проблемы, имевшие место при эксплуатации Эллес в прошлом. Например, связи между объектами, как правило, являются двунаправленными. То есть описывающие связь атрибуты должны присутствовать у всех участвующих в связи объектов. Поэтому, если команда dbcheck находит двустороннюю связь с отсутствующим атрибутом у одного их участвующих в связи объектов, она фиксирует это как проблему.

Время работы команды зависит от размера базы данных. Например, проверяется не только каждый объект, соответствующий отдельному пользователю, компьютеру или группе, но и то, что каждый член группы ссылается на действующий объект (пользователь, компьютер) и у такого объекта присутствует соответствующая связь с группой.

Некоторые проблемы в базе данных могут распространяться по контроллерам домена через механизм репликации. Другие могут быть локализованы на уровне отдельного контроллера, если они касаются нереплицируемого атрибута либо вызваны особенностями хранения данных на диске.

Причины необходимости проведения проверки

Например, если в более ранней версии Эллес содержится ошибка, приводящая к вставке в базу данных некорректных записей, даже после установки обновления, в котором данная проблема устранена, такие некорректные записи будут по-прежнему присутствовать в базе данных.

В некоторых случаях наличие в базе данных «проблемной» записи может приводить к явной ошибке. Однако может возникнуть ситуация, при которой проблема не проявляет себя явным образом. Например, пользователь может считаться членом группы, даже если у него отсутствует обратная связь типа memberOf (то есть проверка прямой связи для пользователя как объекта member на уровне группы ошибку не выявит). В этом случае при входе такого пользователя в домен ему могут некорректно выдаваться наследуемые от группы права (по результатам проверки связи типа memberOf).

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

Меры предосторожности

Команда dbcheck вносит изменения в базу данных для исправления очевидных проблем. Однако существует незначительный риск того, что процесс исправления может повлечь за собой непредвиденные негативные последствия.

Поэтому рекомендуется предварительно выполнить команду dbcheck без опции --fix.

Также перед запуском с опцией --fix может иметь смысл создать резервную копию домена (как в онлайн-режиме, так и в автономном режиме).

Если в результате исправления ошибок с помощью dbcheck в работе контроллера домена начинают наблюдаться проблемы, могут быть выполнены следующие действия:

  1. Выполните следующую команду для каждого раздела каталога:

    samba-tool drs replicate --full-sync --sync-forced

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

  2. Если проблема сохраняется, повторно выполните операцию присоединения к домену. В ходе присоединения полностью перестраивается локальная база контроллера домена.

  3. В качестве крайней меры можно прибегнуть к восстановлению домена из ранее созданной резервной копии. В этом случае придется повторить операцию присоединения для всех контроллеров домена.