Бекапы. Синхронизация данных на удаленный сервер

В контексте правила о резервных копиях: три бекапа, в трех разных форматах, в три географически разнесенных места

На реальных событиях 🙂

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

Задача разбивается на две подзадачи:

  1. синхронизация данных находящихся в совместном доступе пользователей (базы, общие документы)
  2. синхронизация пользовательских файлов и папок

Между офисом и приемником настроен виртуальный канал. Инструмент синхронизации rsync. На приемнике поднят rsyncd

Установка rsync

В Windows тулза пришла из мира unix. Работает в окружении cygwin. Устанавливается на терминальный сервер (источник). Скачиваем, инсталируем. Путь к rsync’у добавляем с системную переменную Path

rsync windows path

Синхронизация данных находящихся в совместном доступе

Тут все просто. Пишем батник (sync2backupserver.bat), который будет запускаться из планировщика задач

cd d:\work\tools\admin\
rsync -av --no-owner --no-group --prune-empty-dirs --chmod=Du=rwx,Dgo=rx,Fu=rw,Fog=r --delete --exclude-from=sync2backupserver.exclude /cygdrive/d/ rsync@192.168.168.2::backupserver/disk_d

—no-owner —no-group — не переносить текущих владельцев на удаленный сервер
—prune-empty-dirs — не переносить пустые папки
—chmod=Du=rwx,Dgo=rx,Fu=rw,Fog=r — права на принимающей стороне: 755 для папок, 644 для файлов
—delete — удаляем на принимающей стороне то, чего нет на источнике
—exclude-from=sync2backupserver.exclude — файл исключений. Туда напишем то, что синхронизировать не нужно
/cygdrive/d/ — источник синхронизации диск D:\
rsync@192.168.168.2::backupserver/disk_d — адрес принимающей стороны::папка назначения

В файле исключений указываем нужные папки относительно корня диска D:\

tmp
users
work/1/2/3
work/med

Папка D:\users, в которой содержатся профили пользователей на данном этапе исключается из синхронизации. Вместо обратного слеша ставим прямой слеш из мира unix

Синхронизация пользовательских файлов и папок

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

Скрипт синхронизации содержимого рабочего стола, документов, загрузок и профиль почтовика (syncusers2backupserver.bat). Находится в папке D:\work\tools\

cd d:\work\tools\
rsync -av --no-owner --no-group --delete /cygdrive/d/users/%USERNAME%/Desktop rsync@192.168.168.2::backupserver/disk_d/users/%USERNAME%
rsync -av --no-owner --no-group --delete /cygdrive/d/users/%USERNAME%/Documents rsync@192.168.168.2::backupserver/disk_d/users/%USERNAME%
rsync -av --no-owner --no-group --delete /cygdrive/d/users/%USERNAME%/Downloads rsync@192.168.168.2::backupserver/disk_d/users/%USERNAME%
rsync -av --no-owner --no-group --delete /cygdrive/d/users/%USERNAME%/AppData/Roaming/Thunderbird rsync@192.168.168.2::backupserver/disk_d/users/%USERNAME%

Почти готово. Но! Нужно сделать так, чтоб после логина в панели задач пользователя не отображалась кнопка задачи. Пусть он ничего не знает. Для этого устанавливаем ConEmu — такой себе cmd с расширенными возможностями. Устанавливаем нужную опцию и сохраняем настойки

cmd с расширенными возможностями

Запускаем редактор политик gpedit.msc и в политике Run these programs at user logon

gpedit logon policy

указываем запуск скрипта в ConEmu

"C:\Program Files\ConEmu\ConEmu64.exe" -min -run d:\work\tools\syncuser2backupserver.bat

Свидетельством работы скрипта будут два процесса rsync.exe с правами залогиненого пользователя в диспечере задач

Убираем неугодных

Естественно скрипты синхронизации общих данных и профилей пользователя нужно запускать, когда пользователи завершили свои терминальные сессии (событие Logoff). Однако не все так делают, более того, не все закрывают рабочие базы и документы. Поэтому много сессий остается в статусе Disconnected. В этом случае нужно их принудительно завершить, иначе скрипт синхронизации пользовательских профилей не отработает

Короткий скрипт на PowerShell (файл logoff_disconnected.ps1)

$sessions = Get-RDUserSession | ? {$_.SessionState -eq "STATE_DISCONNECTED"}
foreach($session in $sessions)
{
Invoke-RDUserLogoff -HostServer $session.HostServer -UnifiedSessionID $session.UnifiedSessionId -Force
}

И в планировщик его. Запускать перед скриптами синхронизации

0 0 голоса
Оцените статью
Подписаться
Уведомить о
guest

0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии