Система хорошо масштабируема. Управляющий директор, СУБД, сервер хранения, сервер доступа к файловой системе, монитор и консоль выделены в отдельные процессы и могут быть в нескольких экземплярах расположены в различных узлах сети. При этом сохраняется возможность единой точки управления и мониторинга. Компоненты могут быть легко разнесены в нужные места сети или удалённых сетей, интерфейс прост, описан и управляем с точки зрения сетевого экрана.
Процесс резервирования автоматизирован с помощью единого планировщика. Возможно параллельное выполнение нескольких заданий, включая запись в один том. Приоритизация заданий (не совсем доделано). Отсутствует автоматический запуск пропущенных заданий (есть повтор неудавшегося задания и преобразование автоматическое преобразование резервного копирования изменений в полное).
Ограничения на размер файлов, файловых систем и разделов - не более 4 миллиардов файлов в СУБД. Если надо более, то необходимо разбить БД на несколько (по клиентам) или перед сборкой переключить FileId с 32-битного на 64-битное представление. Есть поддержка многотомных архивов.
Имеется отдельная процедура резервного копирования с целью восстановления "с нуля" (загружаемый CD). При этом восстанавливаются не только данные, но и большинство системной информации (разбиение на разделы, LVM). К сожалению, не восстанавливаются аттрибуты файловых систем и софтовый RAID (md). Пока не освоено.
Отсутствуют "тяжелые" механизмы типа CDP, LAN-free, Serverless, снятие копии со снапшота, дедупликация, автоматическое распараллеливание копирования с одного клиента.
Миграция заданий между пулами реализована в версии 2.2 (только перемещение и только внутри одного сервера хранения).
Возможность запускать скрипты до и после задания на клиенте и сервере хранения. Это позволяет создавать свои агенты для резервирования и восстановления БД.
Средств управления хранением данных (иерархическое хранения, учёт жизненного цикла) и работы с архивами нет.
Сжатие производится пофайлово на стороне клиента (gzip), что позволяет минимизировать ущерб ошибок чтения. Каждый блок (около 64 КБ) тома содержит контрольную сумму. Ограничения трафика на стороне клиента - нет. Полная свобода выбора месторасположения сервера (серверов) хранения. Поддержка SAN средствами ОС.
Формат архива - свой. Имеются автономные утилиты получения оглавления, восстановления файлов (с ограничениями), восстановления БД по архивам, а также описание формата архива (и исходные тексты
.
Основным интерфейсом является командная строка с выбором из меню при нехватке параметров. В версии 2.2 появился многообещающий графический интерфейс bat (пока глючный). Графические консоли управления в предыдущих версиях бесполезны. Имеется веб-интерфейс (не освоено). Интерактивное восстановление файлов с возможностью выбора нужной копии. Имеется возможность указывать исключения в списке файлов с помощью регулярных выражений. Автоматический запрос оператору на установку нужного тома. Извещения о проблемах и необходимости ручного вмешательства по email (различные сообщение на различные адреса для различных событий для различных групп серверов) и syslog. Для индивидуального применения лучше подыскать другую программу (эта слишком тяжела в развёртывании), зато после настройки работает в полностью автоматическом режиме. Плохо переносит резкие смены конфигурации (как убрать все упоминания об удалённом клиенте, его заданиях и томах?). Плохая обработка ошибок при работе с диском (заполненный диск, глюки с созданием нового тома при наличии файла) и сетью, перезагрузке серверов и клиентов, завершившиеся с ошибкой задания остаются в БД навсегда (и, вообще, БД не чистится от мусора). Хорошо хоть оператора извещает. Много ручной работы (беготня по меню), нет копирования носителей с консолидацией и отслеживанием в каталоге, нет создания нескольких копий одновременно, нет консолидации частично заполненных носителей, нет автоматического обнаружения новых серверов, файловых систем, СУБД. Ручная установка как серверов, так и клиентов. Средства перехода на новую версию - вручную.
Своя система аутентификации и авторизации для администраторов с возможностью разбивки по ролям и областям ответственности, учёт действий пользователей. Для аутентификации между процессами используется CRAM-MD5, обеспечивающий достаточный уровень защиты, пароли не передаются, но хранятся в открытом виде. Передаваемые между серверами данные можно шифровать с помощью TLS. Шифровка данных на стороне клиента в версии 2.
Высокая скорость (наличие каталога с информацией о местонахождении требуемого файла) и лёгкость восстановления (поиск по имени, времени). Слабая защита "от дурака" в текстовой версии. Независимость восстановления от платформы в версии 2 (с потерей атрибутов). Возможность восстановления на другой хост, другой каталог (и возможность ограничить это).
Информация о заданиях, томах и файлах сохраняется во внешней СУБД (MySQL, PostgreSQL, SQLLite): какой файл с какого клиента был записан на какой носитель и когда. Возможность восстановления каталога из резервной копии и с носителя.
Управление и учёт носителей (сколько времени хранить, где находится, что содержит); метки на носителях (физические и логические), отслеживания перемещений нет. Группировка томов в пулы со своими свойствами и назначением.
Имеется режим верификации, который позволяет сопоставить атрибуты файлов в каталоге с текущим состоянием (в т.ч. MD5 или SHA1 хеши).
bacula не отслеживает удаления и переименования файлов после сохранения (при восстановлении удалённые файлы появятся вновь).
Написание скриптов на python (2.2, 2.3, 2.4 или 2.5).
Распространяется с открытыми источниками (почти GPL2 в версии 1 и просто GPL2 в версии 2), 150 тысяч строк (200 тысяч в версии 2). Требуется компилятор GNU C++ 2.95 и выше (старая версия компилировалась под gcc 2.7.2 с некоторыми ограничениями), Visual Studio для версии 1 и mingw32 для версии 2). Начальные разработчики - John Walker и Kern Sibbald (2000), передан Free Software Foundation of Europe. Имеется возможность получить платную поддержку. Создана фирма для поддержки пользователей - Bacula Systems S.A. (Kern Sibbald). Документация - 800 страниц. Версии: 1.38.11, 2.0.3, 2.2.8, 2.4.4. Требуется LD_ASSUME_KERNEL=2.4.19 для запуска в RH с ядром 2.4 (проблема с нитями). При восстановлении файлов, имеющих несколько имён на inode (ln), возникают проблемы (жёсткая ссылка на ещё не восстановленный файл). Приходится восстанавливать 2 раза.
Система состоит из набора сервисов 5 типов (может быть один или несколько сервисов каждого типа, расположение различных сервисов в сети определяется администратором):
* сервер хранения (storage server) - получает задания от директора (порт 9103); записывает или читает данные на локальные НМЛ, DVD или файловую систему; обменивается данными с файловым сервером (по заданию директора; на каждое задание файловый сервер открывает отдельную сессию); показывает статус монитору; должен быть установлен на каждом компьютере, к которому подключено одно из устройств хранения
* файловый сервер (file server, client) - получает задания от директора (порт 9102); читает или записывает данные из локальной файловой системы; обменивается данными с сервером хранения (по заданию директора); показывает статус монитору; должен быть установлен на каждый компьютер, данные с которого необходимо резервировать
* директор - основной процесс, который формирует задания согласно расписанию и управляет серверами хранения и клиентами; обеспечивает интерфейс с РСУБД для хранения информации о заданиях, томах, файлах и пр. (); информацию о файлах получает с сервера хранения в процессе резервного копирования; каталог может быть восстановлен с ленты (файла, DVD); необходимая для восстановления задания информация из каталога может быть сохранена в текстовый файл (bootstrap); информация о файлах различных клиентов может храниться в различных БД; управляется с консоли (порт 9101); показывает статус монитору; обычно устанавливается один экземпляр на сеть
* консоль управления - позволяет управлять директором; варианты - текстовый (bconsole), Gnome 2 (bgnome-console, нет преимуществ), wxWidgets (bwx-console, полезны только выбор файлов из дерева), Qt4 (bat, полноценный графический клиент); устанавливается на компьютере администратора и оператора или рядом с директором
* монитор (bacula-tray-monitor) - позволяет отслеживать статус директоров, файловых серверов и серверов хранения (сворачивается в трей Gnome 2.2 или KDE 3.1); обычно устанавливается на компьютере администратора или оператора
Дополнительные компоненты:
* вспомогательные автономные утилиты
* bacula-web (набор PHP-скриптов для получения красивых отчётов из БД, поставляется в bacula-gui; не смотрел)
* bimagemgr (запись на CD/DVD через веб-интерфейс, поставляется в bacula-gui; не смотрел)
* bacula-rescue (создание загрузочных CD-ROM для восстановления "с нуля"; Bare Metal Recovery (больше похоже на набор для самоделкина)
* bweb (управление и получение информации и статистики через веб-интерфейс; в версии 2; набор perl скриптов; не смотрел)
* brestore (в версии 2; графическая утилита восстановления; Perl/GTK/Glade; не смотрел)
В качестве РСУБД можно использовать MySQL (желательно версии от 4.1; желательно не в режиме совместимости ANSI/ISO; при установке из пакетов потребуются пакеты mysql, mysql-server и mysql-devel; при самостоятельной сборке требуется указать --enable-thread-safe-client), PostgreSQL (не пробовал) или SQLLite (в крайнем случае). При установке bacula с MySQL устанавливаются скрипты работы с СУБД (в скриптах можно указывать дополнительные параметры, например: "-u root -p"):
* grant_bacula_privileges (grant_mysql_privileges) - установка прав доступа для пользователя bacula
* create_bacula_database (create_mysql_database) - создание БД bacula
* make_bacula_tables (make_mysql_tables) - создание таблиц в БД bacula (расскоментировать дополнительные индексы)
* drop_bacula_tables (drop_mysql_tables)
* drop_bacula_database (drop_mysql_database)
* update_bacula_tables (update_mysql_tables) - при обновлении версии bacula
Типы резервирования:
* полное - все файлы
* дифференциальное - файлы, изменившиеся после последнего удачного полного резервирования (точнее, имеющие время изменения после времени начала задания резервного копирования с нем же именем, тем же набором файлов и тем же клиентом)
* инкрементальное - файлы, изменившиеся после последнего удачного резервирования любого типа
Информация хранится в БД ограниченное время. Можно отдельно задать периоды хранения информации о файлах (определяется в описании клиента при настройке директора), заданиях (при удалении задания удаляется информация о связанных с ним файлах; определяется в описании клиента при настройке директора) и томах (определяется в описании пула при настройке директора). Срок хранения информации о файлах и заданиях проверяется в конце задания сохранения для данного клиента. После удаления информации о файлах из каталога можно восстановить только всё задание целиком (или необходимо предварительно поменять параметры хранения и восстановить каталог утилитой bscan). Консоль имеет команды ручного удаления: prune (с учётом времени хранения) и purge (без учёта). Рекомендуется ежегодно выполнять OPTIMIZE TABLE в MySQL (или mysqldump с последующим восстановлением). По умолчанию, таблицы в MySQL 4.x создаются в режиме не более 4 ГБ. Если требуется больше, то либо перед созданием таблиц необходимо в my.conf вставить в секцию mysqld строку "set-variable = myisam_data_pointer_size=6", либо поменять характеристики уже существующей таблицы: "alter table File MAX_ROWS=5000000000" (проверка "SHOW TABLE STATUS;"). Для ускорения некоторых функций рекомендуется раскоментировать создание дополнительных индексов в таблице File (скрипт make_mysql_tables: PathId; FilenameId; FilenameId, PathId). Проверка наличия индексов: "show index from File;"; добавление индексов:
CREATE INDEX file_pathid_idx on File (PathId);
CREATE INDEX file_filenameid_idx on File (FilenameId);
CREATE INDEX file_filenameid_pathid_idx on File (FilenameId, PathId);
Данные сохраняются на тома (магнитная лента, DVD или файл). Имя тома может состоять из букв, цифр и символов "-_:.". На один том можно записывать произвольное количество заданий (регулируется настройкой). Одно задание может быть растянуто на несколько томов. В начале каждого тома пишется метка тома, которая позволяет избежать установки неправильной ленты. Имя файла является частью метки фалового тома, так что переименовывать файлы нельзя. Тома группируются в пулы томов: в описании задания указывается имя пула, а не конкретного тома. Параметры пула задаются при настройке директора (записываются в каталог при запуске директора или командой create в консоли). При изменении параметров пула необходимо перезапустить директора или выполнить команду "update pool" в консоли. Для автоматического изменения информации о пуле в каталоге, пул должен быть упомянут хотя бы в одном задании. Информация о реальных томах, входящих в пул, хранится в каталоге. Добавление тома в пул осуществляется командой label в консоли. Эта же команда записывает метку в начало тома (или утилита btape). Команда relabel позволяет записать новую метку тома (том должен быть предварительно очищен). Команда add добавляет том в пул, не записывая метку. Возможно автоматическое (по потребности) добавление томов в пул (полезно для дисковых томов). При инициализации тома его атрибуты по умолчанию берутся из описания пула в каталоге (можно изменить командой "update volume" из консоли, в меню есть возможность обновить все параметры томов в пуле по изменившемуся описанию пула - reload, update pool). Атрибут "Media Type" тома должен соответствовать типу носителя, который описан для указанного в задании устройства хранения. Возможные состояния тома: Append (новые данные могут записываться только в конец), Full (полностью заполнен), Used (закрыт для изменений), Purged (не содержит ничего полезного), Recycled (разрешён для повторного использования, данные стёрты), Error (какие-то ошибки при работе с томом), Archive, Read-Only, Disabled, Busy, Cleaning. Срок хранения информации в каталоге о томе проверяется только когда требуется новый том для записи, а свободного (Append) тома не найдено. В этом случае просматриваются все полностью заполненные (Full) или запрещённые к дальнейшему использованию (состояние Used) тома (превышение времени использования, числа заданий и т.п.), помеченные для автоматической очистки (атрибут AutoPrune при описании пула) и информация о файлах и заданиях на этом томе удаляется из каталога в соответствии со сроком хранения. Если в результате была удалена информации о всех файлах и заданиях, относящихся к данному тому, то он переводится в состояние очищенного (Purged). Из этого состояния том может быть немедленно переведён в состояние Recycled и использован для записи, если отмечена возможность его повторного использования (атрибут Recycle при описании пула), и он является самым старым (RecycleOldestVolume). Опция PurgeOldestVolume позволяет повторно использовать самый старый том независимо от установленных сроков хранения информации в БД. Опция Recycle Current Volume позволяет повторно использовать текущий том, установленный в устройстве. Если подходящего тома найти не удалось и не разрешена автоматическая разметка новых томов (перед разметкой происходит событие NewVolume для интерпетатора phyton) или достигнут разрешённый максимум числа томов, то bacula требует вмешательства оператора. При использовании автоподатчиков и ленточных библиотек bacula стремится минимизировать ручное вмешательство. Имеется возможность создать специальный пул Scratch, тома из которого автоматически передаются в требуемый пул (настройки тома берутся из текущего пула). Состояние тома можно узнать командой консоли: list volumes. Удалить вручную информацию о заданиях и файлах на этом томе без проверки сроков хранения можно командой консоли "purge jobs volume": (том переводится в состояние очищенного - Purged), с проверкой сроков хранения - prune. Удаление тома из каталога производится командой: delete volume (у меня удаление тома занимает 5 минут; размер БД более 4 ГБ). В версии 2 появилась возможность переноса задания с одного тома на другой (миграция), пока внутри одного сервера хранения.
Для записи на DVD (-R, +R, -RW, +RW) используется модифицированная версия growisofs (dvd+rw-tools-5.21.4.10.8 с заплатками), в версию 7 они уже встроены. Предварительно поток кешируется в файл, а при достижении оговоренного размера содержимое кеша записывается как сессия на DVD. Болванка выдерживает не более 1000 сессий записи (монтирование в режиме RW считается записью даже, если в реальности ничего не записывается). Болванка выдерживает не более 10 форматирований. bacula не может записывать на болванку, на которой сформирована файловая система (можно проверить попытавшись смонтировать диск). Полная или быстрая очистка болванки перед первым использованием:
growisofs -Z /dev/xxx=/dev/zero
или
dd if=/dev/zero bs=1024 count=512 | growisofs -Z /dev/xxx=/dev/fd/0
При описании каждого задания указывается какие файлы сохранять (FileSet), откуда их сохранять (Client), когда сохранять (Shedule), куда сохранять (Pool). Кроме заданий на сохранение можно описывать задания на восстановление, верификацию и администрирование.