Используем архиватор 7zip для бэкапа данных
Суббота, 26 Дек 2009 4:06Для того чтобы наступло счастье в плане бэкапов инфы на моём сервере, я решил раз и навсегда отказаться от 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 степень сжатия, используем максимальную степень (степень сжатия сильно влияет на скорость архивации);
- -r0 исключения, будут прописаны дальше, обрабатывать только в текущей папке;
- -x@exclusions.txt файл со списком исключений, файлы которые архивировать не будем. Cтрока файла — одно исключение. Разрешается использовать маски (Пример: *.ext). Если исключений не много то можно использовать такую запись прямо в консоле: -x!*.ext;
- full_path_archive полное имя создаваемого архива;
- work_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» >> my_log_file
Теперь осталось только записать все три блока в единственную последовательность команд:
7za.exe a -tzip -ssw -mx7 -r0 -x@exclusions.txt full_path_archive work_dir | findstr /P /I /V «Compressing 7-Zip» >> my_log_file.%date%.txt