Организация резервного копирования файлов
11.03.2011
—
Новости Hi-Tech
|
Необходимость резервного копирования начинаешь понимать только после того, как очень нужный отчёт или база данных внезапно исчезли или оказались испорченными. Цена такой потери у каждого своя, но то, что архивировать данные необходимо, становится после такой потери очевидным и бесспорным для любого руководителя. В компьютерной сети любой компании есть несколько видов данных, подлежащих архивированию, и каждый из них архивируется по-своему. В общем случае необходимо архивировать данные серверов, отвечающих за работу AD, DNS, DHCP и т.п., базы данных SQL-серверов, пользовательские файлы и DBF-базы. Сюда же можно отнести и создание образов загрузочных дисков. У современных программных серверов для всего этого есть встроенные инструменты, они более-менее унифицированы, удобны и устраивают практически всех, хотя способы их реализации и запуска отличаются. Если кто-то хочет узнать об этом подробнее, пусть поищет в Интернете информацию по ключевым словам "теневое копирование", "NTBackup", "создание образа диска" и "SQL скрипты для архивирования". В данной статье я расскажу о быстром и дешёвом варианте архивирования пользовательских файлов и DBF-баз данных.
Резервное копирование файлов бывает оперативным и долгосрочным. И то, и другое необходимо, но используется для разных целей. Оперативный архив позволяет, например, восстановить вчерашнюю версию документа, базу данных, удалённый по ошибке файл. Долгосрочный архив нужен, скорее, для страховых или исторических нужд, для восстановления базы данных за какую-то достаточно старую дату или восстановления давно удалённого или изменённого файла. Оперативный архив создаётся, как минимум, ежедневно. Долгосрочный архив, по сути, является одной из оперативных копий и может делаться раз в неделю, месяц и т.п. и храниться на независимом носителе информации, например, на оптическом диске, магнитной ленте или жёстком диске на удалённом сервере. Какие бывают виды резервного копирования?
С полным копированием всё ясно: в архив попадают все выбранные файлы. Если делать каждый день полное копирование, всегда из конкретного архива можно восстановить актуальный на конкретную дату файл или каталог. Удобно для быстрого восстановления, но очень неэкономно с точки зрения дискового пространства и времени архивирования. Если у вас небольшой объём архивируемых данных и нет дефицита дискового пространства для хранения архивов, то для сисадмина и бизнеса это идеальный вариант - любой файл, каталог, база восстановятся за считанные минуты. Инкрементное копирование - самое экономичное по времени архивирования и дисковому пространству, но восстановление одного часто изменяемого файла может привести сисадмина в состояние тихого помешательства, т.к. для этого надо последовательно откатить все варианты изменения файла со всех архивных копий. А если таких файлов 10, или 100? И если промежуточные архивы хранятся на разных носителях... При этом, если повреждён хоть один промежуточный архив, восстановить файл не удастся. Надёжность такого вида копирования самая низкая. Вывод: хотите восстановить что-то быстро и без проблем - не используйте этот метод, ибо время и данные - деньги. Дифференциальное копирование - это нечто среднее между двумя первыми методами. Программа смотрит, какой файл был изменён или появился со времени последнего полного копирования, и помещает его в новый архив. Получается, что каждый новый дифференциальный архив будет больше предыдущего и, теоретически, со временем вырастет до бесконечности. Значит, тут главное - определить оптимальный период архивирования, после которого следует опять создавать полный архив и всё начинать сначала. Для восстановления каталога необходимо иметь последнюю полную копию архива и копию за требуемую дату. Как видите, это более надёжно и достаточно быстро, с точки зрения восстановления данных.
Что требовал я от программы резервного копирования и от созданного ею архива?
На самом деле всё это не так просто реализовать в одной программе. Например, понравившаяся мне программа KLS Backup 2009 делала всё, что мне надо, но категорически отказывалась работать с кириллическими каталогами, другие корпоративные бэкаперы были достаточно дороги и недостаточно гибки в настройке. В общем, по тем или иным причинам ни одна из протестированных мною программ меня не устроила. И это, наверное, нормально, т.к. нельзя придумать одну хорошую универсальную программу, которая идеально подошла бы всем. В каждой компании внедрён свой бизнес-процесс, свой набор аппаратного и программного обеспечения этого процесса. Возможно, где-то есть идеал, но я его не нашёл. Пришлось придумывать свой велосипед. Передо мной стояла задача организовать резервное копирование различного типа данных, расположенных на нескольких серверах, различных логических дисках и каталогах, используя минимальный бюджет и с учётом указанных выше требований. При этом копирование должно было длиться не более 12 часов. У меня уже работала старенькая программа BackUp32 образца 2001 года, но в связи с увеличившимся за годы объёмом данных она уже не успевала отработать от окончания одного и до начала следующего рабочего дня. Общий объём заархивированных данных составлял около 50 Гб. Можете представить, сколько требовалось места для хранения ежедневных полных архивов. В качестве программы для архивирования я решил использовать архиватор WinRAR, точнее, его консольную версию rar.exe. Плюсы этого архиватора - огромное количество параметров командной строки, наличие 64-разрядной версии, умение работать с многоядерными процессорами, высокая скорость создания архива при высокой степени сжатия данных. И стоит это чудо всего 29 у.е. за одну лицензию ()!
Была выбрана следующая схема работы с резервными копиями данных:
Вся работа выполняется с помощью трёх видов командных файлов:
Что означают применённые ниже опции архиватора, можно прочитать в текстовом файле помощи rar.txt, который идёт вместе с дистрибутивом WinRAR. В этом файле более 2000 строк, поэтому я рекомендую прочитать его самостоятельно. Тот, кто прочитает файл помощи, найдёт для себя ещё много полезного и, возможно, применит это в своей практике или изменит мои скрипты для своих нужд. Итак, сами командные файлы. Архивирование баз данных "1С" выполняется методом полного резервного копирования bat-файлом, текст которого приведён в листинге 1. Листинг 1 rem - файл Disk1_1C.bat - Как видно из Скрипта 1, в каталоге всегда находится не более 10 архивов, независимо от их даты создания (число "10" в строке определяет их количество). Если же необходимо, чтобы в каталоге были архивы за последние 10 календарных дней, независимо от их количества, т.е. независимо от того, сколько раз в день производится архивирование, то можно использовать vbs-скрипт. Для этого строка for /f "skip=10 delims=:" %%i in ('dir \\ServerBak\DiskBak$\Backups\Disk1_1C\*.* /O-D /b') do del /q "\\ServerBak\DiskBak$\Backups\Disk1_1C\%%i" заменяется вот такой строкой (имя каталога передаётся через аргумент ArcPath): start /wait DelArcs.vbs /ArcPath:\\ServerBak\DiskBak$\Backups\Disk1_1C\ Разумеется, при этом в имя архива нужно включить, например, время создания архива, чтобы имена архивов в течение одного дня оставались уникальными. Сам vbs-скрипт приведён в листинге 2. Он должен находиться в том же каталоге, что rar.exe. Листинг 2 '- Начало файла DelArcs.vbs - В результате работы Скрипта 1 создаётся примерно такой файл лога (я специально добавил варианты с ошибками): - 25.01.2011 - Если в процессе работы rar.exe происходят ошибки, он записывает их в собственный лог, например: - 11 Jan 2011, archive K:\Backups\Disk1_1C\Disk1_1C110111.rar Архивирование пользовательских файлов выполняется методом дифференциального резервного копирования bat-файлом, текст которого приведён в листинге 3. Листинг 3 rem - Начало файла Disk1_Users1.bat - Файлы логов аналогичны вышеприведённым. Как видно из Скриптов 1 и 3, для работы rar.exe необходимо наличие двух текстовых файлов, в которых указывается, что архивировать, а что - не архивировать. Что не архивировать, включено в один общий для всех файл exclude.txt. Вот он в усечённом виде. Каждый сам определит, что ему не нужно архивировать.
Файлы и каталоги, которые необходимо архивировать, помещены в другой текстовый файл, для каждого архива свой. Например, так может выглядеть файл incl1_1C.txt: \\Server1\1C$\NETHASP.INI При разумном наименовании текстовых файлов находить и сопровождать их очень легко, редактируя, добавляя или удаляя строки. Все командные файлы запускаются по очереди одним, главным, командным файлом. Он выглядит так (см. листинг 4). Листинг 4 rem - Начало файла AllBak.bat - В результате работы Скрипта 4 получаем лог длительности всего процесса архивирования. Он полезен для контроля и отладки и выглядит примерно так: -- 21.01.2011 -- Главный командный файл запускается планировщиком задач сервера. В свойствах задания необходимо отметить "Выполнять вне зависимости от регистрации пользователя". В этом случае скрипт отработает при включённом сервере, без входа пользователя. Обратите внимание, что птичка "Останавливать при переходе на питание от батарей", должна быть снята, иначе при нестабильной электрической сети задание будет всё время сниматься! И ещё. Поскольку скрипт работает без входа пользователя на сервер, все сетевые пути необходимо указывать не через логические имена (буквы), а именно так, как у меня в скриптах.
Очень просто! В любом файловом менеджере открываем архив как каталог. Если у вас установлен архиватор 7Zip, то RAR-архив можно открыть в Проводнике Windows. Total Commander и FAR не требуют установки архиваторов для работы с rar-архивами. Итак, открыли архив, что дальше? Для полных архивов всё очевидно, на то он и полный архив. В дифференциальных архивах есть одна особенность. В отличие от обычных программ резервного копирования, архиватор RAR все версии одного файла хранит в одном архиве, и это на самом деле здорово. Количество версий задаётся при архивировании параметром ver. При обновлении файлов в уже существующем архиве предыдущие версии переименовываются в 'filename;n', где 'n' - номер версии. Например, файл Notes.doc - последняя (например, вчерашняя) версия. Самая первая (самая старая) версия будет называться Notes.doc;1. Таким образом, в одном архиве в одном месте хранятся все версии файла, можно выбрать версию за нужную дату и восстановить в любое место простым копированием. Согласитесь, это удобнее, чем искать в разных архивах и смотреть, изменялся нужный файл в этот день или нет. Пользователь это, естественно, забыл, но ему очень нужно.
После замены ранее используемой программы BackUp32 на мои скрипты процесс архивирования вместо 15 часов стал занимать 3 часа! При этом используемое место на архивном диске уменьшилось наполовину из-за применения дифференциальных архивов, и я смог увеличить период оперативного архивирования. Согласитесь, ради всего этого стоило поработать. Александр РЫКУНИН Чтобы разместить новость на сайте или в блоге скопируйте код:
На вашем ресурсе это будет выглядеть так
Быстрый и простой вариант архивирования пользовательских файлов и DBF-баз данных |
|