Backup VSS и файловых архивов

Версионное хранилище VSS от Microsoft обладает многими недостатками, но все же по тем или иным причинам может использоваться и имеет ряд уникальных особенностей (оригинальную систему меток например) и весьма неплохой GUI клиент. К сожалению, версионное хранилище основано на использовании файловых ресурсов и подвержено разного рода проблемам при парраллельной работе. Ситуация усугубляется тем, что штатные средства проверки и резервирования так же весьма далеки от совершенства и крупные БД зачастую приходится резервировать при помощи обычного файлового копирования (это рекомендация от MS).

В этой статье я расскажу о применении архиватора 7-Zip для решения задачи backup по расписанию в отношении БД VSS или других крупных файловых архивов подверженных более или менее медленным изменениям (например, архивов документации расположенной на WEB-сервере). Целью является выработка такой процедуры backup, которая бы позволяла с небольшими усилиями восстанавливать состояния архива на любой момент времени с точностью порядка суток и более и при этом не требовала чрезвычайно много места для хранения.

Допустим размер нашего файлового хранилища 5 Гб и порядка 200000 файлов. Если мы будем просто копировать файлы или фоспользуемся каким-нибудь средством типа NT-Backup "по-простому", то суточные архивы за год будут весить 5 * 365 Гб > 1.5 Тб, что никуда не годится. Мы конечно можем сжать наши файлы, пусть даже, до размера 800 Мб (это реалистично при хранении исходных кодов), но всеравно 300 Гб в год выглядят нескромно, особенно если ежедневных изменений не так много (многолетний архив документации).
Это приводит нас к разностным backup, те backup которые выполняются не только на основе содержимого файловой системы, но и с учетом предыдущего backup. То есть резервируется разница. Этот метод будет эффективен как в отношении файловых архивов, так и БД VSS. В качестве "базы" для создания разностного backup может выступать как предыдущий разностный backup, так и полный. Если последовательно создается несколько разностных backup один на основе другого, то всегда резервируются самые свежие изменения (минимальный размер), однако в случае чего, восстанавливать придется так же - накатывая один backup поверх другого. Лично мне такой подход не нравится - чем длинее цепочка, тем она сложнее и опаснее. Поэтому здесь я буду рассматривать разности только относительно предыдущего полного backup - это будут добавочные (кажется термин NT Backup) или накопительные backup. Для восстановления backup нам понадобится ближайший снизу (по дате) полный backup и возможно один добавочный backup.

Подобные Backup могут делать различные средства, типа упомянутого NT Backup. Но здесь я рассмотрю более простое средство - архиватор 7-Zip. Этот архиватор отличается не только высокой эффективностью сжатия, поддержкой юникода, что важно для киррилических имен, UTC временем изменения файлов, но и достаточно широким набором опций по формированию архивов. В том числе в нем присутствует такой объект как анти-итем - это запись о файле или каталоге, которая при распаковке архива поверх содержимого каталога приводит к удалению этого файла или каталога.

Рассмотрим комманду

7z u Full.7z -u- -up0q3x2z0!Add.7z C:\Data -x@vss_ex.txt -mx3
Здесь: Данная комманда позволяет сформировать добавочный архив для полного архива Full.7z. Этот добавочный архив будет содержать разницу между содержимым Full.7z и текущим состоянием файлового хранилища. Для восстановления данных надо распаковать Full.7z, а затем, поверх его данных, Add.7z. Более подробное описание команд смотрите в документации 7-Zip.

Таким образом, мы имеем инструмент, позволяющий создавать обычные Backup (обычный архив 7-Zip) и добавочный к нему (приведенная выше команда). Остается определится с запуском этих команд, выбором имен, расписанием. Я выбрал такой сценарий:

Прикинем экономический эффект. Чем дальше от полного backup, тем больше изменений в очередном добавочном. В моем случае среднее (типичное) значение добавочного архива равняется 15 Мб (в начале недели существенно меньше, в конце - больше). В году 52 недели. Итого размер: 52 * 800 + (365 - 52) * 15 - чуть более 45Гб в год при доступности архива на любой момент времени с точностью до суток. Для еще большего уменьшения объема можно конечно "прореживать" backup - удалять часть промежуточных дополнительных и, возможно, полных backup далеко отсоящих от текущей даты. Сущствуют подходы типа "револьверного" backup, когда устанавливают некоторый максимальный интервал между backup в зависимости насколько они отстоят от текщей даты. Например: последние 3 месяца - раз в сутки, последний год - раз в неделю, ранее - раз в месяц. Организовать автоматическое управление файлами backup по такой схеме не так сложно, но в моем случае этого не потребовалось - объем и так нарастает не быстро.

Отмечу еще некоторые нюансы

Ссылки

30.09.2010 - 12.10.2010

Hosted by uCoz