Product SiteDocumentation Site

3.3. Двунаправленная репликация SysVol

Каталог Sysvol присутствует на всех контроллерах домена AD и используется для хранения логон скриптов и объектов групповых политик. Отсутствие репликации этого каталога приведет к неправильной работе групповых политик и сценариев входа.
Samba в своем текущем состоянии не поддерживает репликацию SysVol через DFS-R (репликация распределенной файловой системы) или более старую FRS (службу репликации файлов), используемую в Windows Server 2000/2003 для репликации SysVol. В настоящее время для репликации SysVol можно использовать один из следующих обходных путей:
  • двунаправленная репликация SysVol на основе Rsync/Unison (только Samba DC);
  • двунаправленная репликация SysVol на основе Rsync/osync (только Samba DC).

Важно

Следует синхронизировать idmap.ldb из контроллера домена, имеющего роль FSMO PDC_Emulator, со всеми другими контроллерами домена. Это гарантирует, что все контроллеры домена будут использовать одни и те же идентификаторы. Если файл idmap.ldb не синхронизируется, на каждом контроллере домена будут разные идентификаторы.
Cинхронизировать idmap.ldb (см. раздел Сопоставление встроенных идентификаторов пользователей и групп) необходимо при первом присоединении к новому контроллеру домена, а затем переодически (для того чтобы гарантировать постоянство идентификаторов не нужно синхронизировать idmap.ldb каждый раз при синхронизации SysVol, но это следует делать периодически).

3.3.1. Настройка двунаправленной репликации SysVol на базе Rsync/Unison

Исходные данные:
  • все команды выполняются от пользователя root;
  • первый контроллер домена — DC1;
  • второй контроллер домена — DC2 (уже присоединён к домену);
  • sysvol расположен в /var/lib/samba/ как на DC1, так и на DC2;
  • rsync расположен в /usr/bin/rsync;
  • unison расположен в /usr/bin/unison;
  • журнал sysvolsync пишется в файл /var/log/sysvol-sync.log;
  • настроено беспарольное взаимодействие между rootами всех контроллеров домена (см. Настройка беспарольного доступа по ssh).
На первом контроллере домена (DC1):
  1. Установить пакеты rsync и unison:
    # apt-get install rsync unison
    
  2. При низких скоростях в сети, unison может некорректно работать. Для того чтобы при повторной работе unison использовал существующее SSH-соединение вместо установки нового, необходимо выполнить следующие команды:
    # mkdir ~/.ssh/ctl
    # cat << EOF > ~/.ssh/config
    Host *
    ControlMaster auto
    ControlPath ~/.ssh/ctl/%h_%p_%r
    ControlPersist 1
    EOF
    
    Эти строки настраивают OpenSSH на использование ControlMaster для всех SSH-соединений и сохранение сокетов управления в каталоге ~/.ssh/ctl.
  3. Создать каталог /root/.unison/:
    # mkdir /root/.unison
    
  4. Для определения политики синхронизации создать файл конфигурации unison /root/.unison/default.prf со следующим содержимым:
    # Список каталогов, которые будут синхронизированы
    root = /var/lib/samba
    root = ssh://root@DC2.test.alt//var/lib/samba
    # Список подкаталогов, которые нужно синхронизировать
    path = sysvol
    # Список подкаталогов, которые нужно игнорировать
    #ignore = Path
    auto=true
    batch=true
    perms=0
    rsync=true
    maxthreads=1
    retry=3
    confirmbigdeletes=false
    servercmd=/usr/bin/unison
    copythreshold=0
    copyprog = /usr/bin/rsync -XAavz --rsh='ssh -p 22' --inplace --compress
    copyprogrest = /usr/bin/rsync -XAavz --rsh='ssh -p 22' --partial --inplace --compress
    copyquoterem = true
    copymax = 1
    
    # Сохранять журнал с результатами работы в отдельном файле
    logfile = /var/log/sysvol-sync.log
    
  5. Создать файл для записи журнала репликации (необходимо настроить ротацию логов для этого файла, так как размер журнала не контролируется):
    # touch /var/log/sysvol-sync.log
    
На втором контроллере домена (DC2) установить пакеты rsync и unison:
# apt-get install rsync unison

Важно

Перед запуском команды синхронизации рекомендуется сделать резервную копию каталога sysvol.
Запустить команду синхронизации:
# /usr/bin/rsync -XAavz --log-file /var/log/sysvol-sync.log \
--delete-after -f"+ */" -f"- *" /var/lib/samba/sysvol \
root@dc2.test.alt:/var/lib/samba && /usr/bin/unison
В этой команде утилита rsync создает структуры каталогов с расширенными атрибутами, а затем утилита unison копирует только эти расширенные атрибуты файлов.
На DC1 включить синхронизацию по расписанию:
# crontab -e
*/5 * * * * /usr/bin/unison -silent
Повторная синхронизация каталога:
  • отключить синхронизацию по расписанию на DC1;
  • rsync и unison не должны выполняться в данный момент (можно проверить командой ps -aux);
  • удалить хеш-файлы unison на DC1 и DC2 в каталоге /root/.unison;
  • проверить sysvol и повторить синхронизацию;
  • убедиться, что синхронизация выполнена успешно;
  • включить синхронизацию по расписанию на DC1.
Если контроллеров домена больше чем два, можно создать больше заданий для cron на DC1:
  1. Скопировать файл /root/.unison/default.prf в другой файл, например: /root/.unison/sync_dc2.prf.
  2. В файле /root/.unison/dc2.prf изменить значение параметра root.
  3. Повторить шаги 1 и 2 для всех контроллеров домена.
  4. Изменить задание на синхронизацию по расписанию на DC1:
    * * * * * /usr/bin/unison sync_dc2 -silent
    * * * * * /usr/bin/unison sync_dc3 -silent
    …