48.1. Резервное копирование и восстановление из резервной копии
Инструменты резервного копирования и восстановления позволяют воссоздать домен в случае критических сбоев, делающих его дальнейшую эксплуатацию невозможной.
Примером такой проблемы может служить случайное удаление или изменение объекта в базе службы каталогов (например, OU, групповая политика, DNS-запись), приводящее к неработоспособности одного из доменных сервисов. Поскольку изменение реплицируется на все контроллеры домена, для восстановления работоспособности такого сервиса недостаточно выполнить повторное присоединение к домену какого-либо отдельного контроллера, так как он получит копию базы данных с вызвавшим проблему изменением. Для решения проблемы нужно восстановить домен из резервной копии, сделанной до повреждения.
В процессе восстановления создается новый контроллер домена с базой данных из резервной копии. Существующие контроллеры домена должны быть остановлены и повторно присоединены к восстановленному DC.
Механизм восстановления из резервной копии не предназначен для восстановления отдельного контроллера домена при локальной проблеме (например, сбой диска, ошибка конфигурации), не затрагивающей весь домен. В этом случае достаточно провести диагностику и устранить проблему на контроллере домена, а затем выполнить повторное присоединение к домену для получения актуальной копии базы данных службы каталогов (см. раздел
Восстановление произвольного контроллера домена после фатального сбоя).
Если контроллер домена используется как файловый сервер (что не рекомендуется), данные в SysVol и общих папках также нужно резервировать отдельно.
Поддерживаются следующие типы резервного копирования:
Online (онлайн-режим) — клонирование работающей базы данных. Аналогично присоединению нового DC. Подходит для быстрого восстановления;
Offline (автономный режим) — создание резервной копии напрямую с диска. Включает локальные метаданные репликации, которые не включаются в резервные копии в онлайн-режиме. Такую резервную копию также можно создать, когда контроллер домена находится в автономном режиме (т.е. процесс samba фактически не запущен);
Rename (режим с переименованием) — резервная копия с переименованным доменом. Предназначена только для временной замены.
Для создания резервной копии можно использовать команду:
# samba-tool domain backup <подкоманда> <опции>
Будет создан файл резервной копии
.tar.bz2, содержащий полную резервную копию домена (на основе текущего контроллера домена).
Для восстановления из резервной копии используется команда:
# samba-tool domain backup restore <опции>
Файл резервной копии — это резервная копия домена, а не отдельного контроллера. Восстановление создаёт новый контроллер домена с данными из копии. Чтобы восстановить последующие контроллеры домена, нужно повторно присоединить их к восстановленному контроллеру домена.
48.1.1. Создание резервной копии в онлайн и офлайн режимах
В онлайн-режиме (online) создается резервная копия актуальной базы данных, не привязанная к состоянию конкретного контроллера домена.
Данный вид резервного копирования подходит в том случае, если требуется оперативно получить работоспособную долгосрочную или постоянную замену вышедшему из строя домену без детального изучения причин возникновения проблем в работе службы каталогов.
Для создания резервной копии в онлайн-режиме используется команда:
# samba-tool domain backup online \
--targetdir=<output-dir> \
--server=<DC-server> \
-UAdministrator
Эту команду можно запустить как локально на контроллере домена, так и удалённо на другом узле. При удалённом запуске рекомендуется указать параметр --configfile, чтобы включить в резервную копию корректный smb.conf (локальный файл smb.conf может отличаться или отсутствовать).
Перед созданием резервной копии рекомендуется запустить команду проверку целостности (samba-tool dbcheck) и исправить все ошибки, о которых она сообщает.
Резервная копия содержит всю секретную информацию домена (ключи Kerberos, хеши паролей и т.д.). Необходимо хранить её в безопасном месте.
Пример создания онлайн-резервной копии на контроллере домена:
# mkdir /var/samba-backup-online
# samba-tool domain backup online --targetdir=/var/samba-backup-online --server=dc1 -UAdministrator
Password for [TEST\Administrator]:
workgroup is TEST
realm is test.alt
Looking up IPv4 addresses
Looking up IPv6 addresses
Setting up share.ldb
Setting up secrets.ldb
Setting up the registry
Setting up the privileges database
Setting up idmap db
Setting up SAM db
Setting up sam.ldb partitions and settings
Setting up sam.ldb rootDSE
Pre-loading the Samba 4 and AD schema
A Kerberos configuration suitable for Samba AD has been generated at /var/samba-backup-online/tmpxqc6dwts/private/krb5.conf
Merge the contents of this file with your system krb5.conf or replace it with this one. Do not create a symlink!
…
Creating backup file /var/samba-backup-online/samba-backup-test.alt-2025-06-17T14-01-36.253494.tar.bz2...
48.1.1.2. Автономный режим
В автономном режиме (offline) резервная копия создаётся напрямую из локальных файлов контроллера домена, на котором выполняется команда.
Данный вид резервного копирования оптимален для изучения причин возникновения проблем в работе службы каталогов, так как в этом режиме в резервную копию включаются дополнительные данные, как правило, не подлежащие реплицированию. В больших доменах на создание такой резервной копии требуется меньше времени, поскольку исключаются временные затраты на передачу данных из базы данных службы каталогов по сети и запись их на локальный диск. Однако следует учитывать, что при копировании базы данных с диска потенциально повышается риск попадания в резервную копию ошибочных данных.
Поскольку копируются файлы напрямую с диска, существует риск включения неконсистентных или повреждённых данных, если база не была корректно зафиксирована.
Отличия автономного резервного копирования от онлайн-режима:
резервную копию можно создать, даже если контроллер домена в данный момент не работает;
резервная копия включает нереплицированные атрибуты, которые не сохраняются в онлайн-резервной копии;
в копию попадают необработанные файлы базы данных, что может привести к тому, что какие-либо скрытые проблемы в БД сохранятся в резервной копии.
Команда создания автономной резервной копии:
# samba-tool domain backup offline --targetdir=<output-dir>
Несмотря на то, что данный тип резервного копирования называется автономным, контроллер не обязан быть отключён от сети. Утилита samba-tool использует внутренние блокировки, чтобы безопасно скопировать базу, даже если процесс samba запущен.
Пример создания автономной резервной копии на контроллере домена:
# mkdir /var/samba-backup-offline
# samba-tool domain backup offline --targetdir=/var/samba-backup-offline
running backup on dirs: /var/lib/samba/private /var/lib/samba /etc/samba
Starting transaction on /var/lib/samba/private/secrets
Starting transaction on /var/lib/samba/private/sam.ldb
backing up /var/lib/samba/private/sam.ldb
…
adding misc file etc/lmhosts
adding misc file etc/smb.conf
Backup succeeded.
48.1.1.3. Восстановление домена из резервной копии
Восстановление из резервной копии — это пересоздание домена на основе сохранённого состояния.
Этапы восстановления:
Остановить службу samba на всех контроллерах домена (если используется переименованная резервная копия этот шаг можно пропустить).
Выполнить восстановление на новом контроллере домена (samba-tool domain backup restore).
Запустить samba на восстановленном контроллере.
Повторно присоединить старые контроллеры домена, например, выполнив команду:
# samba-tool domain join <dns-realm> DC --server=<restored-dc>
Если используется переименованная резервная копия, также потребуется перенастроить сетевые устройства (DNS, маршрутизацию), чтобы трафик направлялся в восстановленный домен, а не в исходный домен.
Из файла резервной копии восстанавливается весь домен, а не конкретный контроллера домена. Шаг с командой samba-tool domain backup restore выполняется только один раз, при этом домен воссоздается на одном контроллере домена. Затем все старые контроллеры домена должны быть повторно присоединены к восстановленному контроллеру домена.
Этап восстановления из файла резервной копии аналогичен разворачиванию домена, который выполнялся при первой настройке сети Samba, за исключением того, что резервная копия содержит в себе все объекты базы данных, которые были добавлены с момента создания домена. Как и при создании нового домена, при запуске команды восстановления домена потребуется указать новый контроллер домена. Новый контроллер домена не должен существовать в сети.
Команда восстановления домена из резервной копии:
# samba-tool domain backup restore \
--backup-file=<tar-file> \
--newservername=<DC-name> \
--targetdir=<new-samba-dir>
где
tar-file — путь к файлу резервной копии (.tar.bz2);
DC-name — имя нового контроллера домена;
new-samba-dir — каталог, куда будут восстановлены все файлы службы каталогов (smb.conf, sam.ldb и т. п.).
Целевой каталог должен быть пустым или не должен существовать. Не рекомендуется восстанавливать базу данных домена в место установки по умолчанию (например, в каталог
/var/lib/samba). Вместо этого рекомендуется восстановить базу данных домена в другой целевой каталог, а затем, при запуске samba, использовать параметр
-s (или
--configfile), например:
# samba -s <targetdir>/etc/smb.conf
Это гарантирует, что Samba будет использовать восстановленные файлы базы данных, а не системные.
Восстановленный контроллер домена будет добавлен в сайт Default-First-Site-Name. Если он не существует — будет создан автоматически. Указать альтернативный сайт можно с помощью параметра --site.
Перед запуском службы каталогов на восстановленном контроллере домена следует еще раз проверить корректность восстановленного файла smb.conf.
Пример восстановления данных из резервной копии:
# mkdir /var/lib/samba/new
# samba-tool domain backup restore \
--backup-file=/home/user/samba-backup-test.alt-2025-06-17T14-01-36.253494.tar.bz2 \
--newservername=newdc \
--targetdir=/var/lib/samba/new
Adding new DC to site 'Default-First-Site-Name'
Updating basic smb.conf settings...
…
Backup file successfully restored to /var/lib/samba/new
Please check the smb.conf settings are correct before starting samba.
48.1.2. Переименованная резервная копия
Режим переименования (rename) позволяет создать клон домена с изменённым именем, который можно использовать как временный альтернативный домен.
Процедура создания резервной копии и восстановления из неё в режиме переименования:
В режиме с переименованием (rename) формируется набор файлов с актуальными данными службы каталогов, не привязанными к состоянию конкретного контроллера домена, с переименованием домена.
Создание резервной копии в режиме переименования может применяться для:
запуска временного альтернативного домена на случай катастрофического отказа основного домена. На альтернативный/переименованный домен можно переключиться с минимальными усилиями. Затем можно запустить два домена одновременно, не мешая друг другу (переименованный/альтернативный домен будет предоставлять основные сетевые службы Samba, в это же время на исходных контроллерах домена можно устранять неполадки);
создания реалистичного лабораторного домена: домен переименовывается и удаляются конфиденциальные данные (на данный момент только самые важные), чтобы создать предпроизводственную среду для тестирования.
Можно запустить два домена одновременно — исходный (для диагностики) и переименованный (для работы).
При клонировании базы данных выполняются следующие изменения:
смена DNS-имени домена (например, test.alt → newtest.alt);
смена NetBIOS-имени (например, TEST → NEWTEST);
обновление всех DN (Distinguished Names) объектов;
переименование объекта домена и его NetBIOS-имени;
обновление DNS-зон и атрибутов dnsRoot.
Модифицируется только клонированный домен — исходный домен вообще не затрагивается.
Объекты, которые не меняются:
userPrincipalName (UPN) — остается в формате user@old-realm. Если при создании копии использовался параметр --keep-dns-realm, пользователи могут входить по user@old-realm. Иначе — по user@new-realm (при условии корректной настройки Kerberos);
групповые политики (GPO) — gPCFileSysPath и gPLink не обновляются. Файлы в sysvol сохраняют старое имя домена в путях (например, sysvol/test.alt/Policies). Каталог Policies в sysvol создаётся с новым именем (например, sysvol/newtest.alt/Policies).
Обновление объектов групповой политики для обработки изменения имени домена — нетривиальный процесс. Лучший способ справиться с долгосрочным переименованием домена — вручную экспортировать файлы ГП, а затем повторно импортировать их. В краткосрочной перспективе переименованный домен сможет продолжать использовать объекты групповой политики, относящиеся к старой области.
Процесс переименования домена выполняется в два этапа:
Создание переименованной резервной копии. Команда samba-tool domain backup rename клонирует базу и переименовывает домен.
Восстановление из копии. Команда samba-tool domain backup restore создаёт новый контроллер домена на основе копии.
48.1.2.1. Создание переименованной резервной копии
Команда для создания переименованной резервной копии:
# samba-tool domain backup rename <new-netbios> <new-dns-realm> \
--server=<dc-to-backup> \
--targetdir=<output-dir> \
--no-secrets \
-UAdministrator
где
<new-netbios> — новое NETBIOS-имя домена (например, NEWTEST);
<new-dns-realm> — новое DNS-имя домена (например, newtest.alt);
--server — имя контроллера, с которого делается копия;
--targetdir — каталог, куда будет записан сгенерированный файл резервной копии;
--no-secrets — исключает хеши паролей (например, unicodePwd, lmPwdHistory);
-Uadministrator — учётная запись для доступа к контроллеру.
Параметр --no-secrets исключает из резервной копии конфиденциальную информацию о паролях (например, такие атрибуты, как unicodePwd, lmPwdHistory и т. д.) для всех пользователей в домене. При этом, файл резервной копии по-прежнему содержит конфиденциальные данные (имена пользователей, структуру OU и т.д.).
Пример создания переименованной резервной копии на контроллере домена:
# mkdir /var/samba-backup-rename
# samba-tool domain backup rename NEWTEST newtest.alt \
--server=dc1 \
--targetdir=/var/samba-backup-rename \
--no-secrets \
-UAdministrator
New realm for backed up domain: newtest.alt
New base DN for backed up domain: DC=newtest,DC=alt
New domain NetBIOS name: NEWTEST
Password for [TEST\Administrator]:
Provisioning the new (renamed) domain...
…
Файл резервной копии сохраняется как /var/samba-backup-rename/samba-backup-newtest.alt-<timestamp>.tar.bz2.
В случае, если команда создания резервной копии запускается на узле, который будет использоваться в качестве нового контроллера домена (он должен быть подключён к рабочему домену), рекомендуется иметь файл smb.conf, максимально соответствующий производственному контроллеру домена, и передать его команде резервного копирования (с помощью параметра --configfile=smb.conf). Это гарантирует, что резервная копия будет содержать smb.conf, точно соответствующий домену.
Если команда создания резервной копии запускается на другом узле, (например, на рабочем контроллере домена), необходимо скопировать сгенерированный файл резервной копии на узел, который будет использоваться в качестве нового контроллера домена.
48.1.2.2. Восстановление из переименованной резервной копии
Файл резервной копии /var/samba-backup-rename/samba-backup-newtest.alt-<timestamp>.tar.bz2 может использоваться для восстановления клонированной и переименованной базы данных на диске. В восстановленном домене будет только один новый контроллер домена с именем, указанными с помощью опции --newservername. В последующем к нему могут быть присоединены другие контроллеры домена. Для указания нового каталога для размещения всех файлов службы каталогов (smb.conf, sam.ldb и т. п.) может использоваться опция --targetdir.
Команда восстановления домена из резервной копии:
# samba-tool domain backup restore \
--backup-file=<tar-file> \
--newservername=<DC-name> \
--targetdir=<new-samba-dir>
где
--backup-file — файл резервной копии;
--newservername — имя нового контроллера домена;
--targetdir — каталог, куда будут восстановлены все файлы службы каталогов (smb.conf, sam.ldb и т. п.).
Пример восстановления:
# mkdir /var/lib/samba/newtest
# samba-tool domain backup restore \
--targetdir=/var/lib/samba/newtest \
--newservername=NEWDC1 \
--backup-file=/home/user/samba-backup-test.alt-2025-06-17T14-01-36.253494.tar.bz2
Целевой каталог должен быть пустым или не должен существовать. Не рекомендуется восстанавливать базу данных домена в место установки по умолчанию (например, в каталог /var/lib/samba/). Однако можно указать подкаталог (например, /var/lib/samba/newtest/).
Имя нового контроллера не должно совпадать с именем существующего DC в исходной сети. Это предотвратит конфликты при одновременной работе двух доменов.
48.1.2.3. Сброс пароля после восстановления
При восстановлении домена из резервной копии пароль учётной записи администратора сбрасывается на случайно сгенерированный. Для его изменения можно просто обновить базу данных на локальном диске, выполнив команду:
# samba-tool user setpassword Administrator \
--newpassword=<пароль> \
-H /var/lib/samba/newtest/private/sam.ldb
Для тестирования аутентификации пользователей можно либо добавить дополнительные «тестовые» учётные записи (пользователей или машин), либо использовать учётные записи, скопированные из исходного домена.
У скопированных учётных записей не установлены пароли. Их можно задать до или после запуска службы каталогов.
Пример сброса пароля для пользователя:
# samba-tool user setpassword ivanov \
--newpassword=Pa$$word \
-H /var/lib/samba/newtest/private/sam.ldb
48.1.2.4. Запуск службы Samba
Перед запуском службы каталогов на новом контроллере домена, рекомендуется проверить корректность настроек в восстановленном файле smb.conf (например, /var/lib/samba/newtest/etc/smb.conf) и в файле /etc/krb5.conf, и при необходимости вручную внести в них изменения.
При запуске службы каталогов необходимо указать восстановленный
smb.conf. Например:
# samba -s /var/lib/samba/newtest/etc/smb.conf
Это гарантирует, что Samba использует восстановленные файлы базы данных, а не системные по умолчанию.
При первом запуске может появиться сообщение об ошибках DNS. Это нормально — Samba автоматически запускает samba_dnsupdate для регистрации DNS-записей нового домена. Ошибки исчезнут после завершения процесса инициализации.
После запуска
samba можно проверить правильность работы нового контроллера домена, например, выполнив команду:
# ldbsearch -H ldap://NEWDC1 -UAdministrator
Успешный вывод означает, что:
48.1.2.5. Обновление подсетей и сайтов
Восстановленный домен сохраняет все сайты и подсети исходного домена. Однако, поскольку новые контроллеры находятся в другой сети — подсети, привязанные к сайтам, могут быть некорректны.
Рекомендуемые действия:
Получить список сайтов:
# samba-tool sites list
Проверить текущие подсети сайтов, например:
# samba-tool sites subnet list Default-First-Site-Name
Удалить или изменить нерелевантные подсети:
# samba-tool sites subnet remove 192.168.0.0/24
# samba-tool sites subnet create 10.0.0.0/24 "Default-First-Site-Name"
При необходимости создать новые сайты:
# samba-tool sites create TestSite
Это обеспечит корректную работу репликации, обнаружения служб и групповых политик.
48.1.3. Рекомендуемая стратегия восстановления домена
Восстановление из резервной копии сопряжено с двумя основными ограничениями:
необходимость использовать отдельный каталог для установки (--targetdir), а не /var/lib/samba по умолчанию;
имя нового контроллера (--newservername) не должно совпадать с именем существующего DC в сети.
Эти неудобства можно минимизировать, используя временный контроллер домена (например, виртуальную машину).
Процесс восстановления через временный DC:
выполнить восстановление из файла резервной копии на временный контроллер домена и запустить службу каталогов;
повторно присоединить существующие контроллеры домена к временному контроллеру домена (во время присоединения можно использовать исходные имена серверов и каталог по умолчанию /var/lib/samba);
удалить временный контроллер домена (например, с помощью команды samba-tool domain demote).
В результате сеть домена будет полностью идентична исходной.
Пример разворачивания домена (SAMBA_INTERNAL) из резервной копии на ВМ:
Подготовить узел:
Установить пакет
task-samba-dc, который установит все необходимое:
# apt-get install task-samba-dc
или компонент
samba-dc
# alteratorctl components install samba-dc
Остановить конфликтующие службы
krb5kdc и
slapd, а также
bind:
# for service in smb nmb krb5kdc slapd bind; do \
systemctl disable $service; \
systemctl stop $service; \
done
Очистить базы и конфигурацию
Samba:
# rm -f /etc/samba/smb.conf
# rm -rf /var/lib/samba
# rm -rf /var/cache/samba
# mkdir -p /var/lib/samba/sysvol
Скопировать файл резервной копии на ВМ и выполнить восстановление домена из файла резервной копии:
# samba-tool domain backup restore \
--backup-file=/home/user/samba-backup-test.alt-2025-06-17T14-01-36.253494.tar.bz2 \
--newservername=newdc --targetdir=/var/lib/samba
Adding new DC to site 'Default-First-Site-Name'
Updating basic smb.conf settings...
…
Backup file successfully restored to /var/lib/samba
Please check the smb.conf settings are correct before starting samba.
Скопировать файл
smb.conf из каталога
/var/lib/samba/etc/ в
/etc/samba/:
# cp /var/lib/samba/etc/smb.conf /etc/samba/
Запустить службу каталогов:
# systemctl enable --now samba
Заменить файл
/etc/krb5.conf файлом из каталога
/var/lib/samba/private/:
# cp /var/lib/samba/private/krb5.conf /etc/krb5.conf
Проверить работоспособность домена (см.
Проверка работоспособности домена):
# samba-tool domain info 127.0.0.1
Forest : test.alt
Domain : test.alt
Netbios domain : TEST
DC name : newdc.test.alt
DC netbios name : NEWDC
Server site : Default-First-Site-Name
Client site : Default-First-Site-Name
# smbclient -L localhost -Uadministrator
Password for [TEST\administrator]:
Sharename Type Comment
--------- ---- -------
sysvol Disk
netlogon Disk
share Disk Commonplace
Free Disk
IPC$ IPC IPC Service (Samba 4.21.7-alt4)
SMB1 disabled -- no workgroup available
# host -t SRV _kerberos._udp.test.alt.
_kerberos._udp.test.alt has SRV record 0 100 88 newdc.test.alt.
48.1.4. Отладочная информация
Если команда резервного копирования или восстановления завершилась с ошибкой, она может оставить временный каталог (указанный в параметре --targetdir). Анализ этого каталога может помочь понять, почему произошел сбой. Необходимо удалить этот каталог перед повторным запуском команды восстановления.
Создание резервной копии:
резервное копирование следует запускать от имени пользователя root. Хотя резервное копирование в онлайн-режиме может быть успешным и для пользователя без полномочий root, но при попытке восстановить данные из такой резервной копии могут возникнуть проблемы;
для резервных копий, выполненных в онлайн-режиме или в режиме переименования, следует проверить правильность используемых учётных данных и сведений о сервере, например:
# ldbsearch -H ldap://<server> -UAdministrator
чтобы узнать больше информации о причине сбоя можно увеличить уровень журналирования. Например, добавить в команду параметр --debug=3;
работа команд, для выполнения резервного копирования в онлайн-режиме или в режиме переименования, очень похожа на присоединение к контроллеру домена. Если известно, что присоединение к контроллеру домена в вашей сети не удается, то эти команды также вероятно не будут работать. Сообщения «Committing SAM database» и «Cloned domain <domain>» указывают, что этап клонирования прошёл успешно;
инструменты резервного копирования не работают напрямую с контроллерами домена Windows, так как служба DFSR блокирует файлы sysvol. В смешанном домене следует создавать резервную копию с контроллера Samba. Если используется домен Windows, можно на время резервного копирования остановить службу DFSR «Репликация DFS».
Восстановление из резервной копии:
команда restore должна запускаться от root;
имя, указанное в параметре
--newservername, не должно существовать в исходном домене. В противном случае будет получена ошибка:
Adding CN=NEWDC,OU=Domain Controllers,DC=test,DC=alt
ERROR(ldb): uncaught exception - Entry CN=NEWDC,OU=Domain Controllers,DC=test,DC=alt already exists
File "/usr/lib64/samba-dc/python3.9/samba/netcmd/__init__.py", line 186, in _run
return self.run(*args, **kwargs)
File "/usr/lib64/samba-dc/python3.9/samba/netcmd/domain_backup.py", line 562, in run
ctx.join_add_objects(specified_sid=dom_sid(str(sid)))
File "/usr/lib64/samba-dc/python3.9/samba/join.py", line 674, in join_add_objects
ctx.samdb.add(rec, controls=controls)
файл smb.conf в резервной копии может содержать некорректные настройки interfaces (IP-адреса, не соответствующие новому серверу). Избежать этой проблемы можно, указав аргумент --host-ip во время восстановления (имеет значение только на переименованных резервных копий).