MyTetra Share
Делитесь знаниями!
Использование 7zip для бэкапа данных
Время создания: 31.08.2017 21:00
Текстовые метки: to_know
Раздел: zip
Запись: xintrea/mytetra_db_mcold/master/base/1502292402r9asqipnob/text.html на raw.githubusercontent.com

Использование 7zip для бэкапа данных

Системное администрирование*

Для наступления полного и тотального счастья в плане бэкапов информации на рабочем сервере решил отказаться от Acronis True Image в пользу обычной архивации данных с помощью 7-Zip.

Для выполнения поставленной задачи естественно использовал консольную версию архиватора.


После непродолжительного курения манов комманда приняла следующий вид:

7za.exe a -tzip -ssw -mx7 -r0 -x@exclusions.txt full_path_for_the_archive working_dir

Поподробней об использованных ключах:

-tzip формат архива установлен в zip, без этого ключа умолчальный формат 7z;

-ssw принудительная упаковка файлов, которые в данный момент открыты для записи (мало ли кто-то засиделся на работе и что-то там правит);

-mx7 высокая степень сжатия (7), можно поставить и 5 (нормальное сжатие), тогда процесс пойдет побыстрее;

-r0 (это ноль, а не буква О) исключения, которые будут прописаны дальше обрабатываются только в рабочем каталоге;

-x@exclusions.txt это собственно говоря файл со списком исключений, которые не будем архивировать. Каждая строка файла — новое исключение. Можно использовать маски типа *.ext и т.п. Если исключение не много, то можно обойтись и без файла, в таком случае ключ примет следующий вид: -x!*.ext;

full_path_for_the_archive это соответственно путь и имя нового архива;

working_dir это папка, которая подлежит упаковке.

Для пущего удобства можно использовать в имени архива 
%date%.

В связи с тем, что архивировать нужно разные папки в разные архивы, объемами 10-15 гигов, то резонно использовать последовательность команд, дабы не создавать кучу правил в планировщике и не думать сколько времени займет весь этот процесс. Соответственно для этих целей использую объединение команд с помощью 
&&. Если использовать &, то все команды будут выполняться одновременно, что меня никак не устраивает, с && — последовательно при удачном завершении предыдущей команды.

Помимо всего прочего желательно иметь логи, чтоб быть в курсе, а не случилось ли чего. Это можно легко реализовать с помощью инструкции '>>', которая сохраняет вывод в консоль в текстовый файл. Однако проблема в том, что 7zip вываливает в консоль кучу информации, в том числе и об архивации каждого нового файла. Очевидно, что на объемах в несколько тысяч файлов вся эта инфа в логах нужна как мертвому припарок. Соответственно требуется исключить все ненужные строки, оставив те, где есть информация о названии создаваемого архива, результат архивации и информацию об ошибках, коли таковые появятся.

Тут на помощь приходит команда 
FINDSTR. В моем случае она принимает следующий вид:

findstr /P /I /V «Compressing 7-Zip»

Сначала пара слов об использованных ключах:

/P пропускает строки, содержащие непечатные символы;

/I на всякий случай игнорирую регистр букв;

/V " " непосредственно перечень слов для поиска в строках и последующего исключения этих строк.

В итоге на выходе этой команды имеем 3 строки:

Scanning

Creating archive 
archive_name

Everything is Ok

А потом закатываю все в текстовый файл, для последующего изучения:

findstr /P /I /V «Compressing 7-Zip» >> log_file 

Теперь дело за малым. Нужно зафутболить все три блока в одну последовательность команд:

7za.exe a -tzip -ssw -mx7 -r0 -x@exclusions.txt full_path_for_the_archive working_dir | findstr /P /I /V «Compressing 7-Zip» >> log_file.%date%.txt

 
MyTetra Share v.0.65
Яндекс индекс цитирования