Бэкап данных посредством 7-zip через консоль с очисткой

Зачастую, необходимо делать бэкапы данных, при этом делать это таким образом, чтобы старые бэкапы автоматически удалялись, для экономии места на диске. Описанный ниже способ копирования данных применим на любой машине под управлением Microsoft Windows, тестировалось на Windows версий XP, Vista, 2003 server и 2008 server.

Нам потребуется архиватор 7-zip и немного времени для работы в Notepad (блокнот – стандартный текстовый редактор Windows)

Сам бэкап будет проходить посредством bat файла, который будет запускать архивацию данных 7-zip через консоль. После архивации будет выполняться проверка существующих бэкапов по имени для удаления старых бэкапов и, соответственно, экономии места на диске. Имена архивов, в свою очередь, будут иметь имена, соответствующие дате архивации.

Итак, начнём:

  • backup.bat
    @ECHO OFF
    SETLOCAL
    SET PATH=%PROGRAMFILES%\7-zip;%PATH%
    set now=%DATE:~-4%-%DATE:~3,2%-%DATE:~0,2%
    # выше описанным мы задаём параметры именования файлов архивов, то есть наши бэкапы. А именно получается формат гггг-мм-чч.
    echo %DATE%
    echo %TIME%
    echo Start WORK
    7z a -xr@exclude.txt -t7z -mx9 -ssw F:\Backup\Work\bkp-%now%.7z C:\Work -scsWIN
    # Указываем архиватору, что в F:\Backup\Work нужно поместить архив, содержащий папку C:\Work
    echo %DATE%
    echo %TIME%
    echo Start clearing
    cscript /nologo clear.vbs Work
    # Строка выше описывает, к какой папке с бэкапом применить скрипт очистки, для удаления старых архивов.
    echo Stop clearing
    echo %DATE%
    echo %TIME%
    pause
    # Выше описанный код запускает скрипт очистки от старых бэкапов.
  • Теперь берёмся за создание скрипта очистки. clear.vbs
    dim fso : Set fso = CreateObject("Scripting.FileSystemObject")
    dim strRootPath : strRootPath = fso.GetAbsolutePathName(".")
    Dim ToDay : ToDay = Date()
    Dim Prev_days : Prev_days = DateAdd("d", -3, Date())
    #Внимание! предыдущая строка описывает от какого числа нужно удалять старые бэкапы. В коде приведён пример удаления  всех бэкапов, которые созданы ранее, чем сегодня - 3 дня. Соответственно, цифру 3 можете поменять на любую другую, в зависимости от потребностей. Важно то, что будут удалены бэкапы, созданные (сегодня – Х дней) назад.
    Set objArgs = WScript.Arguments
    Set dFolder = fso.GetFolder(strRootPath & "\"& objArgs(0))
    dim regEx : Set regEx = New RegExp
    With regEx
    .Pattern = "^bkp-(([0-9]{4})-([0-9]{2})-([0-9]{2})).7z$"
    .IgnoreCase = True
    .Global = True
    End With
    For Each dFile In dFolder.Files
    set matches = regEx.execute(dFile.Name)
    if matches.Count > 0 then
    Set match = matches(0)
    If match.SubMatches.Count > 0 Then
    sDateTime = match.SubMatches(0)
    dtDates = CDate(sDateTime)
    If dtDates < Prev_days Then
    WScript.Echo dFile.Name & " removed."
    dFile.delete
    End If
    End If
    end if
    Next
  • Последний файл, который нам потребуется – это файл exclude.txt. В него можно добавить пути, маски и конкретные файлы, которые не надо добавлять в архив. Разумнее всего добавить туда маски мультимедийных файлов и картинок, так как они плохо зажимаются и, как правило, являются нерабочими файлами, если мы говорим о бэкапе сетевой папки в крупной фирме, где обязательно работники будут обмениваться музыкой, видео и фотографиями.
    exclude.txt
    *.avi
    *.mp3
    *.MP4
    *.MP2
    *.MPG
    *.MPEG
    *.VOB
    *.MKV
    *.tmp
    *.zip
    *.mov
    *.exe
    *.rar

Основные действия мы произвели, остались только заключительные шаги. А именно: установить архиватор 7-zip, свежая версия всегда доступна на сайте разработчика по ссылке http://www.7-zip.org, программа является бесплатной.

Теперь добавляем наш backup.bat в задания Windows (для ХР это ПУСК?Панель управления?Назначение задания, для Windows server 2008 это Диспетчер сервера?Конфигурация?Планировщик заданий?Библиотека планировщика заданий), назначаем удобное время выполнения. ГОТОВО.

Важные примечания по использованию этого способа бэкапа данных.

Файлы backup.bat, cleat.vbs и exclude.txt должны находиться в одной папке, причём в папке с бэкапами. А именно, если рассматривать наш пример, то в F:/Backup.

Пути, описанные в файле, backup.bat должны быть введены только латиницей. Если пути будут содержать символы кириллицы, то бэкап не будет проходить. Имена файлов и папок в директорий для архивации не имеют значения, но путь до папки архивации ОБЯЗАТЕЛЬНО должен быть на латинице.

Можно делать бэкапы любых дисков/файлов/папок, но файлы не должны использоваться в момент архивации, соответственно, если вы хотите сохранять базы sql, то вам сначала придётся остановить службу sql-сервера. Также следует заметит, если вы делаете бэкап файлов в сетевой папке пользователей, то нужно делать его в нерабочее время, чтобы пользователи вашей сети не использовали файлы, помеченные для архивации.

Плюсы данного способа

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

Также одним из достоинств данного способа является то, что сами бэкапы будут занимать значительно меньше места на диске, в отличии от простого копирования данных.

Есть возможность держать список исключений для архивации, что несомненно позволит сократить место, занимаемое архивами, а также делать копии только необходимых данных.

Минусы данного способа

К сожалению, данный способ не применим для бэкапа папок с русскоязычными именами (вложенные папки и файлы значения не имеют). Также процесс архивации весьма ресурсоёмкий, а также занимает время. Соответственно, ресурсы сервера должны позволять это сделать как можно быстрее. Однако, нынешний прогресс в сфере компьютеров и комплектующих настолько далеко зашел, что этот небольшой минус можно и опустить. 4-ядерного процессора с тактовой частотой 2Ггц и 4ГБ памяти на компьютере вполне хватит, чтобы провести подобный бэкап общей сетевой папки, содержащей в большей степени рабочие документы (WORD, EXCEL, POWER POINT), объёмом свыше 12 Гигабайт, примерно за полтора часа. Полученный архив будет объёмом в 2 Гигабайта.