Резервные копии файлов на скорую руку для 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 /copy:DAT /dcopy:T /W:0 /R:0

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

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

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

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

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

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

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

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

Опубликовать в Facebook
Опубликовать в Google Plus
Опубликовать в LiveJournal
Опубликовать в Мой Мир
Опубликовать в Одноклассники
Опубликовать в Яндекс
Запись опубликована в рубрике IT опыт, IT рецепты. Добавьте в закладки постоянную ссылку.