Бэкап данных посредством 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
Читать также  Учет трафика сетевого интерфейса в Linux с помощью vnstat

Основные действия мы произвели, остались только заключительные шаги. А именно: установить архиватор 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-сервера. Также следует заметит, если вы делаете бэкап файлов в сетевой папке пользователей, то нужно делать его в нерабочее время, чтобы пользователи вашей сети не использовали файлы, помеченные для архивации.

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


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

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

Читать также  Ubuntu 11.04

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

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


К сожалению, данный способ не применим для бэкапа папок с русскоязычными именами (вложенные папки и фай

1 comment

Add yours
  1. 1
    Анатолий

    Здравствуйте, помогите мне решит пожалуйста такую проблему:
    при бэкапе происходит ошибка со скриптом: недопустимое число аргументов или присвоение значения свойства: ‘CreateObject’
    Как исправить эту ошибку?
    Код файла vbs полностью такой как у вас.

+ Leave a Comment