Резервные копии файлов на скорую руку для малого и среднего бизнеса (SOHO)

В Интернет доступно множество средств для резервного копирования файлов с Windows серверов (ПК), однако, хочется чего-то быстрого в настройке и надежно работающего. Чтобы не нужно было поднимать серверную часть (сервер архивов) и пр.

Естественно, для крупных компаний c большими объемами данных использование производительных клиент-серверных систем резервного копирования — это необходимость, а для небольших — перебор. При смене ИТ специалистов (аутсорсера) в SOHO процесс передачи этого процесса должен быть максимально упрощенным. Документация минимальная. Соответственно, самый простой вариант — это максимально короткий командный файл, который поймет специалист любой квалификации.

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

DayOfWeek для robocopy

robocopy копирует файлы в нужную папку. Соответственно, для создания ежедневных резервных копий в течении недели достаточно создать в нужном месте папку с названием дня недели. Глубина резервного копирования — неделя, со следующей недели начнется ротация (замещение файлов новыми).

Я не знаю быстрого способа в cmd файле получить день недели. Поэтому для меня простой способ решения задачи — приложение, которое создает в нужном месте папку с названием дня недели, либо с более сложной структурой по некоторому шаблону. Программу назвал DayOfWeek, буквально несколько строк кода. Скачать её можно здесь: DayOfWeek. Если нужны исходники — пишите 2af@mail.ru.

При запуске программы без ключей — она возвращает в консоль название дня недели на английском.

Одна строчка cmd файла позволяет использовать возвращенное значение в cmd файле:

for /f %%i in (‘C:\Backup\DayOfWeek.exe -md %RootBackupPath%’) do set DayOfWeek=%%i

где в переменной %RootBackupPath% указан сетевой путь до шары. Например, последовательность:

  • SET RootBackupPath=\\FileServer\Backup\Files\
  • for /f %%i in (‘C:\Backup\DayOfWeek.exe -md %RootBackupPath%’) do set DayOfWeek=%%i
  • SET BackupPath=%RootBackupPath%%DayOfWeek%

объединяет путь к расшаренной папке с днем недели. Например, при запуске в пятницу результат такой: \\FileServer\Backup\Files\Friday

Таким образом получается ротация в пределах недели, поскольку при переходе на следующую неделю содержимое файлов в папках соответствующих дню недели будет актуализироваться командой /MIR robocopy. При этом резервирование будет происходить максимально быстро, поскольку копироваться будут только новые файлы.

Чтобы использовать более глубокую архивацию, например, хранить резервные копии в течении месяца, можно использовать механизм шаблонов. В этом случае иерархия папок будет создаваться в соответствии с шаблоном. Ключи:
-t [Template]          — задать шаблон для создания папки и выдачи в консоль имени.
-g [Globalization]  — установить глобализацию для названий месяцев, дней недели и пр. По умолчанию: en-US.

Шалобны могут использоваться различные: https://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx

Добавил также шаблон: WWWW — день недели месяца.

Запуск DayOfWeek.exe -t «MMMM\\WWWW\\dddd» вернет в консоли строчку вида [Название месяца]\[Номер недели]\[Название дня недели]. Например, для пятницы 2 недели января: January\2\Friday.

Командный cmd файл (есть в zip архиве) для решения задачи создания ежедневных копий:

SETLOCAL
SET SourcePath=D:\BASES\
SET RootBackupPath=\\FileServer\Backup\Files\
SET LogDir=C:\Backup\Log\
for /f %%i in ('C:\Backup\DayOfWeek.exe -md %RootBackupPath%') do set DayOfWeek=%%i
SET BackupPath=%RootBackupPath%%DayOfWeek%
echo %BackupPath%
call robocopy.exe %SourcePath% %BackupPath% *.* /mir /FFT /Z /copy:DAT /dcopy:T /W:0 /R:0 /LOG:"%LogDir%backup.log"
echo DateMarker > %BackupPath%%date%.dat
  • SourcePath — директория для создания резервных копий.
  • RootBackupPath — корневая папка в которой будут создаваться подпапки с резервными копиями по дням.
  • LogDir — папка в которую сохраняются логи по работе robocopy.
  • /MIR — эквивалентно /E /PURGE) делает зеркальную копию папок.
  • /FFT важная опция, делает 2-секундный лаг при сравнении времени файлов на случай расхождения часов на исходной системе и сервере резервирования.
  • /R:3 — количество попыток при проблемах с соединением.
  • /W:10 время 10 сек между попытками.
  • /Z — копирование файлов в режиме «restart mode», частично скопированные файлы будут продолжатькопироваться после восстановления обрыва.
  • /NP и /NDL подавляют некоторые диагностическое сообщения. Дополниельно можно добавить /NS/NC/NFLto, чтобы ещё больше сократить объем выводимых сообщений (см. documentation). Однако при первом запуске лучше запустить с диагностикой, чтобы убедиться, что все работает нормально.

Обратите внимание на указание в командном файле полного пути для файла C:\Backup\DayOfWeek.exe. Это важно при запуске cmd файла из-под штатного scheduler. Также в scheduler корректно пропишите рабочую папку где находится командный файл.

