Есть у меня скрипт для резервного копирования папки на соседний диск:
BAT скрипт для резервного копирования папки
Этот скрипт мне ежедневно делает резервную копию папки на примонтированный диск. Я решил немного усилить безопасность и добавить автоматическое еженедельное резервное копирование папки в Облако Mail.Ru. Поскольку я не любитель лишнего софта, то делать бэкап будем обычным BAT файлом. Принцип действия скрипта прост:
- Монтируем облачный диск в качестве обычного локального диска по протоколу WebDAV.
- Архивируем с помощью 7-Zip нужную папку на примонтированный диск, разбивая архив на файлы по 2 ГБ.
- Удаляем старые архивы.
- Демонтируем облачный диск.
Для того, чтобы скрипт заработал, нужно выполнить подготовительные работы. Нужно установить архиватор и настроить работу WebDAV.
Подключаем Облако Mail.Ru через WebDAV с помощью командной строки
7-Zip
Архиватор позволит загружать бэкап в облако в виде архива, тем самым экономя место в облаке. Одновременно с этим архиватор разобьёт архив на файлы по 2 ГБ, по протоколу WebDAV всё равно не получится загрузить файл больше 4 ГБ, по крайней мере в Облако mail.ru.
Подготовка служб
Сперва нужно проверить, работает ли у вас служба Веб-клиент (WebClient).
services.msc
Находим её в списке служб.
Служба Веб-клиент (WebClient) по умолчанию остановлена и находится в ручном режиме.
Меняем тип запуска на автоматический, и запускаем службу.
Если вы работаете на сервере, то служба Веб-клиент (WebClient) по умолчанию в серверных операционных системах Windows не установлена. Устанавливаем и запускаем:
Установка WebDAV клиента на Windows Server 2016
Генерируем пароль приложения
Для того, чтобы подключиться к облаку через WebDAV, нужно сгенерировать специальный пароль. По сути, мы будем неким сторонним приложением, которому нужно дойти в облако. Логинимся в браузере в свой ящик mail.ru и переходим на страницу:
https://account.mail.ru/user/2-step-auth/passwords/
Добавить.
Придумываем название для приложения. Продолжить.
Пишем пароль от ящика, ставим галку, что мы не верблюд. Продолжить.
Пароль сгенерирован, копируем его, он нам пригодится. Пароль выглядит как-то так: FKh63KgDL4JgDLWJjdJ2.
Таких паролей можно сгенерировать сколько угодно, и удалить потом, когда надобность в них отпадёт.
Код
@echo off
SetLocal EnableDelayedExpansion
rem =============================
rem ====== admin variables ======
rem =============================
set CloudURL=https://webdav.cloud.mail.ru/
set CloudPassword=FKh63KgDL4JgDLWJjdJ2
set CloudUser=example@mail.ru
set LocalDriveLetter=O
set FileName=web
set SourceDir=C:\web
set BackupDir=%LocalDriveLetter%:\backup\internet-lab.ru\
set NumFolders=2
rem =============================
rem ======== 7-Zip path =========
rem =============================
set a7z=%ProgramFiles%\7-Zip\7z.exe
rem =============================
rem ======== open cloud =========
rem =============================
net use %LocalDriveLetter%: %CloudURL% %CloudPassword% /user:%CloudUser% 2>nul >nul
rem =============================
rem == create backup directory ==
rem ==== YYYY-MM-DD-hhmmss ======
rem =============================
set h=%time:~0,2%
set h=%h: =0%
set FullBackupDir=%BackupDir%%date:~6,4%-%date:~3,2%-%date:~0,2%-%h%%time:~3,2%%time:~6,2%\
md %FullBackupDir%
rem =============================
rem ====== zip directory ========
rem =============================
"%a7z%" a -tzip -v2g -bb0 -bd "%FullBackupDir%%FileName%.zip" "%SourceDir%" 2>nul >nul
rem =============================
rem ==== remove old folders =====
rem =============================
for /f "tokens=* delims=" %%D in ('dir %BackupDir% /ad /b /o-n') do (
if not %%D=="" (
if not !NumFolders!==0 (
set /a NumFolders-=1
) else (
rd /s /q %BackupDir%%%D 2>nul >nul
)
)
)
rem =============================
rem ======= close cloud =========
rem =============================
net use %LocalDriveLetter%: /delete /y 2>nul >nul
- CloudURL — ссылка для подключения к облаку по WebDAV, для Облака mail.ru это https://webdav.cloud.mail.ru/
- CloudPassword — сгенерированный нами ранее пароль для приложения, который используется при подключении WebDAV
- CloudUser — наш ящик mail.ru, который используется в качестве имени пользователя WebDAV
- LocalDriveLetter — имя локального диска, под которым подключаем облачный диск, я подключаю как O:\
- FileName — название файла архива, который будем создавать
- SourceDir — что бэкапим
- BackupDir — куда бэкапим, я бэкаплю в смонтированный облачный диск по пути O:\backup\internet-lab.ru\
- NumFolders — сколько папок с бэкапами хранить, я буду хранить две папки
- a7z — путь к 7z.exe
- -v2g — архив разбивается на части по 2 Гб, можно задать свой размер
При желании скрипт можно модифицировать для подключения к любому источнику WEBDAV.
Есть несколько моментов, которые следует иметь в виду:
Сначала мы делаем бэкап, а затем удаляем старый. Соответственно, в облаке должно быть место для NumFolders+1 бэкапов.
Протокол WebDAV не передаёт дату создания папки, поэтому для определения старых (на удаление) папок используется само название папки в виде YYYY-MM-DD-hhmmss. Скрипт сортирует папки по имени в обратном порядке и пропускает первые NumFolders штук, остальные удаляет. В общем, не меняйте название.
Название папки генерируется из текущей даты формата DD.MM.YYYY и времени чч:мм:сс,сс, если ваш Windows использует другой формат данных, то вам нужно модифицировать скрипт для формирования корректного названия папки.
Скрипт удаляет всё что лежит в BackupDir, не храните там что-то ещё!
Проверим как работает скрипт, запустим его несколько раз.
Скрипт работает.
Пример настройки расписания
В Task Scheduler настраиваем новое задание.
Выбираем пользователя, от имени которого будет выполняться резервное копирование. После сохранения задания нас спросят пароль от него. Ставим галку Run whether user is logged or not — запускать даже если юзер не залогинен.
В триггерах настраиваем расписание. У меня резервное копирование происходит раз в неделю по воскресеньям в 12:00.
Указываем ссылку на наш BAT файл.
Настраиваем условия.
Проверяем настройки. OK.
Теперь папка будет резервироваться раз в неделю. С настройкой NumFolders=2 в BAT файле мы будем хранить два последних бэкапа.