- Информационный портал по безопасности
- Рабоче-крестьянское резервное копирование под Windows
- Постановка задачи
- Выбор средств
- План алгоритма
- Скрипт
- Использование
- Замечания
- Скрипт резервного копирования
- Полное резервное копирование (FULLBACKUP.CMD)
- Добавочное резервное копирование (INCBACKUP.CMD)
- Использование
- BAT скрипт для резервного копирования папки
- Ссылки
- Функции
- Пример настройки расписания
- BAT скрипт для резервного копирования папки
- Ссылки
- Функции
- Пример настройки расписания
Информационный портал по безопасности
Рабоче-крестьянское резервное копирование под Windows
Автор: admin от 25-12-2014, 11:19, посмотрело: 3 373
Постановка задачи
Допустим, вы системный администратор в малой/средней (да чего уж там, иногда даже большой) компании, перед которым стоит задача организации резервного копирования файлового сервера исключительно с помощью подручных средств. Или вы продвинутый пользователь, которому небезразлична судьба хранящихся на вашем жестком диске файлов.
Пусть задача будет звучать следующим образом:
Немного подумав, еще расширим список хотелок:
Что ж, требования сформулированы, дело за малым – спланировать и реализовать всё остальное.
Выбор средств
Поскольку сторонние средства мы решили отметать, то как такового выбора технологий у нас почти не остается:
Несморя на то, что через пользовательский интерфейс Windows создать «Сжатую ZIP-папку» проще простого, в результате поиска встроенного аналога командной строки меня постиг облом №1. Для реализации, собственно, функции архивирования для оригинальной Windows из коробки, к сожалению, так или иначе требовалась либо доустановка NET Framework, либо сторонних командлетов Powershell, либо файлов из Resource Kit, либо чего-то еще.
Опробовав ряд вышеперечисленных вариантов меня постиг облом №2: на больших объемах архивируемых данных (начиная от пары сотен гигабайт) одни попросту вылетали, другие съедали всю память и начинали грузить сервер, третьи еще каким-то образом начинали чудить.
Глубоко вздохнув, приходится делать шаг в сторону от одного из вышеозначенных принципов и взять на роль архиватора готовое решение. С точки зрения опенсорсности и бесплатности опять же практически безальтернативно выбор падает на:
План алгоритма
Итак, алгоритм предельно прост: пишем сценарий на Powershell, который должен:
Скрипт
Ходить вокруг да около тут незачем, сразу публикую готовый скрипт:
Для работы скрипта мы должны заполнить выделенный в начале файла блок переменных (пути архивации, глубина хранения архивов) и создать файл с папками-источниками, например, такой:
Использование
Складываем всё в одну папку, и всё, можно запускать в Powershell. Единственный параметр — тип запуска [full | diff], определяет полный/дифференциальный способ копирования.
Убедившись, что всё работает (или поправив параметры, если нет) создаём задание в планировщике (отдельно для полного копирования и отдельно для дифференциального).
Ну вот, в целом, и всё, можно настроить, представить папку с архивами системе мониторинга наличия резервных копий (если есть) и забыть.
Замечания
Перед необходимостью изобретать свой велосипед автор за несколько лет намучался перепробовал большое количество разнообразного бесплатного готового ПО со похожей функциональностью (Cobian Backup, COMODO Backup и др.). Вдоволь находившись по разнообразным встроенным в упомянутый софт граблям, было принято решение написать что-то своё. На данный момент описанное решение успешно работает на серверах (Windows Server 2008 R2) и рабочих станциях (Windows 7 и Windows 8.1).
Самая крупная создаваемая полная резервная копия на данный момент составляет 1 Тб в исходных файлах, в архиве – 350 Гб. При архивировании с зеркала SAS (7200) на такой же локальный Volume-диск (оба работают внутри vSphere, будучи подключенными как RDM Passthrough-диски) операция занимает около 6 часов, что в условиях задачи является вполне приемлемым результатом.
Скрипт резервного копирования
Ценность резервного копирования ощущает каждый, кто сталкивался с потерей файлов.
Для резервного копирования можно использовать профессиональные платные продукты, например, Symantec Backup Exec Desktop and Laptop Option, а можно и самому бесплатно создать эффективный механизм резервного копирования файлов, как документов пользователя, так и служебных файлов на серверах, с помощью доступных подручных средств: командный файл и пара бесплатных программ.
Резервное копирование будет иметь следующие функции:
- копирование всех файлов некоторого каталога и его подкаталогов (полное копирование, full backup), выполняется довольно долго при большом количестве файлов
- копирование файлов, измененных после последнего резервного копирования (добавочное копирование, incremental backup) – определяется по архивному атрибуту, этот режим выполняется довольно быстро за счёт небольшого числа файлов
Реализация основана на следующих идеях:
- файлы резервных копий сохраняются в в виде ZIP файлов, это удобно для просмотра пользователями, так как на любом компьютере есть программа ZIP Folder или архиватор, поддерживающий формат ZIP
- каждая резервная копия сохраняется в отдельном файле, в названии файла указывается дата снятия копии, это облегчает поиск нужной редакции восстанавливаемого файла
Для создания ZIP файлов потребуется программа-архиватор с интерфейсом командной строки, например, 7-ZIP.
Предположим, что нам потребуется создавать резервные копии документов пользователя (%USERPROFILE%\Documents) и сохранять их на файловом сервере, где выделены папки для резервных копий каждого пользователя \\FILESERVER\Backup\%USERNAME%
Полное резервное копирование (FULLBACKUP.CMD)
Командный файл полного резервного копирования определяет имя файла по текущей дате, например, fullbackup_20130222.zip для 22 февраля 2013 года и вызывает архиватор:
Предполагается, что программа 7-ZIP уже установлена на компьютере, и путь к её файлам прописан в переменной PATH. Если нет, необходимо добавить в последнюю строку путь к файлу.
В результате, на файловом сервере будет создан файл fullbackup_20130222.zip с файлами пользователя. Пользователь может в любой момент открыть файл резервной копии на сервере и извлечь интересующий файл.
Добавочное резервное копирование (INCBACKUP.CMD)
Отличие добавочного копирования состоит в том, что необходимо добавлять в ZIP не все файлы, а только те, которые имеют установленный архивный аттрибут («файл готов для архивирования»). Для этого используем программу DIR с необходимыми параметрами, сохраняя вывод в файл:
Необходимо запускать команду из Unicode среды ( команда cmd /u incbackup.cmd ), чтобы корректно обработать файлы, в названии которых есть символы из расширенного набора.
Следующим шагом необходимо подготовить сформированный список файлов для 7-ZIP:
- преобразовать кодировку из UTF-16 в UTF-8 (требуется для 7-ZIP),
- убрать из путей файлов начальную часть пути к каталогу
Это можно сделать одним запуском программы nhreplace:
Остаётся добавить назначение переменных и удаление файла списка после записи файла резервной копии, итоговый командный файл для добавочного копирования будет выглядеть так:
Также в файле присутствуют команды pushd-popd для перехода в каталог копируемых файлов и обратно. Перемещение в этот каталог необходимо для нормальной работы 7-ZIP со списком. В зависимости от того, как запускается командный файл и нужно ли возвращаться в исходный каталог, можно оставить пару pushd-popd , или ограничиться командой cd «%files_folder%»
Поскольку 7-ZIP не имеет функции сброса атрибута файла, для этого можно использовать команду attrib.
Использование
Созданные командные файлы fullbackup.cmd и incbackup.cmd можно запускать как вручную, так и по расписанию.
Например, файл incbackup.cmd можно запускать и несколько раз в день, хоть каждый час, и он будет обновлять файл резервной копии текущего дня по мере того, как пользователь вносит изменения в свои документы, при этом время резервного копирования будет небольшим.
При этом пользователю будут доступны сделанные копии по дням, и он сможет сам, без участия администратора, восстанавливать не только определённый файл, но и различные его редакции (по датам).
Этот скрипт подходит для конфигурации, когда компьютер имеет высокоскоростное подключение к серверу , так как скрипт обрабатывает ZIP файл резервной копии, находящийся на файловом сервере.
BAT скрипт для резервного копирования папки
Набросал ещё один маленький BAT скрипт для резервного копирование папки. Внесите свои данные и через scheduler настройте расписание резервного копирования.
Ссылки
Функции
- С помощью xcopy делает резервные копии папки.
- Каждый бэкап сохраняется в отдельную подпапку вида DD.MM.YYYY_hhmmmss.
- С помощью 7-Zip архивирует резервные копии.
- Удаляет старые резервные копии.
- DirName — название папки
- SourceDir — что бэкапим
- BackupDir — куда бэкапим
- NumFolders — сколько подпапок с бэкапами хранить
- a7z — путь к 7z.exe
Пример настройки расписания
В Task Scheduler настраиваем новое задание.
Выбираем пользователя, от имени которого будет выполняться резервное копирование. После сохранения задания нас спросят пароль от него. Ставим галку Run whether user is logged or not — запускать даже если юзер не залогинен.
В триггерах настраиваем расписание. У меня резервное копирование происходит раз в сутки.
Указываем ссылку на наш BAT файл.
Проверяем настройки. OK.
Теперь папка будет резервироваться раз в день. С настройкой NumFolders=10 в BAT файле мы будем хранить данные за последние 10 дней.
Если хотите хранить ежедневные и ежемесячные резервные копии — сделайте два BAT файла и два расписания резервного копирования в разные папки.
BAT скрипт для резервного копирования папки
Набросал ещё один маленький BAT скрипт для резервного копирование папки. Внесите свои данные и через scheduler настройте расписание резервного копирования.
Ссылки
Функции
- С помощью xcopy делает резервные копии папки.
- Каждый бэкап сохраняется в отдельную подпапку вида DD.MM.YYYY_hhmmmss.
- С помощью 7-Zip архивирует резервные копии.
- Удаляет старые резервные копии.
@echo off
SetLocal EnableDelayedExpansion
set DirName=my_folder
set SourceDir=C:\%DirName%
set BackupDir=B:\%DirName%\daily\
set NumFolders=10
0,2%
set h=%h: =0%
set FullBackupDir=%BackupDir%%date%_%h%%time:
xcopy %SourceDir% %FullBackupDir%%DirName%\ /E /F /H /R /K /Y /D 2>nul >nul
«%a7z%» a -tzip -bb0 -bd -sdel «%FullBackupDir%%DirName%.zip» «%FullBackupDir%» 2>nul >nul
for /f «tokens=* delims=» %%D in (‘dir %BackupDir% /ad /b /o-d’) do (
if not %%D==»» (
if not !NumFolders!==0 (
set /a NumFolders-=1
) else (
rd /s /q %BackupDir%%%D 2>nul >nul
)
)
)
- DirName — название папки
- SourceDir — что бэкапим
- BackupDir — куда бэкапим
- NumFolders — сколько подпапок с бэкапами хранить
- a7z — путь к 7z.exe
Пример настройки расписания
В Task Scheduler настраиваем новое задание.
Выбираем пользователя, от имени которого будет выполняться резервное копирование. После сохранения задания нас спросят пароль от него. Ставим галку Run whether user is logged or not — запускать даже если юзер не залогинен.
В триггерах настраиваем расписание. У меня резервное копирование происходит раз в сутки.
Указываем ссылку на наш BAT файл.
Проверяем настройки. OK.
Теперь папка будет резервироваться раз в день. С настройкой NumFolders=10 в BAT файле мы будем хранить данные за последние 10 дней.
Если хотите хранить ежедневные и ежемесячные резервные копии — сделайте два BAT файла и два расписания резервного копирования в разные папки.
Если вам понравилась статья, то ставьте 👍🏻 каналу.
Пишите комментарии, задавайте вопросы, подписывайтесь.