Отмечу, что ключик /MIR довольно рискованный, поскольку зачищает на удаленной стороне файлы удаленные на источнике. Вместо него можно использовать ключ /E.

Файл с текстом DateMarker создается, чтобы можно было оперативно определить когда был создан бакап, поскольку по файлом этого не определить — с заданными ключами даты копируются с исходных файлов.

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

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

Подключение дисков с сервера резервных копий для такого пользователя [backuper] с паролем [password] выполняется следующим образом:

NET USE G: /delete /y
NET USE G: "\\192.168.1.2\D$\FolderToBackup\" /USER:backuper password /y

Время по NTP серверам

Не забываем настроить синхронизацию времени по NTP серверам, иначе из-за разницы в времени создания файлов может быть циклическое копирование. Под Windows 2008:

net stop w32time
w32tm /config /syncfromflags:manual "/manualpeerlist:0.pool.ntp.org, 1.pool.ntp.org, 2.pool.ntp.org"
w32tm /config /reliable:yes
net start w32time
w32tm /query /configuration
w32tm /resync

Сжатие файлов robocopy

К сожалению, robocopy не поддерживает сжатие файлов «на лету». Если копирование происходит на сервер/ПК под управлением Windows, то для решения проблемы достаточно использовать динамическую компрессию на папку в настройках Windows. Помимо компрессии можно использовать также дедупликацию, если копирование идет на сервер под Windows 2012 или ПК под Windows 10 с активированной дедупликацией (спец сказал, что не работает). Поскольку файлы меняются незначительно от копии к копии, дедупликация существенно уменьшит место занимаемое на диске под резервные копии.

Если резервная копия создается на NAS, на котором отсутствует опция сжатия и дедупликации, то единственный вариант решения задачи — запустить сжатие файлов с сервера/ПК на приемнике уже после выполнения резервного копирования с помощью 7zip или других утилит. Естественно, это весьма тяжелая операция, поскольку при таком сжатии:

  • Сначала происходит копирование файла на ПК с которого запущена команда архивации.
  • Сжатие файла.
  • Копирование на приемник.
  • Удаление исходного файла на приемнике.

Важный момент касается того каким образом создавать архив — один большой или архивировать каждый файл. У каждого способа есть несколько плюсов и минусов. В случае с одним большим файлом они следующие:

Плюсы Минусы
Большой файл занимает меньше места, чем много небольших архивов Он долго копируется по сети.
Архивирование занимает много времени. Если места не хватило, то архивирование нужно делать повторно с нуля. Долго распаковывается в случае проблем.
Не подходит для копирования по медленным каналам связи (Internet), поскольку крайне неэффективен при передаче файлов, которые не изменялись с момента последней синхронизации.
Не походит при работе с rsync для дифференциальной синхронизации

Паковка каждого файла в архив также имеет свои плюсы и минусы:

Плюсы Минусы
Передача большого количества небольших файлов — более эффективный вариант для каналов с низкой скоростью (Internet). Много небольших архивов займут больше места на диске.
При использовании специального способо компрессии обеспечивает достаточно эффективную работу rsync-а. Время паковки большого количество небольших файлов, как правило, больше.
Распаковка нужного файла происходит очень быстро. Gzip обладает не самым продвинутым функицоналом при таком пофайловом копировании. Не хватает опций.
Не просто обеспечить шифрование штатными средствами. Например, GZip не поддерживает паковку с паролем. Нужно использовать доп. средства по философии Unix (одна задача — один инструмент). Например, https://www.gpg4win.org/features.html

Проще всего сжимать пофайлово с помощью gzip. Для рекурсивного сжатия файлов в папках используется команда:

gzip -9 -q -v -r [Директория]

Например, gzip -9 -q -v -r C:\Temp\43\

Если синхронизация идет с помощью rsync, то можно использовать ключик —rsyncable. В этом случае файл сжимается не целиком, перестраивая всю структуру, а блоками, чтобы обеспечить для rsync-а достаточно информации для дифференциальной передачи блоков информации.

При использовании компрессии gzip важный момент, что, похоже, нет способа сжимать файлы и пересылать в другую папку. Соответственно, сжиматься будет папка, которая была скопирована robocopy. Файлы в ней изменятся и в следующий раз robocopy будет вновь копировать полностью все файлы.

Права доступа

Важный момент — права доступа для запуска cmd файл в scheduler. Понятно, что в случае если авторизация доменная достаточно в scheduler запустить командный файл под учеткой с правами достаточными для записи на приемнике. Чем более гранулированные права — тем лучше, чтобы при запуске на файловом сервере трояна-шифровальщика резервная копия не была затронута.

Если копирование производится на NAS, который не поддерживает доменную авторизацию, достаточно добавить на сервер локального пользователя с именем совпадающим с учеткой на приемнике и с тем-же паролем. Обычно этого достаточно, чтобы у NAS был доступ к папке на сервере для копирования файлов.

Spread the love
Запись опубликована в рубрике IT опыт, IT рецепты. Добавьте в закладки постоянную ссылку.

Добавить комментарий