Сергей Гридасов сентябрь 2002 Предисловие
Полнофункциональное резервирование бывает трех видов:
- Полное, FULL (все файлы из конкретных каталогов)
- Дифференциальное, DIF (только то, что изменялось с момента последнего
полного резервирования)
- Инкрементальное, INC (только то, что изменялось с момента просто последнего
резервирования полного или, что чаще, предыдущего инкрементального
резервирования)
Самым простым решением является периодическое проведение полного резервирования.
В то же время это решение является наиболее ресурсоёмким (по расходу
дискового пространства). Именно так организована штатная функция резервирования
в "1С:Предприятии".
Дифференциальное резервирование является более экономным решением
сначала проводится полное резервирование, а затем в течение некоторого периода времени
резервируются лишь модифицировавшиеся файлы. Новое полное резервирование нужно проводить
тогда, когда в дифференциальный набор файлов попадает более 75% объёма полного набора
файлов.
Наиболее экономным является инкрементальное (т.е. "наращиваемое") резервирование, но
процедуры отката могут занимать довольно много времени. Ведь при откате нужно
последовательно, по шагам, вернуться к тому состоянию, при котором последний раз
проводилось проное резервирование, и этих шагов будет ровно столько, сколько раз
запускалась процедура инкрементального резервирования.
Инкрементальное резервирование имеет смысл тогда, когда вам приходится часто создавать
новые файлы и/или в разные периоды времени работать с большим количеством разных программ;
если же Вы обычно имеете дело с одним и тем же набором файлов, то лучше воспользоваться
дифференциальным резервированием.
Дифференциальное резервирование, по сравнению с инкрементальным, имеет еще и то
преимущество, что в случае нехватки дискового пространства для новых задач можно
удалять не слишком важные промежуточные дифференциальные наборы; а при инкрементальномы
резервировании надо хранить все промежуточные наборы файлов иначе точное
восстановление не произойдет, хотя, конечно, каждый новый инкрементальный набор будет
занимать меньше места на диске, чем при дифференциальном резервировании.
Моя идея состоит в том, чтобы заменить штатную процедуру резервирования V7 на свой
собственный алгоритм, а в качестве инструментального средства привлечь последние
наработки в области сжатия данных. Легко догадаться, что речь идёт о популярных
в народе архиваторах.
Посмотрим, можно ли с помощью стороннего архиватора реализовать полнофункциональное
резервирование:
- Полное возможно с любым архиватором
- Инкрементальное наверно, тоже с любым, все они после
архивирования сбрасывают файловый атрибут "Архивный", и у всех есть ключ
"архивировать только с установленным атрибутом "Архивный"
- А вот дифференциальное далеко не на каждом, до мая 2002 года
такой функциональной полнотой отличался только ARJ
Но ARJ далеко не чемпион по части плотности упаковки данных. В этом плане лучшим
(из популярных) архиватором является RAR. В нём реализован режим "solid archive"
(это когда все файлы выстраиваются в одну непрерывную цепочку битов и жмутся,
как единое целое), да и размер скользящего словаря (цепочка битов, на которой ищутся
повторы) у него на порядок больше, чем у конкурентов (4Mb максимум, на текущий
момент).
В описываемом решении я использовал
RAR 3.0 как наиболее подходящий
и по плотности сжатия, и по функциональным возможностям.
Как я это сделал
Задача состоит в том, чтобы из-под V7 запустить RAR с нужными параметрами и
передать ему имя файла архива. Желательно, чтобы это имя
содержало дату и время момента начала резервирования. Также архиватору необходимо
передать дату и время момента последнего полного резервирования (мы рассматриваем
реализацию дифференциального резервирования).
Это нужно для того, чтобы RAR поместил в архив только те файлы, которые были изменены
с момента полного архивирования.
Как это сделать? Очевидно, через BAT-файл. BAT-файл запускается с параметрами в виде:
DiffRzrv.bat %1 %2 %3
После подстановки параметров должно получиться что-то вроде:
Diff_rzv.bat YYMMDDhhmmss MMDD hhmm
Первый параметр передается RAR'овскому ключу -ta для отбора файлов, измененных с
момента YYMMDDhhmmss. Из двух других формируется имя архива.
В итоге на вход командному интерпретатору подается строка BAT-файла примерно такого вида
(это всё одна строка):
rar a -m5 -md4096 -s -ta20%1 ..\Lokal_Proiz-vo\%2_%3_diff.rar
..\..\ExtForms\*.* ..\..\*.dbf ..\..\1cv7.dd ..\..\1cv7.md
..\..\1cv7.ord ..\..\1cv7.spl ..\..\usrdef\users.usr
Комментарии
В каталоге Базы создан каталог REZERV, а в нем каталог SYS. BAT-файл
находится в каталоге SYS, а архивы хранятся в каталоге
%DBDir%\REZERV\Lokal_Proiz-vo.
Ключи RAR:
- a создать архив;
- -m4 максимальная степень сжатия;
- -md4096 максимальный размер скользящего словаря;
- -s создавать непрерывный архив;
- -ta20%1 брать в архив файлы с момента %1
В последнем параметре перед %1 стоит "20", потому что RAR требует в параметре не
YYMMDDhhmmss, а YYYYMMDDhhmmss (год четырьмя цифрамия). Так у меня сделано для
совместимости моей оболочки с ARJ.
Как видно, в BAT-файле можно гибко настраивать скорость работы и плотность архива.
Чтобы это работало, после установки WinRAR 3.00 консольный RAR (RAR.EXE) надо поместить
в каталог, описанный в PATH например, %SystemRoot%\COMMAND.
Кстати, в BAT-файлах можно вызывать и WinRAR.exe с теми же параметрами, тогда
резервирование запускается как приложение WINDOWS, с соответствующим интерфейсом.
Таким образом, можно откатиться на некоторое время назад и обратно
в зависимости от наличия дискового пространства. На небольших базах вполне можно
обеспечить откат на месяц или даже квартал, в зависимости от частоты резервирования.
Кроме того, методика вполне применима для "степпинга" проекта можно
пошагово отслеживать изменения ключевых внешних обработок или всей конфигурации.
Моя оболочка имеет вид обычной конфигурации 1С и работает под всеми версиями WINDOWS.
См. приложненную к статье ссылку внизу страницы.
Первоначально я хотел реализовать эту систему обработкой, а не отдельной
конфигурацией. И предпосылки к этому есть: в WinRAR 3.00 имеется ключ -dh, который,
согласно документации, позволяет помещать в архив файлы, открытые для записи.
Тогда администратор мог бы в монопольном режиме запустить архивацию
и при этом был бы уверен, что за время архивации ни один файл не будет модифицирован.
Но, к сожалению, на незарегистрированной копии WinRAR эта опция не работает. Или, что
вполне возможно, это "фича" Windows 2000.
Дальнейшее развитие
Доработка требуется только по одному пункту: автоматический запуск резервирования
по расписанию. Это можно реализовать двумя способами:
- Использовать системную процедуру ОбработкаОжидания в постоянно запущенной
конфигурации "Резервы";
- Запускать конфигурацию "Резервы" внешними планировщиками.
Оба варианта являются абсолютно тривиальными задачами и представляют никакой сложности
в реализации.
|