Перейти к основному содержанию
 

BAT скрипт для резервного копирования папки в Облако Mail.Ru

code

Есть у меня скрипт для резервного копирования папки на соседний диск:

BAT скрипт для резервного копирования папки

Этот скрипт мне ежедневно делает резервную копию папки на примонтированный диск. Я решил немного усилить безопасность и добавить автоматическое еженедельное резервное копирование папки в Облако Mail.Ru. Поскольку я не любитель лишнего софта, то делать бэкап будем обычным BAT файлом. Принцип действия скрипта прост:

  1. Монтируем облачный диск в качестве обычного локального диска по протоколу WebDAV.
  2. Архивируем с помощью 7-Zip нужную папку на примонтированный диск, разбивая архив на файлы по 2 ГБ.
  3. Удаляем старые архивы.
  4. Демонтируем облачный диск.

Для того, чтобы скрипт заработал, нужно выполнить подготовительные работы. Нужно установить архиватор и настроить работу WebDAV.

Подключаем Облако Mail.Ru через WebDAV с помощью командной строки

7-Zip

7-Zip - бесплатный архиватор

Архиватор позволит загружать бэкап в облако в виде архива, тем самым экономя место в облаке. Одновременно с этим архиватор разобьёт архив на файлы по 2 ГБ, по протоколу WebDAV всё равно не получится загрузить файл больше 4 ГБ, по крайней мере в Облако mail.ru.

Подготовка служб

Сперва нужно проверить, работает ли у вас служба Веб-клиент (WebClient).

services.msc

win

Находим её в списке служб.

win

Служба Веб-клиент (WebClient) по умолчанию остановлена и находится в ручном режиме.

win

Меняем тип запуска на автоматический, и запускаем службу.

Если вы работаете на сервере, то служба Веб-клиент (WebClient) по умолчанию в серверных операционных системах Windows не установлена. Устанавливаем и запускаем:

Установка WebDAV клиента на Windows Server 2016

Генерируем пароль приложения

Для того, чтобы подключиться к облаку через WebDAV, нужно сгенерировать специальный пароль. По сути, мы будем неким сторонним приложением, которому нужно дойти в облако. Логинимся в браузере в свой ящик mail.ru и переходим на страницу:

https://account.mail.ru/user/2-step-auth/passwords/

win

Добавить.

win

Придумываем название для приложения. Продолжить.

win

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

win

Пароль сгенерирован, копируем его, он нам пригодится. Пароль выглядит как-то так: FKh63KgDL4JgDLWJjdJ2.

win

Таких паролей можно сгенерировать сколько угодно, и удалить потом, когда надобность в них отпадёт.

Код

@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, не храните там что-то ещё!

Проверим как работает скрипт, запустим его несколько раз.

win

Скрипт работает.

win

Пример настройки расписания

В Task Scheduler настраиваем новое задание.

win

Выбираем пользователя, от имени которого будет выполняться резервное копирование. После сохранения задания нас спросят пароль от него. Ставим галку Run whether user is logged or not — запускать даже если юзер не залогинен.

win

В триггерах настраиваем расписание. У меня резервное копирование происходит раз в неделю по воскресеньям в 12:00.

win

Указываем ссылку на наш BAT файл.

win

Настраиваем условия.

win

Проверяем настройки. OK.

Теперь папка будет резервироваться раз в неделю. С настройкой NumFolders=2 в BAT файле мы будем хранить два последних бэкапа.

Теги