<todo>Исправить статью про bacula</todo>

Сетевая система резервного копирования и восстановления данных bacula

Архитектура системы, основные понятия и компоненты Настройка: Общий синтаксис файлов настройки и ключи Сервер хранения Файловый сервер (клиент) Консоль управления Монитор Директор Схема перекрёстного опыления на дисковые массивы

Примеры установки: Ключи ./configure при сборке из исходных текстов

  • Сетевая система резервного копирования и восстановления данных bacula позволяет системному администратору сохранять данные с многочисленных компьютеров сети на накопители на магнитной ленте, устройства записи на DVD (growisofs 6.1) или жёсткие диски, а также искать и восстанавливать утерянные данные. Поддержка автозагрузчиков со считывателем штрихкода с динамической разметкой томов (метки тома в форматах IBM и ANSI, утилита проверки совместимости). Возможность кеширования данных на диск при записи на ленту или DVD.
  • Серверная часть для Linux, FreeBSD, Solaris, MS Windows (начиная с версии 2, не пробовал). Клиенты для Linux, FreeBSD, Solaris, Win32 (W98, Me, NT, 2000, XP, 2003), Win64 (Vista), MacOS X/Darwin, OpenBSD, Irix, Tru64. Система поставляется в виде исходных текстов, что позволяет адаптировать её под любую системы при наличии компилятора C++ не хуже gcc 2.95 (для версии 1.36, для более новых версий требуется более новая версия gcc). Имена файлов произвольной длины (для Win32 в версии 1 не длинее 260). Хранение атрибутов файлов: времена создания, изменения и доступа, владелец и группа, права доступа, POSIX ACL (в т.ч. для NTFS), в версии 2 - ACL SunOS, в версии 3 - атрибуты для каждой платформы сохраняются особым образом и восстанавливаются только для родной платформы, добавлена поддержка Solaris ZFS/NFSv4 ACL (с возможностью конвертации из UFS в ZFS). Расширенные атрибуты (xattr, libattr, getxattr, setxattr) сохраняются, начиная с версии 3 (включая атрибуты SELinux и Samba). Для каждого файла хранится также имя клиента и имя носителя. Возможность сохранения открытых файлов NTFS (с помощью VSS - Volume Shadow Copy; W98 и W2000 не имеют VSS! только одна задача может использовать VSS!). Поддержка имён файлов в UTF-8 для Unix/Linux и UTF-16 для Win32 (преобразуется в UTF-8 при хранении). Возможность сохранять и восстанавливать разделы диска (только целиком) и fifo-файлы (это позволяет дописывать свои программы хранения и восстановления). Имеется возможность добавлять свои расширения (в комплекте расширения bpipe и exchange).
  • Система хорошо масштабируема. Управляющий директор, СУБД, сервер хранения, сервер доступа к файловой системе, монитор и консоль выделены в отдельные процессы и могут быть в нескольких экземплярах расположены в различных узлах сети. При этом сохраняется возможность единой точки управления и мониторинга. Компоненты могут быть легко разнесены в нужные места сети или удалённых сетей, интерфейс прост, описан и управляем с точки зрения сетевого экрана.
  • Процесс резервирования автоматизирован с помощью единого планировщика (типа cron, т.е. туп). Возможно параллельное выполнение нескольких заданий, включая запись в один том. Приоритизация заданий (подход специфический). Отсутствует автоматический запуск пропущенных заданий (есть повтор неудавшегося задания и автоматическое преобразование резервного копирования изменений в полное копирование).
  • Ограничения на размер файлов, файловых систем и разделов - не более 4 миллиардов файлов в СУБД. Если надо более, то необходимо разбить БД на несколько (по клиентам) или перед сборкой переключить FileId с 32-битного на 64-битное представление (в версии 3 переключено по умолчанию). Есть поддержка многотомных архивов.
  • Имеется отдельная процедура резервного копирования с целью восстановления "с нуля" (загружаемый CD). При этом восстанавливаются не только данные, но и большинство системной информации (разбиение на разделы, LVM). К сожалению, не восстанавливаются аттрибуты файловых систем и софтовый RAID (md). Пользоваться невозможно, в версии 3 полностью переделано.
  • Отсутствуют "тяжелые" механизмы типа CDP, LAN-free, Serverless, снятие копии со снапшота, дедупликация, автоматическое распараллеливание копирования с одного клиента.
  • Миграция заданий между пулами реализована в версии 2.2 (только перемещение и только внутри одного сервера хранения). В версии 3 добавлена возможность копирования заданий (опять внутри одного сервера хранения?). В версии 3 появилась функция консолидации архивов.
  • Возможность запускать скрипты до и после задания на клиенте и сервере хранения. Это позволяет создавать свои агенты для резервирования и восстановления БД.
  • Средств управления хранением данных (иерархическое хранения, учёт жизненного цикла) и работы с архивами нет.
  • Сжатие производится пофайлово на стороне клиента (gzip, однопоточное), что позволяет минимизировать ущерб ошибок чтения. Каждый блок (около 64 КБ) тома содержит контрольную сумму. Ограничения трафика на стороне клиента - нет. Полная свобода выбора месторасположения сервера (серверов) хранения. Поддержка SAN средствами ОС.
  • Формат архива - свой. Имеются автономные утилиты получения оглавления, восстановления файлов (до версии 3 с ограничениями), восстановления БД по архивам, а также описание формата архива (и исходные тексты ;).
  • Основным интерфейсом является командная строка с выбором из меню при нехватке параметров. В версии 2.2 появился многообещающий графический интерфейс bat. Графические консоли управления в предыдущих версиях бесполезны. Имеется веб-интерфейс (не освоено). Интерактивное восстановление файлов с возможностью выбора нужной копии. Имеется возможность указывать исключения в списке файлов с помощью регулярных выражений. Автоматический запрос оператору на установку нужного тома. Извещения о проблемах и необходимости ручного вмешательства по email (различные сообщение на различные адреса для различных событий для различных групп серверов) и syslog.
  • Для индивидуального применения лучше подыскать другую программу (эта слишком тяжела в развёртывании), зато после настройки работает в полностью автоматическом режиме. Плохо переносит резкие смены конфигурации (как убрать все упоминания об удалённом клиенте, его заданиях и томах?). Плохая обработка ошибок при работе с диском (заполненный диск, глюки с созданием нового тома при наличии файла) и сетью, перезагрузке серверов и клиентов, завершившиеся с ошибкой задания остаются в БД навсегда (и, вообще, БД не чистится от мусора). Хорошо хоть оператора извещает. Много ручной работы (беготня по меню), нет создания нескольких копий одновременно, нет консолидации частично заполненных носителей, нет автоматического обнаружения новых серверов, файловых систем, СУБД. Ручная установка как серверов, так и клиентов. Средства перехода на новую версию - вручную. Требуется LD_ASSUME_KERNEL=2.4.19 для запуска в RH с ядром 2.4 (проблема с нитями).
  • Своя система аутентификации и авторизации для администраторов с возможностью разбивки по ролям и областям ответственности, учёт действий пользователей. Для аутентификации между процессами используется CRAM-MD5, обеспечивающий достаточный уровень защиты, пароли не передаются, но хранятся в открытом виде. Передаваемые между серверами данные можно шифровать с помощью TLS. В версии 3 добавлена возможность аутентификации с помоью TLS. Шифровка данных на стороне клиента в версии 2.
  • Высокая скорость (наличие каталога с информацией о местонахождении требуемого файла) и лёгкость восстановления (поиск по имени, времени). Слабая защита "от дурака" в текстовой версии. Независимость восстановления от платформы в версии 2 (с потерей атрибутов). Возможность восстановления на другой хост, другой каталог (и возможность ограничить это).
  • Информация о заданиях, томах и файлах сохраняется во внешней СУБД (MySQL от 4.1, PostgreSQL от 7.4, SQLite от 2.8.16 или SQLite 3): какой файл с какого клиента был записан на какой носитель и когда. Возможность восстановления каталога из резервной копии и с носителя. В версии 3 добавлна возможность доступа к СУБД через libdbi.
  • Управление и учёт носителей (сколько времени хранить, где находится, что содержит); метки на носителях (физические и логические), отслеживания перемещений нет. Группировка томов в пулы со своими свойствами и назначением.
  • Имеется режим верификации, который позволяет сопоставить атрибуты файлов в каталоге с текущим состоянием (в т.ч. MD5 или SHA1 хеши).

В версии 3 появилась возможность отслеживания удаления и переименования файлов после сохранения (иначе при восстановлении удалённые файлы появятся вновь).

Написание скриптов на python (2.2, 2.3, 2.4 или 2.5).

Распространяется с открытыми источниками (почти GPL2 в версии 1 и просто GPL2 в версиях 2 и 3, с небольшими исключениями), держатель Copyright - Free Software Foundation Europe, владелей торговой марки - Kern Sibbald, 200 тысяч строк кода. Требуется компилятор 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). Документация - более 1000 страниц. Версии: 1.38.11, 2.0.3, 2.2.8, 2.4.4, 3.0.3, 5.0.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); обычно устанавливается на компьютере администратора или оператора Дополнительные компоненты:

вспомогательные автономные утилиты (bls, bscan и др.) bacula-web (набор PHP-скриптов для получения красивых отчётов из БД, поставляется в пакете bacula-gui; не смотрел) bimagemgr (запись на CD/DVD через веб-интерфейс, поставляется в bacula-gui; не смотрел) bacula-rescue (создание загрузочных CD-ROM для восстановления "с нуля"; Bare Metal Recovery (больше похоже на набор для самоделкина, полностью переделано в версии 3) bweb (управление и получение информации и статистики через веб-интерфейс; в версии 2; набор perl скриптов; не смотрел) brestore (в версии 2; графическая утилита восстановления; Perl/GTK/Glade; не смотрел) В качестве РСУБД можно использовать MySQL (версии от 4.1; желательно не в режиме совместимости ANSI/ISO; при установке из пакетов потребуются пакеты mysql, mysql-server и mysql-devel; при самостоятельной сборке требуется указать --enable-thread-safe-client), PostgreSQL (не пробовал) или SQLLite (в крайнем случае). В версии 3 добавлена возможность доступа к СУБД через libdbi (пока к тем же самым типам СУБД). При установке 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). При этом замедляется обычная работа. В версии 3 индексы добавляются и удаляются автоматически (не пробовал). Проверка наличия индексов: "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 появилась возможность переноса задания с одного тома на другой (миграция), пока внутри одного сервера хранения. В версии 3 появилась возможность копирования задания и возможность выбора копии при восстановлении.

Для записи на 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). Кроме заданий на сохранение можно описывать задания на восстановление, верификацию и администрирование.

Каждый сервис имеет собственный файл настройки, имя которого можно задать при запуске (ключ "-c"). По умолчанию, в текущей директории ищется файл с именем bacula-sd.conf, bacula-fd.conf, bacula-dir.conf, console.conf (bconsole.conf, bgnome-console.conf, bwx-console.conf, bat.conf) или tray-monitor.conf. Используется кодировка UTF-8.

Каждый конфигурационный файл состоит из "ресурсов". Ресурс состоит из имени и перечня директив в фигурных скобках. Каждая директива располагается на отдельной строке и состоит из имени и значения, разделённых знаком равенства. Пробелы в имени являются незначащими, прописные и строчные буквы не различаются. Значение, содержащее пробелы и прочие символы, необходимо заключать в кавычки. Обратная косая черта маскирует специальное значение следующего символа. Пустые строчки и символы от знака '#' до конца строки игнорируются. Символ ';' означает конец директивы, далее может идти следующая директива. Конструкция '@имя-файла' на месте любой лексемы включает содержимое указанного файла. Каждый ресурс должен иметь директиву Name (с уникальным значением) и может иметь директиву Description (должно показываться оператору, я не понял куда смотреть?). Например:

Storage {
  Name = FileStorage; Description = "huge hard disk storage"
  Address ...
}

Типы данных:

имя (до 127 символов ASCII; допустимы буквы, цифры, '-', '_' и '$'; используется слева от '=') имя-строка (до 127 символов; при использовании специальных символов необходимо заключать в кавычки; используется справа от '=') строка имя-каталога (позволяет использовать выражения типа "$HOME/bacula/var" пароль (хранится MD5 хеш?) целое (32 бита) неотрицательное целое (32 бита) длинное целое (64 бита) yes | no размер (плавающее число; 64 бит; в байтах; модификаторы (без пробела): k, m, g (двоичные) и kb, mb, gb (десятичные) время (плавающее число; 64 бит; в секундах; модификаторы (можно с пробелом и в сокращённом виде): seconds, minutes, hours, days, weeks, months, quarters, years; можно использовать составные значения) Общие ключи запуска серверов:

  • -c имя-конфигурационного-файла (по умолчанию имя-программы.conf в текущем каталоге)
  • -t (проверить синтаксис файла настройки и завершить работу)
  • -f (не отвязываться от терминала)
  • -d уровень-отладки (от 0 до 99)
  • -s (не перехватывать сигналы)
  • -i (соединение произошло через inetd/xinetd)
  • -v

Во всех файлах настройки задаётся ресурс Messages, который управляет рассылкой сообщений, в зависимости от типа сообщения и имени задания. Можно задавать несколько ресурсов Messages для заданий различного типа (имя ресурса Messages указывается при описании задания). Сообщение может быть отправлено в несколько мест назначения (в syslog и по e-mail) или не отправлено никуда. Рекомендуется настраивать файловые сервера и сервера хранения так, чтобы все сообщения пересылать директору - это позволяет централизовать обработку сообщений.

Каждое сообщение имеет один из следующих типов:

  • info
  • warning
  • error (задание продолжает выполняться)
  • fatal (задание пришлось снять)
  • terminate (сервер остановлен)
  • saved (?; список скопированных файлов; не надо посылать эти записи на консоль!)
  • notsaved (список файлов, которые не удалось скопировать)
  • skipped (список файлов, которые были пропущены при копировании согласно настройке; не надо посылать эти записи на консоль, в журнал или почту)
  • mount (требования к оператору смонтировать том)
  • restored (список восстановленных файлов; в формате "ls -l")
  • all
  • security (нарушения авторизации, реализовано в 2.2)
  • alert (проблема с лентой)
  • volmgmt (не реализовано)

Директивы:

Name (это имя указывается в директиве Messages описания задания; имя по умолчанию задаётся в директиве Messages основного ресурса)

  • MailCommand (команда отправки письма; например, "/usr/local/bacula/sbin/bsmtp -h SMTP-сервер -f \"\(Bacula\) %d\" -s \"Bacula: %t %e of %c %l\" %r"; макроподстановки:
%% - %
%c - имя клиента
%d - имя директора
%e - код завершения (OK, Error, Fatal)
%i - идентификатор задания
%j - уникальное имя задания
%l - тип резервирования (Full, Incremental, Differential, Base)
%n - имя задания
%r - получатели сообщения
%t - тип задания (Backup, Restore, ...)
  • OperatorCommand (команда для передачи сообщений оператору)

какие сообщения куда посылать (в качестве элемента списка типов сообщений можно указывать отрицания: "all, !saved, !skipped"):

  • stdout (в качестве параметра указывается список типов сообщений через запятую)
  • stderr (в качестве параметра указывается список типов сообщений через запятую)
  • console (в качестве параметра указывается список типов сообщений через запятую; имеется в виду консоль bacula)
  • director (в качестве параметров указывается имя директора (пока игнорируется), знак '=', список типов сообщений через запятую)
  • file (в качестве параметров указывается имя файла, знак '=', список типов сообщений через запятую; файл перезаписывается)

append (в качестве параметров указывается имя файла, знак '=', список типов сообщений через запятую; надо регулярно чиститься, например, поместить отредактированный scripts/logrotate в /etc/logrotate.d/bacula; для обработки смотри scripts/logwatch/)

  • syslog (в качестве параметров указывается facility (пока игнорируется и сообщения идут с типом DAEMON и уровнем ERR), знак '=', список типов сообщений через запятую)
  • mail (в качестве параметров указывается список получателей через запятую, знак '=', список типов сообщений через запятую)
  • mail on error (в качестве параметров указывается список получателей через запятую, знак '=', список типов сообщений через запятую)
  • mail on success (в качестве параметров указывается список получателей через запятую, знак '=', список типов сообщений через запятую)

operator (в качестве параметров указывается список получателей через запятую, знак '=', список типов сообщений через запятую; сообщения не группируются, а посылаются поштучно) catalog (в качестве параметра указывается список типов сообщений через запятую; записываются в СУБД в таблицу Log; очищается одновременно с удалением записи о задании)

  • TLS. Во всех файлах настройки (директор, сервер хранения, клиент, консоль) могут быть заданы директивы, обеспечивающие шифрование передачи данных (не хранение!) с помощью TLSv1 и системы сертификатов PKI (не путать с директивами PKI, обеспечивающими шифрование хранения!). Не поддерживается режим анонимного согласования Diffie-Hellman. Имеется возможность использовать TLS для аутентификации вместо CRAM-MD5. Директивы (пример использования):
  • TLS Enable ("no"; использование TLS не отмечается ни в статусе, ни в журналах)
  • TLS Require ("no"; не использовать соединения без TLS)
  • TLS Certificate (имя файла, содержащего сертификат настраиваемого субъекта в PEM формате (DER в Base64); необходимо учесть, что обращающийся проверяет соответствие "Common Name" из сертификата того, к кому он обращается, строке Address в своих настройках, так что, если в настройках консоли написано "Addres=127.0.0.1", то и сертификат директору надо выдавать на это имя (в соответствующем разделе Director или Console); аналогично, если в разделе Client настроек директора указан адрес 192.168.0.1, то и сертификат клиенту надо выдавать на это имя (в разделе Director настроек клиента); кстати, клиент обращается к серверу хранения, а не наоборот; создание:

cd /etc/pki/tls

openssl genrsa -out private/bacula-субъект@имя-сервера.key 2048 # незашифрованный! # или расшифровать перед копированием на сервер (зашифрованный ключ использовать не получается) #openssl genrsa -des3 -out private/bacula-субъект@имя-сервера.key 2048 # обязательно с подписью своего CA openssl req -new -reqexts v3_req_server -key private/bacula-субъект@имя-сервера.key \

  1. out certs/bacula-субъект@имя-сервера.csr

openssl ca -in certs/bacula-субъект@имя-сервера.csr -out certs/bacula-субъект@имя-сервера.crt TLS Key (имя файла, содержащего незашифрованный приватный ключ настраиваемого субъекта; в PEM формате (DER в Base64); может содержать зашифрованный приватный ключ, если субъект является только клиентом; создаётся при создании сертификата TLS Verify Peer ("no"; субъект в роли сервера будет требовать и проверять сертификат клиента; нельзя указывать в настройках консоли и в разделе FileDaemon настроек клиента) TLS Allowed CN (""; субъект в роли сервера будет требовать и проверять сертификат клиента и допускать только клиентов с указанным Common Name; директиву можно использовать несколько раз) TLS CA Certificate File (имя файла, содержащего сертификат[ы] CA в PEM формате (DER в Base64)) TLS CA Certificate Dir (имя каталога, содержащего файлы с сертификатами CA; имена файлов должны соответствовать хешам сертификатов) TLS DH File (имя каталога, содержащего файлы с параметрами Diffie-Hellmanв PEM формате; обеспечивает усиление защиты) TLS Authenticate (no; использовать TLS для аутентификации вместо CRAM-MD5; с версии 3)

Сервер хранения

В файле настройки (/usr/local/bacula/etc/bacula-sd.conf) должны быть описаны следующие ресурсы:

Storage (описание, ровно один ресурс) Name (имя должно быть уникально, используется директором) Description? Working Directory (/usr/local/bacula/var, должны быть права на запись для baculas и не должно быть прав на чтение для посторонних) Pid Directory (/var/run) Heartbeat Interval (0; необходим для борьбы со слишком умными маршрутизаторами, которые закрывают соединение по истечению интервала неактивности; при необходимости вмешательства оператора для монтирования ленты неактивность может быть длительной) Client Connect Wait (30 minutes до версии 3, 3 minutes в версии 3) Maximum Concurrent Jobs (10; заданием считается также запрос состояния, так что не надо уменьшать до 1) SDPort (9103) SDAddress (по умолчанию прослушиваются все доступные адреса) SDAddresses (более сложная форма задания адресов и портов для ipv4, ipv6 и др., например: SDAddresses = { ipv4 = { addr = 192.168.0.1; port = http;} }) AllowCompression (управление сжатием с точностью до сервера хранения) Block Checksum (управление проверкой контрольных сумм как при записи, так и при чтении) Director (аутентификационная информация для проверки директора или монитора; для каждого директора или монитора - отдельный ресурс) Name (имя директора, которому позволено управлять этим сервером хранения) Password (пароль, который он должен предъявить; указывается в ресурсе Storage в настройках директора) Monitor (если "yes", то директор сможет только узнать статус сервера) Device (описание устройства хранения; для каждого устройства - отдельный ресурс; каждое устройство может монтировать только один том, даже если это файл; так что при желании размещать тома в различных каталогах или параллельно записывать в несколько файлов необходимо описать несколько устройств (и иметь несколько ресурсов Storage в настройках директора)) Name (это имя указывается директором в запросе - директива Device ресурса Storage) Archive Device (имя устройства НМЛ, DVD или каталога: /dev/nst0, /dev/hdc, /backup; для НМЛ необходимо выбирать имя устройства, которое обеспечивает "неперематываемое" поведение в стиле Berkeley I/O; можно также указывать имя FIFO файла, в этом случае при копировании директива RunBeforeJob должна запускать программу, которая будет читать из FIFO, а при восстановлении записывать в FIFO (только если директор и сервер хранения работают на одном компьютере); для FIFO надо использовать команду add вместо label) Device Type (File, DVD, Tape, FIFO, VTape (эмуляция ленты для тестирования, начиная с версии 3)) Media Type (логический тип носителя; указывается директором в запросе; используется при восстановлении для определения сервера хранения, способного прочитать том; каждое устройство для записи на диск должно иметь уникальный Media Type, т.к. в каталоге хранится только Media Type, а не имя устройства) Removable media (для устройства типа File, если том (файл) не найден, то производится поиск файла по имени по всему устройству (?)) Random access (устройство поддерживает lseek(2); надо установить "Yes" для дисков DVD и USB и "No" для лент и FIFO) Block Positioning = yes (использовать прямое позиционирование; необходимо отменить при чтении старых томов в новой версии) Label media (no; для записи на диск предпочтительно указать "yes", что позволяет автоматически размечать тома в соответствии с директивой LabelFormat ресурса Pool в настройках директора) Automatic mount (yes) Maximum Volume Size (предпочтительно использовать директиву Maximum Volume Bytes при настройке директора) Maximum File Size (1 gb; имеются в виду ленточные файлы и отметки в каталоге; полезно для ускорения поиска и обработки ошибок, причём не только на ленте; в каталог заносятся записи JobMedia); Maximum Open Wait (5 minutes) Volume Poll Interval (периодический автоматический опрос устройства после указания оператору установить том) Always Open (yes; для закрытия (освобождения НЛМ) требутся явно выдать команду unmount (кстати, ленту после закрытия требуется перематывать); для FIFO обязательно "no"; при записи на диск директива игнорируется) Maximum Network Buffer Size (32768; по слухам назначение 65536 даёт ускорение до 5 раз на быстрой локальной сети; необходимо согласовывать с настройками файловых серверов) Maximum Concurrent Jobs (управление максимальным числом одновременно выполняемых заданий с точностью до устройства, одновременность в пределах одного пула томов, для реальной параллельности дисковые тома должны лежать в разных каталогах) управление НЛМ (рекомендуется предварительное тестирование утилитой btest): Maximum Rewind Wait (5 minutes); Minimum block size; Maximum block size (64512); Hardware End of Medium (yes; имеется поддержка MTEOM - позиционирование ленты в конец записанных данных - и отслеживание номера файла на ленте; нельзя использовать fast-eod); Fast Forward Space File (yes; имеется поддержка MTFSF и отслеживание номера файла на ленте); Use MTIOCGET (yes; имеется отслеживание номера файла на ленте); BSF at EOM (no; требуется BSF при достижении конца данных, чтобы вернуться к предыдущей EOF); TWO EOF (no; записывать 2 EOF по концу задания); Backward Space Record (yes; имеется поддержка MTBSR); Backward Space File (yes; имеется поддержка MTBSF); Forward Space Record (yes; имеется поддержка MTFSR); Forward Space File (yes; имеется поддержка MTFSF); Offline On Unmount (no; имеется поддержка MTOFFL - перемотать и вытолкнуть ленту); Close on Poll (в сочетании с Offline on Unmount) Volume Poll Interval (0; после запроса оператору поставить ленту, bacula может опрашивать устройство (пытаться прочесть метку) с указанным интервалом) управление кешированием на диск при записи на ленту (при этом каталог также кешируется на диск): Spool Directory (Working Directory) Maximum Spool Size (0 - бесконечность; для всех одновременных заданий) Maximum Job Spool Size (0 - бесконечность; для каждого задания) управление записью на DVD или съёмные диски: Requires Mount (no; требуется "yes" для записи на DVD или съёмные диски, которые не монтируются автоматически Mount Point Mount Command (например, "/bin/mount -t iso9660 -o ro %a %m"); DVD-RW обязательно монтировать в режиме ReadOnly, т.к. каждое монтирование в режиме ReadWrite считается записью (а болванка выдерживает не более 1000 перезаписей, замены: %a - имя устройства %m - точка монтирования %e - единица, если это первая запись на том, и 0 в остальных случаях (требуется очистка) %n - номер части %v - имя файла Unmount Command ("/bin/umount %m") Maximum Part Size (0 - бесконечность; указанный размер буферизуется перед монтированием устройства) Write Part Command (запись буфера на устройство; "dvd-handler %a write %e %v") Free Space Command (возвращает размер свободного места; "dvd-handler %a free") управление автоматическим магазином (библиотекой): Autochanger (no) Changer Device Changer Command Alert Command Drive Index Autoselect Maximum Changer Wait Autochanger (позволяет сгруппировать устройства, входящие в одну автоматизированную библиотеку) Name (это имя указывается директором в запросе - директива Device ресурса Storage) Device (имена через запятую ресурсов Device) Changer Device Changer Command Messages (правила рассылки сообщений директору) Файловый сервер (клиент)

В файле настройки (/usr/local/bacula/etc/bacula-fd.conf) должны быть описаны следующие ресурсы:

Client (описание, ровно один ресурс) Name (имя должно быть уникально, используется директором) Working Directory (/usr/local/bacula/var, не должно быть прав на чтение для посторонних; для архитектуры Win32 необходимо указывать букву устройства, и каталог должен быть доступен на запись для пользователя SYSTEM) Pid Directory (/var/run) Heartbeat Interval (0; необходим для борьбы со слишком умными маршрутизаторами, которые закрывают соединение по истечению интервала неактивности; в версии 2.0 появилась новая директива управления keepalive с тем же именем?) Maximum Concurrent Jobs (2; заданием считается также запрос состояния, так что не надо уменьшать до 1; для реальной параллельности дисковые тома должны лежать в разных каталогах) FDPort (9102) FDAddress (по умолчанию прослушиваются все доступные адреса) FDAddresses (более сложная форма задания адресов и портов для ipv4, ipv6 и др., например: FDAddresses = { ipv4 = { addr = 192.168.0.1; port = http;} }) SDConnectTimeout (30 minutes) Maximum Network Buffer Size (32768 в версии 1.38 и 65536 в версии 2.0; по слухам назначение 65536 даёт ускорение до 5 раз на быстрой локальной сети; необходимо согласовывать с настройками серверов хранения) PKI Encryption ("No"; данные шифруются на стороне клиента; имена файлов и прочие метаданные остаются открытими; используются приватные RSA ключи с самоподписанными сертификатами X.509 (PKI); для каждой сессии генерируется сессионный ключ для симметричного шифрования (AES-CBC, 128 бит; встроены и другие алгоритмы, но пока не используются); сессионный ключ шифруется (RSA) публичным ключом файлового сервера и "главным" ключом и передаётся на сервер хранения в зашифрованном виде ("почти" RFC-3852); незашифрованные архивы восстанавливаются, так что директор может "восстановить" конфигурационный файл с другими ключами и при следующем запуске bacula-fd они будут использоваться - надо следить (не понял как: PKI Signature только сообщает об ошибке, но файл записывает!); в журнале задания помечается "Encryption: yes"; в статусе задания в БД отметки нет; в статусе сервера отметки нет; в метке тома и метке задания на томе отметки нет; bls шифрования не замечает; bextract восстанавливает только метаинформацию) PKI Signatures ("No"; используется SHA-256 или SHA-1; неподписанные архивы восстанавливаются с сообщением об ошибке) PKI Keypair (имя файла, содержащего незашифрованные приватный и публичный RSA ключи клиента в PEM формате (DER в Base64); зашифрованный приватный ключ использовать не получается, хотя для резервного копирования он не нужен; не указывать ключи клиента тоже нельзя; у каждого файлового сервера д.б. свои ключи; рекомендуется хранить копию в банковской ячейке; нельзя допустить резервное копирование незашифрованного приватного ключа до включения PKI Encryption; создание: cd /etc/pki/tls openssl genrsa -out private/bacula-fd@имя-сервера.key 2048 # незашифрованный! # расшифровать перед копированием на сервер (зашифрованный ключ использовать не получается) #openssl genrsa -des3 -out private/bacula-fd@имя-сервера.key 2048 # самоподписанный openssl req -new -key private/bacula-fd@имя-сервера.key -x509 -out certs/bacula-fd@имя-сервера.crt # с подписью своего CA #openssl req -new -reqexts v3_req_server -key private/bacula-fd@имя-сервера.key \

  1. out certs/bacula-fd@имя-сервера.csr

#openssl ca -in certs/bacula-fd@имя-сервера.csr -out certs/bacula-fd@имя-сервера.crt cat private/bacula-fd@имя-сервера.key certs/bacula-fd@имя-сервера.crt > bacula-fd@имя-сервера.pem PKI Master Key (имя файла, содержащего публичный "главный" ключ; приватный "главный" ключ позволяет расшифровать данные при утере ключей клиента, его нельзя выкладывать на файловые сервера, директор и сервер хранения; для хранения приватного "главного" ключа рекомендуется использовать банковскую ячейку; при восстановлении конкатенация приватного ключа и сертификата подставляется в PKI Keypair; создание: cd /etc/pki/tls openssl genrsa -out private/bacula-master.key 2048 # незашифрованный! #openssl genrsa -des3 -out private/bacula-master.key 2048 # расшифровать перед применением openssl req -new -key private/bacula-master.key -x509 -out certs/bacula-master.crt # самоподписанный # с подписью своего CA #openssl req -new -reqexts v3_req_server -key private/bacula-master.key -out certs/bacula-master.csr #openssl ca -in certs/bacula-master.csr -out certs/bacula-master.crt Plugins Directory (в версии 3 была добавлена возможность расширений FD, расширения оформляются в виде разделяемых библиотек (имя-fd.so) и помещаются в указанный каталог, в поставку входят следующие расширения: bpipe - позволяет использовать любую пару программ для создания и чтения "псевдофайла" из архива exchange - MS Exchange Server 2003/2007 Plugin Options Plugin Options ACL Director (аутентификационная информация для проверки директора или монитора; для каждого директора или монитора - отдельный ресурс) Name (должно соответствовать имени, указанному в ресурсе Director настройки директора) Password (пароль, который директор должен предъявить; указывается в ресурсе Client настройки директора) Monitor (если "yes", то директор сможет только узнать статус сервера; проблемы с W32) Messages (правила рассылки сообщений директору) Клиент может работать в режиме "читать всё, без права записи": "bacula-fd -k -u nobody -g nobody".

Модификации консоли:

bconsole - чисто текстовая (ключ "-u" позволяет задать интервал неактивности) bgnome-console - под Gnome; ничем не лучше текстовой bwx-console - под wxWidget; Linux и MS Windows; выбор восстанавливаемого файла в графическом режиме bat - графическая консоль (в версии 2.2 - альфа), но текстовые команды доступны и в ней; предполагается влить в него функции монитора и отчёты bweb; все подокна можно выделить из основного окна; контексное меню по правой кнопке мыши; выбор восстанавливаемого файла в графическом режиме, включая выбор восстанавливаемой версии; построение графиков статистики использования; Аутентификация и авторизация доступа к директору может быть 3 типов:

анонимная консоль со всеми правами: пароль доступа к директору указывается в ресурсе Director настройки консоли и должен соответствовать директиве Password ресурса Director настройки директора) "именованная" консоль: в настройках консоли и директора необходимо сконфигурировать ресурсы Console, в которых указывается имя консоли и пароль доступа к директору; права доступа определяются с помощью ACL в ресурсе Console настройки директора если имя консоли совпадает с именем клиента, то данная консоль имеет права выполнять команду SetIP, чтобы изменить значение Address соответствующего ресурса Client в настройке директора на IP консоли (необходимо при использовании динамических адресов DHCP); команда SetIP должна быть разрешена в ACL В файле настройки (bconsole.conf, gnome-console.conf, wx-console.conf, bat.conf) должны быть описаны следующие ресурсы:

Director (аутентификационная информация для анонимного доступа к директору; для каждого директора - отдельный ресурс; если их несколько, то при запуске программы необходимо выбирать) Name (используется только для выбора) DIRPort (9101; номер порта для связи с директором) Address (адрес или имя хоста, на котором работает директор) Password (должен соответствовать директиве Password ресурса Director настройки директора) ConsoleFont (только для gnome-console) Name (предлагается Default) Font ("LucidaTypewriter 9", имя шрифта в формате Pango) Console (аутентификационная информация для неанонимного доступа к директору; для каждой консоли, т.е. набора прав доступа необходимо описать свой ресурс, который привязывается к ресурсу Director) Name (должно соответствовать директиве Name ресурса Console настройки директора; должно совпадать с именем клиента для выдачи команды SetIP) Password (должен соответствовать директиве Password ресурса Console настройки директора) Director (имя ресурса Director; если при запуске выбирается этот директор, то используется данная консоль) Heartbeat Interval (позволяет настроить значение keepalive) Команды консоли (имя команды можно сокращать (даже при неоднозначности!), имя параметра - нет; если параметров недостаточно, то недостающие будут запрошены; для прерывания интерактивного задания параметров - не при вводе имени тома - необходимо ввести "."; запущенную на выполнение команду прервать нельзя (^C не работает); команды могут читаться из файла перенаправлением ввода; максимальная длина команды - 511 символов):

help quit или exit (.quit для немедленного выхода) add [pool=имя-пула] [storage=имя-устройства] [jobid=идентификатор-задания] (добавить новый том к пулу в каталоге; для форматирования тома используйте команду label) autodisplay off|on (по умолчанию, выдаётся только извещение о наличии новых сообщений от директора, чтобы их посмотреть необходимо выдать команду messages) automount on|off (по умолчанию, лента монтируется автоматически после форматирования командой label) cancel [jobid=идентификатор-задания] [job=имя-задания] [ujobid=уникальный-номер-задания] (команда cancel без параметров вызывает вывод текущих заданий и запрос номера из списка; завершение команды требует времени) create [pool=имя-пула] (создать запись пула в БД из описания ресурса в файле настройки; при запуске директора автоматически создаются записи всех несуществовавших ранее пулов, на которые есть ссылки в каком-либо задании) delete [volume=имя-тома] [pool=имя-пула] [jobid=идентификатор-задания] (удалить из каталога информацию о задании, томе или пуле вместе со всеми зависимостями) delete job jobid=список-или-интервал-идентификаторов (например: jobid=3,4,7-9) disable job=имя-задания (запретить автоматическое планирование задания) enable job=имя-задания (разрешить автоматическое планирование задания) estimate [level=Full|Incremental|Differential|Base] [job=имя-задания] [client=имя-клиента] [fileset=имя-набора-файлов] [listing] (прикинуть приблизительный объём сохраняемых данных до сжатия; ключевое слово listing позволяет получить полный список файлов) exec (запуск программ/скриптов)? gui [on|off] label [storage=имя-устройства-на-сервере-хранения] [volume=имя-тома] [slot=номера-слотов] (добавить новый том к пулу в БД и форматировать том; предварительно может потребоваться размонтировать ленту; если лента уже отформатирована, то требуется выполнить команды purge и relabel) label barcodes [storage=имя-устройства-на-сервере-хранения] [slot=номера-слотов] (имя тома считывается с печатной метки на ленте) list ... (извлечение информации из БД; можно добавлять свои команды в query.sql) list jobs [limit=число] list ujobid=уникальный-идентификатор-задания [limit=число] [joblog] list jobid=идентификатор-задания [limit=число] [joblog] list job=имя-задания [limit=число] [joblog] (в версии 1.38 не работает) list jobmedia [jobid=идентификатор-задания] [job=имя-задания] list files [limit=число] [jobid=идентификатор-задания] [job=имя-задания] list pools list clients (информация в БД не обновляется при изменении клиента ни автоматически, ни после reload) list jobtotals list volumes [pool=имя-пула] [jobid=идентификатор-задания] [job=имя-задания] list volume=имя-тома list nextvolume job=имя-задания [days=число-дней] (в первом приближении) llist ... (более подробная информация из БД) memory (использование памяти директором) messages (вывести накопившиеся сообщения от директора) mount [storage=имя-устройства-на-сервере-хранения] [slot=номер] [jobid=идентификатор-задания] [job=имя-задания] prune files|jobs|volume client=имя-клиента volume=имя-тома (удалить из БД информацию о файлах, заданиях или томах с истёкшим сроком хранения и всё с нею связанное) purge files jobid=идентификатор-задания|job=имя-задания|client=имя-клиента (удалить из БД информацию о файлах, если даже срок хранения не истёк) purge jobs client=имя-клиента (удалить из БД информацию о заданиях, если даже срок хранения не истёк) purge volume=имя-тома (удалить из БД информацию о томе, если даже срок хранения не истёк) python restart query (выдаётся меню предопределённых SQL-запросов; имя файла задаётся директивой QueryFile) relabel storage=имя-устройства-на-сервере-хранения oldvolume=старое-имя-тома volume=новое-имя-тома (заново отформатировать старый том; должен быть в состоянии Purged или Recycle) release storage=имя-устройства-на-сервере-хранения (перемотать ленту; перед следующим использованием заново прочесть метку) reload (прочитать заново конфигурационный файл bacula-dir.conf; планировщик ставит задания в очередь за 2 часа до наступления события, настройки заданий в очереди не изменяются; если в момент reload выполнялись какие-то задания, то задание на изменение параметров ставится в очередь - до 10 штук) restore [storage=имя-устройства-на-сервере-хранения] current] {file=полное-имя-файла | <файл-с-именами-файлов} [bootstrap] [all [done [yes] (восстановить файлы с указанием откуда и куда; strip_prefix, add_prefix, add_suffix, regexwhere позволяют переименовать файлы при восстановлении (с версии 2.2); current - из последней резервной копии; all - все файлы, иначе предлагается отметить требуемые файлы в интерактивном режиме (см. ниже); done и yes - не запрашивать подтверждение, иначе после выбора параметров предлагается меню с возможностью их модифицировать (сервер хранения, имя задания, имя набора файлов, на какой клиент восстанавливать, когда, приоритет, имя файла bootstrap, куда восстанавливать, режим замещения (never приводит к неправильным правам доступа к восстановленным каталогам), переименование (File Relocation) файлов при восстановлении с версии 2.2, номер задания, опции файлового агента (Plugin) с версии 3); конфигурационный файл директора должен содержать описание задания типа Restore, содержащий параметры по умолчанию; каталог для восстановления рекомендуется создавать заранее с правильными правами доступа, особенно в MS Windows; файлы записываются в файловую систему указанного клиента; если записи о файлах уже удалены из каталога, то можно восстановить все файлы или файлы, удовлетворяющие регулярному выражению (с версии 3); если параметров для однозначного выбора идентификатора задания (идентификаторов заданий) резервного копирования недостаточно, то пользователю выдаётся меню, позволяющее найти нужное задание вывести параметры последних 20 заданий вывести список заданий, содержащих указанный файл ввести список идентификаторов заданий (полезно для аварийно завершившихся заданий; порядок важен) ввести SQL запрос для поиска восстановить последнее резервное копирования для указанного клиента (выбирается последнее полное копирование и последующие инкрементальные и/или дифференциальные копирования; аварийно завершившиеся задания не используются; если записи о файлах были удалены из БД - следите за JobFiles, то восстановление будет неполным) восстановить резервное копирования для указанного клиента до указанного времени ввести список полных имён файлов для восстановления (имена вводятся по одному на строке; пустая строка - конец списка; если перед именем ввести символ '<', то список будет прочтён из указанного файла; если перед именем ввести символ '?', то список будет прочтён из указанной SQL таблицы (формат: JobId, FileIndex)) ввести список полных имён файлов для восстановления до указанного времени ввести идентификаторы заданий и список каталогов для восстановления (порядок идентификаторов важен; имена вводятся по одному на строке; пустая строка - конец списка; если перед именем ввести символ '<', то список будет прочтён из указанного файла; подкаталоги необходимо указывать явно) run [job=имя-задания] [client=имя-клиента] [fileset=имя-набора-файлов] [level=Full|Incremental|Differential|Base] [storage=имя-устройства-на-сервере-хранения] [when=время-начала] [yes] (запустить задание; если параметров недостаточно, то недостающие будут запрошены в интерактивном режиме; yes - не запрашивать подтверждение) setdebug level=число trace=0|1 dir|client=имя|storage=имя|all setip (авторизованный клиент с динамическим адресом может указать его здесь) show (показать текущее значение ресурсов файла настройки (см. reload) указанного типа: directors, clients, counters, jobs, storages, catalogs, schedules, filesets, groups, pools, messages, all, help) sqlquery (переход в режим прямого доступа к SQL; каждая команда завершается по ";"; выход по вводу ".") status [all | dir=имя-директора [days=дней-вперёд]| client=имя-клиента | [slots] storage=имя-сервера-хранения] (состояние соответствующего сервера: прошлые (10 штук), текущие и запланированные задания, включая имена предполагаемых томов) time trace (включить/выключить трассировку) unmount storage=имя-устройства-на-сервере-хранения [drive=номер] unmount [ jobid=имя-задания | job=имя-задания ] update pool (обновить информацию о пулах в БД из ресурса Pool) update volume[=имя] [volstatus= | VolRetention= | VolUse= | MaxVolJobs= | MaxVolBytes = | Recycle= | enabled= | recyclepool=] (система запрашивает какую информацию о каком томе изменить) update volume [allfrompool pool=имя] (система запрашивает какую информацию о томе изменить) update volume [allfrompools] (система запрашивает какую информацию о томе изменить) update slots (директор запрашивает считыватель шриховых кодов и вносит соответствующие изменения в БД) update slots scan (для автоматизированных библиотек, не имеющих считыватель штриховых кодов - сервер хранения считывает метку каждой ленты и директор вносит соответствующие изменения в БД) use имя-БД (использовать указанную БД для хранения каталога) var строка (тестирование подстановки переменных) version wait [jobid=номер-задания | jobuid=уникальный-номер | job=имя-задания] (ждать завершения задания; используется в пакетных заданиях)

Команды для работы в пакетоном режиме и для графических оболочек:

.api (?) .backups job=имя-задания .clients (просто список имён клиентов) .defaults client=имя-клиента .die (аварийное завершение директора) .dir (в режиме интерактивного восстановления) .exit .filesets (просто список имён наборов файлов) .help .jobs (просто список имён заданий) .levels (просто список имён уровней) .messages (выдать накопленные сообщения по-быстрому) .msgs (выдать накопленные сообщения) .pools (просто список имён пулов) .pwd .quit .sql .status ... .storage (просто список имён серверов хранения) .types (просто список типов заданий) Команды, выполняемые самой консолью (только текстовый вариант):

@input имя-файла (читать команды из файла) @output [имя-файла [w|a]] (перенаправить вывод в файл; w - затирая, a - добавляя) @tee [имя-файла [w|a]] (перенаправить вывод одновременно в файл и на терминал; w - затирая, a - добавляя) @version @time (вывести текущее время) @quit @exit @sleep секунд @# коментарий @separator символ (позволяет задать разделитель команд) Команды интерактивного режима выбора файлов при восстановлении ("нехорошие" имена файлов необходимо заключать в кавычки):

help quit (выйти из интерактивного режима без восстановления) done (или просто Enter; выйти из интерактивного режима и восстановить отмеченные файлы) exit (синоним done) cd (для смены диска в MS Windows: "cd c:" или "cd C:") pwd ls (можно использовать шаблоны; перед именами отмеченных файлов выводится "*"; после имён каталогов выводится "/") lsmark (обходит каталог, включая подкаталоги) dir (с подробностями; можно использовать шаблоны) find (аналог "find / -name") mark (отмечает для предстоящего восстановления имена файлов и каталогов (рекурсивно) только в текущем каталоге; можно использовать шаблоны; "mark *" в каталоге верхнего уровня отметит всё) markdir (отметить каталог без его содержимого; необходимо отметить все вышестоящие директории при восстановлении отдельных файлов, иначе они могут быть созданы при восстановлении с неправильными правами доступа) unmark unmarkdir count (выводит число отмеченных файлов в текущем каталоге и ниже и общее количество файлов) estimate (общее количество файлов, количество отмеченных файлов и предполагаемый объём) gnome-console (gnome-console.conf) и wx-console отличаются только возможностью выбирать восстанавливаемые файлы мышкой (wx-console медленна и с неправильным шрифтом).

Монитор

Монитор позволяет узнать состояние серверов (директоров, файловых серверов, серверов хранения), к которым ему разрешён доступ.

В файле настройки (/usr/local/bacula/etc/tray-monitor.conf) должны быть описаны следующие ресурсы:

Monitor (описание монитора) Name (имя должно соответствовать имени ограниченного директора в настройках файловых серверов и серверов хранения и имени консоли с ограничением (команды status, .status) в настройках директоров) Password (должен соответствовать паролю в ресурсе Console в настройках директоров) Refresh Interval (5 seconds) Director (аутентификационная информация для доступа к директору; для каждого директора - отдельный ресурс) Name (показывается в списке) DIRPort (9101) Address Client (аутентификационная информация для доступа к клиенту; для каждого клиента - отдельный ресурс; в описании клиента должен быть соответствующий ограниченый директор: имя в ресурсе Director должно совпадать с именем в ресурсе Monitor и указано "Monitor=Yes") Name (показывается в списке) FDPort (9102) Address Password (должен совпадать с паролем в этом ресурсе Director) Storage (аутентификационная информация для доступа к серверу хранения; для каждого сервера - отдельный ресурс в описании сервера должен быть соответствующий ограниченый директор: имя в ресурсе Director должно совпадать с именем в ресурсе Monitor и указано "Monitor=Yes") Name (показывается в списке) SDPort (9103) Address Password (должен совпадать с паролем в этом ресурсе Director) Директор

В файле настройки (/usr/local/bacula/etc/bacula-dir.conf) должны быть описаны следующие ресурсы:

Director (описание, ровно один ресурс) Name (это имя указывается при настройке консолей, файловых серверов и серверов хранения) Description (описание должно показываться в мониторе; не заметил) Password (пароль для анонимной консоли (имеет полный контроль!); указывается в ресурсе Director настройки консоли) Messages (имя ресурса Messages, который будет использоваться для обработки сообщений, не связанных с конкретным заданием) Working Directory (/usr/local/bacula/var, должны быть права на запись для baculad и не должно быть прав на чтение для посторонних) Pid Directory (/var/run) Scripts Directory (каталог, в котором лежит DirStartUp.py; не устанавливается по умолчанию) QueryFile (содержит совокупность шаблонов SQL-запросов к РСУБД) Maximum Concurrent Jobs (1; учитываются только задания на сохранение или восстановление; максимальное число одновременно подключённых консолей равно 5; рекомендуется не допускать параллельной записи нескольких заданий в один том - было множество ошибок; для реальной параллельности дисковые тома должны лежать в разных каталогах) FD Connect Timeout (30 minutes) SD Connect Timeout (30 minutes) DIRPort (9101) DIRAddress (по умолчанию прослушиваются все доступные адреса) DIRAddresses (более сложная форма задания адресов и портов для ipv4, ipv6 и др.), например: DirAddresses = { ipv4 = { addr = 192.168.0.1; port = http;} } Statistics Retention (5 year; сколько времени хранить статистику) VerId (это строка показывается по команде version) MaxConsoleConnections (20) Client (отдельное описание для каждого клиента, т.е. файлового сервера; используется при описании задания для указания сохраняемого файлового сервера) Name (используется при описании ресурса Job и командах консоли) Address (полное имя или адрес) FD Port (9102; порт, на котором слушает клиент) Catalog (имя ресурса Catalog, используемого для хранения в СУБД информации, связанной с данным клиентом) Password (должен соответствовать паролю в ресурсе Client настройки файлового сервера) AutoPrune (yes; удалять в конце каждого задания из каталога записи о файлах и заданиях, срок хранения которых истёк) File Retention (60 days; период хранения информации о файлах данного клиента в каталоге; более короткий период хранения задания или тома может повлечь досрочное удаление информации о файлах; данные на ленте (диске) не удаляются) Job Retention (180 days; период хранения информации о заданиях данного клиента в каталоге; данные на ленте (диске) не удаляются; более короткий период хранения тома (ресурс Pool) может повлечь досрочное удаление информации о заданиях; ассоциированные с удаляемым заданием записи о файлах и носителях также удаляются) Maximum Concurrent Jobs (1; дополнительные ограничения указываются также в ресурсах Director, Job и Storage; для реальной параллельности дисковые тома должны лежать в разных каталогах) Priority (не реализовано, меньше - больший приоритет) FileSet (отдельное описание для каждого набора сохраняемых файлов; используется при описании задания для указания списка сохраняемых файлов; рекомендуется тестирование из консоли: "estimate job=... listing"; если в Win32 переименовать или переместить файлы, то они не включаются в задание - нет ctime, а mtime не изменяется) Name (используется при описании ресурса Job) Ignore FileSet Changes (no; если не установлено, то любое изменение в списке файлов (проверяется вычислением MD5 по содержимому директив Include и Exclude, но не wild!) приводит к созданию новой записи FileSet в БД и следующее сохранение будет полным; не срабатывает?) Enable VSS (no - в версии 1.38, yes - в версии 2.0; использовать Volume Shadow Copy Service (VSS) для клиента Win32); W98 и W2000 не имеют VSS! только одна задача может использовать VSS! Options { список-опций-через-; } (файлы, не попавшие ни под один шаблон или регулярное выражения, включаются в задание) compression=GZIP[уровень] (сжатие производится на стороне клиента пофайлово в один поток, т.е. при ошибке чтения проблемы будут только с этим файлом; по умолчанию используется уровень сжатия 6; пример эффективности сжатия и затраченного времени (набор рабочих материалов при логическом синтезе и проектировании топологии - 100ГБ; сжатие GZIP4 набора из 10TB в 2.965 раза): уровень время сжатие 1 1643 22.7% 2 1779 22% 3 2081 21.6% 4 2106 20.3% 5 2595 19.9% signature=SHA1 signature=MD5 verify= (что проверять в задании Verify Level=DiskToCatalog и Verify Level=Catalog; полезно использовать pins5 или pins1) i - номер inode p - права доступа n - число жёстких ссылок u - uid g - gid s - размер a - время последнего доступа m - время последнего изменения c - время последнего изменения inode (некоторые программы восстанавливают atime после чтения, при этом ctime устанавливается на текущее время) 5 - MD5 1 - SHA1 Accurate= (позволяет задать проверку контрольных сумм, а не только проверку времени создания/изменения файла при определении списка изменённых файлов) BaseJob=pugm15 (что сравнивать с результатом опорного (Base) задания) onefs=yes (не пересекать границы файловых систем, как -xdev в find) honor nodump flag = (для BSD; не включать файлы с установленным флагом nodump) portable=no (переносимый формат сохраняет не все атрибуты NTFS, зато позволяет восстанавливать сохранённые файлы в Unix/Linux и W98) recurse=yes (включать содержимое указанного каталога в задание) sparse=no (специальным образом обрабатывать файлы с дырками (представляются как куски файла, большой длины, заполненные нулями)) readfifo=no (читать и сохранять содержимое FIFO-файлов вместо записи о файле; кто-то должен писать в этот файл, что можно организовать с помощью RunBeforeJob (в начало скрипта необходимо добавить "exec > /dev/null"; ... > /dev/null 2>&1 < /dev/null &)) noatime=no? (с версии 2.0; сохраняемые файлы открываются на чтение с опцией O_NOATIME; это позволяет читать файлы без изменения времён atime и ctime) keepatime=no (восстанавливает atime после чтения, при этом ctime устанавливается на текущее время) mtimeonly=no (не использовать ctime при отборе файлов для инкриментального и диффиренциального сохранения) checkfilechanges=no (с версии 2.0.4; выдаётся предупреждение, если размер или время модификации файла изменяется в процессе резервного копирования) hardlinks=yes (учитывать жёсткие ссылки при сохранении и восстановлении; медленно работает при очень большом (миллионы) количестве ссылок) wild=шаблон (полное имя файла или каталога сопоставляется с шаблоном в стиле shell; при использовании нескольких шаблонов выполняется ИЛИ; для каталога необходимо указывать завершающий '/') wildfile=шаблон (только обычные файлы) wilddir=шаблон (только каталоги) regex=регулярное-выражение (полное имя файла или каталога сопоставляется регулярным выражением (POSIX); при использовании нескольких шаблонов выполняется ИЛИ; для каталога необходимо указывать завершающий '/') regexfile=регулярное-выражение (только обычные файлы) regexdir=регулярное-выражение (только каталоги) exclude=no (подошедшие под шаблоны в Options файлы исключаются из списка) aclsupport=no (сохранение и попытка восстановления ACL информации для EXT3 и XFS в соответствии с IEEE Std 1003.1e draft 17 и POSIX.1e; в версии 3 поддерживаются другии типы файловых системм, но особым образом для каждого типа) ignore case= (yes для Win32 в версии до 2.0, no для Win32 с версии 2.0, no для остальных; игнорировать регистр букв при сопоставлении шаблонов и регулярных выражений) fstype= (копировать файлы только с файловых систем, указанного типа; можно использовать несколько директив; возможные типы: ext2, jfs, ntfs, proc, reiserfs, xfs, usbdevfs, sysfs, smbfs, iso9660; для ext3fs необходимо указывать ext2; для W32 не реализовано; предполагается использование в сочетании с onefs=no) DriveType (fixed, removable, cdrom, remote; для Win32 клиентов) hfsplussupport=no (поддержка Mac OSX HFS plus finder) strippath=число (убрать указанное количество уровней из полных имён файлов при копировании EnhancedWild=yes (для Win32 клиентов; модифицирует обработку директив Wild, WildDir и WildFile?) xattrsupport = no (работа с расширенными атрибутами, включая SELinux; для каждой платформы (Darwin/OSX, FreeBSD, Linux, NetBSD) сохраняются особым образом и восстанавливаются только для родной платформы) Exclude Dirs Containing (позволяет задать имя файла, присутствие которого в каталоге исключает содержимое каталога из резервного копирования) Include { [Options { список-опций-через-; } ] список-файлов } (список файлов по одному полному имени файла или каталога на строку после строки "File="; может быть несколько Include в одном FileSet; пути записываются в формате Unix; имена каталогов не должны содержать завершающую косую черту; шаблоны не допускаются; для Win32 необходимо указывать имя устройства строчной буквой (например, "c:/winnt/drivers"), требуется аккуратность с прописными и строчными буквами, имена с пробелами необходимо заключать в кавычки; в версии 3 была добавлена возможность использования расширений FD и соответственно директива Plugin (первое поле указывает имя расширения, остальные поля - параметры); если файл не попадает ни под одну Options в этой директиве Include, то используются значения из последней Options), специальные случаи (чтобы не бороться с кавычками и символами '\' рекомендуется вызывать простой скрипт, в который заключать вызовы программ и скриптов с параметрами): если перед именем указан символ '@', то указанный файл содержит список файлов (читается при запуске директора с директорского компьютера, должен содержать на каждой строке 'File = ' и имя файла); имена файлов, начинающиеся с '|', вызывают выполнение указанной программы на компьютере директора (с его правами и euid?) в момент выполнения задания; результат работы программы интерпретируется как список имён файлов по одному на каждой строке) имена файлов, начинающиеся с '\|', вызывают выполнение указанной программы на компьютере клиента в момент выполнения задания; результат работы программы интерпретируется как список имён файлов по одному на каждой строке; если строка заключена в кавычки, то необходимо начинать с "\\|") если имя файла начинается с '<', то указанный файл должен содержать список файлов по одному на строке (без кавычек); файл читается на компьютере директора в момент выполнения задания) если имя файла начинается с '\<', то указанный файл должен содержать список файлов по одному на строке (без кавычек); файл читается на компьютере клиента в момент выполнения задания; если строка заключена в кавычки, то необходимо начинать с "\\<") имя раздела (/dev/hda6) рекомендуется сочетать со sparse=yes и размонтированием с помощью RunBeforeJob Exclude { список-файлов } (рекомендуется указать здесь каталоги типа /proc, /sys, /net, /media и т.д. - выполните команду mount, чтобы посмотреть; нельзя указать букву устройства для W32 - используйте exclude=yes в Include), типовой пример: FileSet {

Name = "Full Set"
Include {
   Options {
      wilddir = "/home/a*"
   }
   Options {
      RegexDir = ".*"
      exclude = yes
   }
   File = /home
}

} Storage (отдельное описание для каждого устройства на сервере хранения; используется при описании задания для указания устройства, на котором будут монтироваться тома) Name (используется при описании ресурса Job, это не имя сервера!) Address (адрес или полное имя, разрешение на клиенте) SD Port (9103; порт, который слушает сервер хранения) Password (должен соответствовать паролю в ресурсе Director настройки сервера хранения) Device (должно соответствовать директиве Name ресурса Device или Autochanger настройки сервера хранения; нельзя делать 2 ресурса Storage с одинаковыми директивами Address и Device) Media Type (должно соответствовать директиве Media Type ресурса Device настройки сервера хранения; рекомендуется давать уникальные имена всем типам носителей и дисковым "устройствам") Autochanger (no) Maximum Concurrent Jobs (1; не рекомендуется увеличивать, так как в результате несколько заданий могут быть записаны на один том чередующимися кусками; для реальной параллельности дисковые тома должны лежать в разных каталогах) Heartbeat Interval (0 - не изменять системные установки на сокеты) Pool (отдельное описание для каждого набора томов (лент, DVD, файлов); используется при описании задания для указания пула из которого должен быть взят том; после внесения изменений необходимо выполнить команду "update pool" или перезапустить директора; для изменения параметров уже существующего тома необходимо выполнить команду "update volume") Name (имя Scratch зарезервировано для пула запасных том - при необходимости система самостоятельно переводит том из него в требуемый пул) Maximum Volumes (0 - бесконечность) Pool Type = Backup (Backup - остальные не реализованы, Archive, Cloned, Migration, Copy, Save) Storage (имя ресурса, описывающего сервер хранения; перекрывает значение, заданное в Job и Schedule; необходимо для работы задания миграции) Use Volume Once=no (рекомендуется использовать "Maximum Volume Jobs = 1") Maximum Volume Jobs=0 (0 - бесконечность; по достижении указанного числа заданий, записанных на том, том переводится в состояние Used; плохо совместим с одновременной записью нескольких заданий на том) Maximum Volume Files=0 (0 - бесконечность; по достижении указанного числа файлов, записанных на том, том переводится в состояние Used; проверка производится только в конце задания) Maximum Volume Bytes (0 - бесконечность; по достижении указанного числа байт, записанных на том, том переводится в состояние Used; не сработало при аварийном завершении записи в файл в версии 1.38) Volume Use Duration=0 (0 - бесконечность; отсчитывается с момента первой записи; по достижении том переводится в состояние Used; проверка производится только в конце задания, так что перевод может быть отложен до конца следующего задания, использующего данный том; плохо совместим с одновременной записью нескольких заданий на том) Catalog Files=yes (заносить информацию о сохранённых файлах в каталог) Volume Retention (365 days; время хранения информации о заданиях и файлах на данном томе в каталоге; отсчёт начинается с момента перехода из состояния Appendable в Full или Used; не рекомендуется устанавливать меньше 2 интервалов между полным сохранением; принимается во внимание кратчайший из Job Retention, File Retention и Volume Retention; сами данные не стираются; вместо указанных в bacula-dir.conf 40 дней в реальности устанавливается 50 дней, вместо 16 - 20) Scratch Pool (имя запасного пула вместо стандартного пула Scratch) AutoPrune (yes; удалять из каталога записи о файлах и заданиях, срок хранения которых истёк в соответствии с Volume Retention, при поиске доступного на запись тома) RecyclePool (с версии 2.1.4; в какой пул переводить том при освобождении места; по умолчанию - оставлять в текущем; полезен при использовании пула Scratch) Recycle (yes; если bacule требуется том для записи, но нет ни одного дополняемого тома в пуле (состояние Appendable), то bacule ищет том, все задания и файлы которого удалены из каталога (состояние Purged) по истечению срока хранения или вручную, и использует его, переведя в состояние Recycled) Recycle Oldest Volume (no; если bacule требуется том для записи, но нет ни одного дополняемого тома в пуле (состояние Appendable), то очистить самый старый том (удалить информацию из каталога в соответствии со сроками хранения Job Retention, File Retention и Volume Retention); если на томе не осталось ничего полезного, то повторно использовать его; нельзя использовать, если в пуле всего 1 том) Recycle Current Volume (no; попробовать освободить смонтированный том; нельзя использовать, если в пуле всего 1 том) Purge Oldest Volume (no; если bacule требуется том для записи, но нет ни одного дополняемого тома в пуле (состояние Appendable), то удаляются из каталога все записи о заданиях и файлах на самом старом томе независимо от срока хранения и том повторно используется; не рекомендуется) Cleaning Prefix (если имя тома начинается с указанной строки, то том считается чистящей лентой и запись на него не производится - для автомагазинов со штриховыми метками) Label Format (шаблон для создания имени тома при автоматическом создании метки тома; требует указания Label Media в настройках сервера хранения; имя тома может содержать буквы, цифры и '-_:.'; шаблон заключается в кавычки; шаблон может включать имена переменных - начинаются с '$', '${' или '['; переменные делятся на счётчики, переменные окружения и внутренние переменные (Year, Month, Day, Hour, Minute, Second, WeekDay, Job, Dir (имя директора), Level, Type, JobId, JobName, Storage, Client, NumVols, Pool (не рекомендуется, т.к. это может оказаться не тот пул), Catalog, MediaType); определено множество функций над переменными, но привыкать к ним не надо, т.к. в новых версиях Label Format заменена скриптом на python; если имена переменных в шаблоне не используются, то имя тома образуется из строки, к которой добавляется число томов в пуле + 1, дополненное нулями до 4 цифр ("File-" ⇒ "File-0003"); не стоит использовать NumVols, если вы предполагаете удаление томов) Accept Any Volume (в сочетании с Recycle Current Volume позволяет повторно использовать тома в состоянии Appendable; выкинут с версии 2.0) Next Pool (имя пула назначения для задания миграции) Migration Time (максимальное время хранения заданий в томах для отбора при миграции типа PoolTime) Migration High Bytes (максимальный размер пула для задания миграции типа PoolOccupancy) Migration Low Bytes (нижняя граница размера пула для задания миграции типа PoolOccupancy) JobRetention (интервал хранения информации о заданиях, приоритет над описанием клиента) FileRetention (интервал хранения информации о файлах, приоритет над описанием клиента) ActionOnPurge=Truncate (обнуление размера файла при очистке тома) Schedule (отдельное описание для каждого пункта расписания; позволяет также переопределить ресурсы Level, Pool, Storage и Messages для задания; используется при описании задания для указания времени автоматического запуска задания) Name (указывается при описании задания) Run = [ переназначение-ресурсов ...] время-выполнения (можно описывать несколько запусков, даже в одно и то же время; время-выполнения представляет собой шаблон повторения, накладывающий ограничения на ежечасный повторяющийся цикл (в начале каждого часа (0-23) каждого дня недели (Monday-Sunday) каждого дня месяца (1-31) каждой недели (first-fifth) каждого месяца (january-december) и года); ограничивающая маска может состоять из элементов или интервалов; неделя начинается в понедельник; посмотреть получившиюся битовую маску можно командой "show schedules" в консоли, битовые маски нумеруются с 0, но неделя начинается с воскресенья); примеры частей шаблонов: monday-friday, daily, first (первая неделя месяца), w02 (вторая неделя года; w01 - это неделя, в которой находится первый четверг года), at 12:03, february, weekly, monthly, hourly, 2-15; примеры шаблонов: "1st sun at 12:50", "2nd-5th sun at 12:50", "mon-sat at 12:50"; чтобы запустить задание несколько раз в час необходимо использовать несколько директив Run; переназначение-ресурсов может быть следующим (разделяются пробелами или запятыми): Level=Full Level=Incremental Pool=имя-пула {Full|Differential|Incremental}Pool=имя-пула (изменять пул только при соответствующем типе сохранения) Storage= Messages= SpoolData=yes|no (кешировать запись на диск при записи на НМЛ) SpoolSize= (с версии 2.3.5) WritePartAfterJob= (по умолчанию - yes; для записи на DVD, см. описание ресурса Job) Job (отдельное описание для каждого задания: ссылки на ресурсы Client, FileSet, Storage, Pool, Schedule; обычно одно задание для каждого клиента) Name Enabled (yes; включить в автоматическое планирование; с 1.38.11) Type Backup Restore - задаёт шаблон для выполнения команды restore Verify - сравнить содержимое каталога с файловой системой или резервной копией Admin - полезен в сочетании с RunAfterJob и ClientRunAfterJob Migrate - перемещение (миграция) данных из одного пула в другой (в версии 5.0 и внутри пула) Level для Backup: Full Incremental - файлы, изменившиеся после последнего удачного резервного копирования любого типа (точнее, имеющие время изменения после времени начала задания резервного копирования с нем же именем, тем же набором файлов и тем же клиентом); если директор не нашёл удачного полного копирования, то задание преобразуется в Full; любое изменение описания набора файлов превращает его в другой набор (сравниваются MD5); времена у директора и клиента должны быть синхронизованы (bacula делает попытку учесть разницу) Differential - файлы, изменившиеся после последнего полного копирования VirtualFull - слияние полной резервной копии с последующими копиями изменений (Synthetic Backup, Consolidation, Virtual Backup, Vbackup) в новую полную резервную копию в другом пуле (или в том же самом, но об избегании мёртвых захватов необходимо позаботится самостоятельно), без использования FD; используется NextPool из описания пула) Base - базовая точка отсчёта для всех (включая Full) дальнейших резервных копирований для Verify: InitCatalog (запоминает атрибуты файлов в каталоге, данные не запоминаются) Catalog (сравнивает атрибуты в каталоге с текущим состоянием файлов) VolumeToCatalog (сравнивает атрибуты в каталоге с данными на томе) DiskToCatalog (сравнивает атрибуты файлов при последнем сохранении с текущим состоянием файлов, задание сохранения указывается директивой Verify Job) Base (список имён опорных заданий) - при любом типе резервного копирования файлы, не изменившиеся со времени базового копирования, не дублируются (опорное задание может относиться к другому клиенту) Accurate (No; учёт удалённых и переименованных файлов при восстановлении (Accurate Backup), FD получает от директора список файлов, сохранённых в предыдущих заданиях, для файловых систем с большим количеством файлов требуется много ОП на клиенте (клиент под Solaris 8 падает) Verify Job (см. DiskToCatalog выше) JobDefs (имя шаблона задания; значения директив из JobDefs используются в качестве умолчания) Bootstrap (для задания восстановления указывается имя файла, который содержит всю необходимую для восстановления информацию, включая имена файлов; позволяет восстанавливать файлы в отсутствии записей в каталоге) Write Bootstrap (при резервном копировании в этот файл записывается информация, которая позволяет легче восстанавливать файлы; для полного сохранения файл перезаписывается, для частичного - добавляется новая запись; рекомендуется хранить эти файлы на другом хосте; если имя файла начинается с '|', то файл подаётся на вход указанной программы, например, можно послать его почтой; замена символов: %% - % %c - имя клиента %d - имя директора %e - статус выполнения (OK, Error, Fatal Error, Canceled, Differences, Unknown term code) %i - идентификатор задания %j - уникальный идентификатор задания %l - тип резервного копирования %n - имя задания %s - время (?) %t - тип задания %v - имя тома Client (имя ресурса) FileSet (имя ресурса) Messages (имя ресурса) Pool (имя ресурса; для задания резервного копирования определяет пул для записи, для задания миграции - исходный пул для поиска копируемых заданий) [Full | Differential | Incremental] Backup Pool (имя ресурса, наивысший приоритет при определении имени пула) Selection Type (способ выбора заданий для миграции из пула; дополнительный параметр задаётся директивой Selection Pattern) SmallestVolume (выбираются задания из наименее занятого тома) OldestVolume (выбираются задания из тома, последняя запись в который самая давняя) Client (список клиентов, данные которых сохранены в тома исходного пула, фильтруется регулярным выражением из Selection Pattern; выбираются все задания для отфильтрованного списка клиентов) Volume (выбираются задания из томов исходного пула, имена которых (томов) удовлетворяют регулярному выражению из Selection Pattern) Job (список имён заданий, данные которых сохранены в тома исходного пула, фильтруется регулярным выражением из Selection Pattern; выбираются все задания для отфильтрованного списка заданий) SQLQuery (Selection Pattern должен содержать SQL-запрос SELECT, возвращающий нужные JobId для миграции в качестве первого поля) PoolOccupancy (вычисляется размер исходного пула (основывается на записях в БД о томах); если он превышает значение параметра пула "Migration High Bytes", то задания из самых "старых" томов выбираются для миграции до достижения параметра пула "Migration Low Bytes" PoolTime (выбираются задания, которые хранятся в пуле дольше указанного в параметре пула Migration Time) Selection Pattern (дополнительный параметр - в кавычках - для Selection Type) Schedule (имя ресурса, если не указать, то задание можно будет запускать только вручную) Storage (имя ресурса) Max Start Delay (0; максимальное ожидание в очереди на запуск) [Incremental | Differential] Max Run Time (0; от момента запуска) Max Wait Time (0; ожидание установки тома от момента запуска) Incremental Max Wait Time (0; убрано в версии 3) Differential Max Wait Time (0; убрано в версии 3) Max Run Sched Time (Max Start Delay + Max Run Time; с версии 3) Max Full Interval (позволяет задать максимальный промежуток времени между полными резервными копиями, при его превышении резервное копирование изменений превращается в полное копирование) Max Diff Interval (позволяет задать максимальный промежуток времени между дифференциальными резервными копиями, при его превышении резервное копирование изменений превращается в дифференциальное копирование) Max Full Age (позволяет задать максимальный интервал между полным копированием и текущим копированием изменений или дифференциальным копированием; при его превышении делается полное копирование) Prefer Mounted Volumes (yes; минимизирует количество монтирований или распараллеливает запись) Prune Jobs (no; значение "yes" перекрывает настройки в ресурсе Client) Prune Files (no; значение "yes" перекрывает настройки в ресурсе Client) Prune Volumes (no; значение "yes" перекрывает настройки в ресурсе Client) Run Script { ... } (с версии 2.0; выполнение скрипта до или после задания; можно указывать несколько директив; в версии 3 можно указывать несколько команд в секции; стандартный вывод команды попадает в отчёт задания; замена символов см. Write Bootstrap (%e - код завершения: OK, Error, Fatal Error, Canceled, Differences); директивы: Runs When = [Never | Before | After | Always | AfterVSS] Runs On Success = yes Runs On Failure = no (After выполняется только при успешном завершении резервного копирования) Runs On Client = yes Fail Job On Error = yes (можно использовать для учёта праздников) Command = полное-имя-скрипта (на Win32 можно запускать .com, .exe, .bat; поиск неполных имён аналогично "cmd /c"; обрабатывается %PATH% и системные переменные окружения (только System Environment); полное имя файла записывается с указанием буквы устройств, но с использованием прямой косой черты; если имя содержит спецсимволы, то его необходимо заключить в дополнительные кавычки, которые "прикрыть" символами '\'; для надёжности рекомендуется запускать .bat без параметров, в который уже вставлять всё остальное; при успешном завершении выполнять "exit 0") Console (команда, выполняемая директором: delete, disable, enable, estimate, list, llist, memory, prune, purge, reload, status, setdebug, show, time, trace, update, version, .client, .jobs, .pool, .storage.; ) Run Before Job (указанная программа выполняется на компьютере директора перед заданием; её stdout включается в отчёт; ненулевой код возврата аварийно завершает задание; сокращение от Run Script) Run After Job (сокращение от Run Script) Client Run Before Job (сокращение от Run Script) Client Run After Job (сокращение от Run Script) Run After Failed Job (сокращение от Run Script) Rerun Failed Levels (no; если при резервном копировании в инкрементальном или дифференциальном режиме обнаруживается, что предыдущее полное сохранение завершено с ошибкой, то делается полное сохранение; полезно для рабочих станций; директива Ignore FileSet Changes при этом не выполняется, может получиться "лишнее" полное копирование; преобразование инкрементального копирования в полное производится в момент планирования, а не при начале выполнения, если планирование происходит во время полного копирования, то получится "лишнее" полное копирование; пул определяется исходным инкрементальным заданием, а не получившимся полным) Spool Data (no; буферизовать на диск при записи на ленту; при этом каталог также кешируется на диск) Spool Size (с версии 3) Spool Attributes (no; сервер хранения будет буферизовать атрибуты файлов перед передачей их директору в рабочем каталоге) Where (для задания восстановления указывается директория, в которую будут восстанавливаться файлы по умолчанию; '/' - на прежнее место) Add Prefix (с версии 2.2; для задания восстановления; добавляется к именам каталогов слева) Add Suffix (с версии 2.2; для задания восстановления; добавляется к именам файлов справа) Strip Prefix (с версии 2.2; для задания восстановления; строка удаляется от начала имени), напрмер, перенос файлов с диска C: на D: Strip Prefix = c: Add Prefix = d: RegexWhere (с версии 2.2; для задания восстановления; регулярное выражение используется для переименования файлов при восстановлении) Replace (для задания восстановления указывается, что делать если файл уже существует: always, ifnewer, ifolder, never) Prefix Links (no; при восстановлении "не на место" абсолютные символьные ссылки модифицируются в соответствии с Where) Maximum Concurrent Jobs (1; ограничивает параллельное выполнение заданий с этим именем) Reschedule On Error (no; при ошибочном завершении заново запланировать выполнение задания с учётом интервала и количества повторений; не сохраняются пре перезапуске директора) Reschedule Interval (интервал между попытками) Reschedule Times (количество повторений; 0 - это бесконечность) Run (позволяет предварительно запустить другое задание, возможно с тем же именем (рекурсия не допускается); можно модифицировать сервер хранения (позволяет одновременно сохранять данные на 2 устройства), уровень копирования и пр.; в качестве значения в кавычках указываются параметры консольной команды run: "Default storage=DDS-4 level=%l since=\"%s\""; клонированные задания запускаются до основного) Priority (10; максимальный приоритет - 1; действует только на планируемые задания; задания с различными приоритетами бычно не могут исполняться параллельно Allow Mixed Priority (no; позволяет приоритетному заданию начаться, не дожидаясь завершения низкоприоритетного; д.б. установлено в обоих заданиях; с версии 3) Write Part After Job (no; при записи на DVD создаётся новая сессия по концу задания не дожидаясь заполнения дискового кеша, что гарантирует опустошение кеша на момент завершения задания) Heartbeat Interval (0 - не изменять значение по умолчанию) Allow Duplicate Jobs (= no) Allow Higher Duplicates (= yes) - если дубликаты запрещены, то выбрать задание с высшим приоритетом Cancel Queued Duplicates (= yes) - если дубликаты запрещены и в очереди уже стоит задание с тем же именем, то прервать его Cancel Running Duplicates (= no) - если дубликаты запрещены и задание с тем же именем уже выполняется, то прервать его) Pool Uncopied Jobs (критерий выбора копирования задания в другой пул без использования FD) JobDefs (описание шаблона для заданий; можно использовать любые директивы Job, но не все из них наследуются во всех версиях: Messages, Storage, Pool; не рекомендую связываться) Catalog (описание интерфейса с РСУБД для данного задания) Name (имя ресурса; указывается в ресурсе Client) DB Socket (имя локального сокета; только для MySQL; если не указаны имя сокета или адрес DB, то используется стандартный сокет) DB Address (имя или IP адрес СУБД) DB Port user password DB Name в версии 3 добавлена возможность доступа к СУБД через libdbi dbdriver ("dbi:mysql") dbaddress dbport dbname user password Messages (правила рассылки сообщений) Console (права доступа для именованной консоли; по умолчанию - права отсутствуют, восстанавливать можно только в место по умолчанию; рекомендуется завести отдельную консоль для монитора с пустыми ACL и списком команд "status, .status") Name (должно быть указано в настройках консоли в ресурсе Console) Password (должно быть указано в настройках консоли в ресурсе Console) JobACL (список через запятую имён ресурсов заданий, к которым имеет доступ данная консоль; можно использовать ключевое слово "all"; можно использовать несколько директив) ClientACL StorageACL ScheduleACL PoolACL FileSetACL CatalogACL CommandACL (список команд, к которым имеет доступ данная консоль; например: status) WhereACL (куда можно восстанавливать файлы; можно использовать ключевое слово "all"; "/" означает восстановление на исходное место; можно использовать несколько директив) Counter (определяет собственные переменные для использования в директиве Label Format) Name Minimum (0; также значение по умолчанию) Maximum (2^31) Catalog (имя каталога, в котором хранить счётчик; иначе счётчик будет сбрасываться при каждом запуске bacula) Схема "перекрёстного опыления" на дисковые массивы

Гибкость настройки системы bacula позволяет выработать и определить стратегию резервного копирования и восстановления, подходящую для каждого конкретного случая.

В нашем случае мы имеем два здания, соединённых достаточно быстрым каналом связи (100/1000 Mbps). В каждом здании имеется серверная, в которой расположены основные серверы организации и коммутационное оборудование. Часть серверов и рабочих станций, подлежащих копированию, разбросана по зданиям. Было принято решение установить по серверу резервного копирования в каждой серверной и настроить их таким образом, чтобы резервное копирование компьютеров из первого здания осуществлялось сервером копирования из второго здания, а компьютеров из второго здания - сервером копирования из первого здания. Это обеспечивает сохранность резервных копий в случае локальных катастроф (пожар или приход ОБЭП ;), в т.ч. копий самих серверов копирования. В качестве носителей было принято решение использовать НЖМД (каталог /backup/bacula на отдельном разделе - в нашем случае RAID-5).

После установки и опробования начнём настройку компонент bacula. Основной принцип - разделяй и властвуй, т.е. для каждого клиента определяется отдельное задание, отдельный планировщик, отдельный FileSet, отдельные пулы (для каждого типа задания отдельный пул), отдельный каталог (MediaType) и т.д. Несколько раз пробовал группировать для упрощения настройки и каждый раз жалел при первом же изменении стратегии резервного копирования. Отдельный вопрос - настройка сетевых экранов.

Настройка первого сервера хранения (bacula-sd.conf, для второго сервера хранения настройки аналогичны):

Storage {

Name = backup1-sd
Description = "backup storage server здание А"
WorkingDirectory = "/usr/local/bacula/var"
Pid Directory = "/var/run"
Maximum Concurrent Jobs = 20 # реальное ограничение в настройках директора
SDPort = 9103

} Director {

Name = backup1-dir
Password = "backup1-dir-to-backup1-sd"

} Director {

Name = backup2-dir
Password = "backup2-dir-to-backup1-sd"

} Director {

Name = console-mon
Password = "tray-password"
Monitor = yes

} # для каждого клиента отдельное "устройство" Device {

Name = FileStorage-ИмяКлиента
Archive Device = /backup/bacula/ИмяКлиента
Device Type = File
Media Type = File-ИмяКлиента
Removable Media = no
Random Access = Yes

# Block Positioning = no # при чтении старых томов в новой версии

LabelMedia = Yes
Automatic Mount = Yes
AlwaysOpen = No
Maximum Network Buffer Size = 65536

} ... Messages {

Name = Standard
director = backup1-dir = all

} Клиенты из второго здания первого сервера хранения (bacula-fd.conf, для клиентов второго сервера хранения настройки аналогичны):

Director {

Name = backup1-dir
Password = "backup1-dir-to-ИмяКлиента-fd"

} Director {

Name = backup2-dir
Password = "backup2-dir-to-ИмяКлиента-sd"

} Director {

Name = console-mon
Password = "tray-password"
Monitor = yes

} FileDaemon {

Name = ИмяКлиента-fd
FDport = 9102
# FDAddress для компьтеров с несколькими интерфейсами
WorkingDirectory = /usr/local/bacula/var
Pid Directory = /var/run
Maximum Concurrent Jobs = 20 # реальное ограничение в настройках директора

} Messages {

Name = Standard
director = backup1-dir = all, !skipped, !restored

} Настройка первого директора (bacula-dir.conf, настройки второго директора аналогичны):

Director {

Name = backup1-dir
Description = "backup director здания А"
Password = "universal-password-to-backup1-dir"
Messages = Daemon
WorkingDirectory = "/usr/local/bacula/var"
PidDirectory = "/var/run"
# Scripts Directory
QueryFile = "/usr/local/bacula/etc/query.sql"
Maximum Concurrent Jobs = 5 # подбирается экспериментально
DIRport = 9101

} # # для каждого клиента # Job {

Name = ИмяКлиента
# Enabled = No # для временного отключения планирования
Type = Backup
Level = Full
Write Bootstrap = "/usr/local/bacula/var/ИмяКлиента.bsr"
Client = ИмяКлиента-fd
FileSet = ИмяКлиента
Messages = Standard
Pool = ИмяКлиента-monthly
Incremental Backup Pool = ИмяКлиента-daily
Schedule = ИмяКлиента-year
Rerun Failed Levels = Yes

# для рабочих станций # Run Script { # Runs When = Before # Runs On Client = No # Fail Job On Error = Yes # не запускать по праздникам # Command = /usr/local/bacula/etc/holiday.sh # } # Reschedule On Error = Yes # Reschedule Interval = 30 minutes # Reschedule Times = 16 } # # для каждого клиента под Linux # FileSet {

Name = ИмяКлиента

# не делать полное копирование после изменения списка # Ignore FileSet Changes = Yes

Include {
  Options {
    compression = GZIP
    signature = SHA1
    onefs = yes
    aclsupport = yes
    noatime = yes
    checkfilechanges = yes
  }
  File = /

# каждую файловую систему отдельно

  ...
}
Exclude {
  File = /proc
  File = /sys
  File = /net
  File = /media

# для devfs # File = /dev # для прочих

  File = /dev/pts
  File = /dev/shm
  File = /tmp
  File = /var/cache/yum
  File = /.journal
  File = /.fsck
  File = /var/lib/nfs/rpc_pipefs
  File = /.autofsck
  File = /selinux
  File = /var/named/chroot/proc
  File = ...
}

} # # для каждого клиента под MS Windows XP/2003 # FileSet {

Name = ИмяКлиента

# не делать полное копирование после изменения списка # Ignore FileSet Changes = Yes

Enable VSS = Yes
Include {
  Options {
    compression = GZIP
    signature = SHA1
    onefs = yes
    portable = no
    noatime = yes
    checkfilechanges = yes
    Ignore Case = yes
    wildfile = "*.avi"
    wildfile = "*.wmv"
    wildfile = "*.mp3"
    wildfile = "pagefile.sys"
    wildfile = "hiberfil.sys"
    wilddir = "System Volume Information"
    wilddir = "TEMP"
    wild = ...
    exclude = yes
  }
  File = "e:/"

# каждый диск отдельно

  ...
}

} # долговременное хранение для серверов с возможностью восстановления # состояния на любой день в течении недели, на любое воскресенье в течении месяца, # на первое воскресенье в течении года # ночью первого воскресенья месяца - полное копирование на тома пула ИмяКлиента-monthly # в остальные воскресенья - полное копирование на тома пула ИмяКлиента-weekly # в прочие дни - копирование изменений на тома пула ИмяКлиента-daily Schedule {

Name = "ИмяКлиента-year"
Run = Level=Full Pool=ИмяКлиента-monthly 1st sun at 00:05
Run = Level=Full Pool=ИмяКлиента-weekly 2nd-5th sun at 00:05
Run = Level=Incremental Pool=ИмяКлиента-daily mon-sat at 00:05

} # среднесрочное хранение для серверов с возможностью восстановления # состояния на любой день в течении недели, на любое воскресенье в течении месяца # ночью в воскресенье - полное копирование на тома пула ИмяКлиента-weekly # в прочие дни - копирование изменений на тома пула ИмяКлиента-daily Schedule {

Name = "ИмяКлиента-year"
Run = Level=Full Pool=ИмяКлиента-weekly sun at 00:05
Run = Level=Incremental Pool=ИмяКлиента-daily mon-sat at 00:05

}

# # для каждого клиента # Client {

Name = ИмяКлиента-fd
Address = полное-имя-или-адрес
FDPort = 9102
Catalog = MyCatalog
Password = "backup1-dir-to-ИмяКлиента-fd"
AutoPrune = yes

# это ограничение на срок хранения сверху, реальный срок задаётся в Pool

File Retention = 1 year
Job Retention = 1 year

} # # для каждого клиента # Storage {

Name = File-ИмяКлиента

# DNS-разрешение происходит на клиенте, не надо вписывать сюда 127.0.0.1!

Address = адрес-первого-сервера-хранения
SDPort = 9103
Password = "backup1-dir-to-backup1-sd"
Device = FileStorage-ИмяКлиента
Media Type = File-ИмяКлиента

} # # каталог один на всех # Catalog {

Name = MyCatalog

# DB Address и DB Port, если сервер SQL вынесен на другой хост

dbname = bacula; user = bacula; password = "пароль для MySQL"

} # # обработка сообщений, приписанных заданию # Messages {

Name = Standard
mailcommand = "/usr/local/bacula/sbin/bsmtp -h SMTP-сервер -f \"\(Bacula: %d\) \<%r\>\" -s \"Bacula: %t %e of %c %l\" %r"
operatorcommand = "/usr/local/bacula/sbin/bsmtp -h SMTP-сервер -f \"\(Bacula: %d\) \<%r\>\" -s \"Bacula: Intervention needed for %j\" %r"
mail = e-mail-адрес = all, !skipped, !saved, !restored
operator = e-mail-адрес = mount, terminate, alert
console = all, !skipped, !saved, !restored
append = "/var/log/bacula.log" = all, !skipped
syslog = all, !skipped, !saved, !restored
catalog = all, !skipped

} # # обработка сообщений вне заданий # Messages {

Name = Daemon
mailcommand = "/usr/local/bacula/sbin/bsmtp -h SMTP-сервер -f \"\(Bacula: %d\) \<%r\>\" -s \"Bacula daemon message\" %r"
mail = e-mail-адрес = all, !skipped, !saved
console = all, !skipped, !saved, !restored
append = "/var/log/bacula.log" = all, !skipped
syslog = all, !skipped
catalog = all, !skipped

} # # для каждого клиента описываются 3 пула (ежемесячный, еженедельный, ежедневный) # Pool {

Name = ИмяКлиента-monthly
Pool Type = Backup
Maximum Volume Jobs = 1
Maximum Volume Bytes = 4650000000 # по размеру DVD-R
Volume Retention = 1 year
AutoPrune = yes
RecyclePool = ИмяКлиента-monthly
Recycle = yes
Recycle Oldest Volume = yes
Label Format = "ИмяКлиента-monthly-${Year}${Month:p/2/0/r}${Day:p/2/0/r}-${Hour:p/2/0/r}${Minute:p/2/0/r}"
Storage = File-ИмяКлиента

} Pool {

Name = ИмяКлиента-weekly
Pool Type = Backup
Maximum Volume Jobs = 1
Maximum Volume Bytes = 4650000000 # по размеру DVD-R
Volume Retention = 35 days
AutoPrune = yes
RecyclePool = ИмяКлиента-weekly
Recycle = yes
Recycle Oldest Volume = yes
Label Format = "ИмяКлиента-weekly-${Year}${Month:p/2/0/r}${Day:p/2/0/r}-${Hour:p/2/0/r}${Minute:p/2/0/r}"
Storage = File-ИмяКлиента

} Pool {

Name = ИмяКлиента-daily
Pool Type = Backup
Volume Use Duration = 6 days 18 hours
Maximum Volume Bytes = 4650000000 # по размеру DVD-R
Volume Retention = 7 days

# Volume Retention = 31 days # для восстановления состояния на любой день месяца

AutoPrune = yes
RecyclePool = ИмяКлиента-daily
Recycle = yes
Recycle Oldest Volume = yes
Label Format = "ИмяКлиента-daily-${Year}${Month:p/2/0/r}${Day:p/2/0/r}-${Hour:p/2/0/r}${Minute:p/2/0/r}"
Storage = File-ИмяКлиента

} # # права для мониторинга # Console {

Name = console-mon
Password = "tray-password"
CommandACL = status, .status

} Проще всего сгенерировать шаблон для каждого клиента с помощью скрипта bacula-client-gen.sh (параметры: имя клиента, тип ОС клиента (Linux, Windows), server/workstation), отредактировать (список файлов и исключений; адрес и пароль клиента; адрес и пароль сервера хранения) и поместить в файл /usr/local/bacula/etc/Имя-клиента.include, и включать в конфигурационный файл с помощью директивы '@'.

Ключи ./configure при сборке из исходных текстов

Некоторые ключи (обрабатываются также стандартные ключи configure):

--help[=recursive] (выдать список ключей, полезно при освоении новной версии) куда устанавливать файлы: --prefix=каталог-установки (/usr/local) --mandir=каталог-установки-документации (по умолчанию - /usr/share, несмотря на описание) --with-pid-dir (/var/run; сюда будет записываться ) --with-subsys-dir (/var/run/subsys; здесь хранятся блокировки процессов) собираемые подсистемы и включаемые возможности: --enable-bat (консоль управления с графическим интерфейсом; рекомендуется для управляющего хоста; требует QT4.2 (в FC6 пакеты qt4, qt4-devel, qt4-x11; в F10 - в пакете qt); при наличии нескольких qt перед выполнением ./configure требуется установить переменную окружения QTDIR=/usr/lib64/qt4 и добавить /usr/lib64/qt4/bin в PATH) --with-qwt[=каталог] (пакеты qwt и qwt-devel требуются для сборки bat) --enable-bwx-console (консоль под wxWidgets; не имеет смысла; требуются пакеты wxGTK, wxGTK-devel) --enable-gnome (консоль под GNOME2; не имеет смысла) --enable-tray-monitor (аплет мониторинга для Gnome или KDE; требуется GTK 2.10) --enable-smartalloc (улучшенная библиотека выделения памяти, обязательно) --enable-lockmgr (алгоритм избегания мёртвых захватов) --with-postgresql[=каталог] --with-mysql[=каталог] --with-embedded-mysql --with-sqlite3[=каталог] --enable-client-only (собирать только файловый сервер fd и текстовую консоль) --disable-build-dird (требуется в дополнение к --enable-client-only) --disable-build-stored (требуется в дополнение к --enable-client-only) --enable-readline (использовать readline в текстовой консоли) --with-readline=каталог --disable-conio (не использовать conio - более переносимый заменитель readline - в текстовой консоли) --enable-batch-insert (добавление в БД ускоряется в 10 раз; СУБД д.б. "thread safe") --disable-largefile (отключить поддержку файлов более 2ГБ) --with-python[=каталог] (использовать python версий 2.2, 2.3, 2.4, 2.5) --with-tcp-wrappers[=каталог] (в /etc/hosts.deny и /etc/hosts.allow необходимо указывать имена серверов, задаваемые в настроечных файлах, а не имена программ; нельзя использовать twist) --with-openssl[=каталог] (используется для шифрования обмена между серверами bacula и шифрования PKI на уровне файлового сервера fd) --disable-ipv6 --disable-acl --disable-xattr --with-dbi --with-dbi-driver= --with-db-port динамическая и статическая сборка (требуются для восстановления "с нуля") --disable-libtool --libdir= --enable-static-tools (утилиты bls, bextract, bscan) --enable-static-fd (рекомендуется использовать "make static-bacula-fd" в src/filed; несовместим с --openssl и --with-python) --enable-static-sd (--) --enable-static-dir (--) --enable-static-cons (--) параметры скриптов и создаваемых конфигурационных файлов (всё это можно поменять позднее) --with-working-dir=каталог (здесь сервера хранят данные между запусками, здесь же хранятся bootstrap-файлы) --with-dir-user=имя-пользователя (рекомендуется завести отдельную группу для процессов bacula и отдельного пользователя для выполнения директора) --with-dir-group=имя-группы (--) --with-sd-user=имя-пользователя (рекомендуется завести отдельную группу для процессов bacula и отдельного пользователя для выполнения сервера хранения; этот пользователь должен иметь доступ к устройствам хранения) --with-sd-group (--) --with-fd-user=имя-пользователя (этот пользователь должен иметь доступ ко всем резервируемым файлам; в большинстве случаев - это будет root) --with-fd-group=имя-группы (--) --with-db-name=имя-БД --with-db-user=имя-пользователя-СУБД --with-baseport (9101; с какого числа будут начинаться номера используемых TCP портов) --with-dump-email=... (сюда будет посылаться core dump ;) --with-job-email=e-mail-адрес (адрес для получения сообщений) --with-smtp-host=адрес-SMTP-сервера --with-dir-password=пароль --with-fd-password=пароль --with-sd-password=пароль --with-mon-dir-password=пароль --with-mon-fd-password=пароль --with-mon-sd-password=пароль Обновление с 3.0.1 до 5.0.1/5.0.3 на CentOS 5.4 x86-64 ([директор,] хранитель, текстовая консоль и клиент)

Предварительно необходимо установить и настроить MySQL (5.0.77 из пакетов, включая пакеты mysql, mysql-server и mysql-devel), libtermcap-devel, readline-devel, zlib-devel, openssl-devel, krb5-devel, libacl, libacl-devel, libattr, libattr-devel, python-devel.

Обнаружил, что при резервном копировании наборов файлов большого размера MySQL мешает записи на диск своей работой с временными таблицами. Попробовать tmp_table_size=1024M или tmpdir=/dev/shm или tmpdir=файловая-система-на-SSD.

Процесс установки (без графики [и без bacula-dir]):

развернуть make distclean ./configure --prefix=/usr/local/bacula5 --mandir=/usr/local/bacula5/man --with-tcp-wrappers --with-openssl --enable-smartalloc [--with-job-email=адрес --with-smtp-host=сервер --with-dir-user=baculad --with-dir-group=bacula --enable-batch-insert --with-python] --with-sd-user=baculas --with-sd-group=bacula --with-mysql[=/usr/local/mysql] --with-subsys-dir=/var/lock/subsys --with-working-dir=/usr/local/bacula5/var --enable-lockmgr --disable-conio --enable-readline [--disable-build-dird] make [-j6] добавление bacula в /etc/group, baculad и baculas в /etc/passwd и /etc/shadow остановить предыдущую версию сохранить старый каталог (make_catalog_backup) make install /usr/local/bacula5/etc/ (startmysql, stopmysql, bconsole, bacula (запуск и останов сервиса), bacula_config (параметры ./configure), bacula-ctl-dir, bacula-ctl-fd, bacula-ctl-sd, disk-changer (disk-changer.old), mtx-changer (mtx-changer.old), mtx-changer.conf, dvd-handler (dvd-handler.old), btraceback.gdb, btraceback.dbx, bacula-fd.conf[.new], bconsole.conf[.new], bacula-dir.conf[.new], bacula-sd.conf[.new], create_mysql_database, update_mysql_tables, make_mysql_tables, grant_mysql_privileges, drop_mysql_tables, drop_mysql_database, create_bacula_database, update_bacula_tables, make_bacula_tables, grant_bacula_privileges, drop_bacula_tables, drop_bacula_database, make_catalog_backup.pl, make_catalog_backup[.new], delete_catalog_backup[.new], query.sql (query.sql.old)) /usr/local/bacula5/sbin (bacula (запуск и останов сервиса), btraceback, bacula-fd, bconsole, bacula-dir, bacula-sd, bls, bextract, bcopy, bscan, btape, bsmtp, dbcheck, bwild, bregex) /usr/local/bacula5/lib/ (libbac.*, libbaccfg.*, libbacpy.*, libbacfind.*, bpipe-fd.*, libbacsql*) /usr/local/bacula5/man/man1/ (bacula-tray-monitor.1, bacula-wxconsole.1, bsmtp.1, bat.1) /usr/local/bacula5/man/man8/ (bacula.8, bacula-dir.8, bacula-fd.8, bacula-sd.8, bconsole.8, bcopy.8, bextract.8, bls.8, bscan.8, btape.8, btraceback.8, dbcheck.8) /usr/local/bacula5/share/doc/ /usr/local/bacula5/var/ добавить " -p" в MYSQLPASSWORD= в etc/make_catalog_backup добавить " -p" в etc/grant_mysql_privileges обеспечение доступа к MySQL при первой установке chmod go+rx /usr/local/bacula5/etc/grant_mysql_privileges запустить "/usr/local/bacula5/etc/grant_mysql_privileges -p" под обычным пользователем (даёт права к bacula.* пользователю bacula без пароля, так что пароль надо устанавливать самому: mysql -u root -p SELECT Host, User FROM mysql.user; SET PASSWORD FOR 'bacula'@'localhost' = PASSWORD('пароль'); SET PASSWORD FOR 'bacula'@'%' = PASSWORD('пароль'); удалить ~/.mysql_history установить пароль в /usr/local/bacula5/etc/bacula-dir.conf, секция каталог chmod go+rx /usr/local/bacula5/etc/create_mysql_database запустить "/usr/local/bacula5/etc/create_mysql_database -u bacula -p" под обычным пользователем chmod go+rx /usr/local/bacula5/etc/make_mysql_tables (update_mysql_tables, drop_mysql_tables) [восстановить старый каталог средствами MySQL] запустить "/usr/local/bacula5/etc/update_mysql_tables -u bacula -p" под обычным пользователем (make_mysql_tables создаёт таблицы заново, drop_mysql_tables очищает таблицы; архив скриптов обновлений лежит в upgradedb) журнал touch /var/log/bacula.log chown baculad:bacula /var/log/bacula.log отредактированный scripts/logrotate в /etc/logrotate.d/bacula права доступа к файловому хранилищу (при необходимости создать или передать со старого сервера) перенести настройки в etc/bacula-sd.conf, etc/bacula-fd.conf, etc/bacula-dir.conf make install-autostart service bacula-sd start, протестировать service bacula-fd start, протестировать service bacula-dir start, протестировать права доступа к /usr/local/bacula5/etc/bconsole.conf, /usr/local/bacula5/sbin/bconsole и /usr/local/bacula5/etc/bconsole, чтобы запускать консоль не с правами root опробовать /usr/local/bacula5/etc/bconsole вручную скопировать scripts/logwatch/logfile.bacula.conf в /usr/share/logwatch/default.conf/logfiles/bacula.conf, scripts/logwatch/services.bacula.conf в /usr/share/logwatch/default.conf/services/bacula.conf, scripts/logwatch/applybaculadate в /usr/share/logwatch/scripts/shared/applybaculadate, scripts/logwatch/bacula в /usr/share/logwatch/scripts/services/services.bacula обеспечить доступ с компьютеров, на которых установлены консоли и мониторы к порту 9101 обеспечить доступ директора на порт 9102 к компьютерам, на которых установлены клиенты обеспечить доступ директора на порт 9103 к компьютерам, на которых установлены серверы хранения права чтения к bacula-dir.conf для baculad, иначе не будет работать команда reload задать пароль внутри /usr/local/bacula5/etc/make_catalog_backup (лучше через --defaults-file=); обеспечить правильные права доступа к этому файлу ?обеспечить внешними средствами (например, вторым директором и сервером хранения) создание текстовой версии БД и её резервирования ? проверить, что восстановленная БД работает Установка 3.0.1 на RHEL 4.7 x86-64 (директор, хранитель, текстовая консоль и клиент)

Предварительно необходимо установить и настроить MySQL (4.1.22 из пакетов, включая пакеты mysql, mysql-server и mysql-devel), libtermcap-devel, readline-devel, zlib-devel, openssl-devel, krb5-devel, libacl, libacl-devel, libattr, libattr-devel, python-devel.

Процесс установки (без графики, bacula-conio забивает readline):

развернуть make distclean ./configure --prefix=/usr/local/bacula --mandir=/usr/local/bacula/man --with-tcp-wrappers --with-openssl --enable-smartalloc --with-job-email=адрес --with-smtp-host=сервер --with-dir-user=baculad --with-dir-group=bacula --with-sd-user=baculas --with-sd-group=bacula --with-mysql[=/usr/local/mysql] --with-subsys-dir=/var/lock/subsys --with-working-dir=/usr/local/bacula/var --enable-batch-insert --with-python --enable-lockmgr [--with-readline] make [-j3] добавление bacula в /etc/group, baculad и baculas в /etc/passwd и /etc/shadow остановить предыдущую версию make install /usr/local/bacula/etc/ (startmysql, stopmysql, bconsole, gconsole, bacula, bacula-ctl-dir, bacula-ctl-fd, bacula-ctl-sd, disk-changer (disk-changer.old), mtx-changer (mtx-changer.old), dvd-handler (dvd-handler.old), btraceback.gdb, btraceback.dbx, bacula-fd.conf[.new], bconsole.conf[.new], bacula-dir.conf[.new], bacula-sd.conf[.new], create_mysql_database, update_mysql_tables, make_mysql_tables, grant_mysql_privileges, drop_mysql_tables, drop_mysql_database, create_bacula_database, update_bacula_tables, make_bacula_tables, grant_bacula_privileges, drop_bacula_tables, drop_bacula_database, make_catalog_backup[.new], delete_catalog_backup[.new], query.sql (query.sql.old)) /usr/local/bacula/sbin (bacula?, btraceback, bacula-fd, bconsole, bacula-dir, bacula-sd, bls, bextract, bcopy, bscan, btape, bsmtp, dbcheck, bwild, bregex) /usr/local/bacula/lib/ (libbac.*, libbaccfg.*, libbacpy.*, libbacfind.*, bpipe-fd.*) /usr/local/bacula/man/man1/ (bacula-console-gnome.1 [bacula-bgnome-console.1], bacula-tray-monitor.1, bacula-wxconsole.1, bsmtp.1[, bat.1]) /usr/local/bacula/man/man8/ (bacula.8, bacula-dir.8, bacula-fd.8, bacula-sd.8, bconsole.8, bcopy.8, bextract.8, bls.8, bscan.8, btape.8, btraceback.8, dbcheck.8) добавить " -p" в MYSQLPASSWORD= в etc/make_catalog_backup добавить " -p" в etc/grant_mysql_privileges обеспечение доступа к MySQL при первой установке chmod go+x /usr/local/bacula/etc/grant_mysql_privileges запустить "/usr/local/bacula/etc/grant_mysql_privileges -p" под обычным пользователем (даёт права к bacula.* пользователю bacula без пароля, так что пароль надо устанавливать самому: mysql -u root -p SELECT Host, User FROM mysql.user; SET PASSWORD FOR 'bacula'@'localhost' = PASSWORD('пароль'); SET PASSWORD FOR 'bacula'@'%' = PASSWORD('пароль'); удалить .mysql_history установить пароль в /usr/local/bacula/etc/bacula-dir.conf, секция каталог chmod go+x /usr/local/bacula/etc/create_mysql_database запустить "/usr/local/bacula/etc/create_mysql_database -u bacula -p" под обычным пользователем [добавить индексов в /usr/local/bacula/etc/make_mysql_tables для ускорения очистки] chmod go+x /usr/local/bacula/etc/make_mysql_tables запустить "/usr/local/bacula/etc/make_mysql_tables -u bacula -p" под обычным пользователем (drop_mysql_tables очищает таблицы, update_mysql_tables обновляет БД до новой версии от предыдущей; архив скриптов обновлений лежит в upgradedb) увеличить максимальный размер таблицы File БД bacula: alter table File MAX_ROWS=500000000 AVG_ROW_LENGTH=110; права доступа к файлам chown baculad:bacula /usr/local/bacula/var chmod g+w /usr/local/bacula/var chmod o-rx /usr/local/bacula/var права доступа к файловому хранилищу (при необходимости создать) журнал touch /var/log/bacula.log chown baculad:bacula /var/log/bacula.log отредактированный scripts/logrotate в /etc/logrotate.d/bacula scripts/bacula start, протестировать (или по очереди: bacula-ctl-sd, bacula-ctl-fd, bacula-ctl-dir) права доступа к /usr/local/bacula/etc/bconsole.conf, /usr/local/bacula/sbin/bconsole и /usr/local/bacula/etc/bconsole, чтобы запускать консоль не с правами root опробовать /usr/local/bacula/etc/bconsole make install-autostart [убедиться, что MySQL запускается до bacula-dir (убрать блок INIT INFO из init.d/mysqld)] в предположении, что настроен logwatch, зайти в scripts/logwatch и сделать "make install"; исправить /etc/log.d/conf/logfiles/bacula.conf обеспечить доступ с компьютеров, на которых установлены консоли и мониторы к порту 9101 обеспечить доступ директора на порт 9102 к компьютерам, на которых установлены клиенты обеспечить доступ директора на порт 9103 к компьютерам, на которых установлены серверы хранения права чтения к bacula-dir.conf для baculad, иначе не будет работать команда reload ? задать пароль внутри /usr/local/bacula/etc/make_catalog_backup (лучше через --defaults-file=); обеспечить правильные права доступа к этому файлу ?обеспечить внешними средствами (например, вторым директором и сервером хранения) создание текстовой версии БД и её резервирования ? проверить, что восстановленная БД работает Установка 2.2.4/2.2.7/2.2.8/2.4.1/2.4.4 на CentOS 5.0/5.2 x86/x86-64 (директор, хранитель, текстовая консоль и клиент)

Предварительно необходимо установить и настроить MySQL (5.0.22/5.0.45 из пакетов, включая пакеты mysql, mysql-server и mysql-devel), libtermcap-devel, readline-devel, zlib-devel, openssl-devel, krb5-devel, libacl, libacl-devel, libattr, libattr-devel, python-devel.

Процесс установки (без графики, bacula-conio забивает readline):

развернуть make distclean ./configure --prefix=/usr/local/bacula --mandir=/usr/local/bacula/man --with-tcp-wrappers --with-openssl --enable-smartalloc --with-job-email=адрес --with-smtp-host=сервер --with-dir-user=baculad --with-dir-group=bacula --with-sd-user=baculas --with-sd-group=bacula --with-mysql[=/usr/local/mysql] --with-subsys-dir=/var/lock/subsys --with-working-dir=/usr/local/bacula/var --enable-batch-insert --with-python make [-j3] добавление bacula в /etc/group, baculad и baculas в /etc/passwd и /etc/shadow остановить предыдущую версию make install /usr/local/bacula/etc/ (startmysql, stopmysql, bconsole, gconsole, bacula, bacula-ctl-dir, bacula-ctl-fd, bacula-ctl-sd, disk-changer (disk-changer.old), mtx-changer (mtx-changer.old), dvd-handler (dvd-handler.old), btraceback.gdb, btraceback.dbx, bacula-fd.conf[.new], bconsole.conf[.new], bacula-dir.conf[.new], bacula-sd.conf[.new], create_mysql_database, update_mysql_tables, make_mysql_tables, grant_mysql_privileges, drop_mysql_tables, drop_mysql_database, create_bacula_database, update_bacula_tables, make_bacula_tables, grant_bacula_privileges, drop_bacula_tables, drop_bacula_database, make_catalog_backup[.new], delete_catalog_backup[.new], query.sql (query.sql.old)) /usr/local/bacula/sbin (btraceback, bacula-fd, bconsole, bacula-dir, bacula-sd, bls, bextract, bcopy, bscan, btape, bsmtp, dbcheck, bwild, bregex) /usr/local/bacula/man/man1/ (bacula-console-gnome.1 [bacula-bgnome-console.1], bacula-tray-monitor.1, bacula-wxconsole.1, bsmtp.1[, bat.1]) /usr/local/bacula/man/man8/ (bacula.8, bacula-dir.8, bacula-fd.8, bacula-sd.8, bconsole.8, bcopy.8, bextract.8, bls.8, bscan.8, btape.8, btraceback.8, dbcheck.8) добавить " -p" в MYSQLPASSWORD= в etc/make_catalog_backup добавить " -p" в etc/grant_mysql_privileges обеспечение доступа к MySQL при первой установке chmod go+x /usr/local/bacula/etc/grant_mysql_privileges запустить "/usr/local/bacula/etc/grant_mysql_privileges -p" под обычным пользователем (даёт права к bacula.* пользователю bacula без пароля, так что пароль надо устанавливать самому: mysql -u root -p SELECT Host, User FROM mysql.user; SET PASSWORD FOR 'bacula'@'localhost' = PASSWORD('пароль'); SET PASSWORD FOR 'bacula'@'%' = PASSWORD('пароль'); удалить .mysql_history установить пароль в /usr/local/bacula/etc/bacula-dir.conf, секция каталог chmod go+x /usr/local/bacula/etc/create_mysql_database запустить "/usr/local/bacula/etc/create_mysql_database -u bacula -p" под обычным пользователем [добавить индексов в /usr/local/bacula/etc/make_mysql_tables для ускорения очистки] chmod go+x /usr/local/bacula/etc/make_mysql_tables запустить "/usr/local/bacula/etc/make_mysql_tables -u bacula -p" под обычным пользователем (drop_mysql_tables очищает таблицы, update_mysql_tables обновляет БД до новой версии от предыдущей; архив скриптов обновлений лежит в upgradedb) увеличить максимальный размер таблицы File БД bacula: alter table File MAX_ROWS=500000000 AVG_ROW_LENGTH=110; права доступа к файлам chown baculad:bacula /usr/local/bacula/var chmod g+w /usr/local/bacula/var chmod o-rx /usr/local/bacula/var права доступа к файловому хранилищу (при необходимости создать) журнал touch /var/log/bacula.log chown baculad:bacula /var/log/bacula.log отредактированный scripts/logrotate в /etc/logrotate.d/bacula scripts/bacula start, протестировать (или по очереди: bacula-ctl-sd, bacula-ctl-fd, bacula-ctl-dir) права доступа к /usr/local/bacula/etc/bconsole.conf, /usr/local/bacula/sbin/bconsole и /usr/local/bacula/etc/bconsole, чтобы запускать консоль не с правами root опробовать /usr/local/bacula/etc/bconsole make install-autostart убедиться, что MySQL запускается до bacula-dir (убрать блок INIT INFO из init.d/mysqld) в предположении, что настроен logwatch, зайти в scripts/logwatch и сделать "make install"; исправить /etc/log.d/conf/logfiles/bacula.conf (не работает; вручную занести в /usr/share/logwatch/default.conf/logfiles/bacula.conf, /usr/share/logwatch/default.conf/services/bacula.conf) обеспечить доступ с компьютеров, на которых установлены консоли и мониторы к порту 9101 обеспечить доступ директора на порт 9102 к компьютерам, на которых установлены клиенты обеспечить доступ директора на порт 9103 к компьютерам, на которых установлены серверы хранения права чтения к bacula-dir.conf для baculad, иначе не будет работать команда reload ? задать пароль внутри /usr/local/bacula/etc/make_catalog_backup (лучше через --defaults-file=); обеспечить правильные права доступа к этому файлу ?обеспечить внешними средствами (например, вторым директором и сервером хранения) создание текстовой версии БД и её резервирования ? проверить, что восстановленная БД работает Обновление с 1.38.11 до 2.2.5/2.4.1 на CentOS 4.5/4.6 x86/x86-64 (директор, хранитель, текстовая консоль и клиент)

Предварительно необходимо установить и настроить MySQL (4.1.18/4.1.16 из исходных текстов), libtermcap-devel, readline-devel, zlib-devel, openssl-devel, krb5-devel, libacl, libacl-devel, libattr, libattr-devel, python-devel.

Процесс установки (без графики, bacula-conio забивает readline):

развернуть make distclean ./configure --prefix=/usr/local/bacula2 --mandir=/usr/local/bacula2/man --with-tcp-wrappers --with-openssl --enable-smartalloc --with-job-email=адрес --with-smtp-host=сервер --with-db-name=bacula2 --with-dir-user=baculad --with-dir-group=bacula --with-sd-user=baculas --with-sd-group=bacula --with-mysql[=/usr/local/mysql] --with-subsys-dir=/var/lock/subsys --with-working-dir=/usr/local/bacula2/var --enable-batch-insert --with-python [--disable-ipv6] make [-j3] bacula в /etc/group, baculad и baculas в /etc/passwd и /etc/shadow остались от предыдущей версии остановить предыдущую версию (нельзя запускать одновременно) make install /usr/local/bacula2/etc/ (startmysql, stopmysql, bconsole, gconsole, bacula, bacula-ctl-dir, bacula-ctl-fd, bacula-ctl-sd, disk-changer, mtx-changer, dvd-handler, btraceback.gdb, btraceback.dbx, bacula-fd.conf[.new], bconsole.conf[.new], bacula-dir.conf[.new], bacula-sd.conf[.new], create_mysql_database, update_mysql_tables, make_mysql_tables, grant_mysql_privileges, drop_mysql_tables, drop_mysql_database, create_bacula_database, update_bacula_tables, make_bacula_tables, grant_bacula_privileges, drop_bacula_tables, drop_bacula_database, make_catalog_backup[.new], delete_catalog_backup[.new], query.sql) /usr/local/bacula2/sbin (btraceback, bacula-fd, bconsole, bacula-dir, bacula-sd, bls, bextract, bcopy, bscan, btape, bsmtp, dbcheck, bwild, bregex) /usr/local/bacula2/man/man1/ (bacula-console-gnome.1, bacula-tray-monitor.1, bacula-wxconsole.1, bsmtp.1) /usr/local/bacula2/man/man8/ (bacula.8, bacula-dir.8, bacula-fd.8, bacula-sd.8, bconsole.8, bcopy.8, bextract.8, bls.8, bscan.8, btape.8, btraceback.8, dbcheck.8) добавить " -p" в MYSQLPASSWORD= в etc/make_catalog_backup добавить " -p" в etc/grant_mysql_privileges обеспечение прав доступа к скриптам работы с MySQL: chmod go+x /usr/local/bacula2/etc/grant_mysql_privileges chmod go+x /usr/local/bacula2/etc/create_mysql_database chmod go+x /usr/local/bacula2/etc/make_mysql_tables создание новой БД или преобразование старой создание новой БД: запустить "/usr/local/bacula2/etc/grant_mysql_privileges -p", под обычным пользователем (даёт права к bacula.* пользователю bacula без пароля, так что пароль надо устанавливать самому: mysql -u root -p SELECT Host, User FROM mysql.user; SET PASSWORD FOR 'bacula'@'localhost' = PASSWORD('пароль'); SET PASSWORD FOR 'bacula'@'%' = PASSWORD('пароль'); удалить .mysql_history запустить "/usr/local/bacula2/etc/create_mysql_database -u bacula -p" под обычным пользователем добавить индексов в /usr/local/bacula/etc/make_mysql_tables запустить "/usr/local/bacula2/etc/make_mysql_tables -u bacula -p" под обычным пользователем увеличить максимальный размер таблицы File: alter table File MAX_ROWS=500000000 AVG_ROW_LENGTH=110; преобразование старой БД: запустить "/usr/local/bacula2/etc/grant_mysql_privileges -p", под обычным пользователем (пароль установлен в прошлый раз) запустить "/usr/local/bacula2/etc/create_mysql_database -u bacula -p" под обычным пользователем сохранить старую базу в файл (/usr/local/bacula/etc/make_catalog_backup bacula bacula) восстановить БД на новое место mysql -u bacula -p bacula2 < /usr/local/bacula/var/bacula.sql увеличить максимальный размер таблицы File: alter table File MAX_ROWS=500000000 AVG_ROW_LENGTH=110; преобразовать БД в новый формат /usr/local/bacula2/etc/update_mysql_tables -u bacula -p добавить индексов в /usr/local/bacula/etc/make_mysql_tables права доступа к файлам chown baculad:bacula /usr/local/bacula2/var chmod g+w /usr/local/bacula2/var chmod o-rx /usr/local/bacula2/var права доступа к файловому хранилищу установлены ранее работа с журналами проделана ранее logwatch настроен ранее скопировать конфигурационные файлы права чтения к bacula-dir.conf для bacula, иначе не будет работать команда reload изменить имя БД в bacula-dir.conf удалить директивы "Accept Any Volume" из bacula-dir.conf добавить "Ignore Case = yes" в описания опций файловых систем MS Windows в bacula-dir.conf временно вставить "Block Positioning = no" в разделы Device bacula-sd.conf поменять WorkingDirectory, QueryFile, RunBeforeJob, RunAfterJob, Write Bootstrap во всех .conf сетевой экран настроен ранее скопировать .bsr, .msgcon, .state (?) на новое место (с правами доступа) scripts/bacula start, протестировать (или по очереди: bacula-ctl-sd, bacula-ctl-fd, bacula-ctl-dir) права доступа к /usr/local/bacula2/etc/bconsole.conf, /usr/local/bacula2/sbin/bconsole и /usr/local/bacula2/etc/bconsole, чтобы запускать консоль не с правами root опробовать /usr/local/bacula2/etc/bconsole, доступны ли старые клиенты, читаются ли старые тома продолжение записи на том не работает (не совпадает размер тома в каталоге и в реальности), но данные с такого тома восстанавливаются make install-autostart убедиться, что MySQL запускается до bacula-dir (убрать блок INIT INFO из init.d/mysql) после истечения времени хранения всех старых томов убрать "Block Positioning = no" ? задать пароль внутри /usr/local/bacula/etc/make_catalog_backup (лучше через --defaults-file=); обеспечить правильные права доступа к этому файлу ?обеспечить внешними средствами (например, вторым директором и сервером хранения) создание текстовой версии БД и её резервирования ? проверить, что восстановленная БД работает Установка 2.0.3 на CentOS 5.0 x86-64 (директор, хранитель, текстовая консоль и клиент)

Предварительно необходимо установить MySQL (5.0.22) (из пакетов), libtermcap-devel, readline-devel, zlib-devel, openssl-devel, krb5-devel, mysql-devel, libacl, libacl-devel, libattr, libattr-devel.

Процесс установки:

развернуть make distclean совместить статическую сборку (--enable-static-tools --enable-static-fd --enable-static-sd --enable-static-dir --enable-static-cons) и openssl в понимании RH не удалось (LDFLAG="-lkrb5" не помогает; CPPFLAGS=-I/usr/kerberos/include не помогает); make static-bacula-fd в src/filed выдаёт те же ошибки (установка nptl-devel не помогает) ./configure --prefix=/usr/local/bacula --mandir=/usr/local/bacula/man --with-tcp-wrappers --with-openssl --enable-smartalloc --with-job-email=адрес --with-smtp-host=сервер --with-dir-user=baculad --with-dir-group=bacula --with-sd-user=baculas --with-sd-group=bacula --with-mysql[=/usr/local/mysql] --with-subsys-dir=/var/lock/subsys --with-working-dir=/usr/local/bacula/var make [-j3] добавление bacula в /etc/group, baculad и baculas в /etc/passwd и /etc/shadow make install /usr/local/bacula/etc/ (startmysql, stopmysql, bconsole, gconsole, bacula, bacula-ctl-dir, bacula-ctl-fd, bacula-ctl-sd, disk-changer, mtx-changer, dvd-handler, btraceback.gdb, btraceback.dbx, bacula-fd.conf, bconsole.conf, bacula-dir.conf, bacula-sd.conf, create_mysql_database, update_mysql_tables, make_mysql_tables, grant_mysql_privileges, drop_mysql_tables, drop_mysql_database, create_bacula_database, update_bacula_tables, make_bacula_tables, grant_bacula_privileges, drop_bacula_tables, drop_bacula_database, make_catalog_backup, delete_catalog_backup, query.sql) /usr/local/bacula/sbin (btraceback, bacula-fd, bconsole, bacula-dir, bacula-sd, bls, bextract, bcopy, bscan, btape, bsmtp, dbcheck, bwild, bregex) /usr/local/bacula/man/man1/ (bacula-console-gnome.1, bacula-tray-monitor.1, bacula-wxconsole.1, bsmtp.1) /usr/local/bacula/man/man8/ (bacula.8, bacula-dir.8, bacula-fd.8, bacula-sd.8, bconsole.8, bcopy.8, bextract.8, bls.8, bscan.8, btape.8, btraceback.8, dbcheck.8) добавить " -p" в MYSQLPASSWORD= в etc/make_catalog_backup добавить " -p" в etc/grant_mysql_privileges обеспечение доступа к MySQL chmod go+x /usr/local/bacula/etc/grant_mysql_privileges запустить "/usr/local/bacula/etc/grant_mysql_privileges -p" под обычным пользователем (даёт права к bacula.* пользователю bacula без пароля, так что пароль надо устанавливать самому: mysql -u root -p SELECT Host, User FROM mysql.user; SET PASSWORD FOR 'bacula'@'localhost' = PASSWORD('пароль'); SET PASSWORD FOR 'bacula'@'%' = PASSWORD('пароль'); удалить .mysql_history установить пароль в /usr/local/bacula/etc/bacula-dir.conf, секция каталог chmod go+x /usr/local/bacula/etc/create_mysql_database запустить "/usr/local/bacula/etc/create_mysql_database -u bacula -p" под обычным пользователем chmod go+x /usr/local/bacula/etc/make_mysql_tables добавить индексов в /usr/local/bacula/etc/make_mysql_tables запустить "/usr/local/bacula/etc/make_mysql_tables -u bacula -p" под обычным пользователем (drop_mysql_tables очищает таблицы, update_mysql_tables обновляет БД до новой версии от предыдущей; архив скриптов обновлений лежит в upgradedb) увеличить максимальный размер таблицы File: alter table File MAX_ROWS=500000000 AVG_ROW_LENGTH=110; права доступа к файлам chown baculad:bacula /usr/local/bacula/var chmod g+w /usr/local/bacula/var chmod o-rx /usr/local/bacula/var права доступа к файловому хранилищу (при необходимости создать) журнал touch /var/log/bacula.log chown baculad:bacula /var/log/bacula.log отредактированный scripts/logrotate в /etc/logrotate.d/bacula обеспечить доступ с компьютеров, на которых установлены консоли и мониторы к порту 9101 обеспечить доступ директора на порт 9102 к компьютерам, на которых установлены клиенты обеспечить доступ директора на порт 9103 к компьютерам, на которых установлены серверы хранения scripts/bacula start, протестировать права доступа к /usr/local/bacula/etc/bconsole.conf, /usr/local/bacula/sbin/bconsole и /usr/local/bacula/etc/bconsole, чтобы запускать консоль не с правами root опробовать /usr/local/bacula/etc/bconsole make install-autostart убедиться, что MySQL запускается до bacula-dir (убрать блок INIT INFO из init.d/mysql) в предположении, что настроен logwatch, зайти в scripts/logwatch и сделать "make install"; исправить /etc/log.d/conf/logfiles/bacula.conf задать пароль внутри /usr/local/bacula/etc/make_catalog_backup (лучше через --defaults-file=); обеспечить правильные права доступа к этому файлу ?обеспечить внешними средствами (например, вторым директором и сервером хранения) создание текстовой версии БД и её резервирования ? проверить, что восстановленная БД работает Установка 1.38.4 на CentOS 4.2 и 1.38.11 на CentOS 4.3 (директор, хранитель, консоль и клиент)

Предварительно необходимо установить MySQL

Процесс установки:

развернуть make distclean совместить статическую сборку (--enable-static-tools --enable-static-fd --enable-static-sd --enable-static-dir --enable-static-cons) и openssl в понимании RH не удалось (LDFLAG="-lkrb5" не помогает; CPPFLAGS=-I/usr/kerberos/include не помогает); make static-bacula-fd в src/filed выдаёт те же ошибки (установка nptl-devel не помогает) LDFLAGS="-lssl -lcrypto" ./configure --prefix=/usr/local/bacula --mandir=/usr/local/bacula/man --with-tcp-wrappers --with-openssl --enable-smartalloc --with-job-email=адрес --with-smtp-host=сервер --with-dir-user=baculad --with-dir-group=bacula --with-sd-user=baculas --with-sd-group=bacula --with-mysql=/usr/local/mysql --with-subsys-dir=/var/lock/subsys --with-working-dir=/usr/local/bacula/var make [-j3] добавление bacula в /etc/group, baculad и baculas в /etc/passwd и /etc/shadow make install /usr/local/bacula/etc/ (startmysql, stopmysql, bconsole, gconsole, bacula, bacula-ctl-dir, bacula-ctl-fd, bacula-ctl-sd, disk-changer, mtx-changer, dvd-handler, btraceback.gdb, btraceback.dbx bacula-fd.conf, bconsole.conf, bacula-dir.conf, bacula-sd.conf create_mysql_database, update_mysql_tables, make_mysql_tables, grant_mysql_privileges, drop_mysql_tables, drop_mysql_database, create_bacula_database, update_bacula_tables, make_bacula_tables, grant_bacula_privileges, drop_bacula_tables, drop_bacula_database, make_catalog_backup, delete_catalog_backup, query.sql) /usr/local/bacula/sbin (btraceback, bacula-fd, bconsole, bacula-dir, bacula-sd, bls, bextract, bcopy, bscan, btape, bsmtp, dbcheck[, bwild, bregex]) /usr/local/bacula/man/man8/bacula.8.gz добавить " -p" в MYSQLPASSWORD= в etc/make_catalog_backup добавить " -p" в etc/grant_mysql_privileges обеспечение доступа к MySQL chmod go+x /usr/local/bacula/etc/grant_mysql_privileges запустить "/usr/local/bacula/etc/grant_mysql_privileges -p" под обычным пользователем (даёт права к bacula.* пользователю bacula без пароля, так что пароль надо устанавливать самому: /usr/local/mysql/bin/mysql -u root -p SELECT Host, User FROM mysql.user; SET PASSWORD FOR 'bacula'@'localhost' = PASSWORD('пароль'); SET PASSWORD FOR 'bacula'@'%' = PASSWORD('пароль'); удалить .mysql_history установить пароль в /usr/local/bacula/etc/bacula-dir.conf, секция каталог chmod go+x /usr/local/bacula/etc/create_mysql_database запустить "/usr/local/bacula/etc/create_mysql_database -u bacula -p" под обычным пользователем chmod go+x /usr/local/bacula/etc/make_mysql_tables добавить индексов в /usr/local/bacula/etc/make_mysql_tables запустить "/usr/local/bacula/etc/make_mysql_tables -u bacula -p" под обычным пользователем (drop_mysql_tables очищает таблицы, update_mysql_tables обновляет БД до новой версии от предыдущей; архив скриптов обновлений лежит в upgradedb) увеличить максимальный размер таблицы File: alter table File MAX_ROWS=500000000 AVG_ROW_LENGTH=110; права доступа к файлам chown baculad:bacula /usr/local/bacula/var chmod g+w /usr/local/bacula/var chmod o-rx /usr/local/bacula/var права доступа к файловому хранилищу журнал touch /var/log/bacula.log chown baculad:bacula /var/log/bacula.log отредактированный scripts/logrotate в /etc/logrotate.d/bacula scripts/bacula start, проверить права доступа к /usr/local/bacula/etc/bconsole.conf, /usr/local/bacula/sbin/bconsole и /usr/local/bacula/etc/bconsole, чтобы запускать консоль не с правами root опробовать /usr/local/bacula/etc/bconsole make install-autostart в предположении, что настроен logwatch, зайти в scripts/logwatch, поменять в Makefile /etc/log.d на /usr/share/logwatch, conf на default.conf и сделать "make install"; исправить /usr/share/logwatch/default.conf/logfiles/bacula.conf создать подкаталоги в хранилище, настроить и перезапустить сервер хранения настроить и перезапустить клиента на этом компьютере права чтения к bacula-dir.conf для baculad, иначе не будет работать команда reload настроить и перезапустить директора (пока отключить всех клиентов, кроме себя) протестировать полный backup этого компьютера (команда run, но поменять пул) обеспечить доступ директора на порт 9102 к компьютерам, на которых установлены клиенты обеспечить доступ директора на порт 9103 к компьютерам, на которых установлены серверы хранения обеспечить доступ с компьютеров, на которых установлены консоли и мониторы к порту 9101 обеспечить доступ с компьютеров, на которых установлены клиенты к порту 9103 задать пароль внутри /usr/local/bacula/etc/make_catalog_backup (лучше через --defaults-file=); обеспечить правильные права доступа к этому файлу ?обеспечить внешними средствами (например, вторым директором и сервером хранения) создание текстовой версии БД и её резервирования ? проверить, что восстановленная БД работает Установка 2.2.4/2.2.7/2.2.8/2.4.1/3.0.1/5.0.1 на FC6/F10 (клиент, консоли и bat)

Процесс установки (доставить пакеты gcc, gcc-c++, openssl-devel, libtermcap-devel, libacl, libacl-devel, libattr, libattr-devel, zlib, zlib-devel, tcp_wrappers-devel, e2fsprogs-devel, krb5-devel, [qt4], [qt4-devel], qwt, qwt-devel, [qt4-x11], [wxGTK, wxGTK-devel]; в Fedora 10 qt4 вернули в qt):

развернуть make distclean PATH=/usr/lib64/qt4/bin:... [QTDIR=/usr/lib64/qt4] ./configure --enable-client-only --disable-build-dird --disable-build-stored --prefix=/usr/local/bacula --mandir=/usr/local/bacula/man --with-tcp-wrappers --with-openssl --enable-smartalloc --with-subsys-dir=/var/lock/subsys --with-working-dir=/usr/local/bacula/var [--enable-gnome] --enable-bat [--enable-bwx-console] --enable-tray-monitor --enable-lockmgr [--disable-conio --enable-readline] make остановить старую версию make install /usr/local/bacula/etc/ (startmysql (!), stopmysql(!), bconsole, [gconsole], bacula (?), bacula_config (?), bacula-ctl-dir(!), bacula-ctl-fd, bacula-ctl-sd(!), mtx-changer[.old], disk-changer[.old], dvd-handler[.old], btraceback.gdb, btraceback.dbx, bacula-fd.conf[.new], bat.conf[.new], [bgnome-console.conf,] tray-monitor.conf[.new], [bwx-console.conf,] bconsole, bconsole.conf[.new]), bat.conf /usr/local/bacula/sbin/ (btraceback, bacula-fd, bconsole, [bgnome-console], bacula-tray-monitor, [bwx-console], bacula (запуск сервисов), bat) /usr/local/bacula/man/ (man1, man8) /usr/local/bacula/lib/ (для версии 3.0.1 и 5.0.1: libbac.*, libbaccfg.*, libbacpy.*, libbacfind.*, bpipe-fd.*) /usr/local/bacula/share/doc/bacula/html/ (для версии 3.0.1) до версии 3 ручками скопировать src/qt-console/bat в /usr/local/bacula/sbin/ в версии 3 ручками скопировать src/qt-console/.libs/bat в /usr/local/bacula/sbin/ дырка на порт 9101 компьютера с директором настроить /usr/local/bacula/etc/bconsole.conf права доступа к /usr/local/bacula/etc/bconsole.conf, /usr/local/bacula/sbin/bconsole и /usr/local/bacula/etc/bconsole, чтобы запускать консоль не с правами root опробовать /usr/local/bacula/etc/bconsole [настроить графическую консоль под GTK]: отредактировать /usr/local/bacula/etc/bgnome-console.conf (имя директора и пароль) права к /usr/local/bacula/sbin/bgnome-console, /usr/local/bacula/etc/gconsole, /usr/local/bacula/etc/bgnome-console.conf запуск: /usr/local/bacula/etc/gconsole (та же bconsole, только выбор файлов в графике, падает) [настроить графическую консоль под wx]: отредактировать /usr/local/bacula/etc/bwx-console.conf (имя директора и пароль) права к /usr/local/bacula/sbin/bwx-console, /usr/local/bacula/etc/bwx-console.conf запуск: /usr/local/bacula/sbin/bwx-console -c /usr/local/bacula/etc/bwx-console.conf (та же bconsole, только выбор файлов в графике, падает) настроить графическую консоль под qt (bat, 14MB): отредактировать /usr/local/bacula/etc/bat.conf (имя директора и пароль) права к /usr/local/bacula/sbin/bat, /usr/local/bacula/etc/bat.conf запуск: /usr/local/bacula/sbin/bat -c /usr/local/bacula/etc/bat.conf [настроить монитор (на FC6 падает сам и тащит за собой панель извещения)] отредактировать /usr/local/bacula/etc/tray-monitor.conf (имя монитора; имя, адрес и ограниченный пароль Storage; имя, адрес и ограниченный пароль Client; имя, адрес и ограниченный пароль Director в раздел Monitor) дырка на порт 9101 компьютера с директором дырка на порт 9102 компьютера с клиентом дырка на порт 9103 компьютера с Storage права к /usr/local/bacula/etc/tray-monitor.conf, /usr/local/bacula/sbin/bacula-tray-monitor запуск: /usr/local/bacula/sbin/bacula-tray-monitor -c /usr/local/bacula/etc/tray-monitor.conf (в F10 версия 5.0.1 падает: "tray-monitor: lockmgr.c:892 ASSERT failed at lockmgr.c:892: lmgr_is_active()" настроить клиента отредактировать /usr/local/bacula/etc/bacula-fd.conf (имя директора и пароль; имя монитора и пароль; имя директора в секции сообщений) дырка на входной порт 9102 обеспечить доступ к серверу хранения (порт 9103) make install-autostart-fd [добавить "export LANG=" в /etc/rc.d/init.d/bacula-fd, если система русифицирована] service bacula-fd start (для первого раза, запуск при загрузке обеспечивается) добавить в bacula-dir.conf новые секции Job и Client (FileSet) тестирование Установка 1.38.4 на FC3 (gnome консоль, монитор и клиент)

Процесс установки (доставить wxGTK-devel):

развернуть make distclean ./configure ... --enable-gnome --enable-tray-monitor --enable-wx-console --disable-build-dird --disable-build-stored make make install (ставится всё то же самое, кроме /usr/local/bacula/etc/: bacula-dir.conf, bacula-sd.conf, query.sql; кроме /usr/local/bacula/sbin/: bacula-dir, bacula-sd, bls, bextract, bcopy, bscan, btape, dbcheck; дополнительно: /usr/local/bacula/sbin/gnome-console, /usr/local/bacula/etc/gnome-console.conf, /usr/local/bacula/sbin/bacula-tray-monitor, /usr/local/bacula/etc/tray-monitor.conf) настроить графическую консоль отредактировать /usr/local/bacula/etc/gnome-console.conf (имя директора и пароль) права к /usr/local/bacula/sbin/gnome-console, /usr/local/bacula/etc/gconsole, /usr/local/bacula/etc/gnome-console.conf дырка на порт 9101 компьютера с директором запуск: /usr/local/bacula/etc/gconsole (та же bconsole, только выбор файлов в графике) настроить монитор (на FC6 падает сам и тащит за собой панель извещения) отредактировать /usr/local/bacula/etc/tray-monitor.conf (имя монитора; имя, адрес и ограниченный пароль Storage; имя, адрес и ограниченный пароль Client; имя, адрес и ограниченный пароль Director в раздел Monitor) дырка на порт 9101 компьютера с директором дырка на порт 9102 компьютера с клиентом дырка на порт 9103 компьютера с Storage права к /usr/local/bacula/etc/tray-monitor.conf, /usr/local/bacula/sbin/bacula-tray-monitor запуск: /usr/local/bacula/sbin/bacula-tray-monitor -c /usr/local/bacula/etc/tray-monitor.conf настроить клиента отредактировать /usr/local/bacula/etc/bacula-fd.conf (имя директора и пароль; имя монитора и пароль; имя директора в секции сообщений) дырка на входной порт 9102 обеспечить доступ к серверу хранения (порт 9103) make install-autostart-fd добавить "export LANG=" в /etc/rc.d/init.d/bacula-fd, если система русифицирована service bacula-fd start (для первого раза, запуск при загрузке обеспечивается) добавить в bacula-dir.conf новые секции Job и Client (FileSet) scripts/bacula start Установка клиента 2.0.3/2.2.4/2.2.5/2.2.7/2.2.8/2.4.1/3.0.1/3.0.3/5.0.1/5.0.3 на F10, F8, SL-61, CentOS/RHEL 5.0/5.1/5.2/5.3/5.4/5.5 (x86 и x86-64), FC6, CentOS/RHEL 4.1/4.4/4.6/4.7, FC5, RH8, Solaris 8 (gcc 2.95)

Процесс установки (bconsole собирается в любом случае):

развернуть (а также gcc, gcc-c++, openssl-devel, libtermcap-devel (ncurses-devel в Sl-61), libacl, libacl-devel, libattr, libattr-devel, zlib, zlib-devel, e2fsprogs-devel, krb5-devel; для Fedora 8 требуются tcp_wrappers-devel, libtermcap и libtermcap-devel из Everything); для Solaris использовать gtar, gmake (ссылка на него с make) и добавить /usr/ccs/bin в PATH make distclean для RH8 необходимо опустить --with-tcp-wrappers и --with-openssl для CentOS 4.1 или Solaris 8 и версии 3 необходимо отказаться от libtool (--disable-libtool) для Solaris 8: --disable-acl (не компилируется acl.c) и --without-openssl (не собирается консоль) ./configure --enable-client-only --disable-build-dird --disable-build-stored --prefix=/usr/local/bacula --mandir=/usr/local/bacula/man [--with-tcp-wrappers] [--with-openssl] --enable-smartalloc --with-subsys-dir=/var/lock/subsys --with-working-dir=/usr/local/bacula/var make [-j 3] service bacula-fd stop (остановить предыдущую версию) make install /usr/local/bacula/etc: startmysql(!), stopmysql(!), bconsole, gconsole(!), bacula, bacula-ctl-dir(!), bacula-ctl-fd, bacula-ctl-sd(!), mtx-changer(!), disk-changer(!), dvd-handler(!), btraceback.gdb, btraceback.dbx, bacula-fd.conf[.new], bconsole.conf[.new] /usr/local/bacula/sbin: btraceback, bacula-fd, bconsole /usr/local/bacula/lib/ (динамические библиотеки в версии 3) /usr/local/bacula/man/man8/ (bacula.8.gz, bacula-dir.8.gz, bacula-fd.8.gz, bacula-sd.8.gz, bconsole.8.gz, bcopy.8.gz, bextract.8.gz, bls.8.gz, bscan.8.gz, btape.8.gz, btraceback.8.gz, dbcheck.8.gz) /usr/local/bacula/man/man1 (bacula-console-gnome.1.gz, bacula-tray-monitor.1.gz, bacula-wxconsole.1.gz, bsmtp.1.gz) /usr/local/bacula/share/ /usr/local/bacula/var/ отредактировать /usr/local/bacula/etc/bacula-fd.conf (имя директора и пароль; имя монитора и пароль; имя директора в секции сообщений) дырка на входной порт 9102 обеспечить доступ к серверу хранения (порт 9103) make install-autostart-fd [добавить "export LANG=" в /etc/rc.d/init.d/bacula-fd, если система русифицирована] service bacula-fd start (для первого раза, запуск при загрузке обеспечивается; для Solaris: /etc/init.d/bacula-fd start (позаботиться, чтобы /usr/local/lib был в LD_LIBRARY_PATH)) добавить в tray-monitor.conf новую секцию Client и перезапустить монитор добавить в bacula-sd.conf новые секции и перезапустить сервер хранения добавить в bacula-dir.conf новые секции Job и Client (FileSet) и перезапустить директор (reload в консоли) попробовать запустить задание вручную из консоли (run) Имеются спецификации для изготовления rpm.

Установка клиента 1.38.4 на CentOS 4.2, FC4, FC3, RH9, RH 5.2, RH 4.2; установка 1.38.10 на FC5; 1.38.11 на CentOS 4.3, FC6

Процесс установки (bconsole собирается в любом случае):

развернуть (а также gcc, gcc-c++, openssl-devel, libtermcap-devel, libacl-devel) make distclean LDFLAGS="-lssl -lcrypto" ./configure --enable-client-only --disable-build-dird --disable-build-stored --prefix=/usr/local/bacula --mandir=/usr/local/bacula/man --with-tcp-wrappers --with-openssl --enable-smartalloc --with-job-email=адрес --with-smtp-host=сервер --with-subsys-dir=/var/lock/subsys --with-working-dir=/usr/local/bacula/var для FC6 необходимо заменить в src/console/console.c переменную tee (пересекается с /usr/include/bits/fcntl.h) для RH9 надо добавить CPPFLAGS=-I/usr/kerberos/include для RH5.2 надо установить egcs-c++, добавить CPPFLAGS=-I/usr/local/ssl/include и к LDFLAGS строку "-L/usr/local/ssl/lib"; не компилируется; попытка всюду убрать -O2 не помогла: не нравится New(IPADDR(AF_INET)) в bnet.c, jcr.c; удалось установить только версию 1.34.6 (более новые не компилируются): нет SSL, нет команды .status (монитор ругается, но работает некоторое время), запускать приходится с ключом "-s"; не работают Incremental, Differential типы сохранения в RH 4.2 нет egcs; нужен gcc, gcc-c++, linuxthreads-0.5-1.i386.rpm и linuxthreads-devel-0.5-1.i386.rpm; после доработки напильником запускается версия 1.34.6 (см. выше): добавить в src/config.h определение key_t; местная версия zlib не имеет compress2 (src/filed/backup.c), так что установить уровень сжатия не удастся make make install /usr/local/bacula/etc: startmysql, stopmysql, bconsole, gconsole, bacula, mtx-changer, dvd-handler, btraceback.gdb, btraceback.dbx, bacula-fd.conf, bconsole.conf /usr/local/bacula/sbin: btraceback, bacula-fd, bconsole /usr/local/bacula/man/man8/bacula.8.gz отредактировать /usr/local/bacula/etc/bacula-fd.conf (имя директора и пароль; имя монитора и пароль; имя директора в секции сообщений) дырка на входной порт 9102 обеспечить доступ к серверу хранения (порт 9103) make install-autostart-fd добавить "export LANG=" в /etc/rc.d/init.d/bacula-fd, если система русифицирована service bacula-fd start (для первого раза, запуск при загрузке обеспечивается) добавить в tray-monitor.conf новую секцию Client и перезапустить монитор добавить в bacula-dir.conf новые секции Job и Client (FileSet) и перезапустить директор (reload в консоли) попробовать запустить задание вручную из консоли (run) Имеются спецификации для изготовления rpm.

Установка 1.38.4 на Windows 2003 (только клиент и консоль из .exe)

Процесс установки клиента:

установка должна производиться с правами администратора/администратора домена (устанавливается как сервис) выбрать компоненты (клиент, документация, консоль, wx-консоль) указать каталог для установки (c:\bacula) отредактировать bacula-fd.conf (имя и пароль директора и монитора; кстати, директива Monitor в версии 1.38.4 не распознаётся; имя директора в ресурсе Messages) установить как системный сервис, т.е. будет запускаться при старте ОС дырка на входной порт 9102 (netsh firewall ...) обеспечить доступ к серверу хранения (порт 9103) для первого раза запустить из панели управления (администрирование → службы) netstat -an (должен прослушиваться порт 9102) должна появиться иконка в трее (у меня не появляется, т.к. захожу через rdesktop) bacula-fd.exe /status Диспетчер задач (Ctrl-Alt-Del) должен показывать bacula-fd в списке процессов под пользователем SYSTEM (при работе в домене возможно потребуется сменить SYSTEM на идентификатор администратора домена) Если сервис не запускается, то можно проверить синтаксис:

cd c:\bacula\bin bacula-fd -t >out type out Если сервис не запускается, то можно получить трассировку в файле bacula.trace:

bacula-fd -d100 -c c:\bacula\bin\bacula-fd.conf выполнить команду "trace on" в консоли запустить задание и завершить работу bacula-fd Эксклюзивно открытые файлы не сохраняются (если не включить поддержку Volume Shadow Copy Service - VSS - в XP и 2003 и в настройках FileSet; при этом файлы сохраняются на момент начала выполнения задания - делается snapshot файловой системы; нельзя выполнять несколько заданий параллельно; команда status client позволяет узнать о наличии VSS, но она может быть не запущена; реальное использование VSS указывается в отчёте о завершении задания: "VSS Backup Job...", "Generate VSS snapshots").

О сохранении системного реестра необходимо позаботиться отдельно (regedit /e). Рекомендуется предварительно сохранять состояние системы:

ntbackup backup systemstate /F c:\systemstate.bkf Информация о владельцах файлов и правах доступа сохраняются, если выключён режим совместимости (portable yes). Зато файлы невозможно восстановить с помощью ОС, отличной от MS Windows NT/2K/XP/2003, пока этот режим не включить. В том числе не работают утилиты bls и bextract.

Настройка консоли:

В ресурсе Director должно быть указано описание директора с произвольным паролем В ресурсе Console определяется имя консоли и пароль соответствующие настройкам директора (ресурс Console директора определяет набор ACL) При частичном восстановлении недостающие каталоги создаются, принадлежащими пользователю SYSTEM, что может вызвать проблемы доступа (cacls).

Шифрование трафика

Для шифрования потоков с помощью TLS (OpenSSL) необходимо (трафик между директором и сервером хранения пока не шифруется, т.к. они находятся на одном хосте; описание директив и создание сертификатов):

создать открытый ключ и сертификат для каждого директора (CN=его-IP-адрес) создать открытый ключ и сертификат для каждого сервера хранения (CN=его-IP-адрес) создать открытый ключ и сертификат для каждого сервера хранения (CN=bacula-sd@имя-хоста) создать открытый ключ и сертификат для каждого файлового сервера (CN=его-IP-адрес) создать открытый ключ и сертификат для каждого файлового сервера (CN=bacula-fd@имя-хоста) создать открытый ключ и сертификат для каждой консоли (CN=bacula-console@имя-хоста) настройка каждой консоли и bat (bat.conf), в каждый раздел Director

TLS Enable = yes
TLS Require = yes
TLS CA Certificate File = "файл с корневым сертификатом"
TLS Certificate = "файл с сертификатом этой консоли"
TLS Key = "файл с открытым ключом этой консоли"

настройка файлового сервера (клиента), bacula-fd.conf: Director {

...
TLS Enable = yes
TLS Require = yes
TLS Verify Peer = yes
TLS Allowed CN = "CN-директора в виде его IP-адреса"
TLS Allowed CN = ...
TLS CA Certificate File = "файл с корневым сертификатом"
TLS Certificate = "файл с сертификатом этого файлового сервера, у которого CN=его-IP-адрес"
TLS Key = "файл с открытым ключом этого файлового сервера, у которого CN=его-IP-адрес"

} Director {

...
Monitor = yes
TLS Enable = yes
TLS Require = no
TLS Verify Peer = no
TLS CA Certificate File = "файл с корневым сертификатом"
TLS Certificate = "файл с сертификатом этого файлового сервера, у которого CN=его-IP-адрес"
TLS Key = "файл с открытым ключом этого файлового сервера, у которого CN=его-IP-адрес"

} FileDaemon {

TLS Enable = yes
TLS Require = yes
TLS CA Certificate File = "файл с корневым сертификатом"
TLS Certificate = "файл с сертификатом этого файлового сервера, у которого CN=bacula-fd@имя-хоста"
TLS Key = "файл с открытым ключом этого файлового сервера, у которого CN=bacula-fd@имя-хоста"

} настройка сервера хранения (bacula-sd.conf): Storage {

...
TLS Enable = yes
TLS Require = no
TLS Verify Peer = no
TLS CA Certificate File = "файл с корневым сертификатом"
TLS Certificate = "файл с сертификатом этого сервера хранения, у которого CN=его-IP-адрес"
TLS Key = "файл с открытым ключом этого сервера хранения, у которого CN=его-IP-адрес"

} Director {

...
TLS Enable = yes
TLS Require = no
TLS Verify Peer = no
TLS CA Certificate File = "файл с корневым сертификатом"
TLS Certificate = "файл с сертификатом этого сервера хранения, у которого CN=bacula-sd@имя-хоста"
TLS Key = "файл с открытым ключом этого сервера хранения, у которого CN=bacula-sd@имя-хоста"

} Director {

...
Monitor = yes
TLS Enable = yes
TLS Require = no
TLS Verify Peer = no
TLS CA Certificate File = "файл с корневым сертификатом"
TLS Certificate = "файл с сертификатом этого сервера хранения, у которого CN=bacula-sd@имя-хоста"
TLS Key = "файл с открытым ключом этого сервера хранения, у которого CN=bacula-sd@имя-хоста"

} настройка директора (bacula-dir.conf): Director {

...
TLS Enable = yes
TLS Require = yes
TLS Verify Peer = yes
TLS Allowed CN = "CN-консоли"
TLS Allowed CN = "..."
TLS CA Certificate File = "файл с корневым сертификатом"
TLS Certificate = "файл с сертификатом этого директора"
TLS Key = "файл с открытым ключом этого директора"

} Console {

...
TLS Enable = yes
TLS Require = no
TLS Verify Peer = no
TLS CA Certificate File = "файл с корневым сертификатом"
TLS Certificate = "файл с сертификатом этого директора"
TLS Key = "файл с открытым ключом этого директора"

} ... Client {

...
TLS Enable = yes
TLS Require = yes
TLS CA Certificate File = "файл с корневым сертификатом"
TLS Certificate = "файл с сертификатом этого директора"
TLS Key = "файл с открытым ключом этого директора"

} ... Перенос сохранённых данных на новое место (миграция)

В bacula имеются средства переноса данных резервного копирования на новое место (в версии 3 добавлена возможность копирования, в версии 5 добавлена возможность работать внутри одного пула). Для этого необходимо описать и запустить (возможно из планировщика) управляющее задание типа Migrate, которое:

определяет исходный пул (указывается в описании задания директивой Pool, можно изменить в момент запуска) определяет пул назначения (указывается в описании исходного пула директивой Next Pool, в описании пула назначения обязательно указывать Storage) просматривает задания из томов исходного пула (только в состояниях Full, Used и Error; но помечает все?) в соответствии с критериями (директивы Selection Type и Selection Pattern, с учётом параметров исходного пула: Migration Time, Migration High Bytes, Migration Low Bytes), указанными в задании самый маленький том самый старый том имя (регулярное выражение) клиента имя (регулярное выражение) тома имя (регулярное выражение) задания SQL запрос поддержание максимального размера пула поддержание времени хранения заданий в пуле определяет задания, сохранённые в рамках которых данные необходимо перенести в новый пул порождает задания по переносу данных (по одному для каждого исходного задания) порождённые задания переносят данные в новый пул (информация о старом расположении файлов удаляется из БД; информация о заданиях и томах остаётся; сами данные остаются) по их завершении вносятся изменения в БД: удаляется информация о данных, сохранённых исходными заданиями (сами исходные тома остаются на всякий случай); тип заданий меняется с "B" на "M" вносится информация о новых заданиях, необходимая для восстановления с нового места; информация о мигрировавших заданиях отличается от исходных заданий только параметром RealEndTime отличающимся от EndTime с управляющими заданиями информация о файлах в БД не связывается Ограничения и неприятности:

миграция возможна только внутри одного сервера хранения до версии 3 можно только переместить, нельзя скопировать до версии 5 система не следит за блокировкой (deadlock) ресурсов тома внутри пула д.б. одного типа (Media Type) журнал некоторых (управляющих?) заданий не записывается в БД большой поток сгенерированных заданий мигрировавшие данные м.б. сразу удалены из-за истечения срока хранения; обработка ошибок при этом неадекватная Использование заданий миграции для переноса части заданий на новое устройство (массив, NFS, NAS):

остановить планировщик закрыть все тома в состояниии Append для каждого клиента добавить описание нового устройства в bacula-sd.conf (Device) Device {

Name = FileStorage-NFS-ИмяКлиента
Archive Device = /net/имя-NFS-сервера/backup/bacula/ИмяКлиента
Device Type = File
Media Type = File-NFS-ИмяКлиента
Removable Media = no
Random Access = Yes
LabelMedia = Yes
Automatic Mount = Yes
AlwaysOpen = No
Maximum Network Buffer Size = 65536

} перезапустить bacula-sd добавить в раздел каждого переносимого клиента в bacula-dir.conf: описание задания миграции Job {

Name = ИмяКлиента-migrate
Enabled = No # для временного отключения планирования
Type = Migrate
Level = Full
Write Bootstrap = "/usr/local/bacula/var/ИмяКлиента-migrate.bsr"
Client = ИмяКлиента-fd
FileSet = ИмяКлиента
Messages = Standard
Pool = ИмяКлиента-monthly

# Incremental Backup Pool = ИмяКлиента-daily # Schedule = ИмяКлиента-year

Selection Type = Client
Selection Pattern = ИмяКлиента-fd

описание нового хранилища Storage {

Name = File-NFS-ИмяКлиента

# DNS-разрешение происходит на клиенте, не надо вписывать сюда 127.0.0.1!

Address = адрес-первого-сервера-хранения
SDPort = 9103
Password = "backup1-dir-to-backup1-sd"
Device = FileStorage-NFS-ИмяКлиента
Media Type = File-NFS-ИмяКлиента

} описания новых пулов Pool {

Name = ИмяКлиента-NFS-monthly
Pool Type = Backup
Maximum Volume Jobs = 1
Maximum Volume Bytes = 4650000000 # по размеру DVD-R
Volume Retention = 1 year
AutoPrune = yes
RecyclePool = ИмяКлиента-NFS-monthly
Recycle = yes
Recycle Oldest Volume = yes
Label Format = "ИмяКлиента-NFS-monthly-${Year}${Month:p/2/0/r}${Day:p/2/0/r}-${Hour:p/2/0/r}${Minute:p/2/0/r}"
Storage = File-NFS-ИмяКлиента

} Pool {

Name = ИмяКлиента-NFS-weekly
Pool Type = Backup
Maximum Volume Jobs = 1
Maximum Volume Bytes = 4650000000 # по размеру DVD-R
Volume Retention = 35 days
AutoPrune = yes
RecyclePool = ИмяКлиента-NFS-weekly
Recycle = yes
Recycle Oldest Volume = yes
Label Format = "ИмяКлиента-NFS-weekly-${Year}${Month:p/2/0/r}${Day:p/2/0/r}-${Hour:p/2/0/r}${Minute:p/2/0/r}"
Storage = File-NFS-ИмяКлиента

} Pool {

Name = ИмяКлиента-NFS-daily
Pool Type = Backup
Volume Use Duration = 6 days 18 hours
Maximum Volume Bytes = 4650000000 # по размеру DVD-R
Volume Retention = 7 days

# Volume Retention = 31 days # для восстановления состояния на любой день месяца

AutoPrune = yes
RecyclePool = ИмяКлиента-NFS-daily
Recycle = yes
Recycle Oldest Volume = yes
Label Format = "ИмяКлиента-NFS-daily-${Year}${Month:p/2/0/r}${Day:p/2/0/r}-${Hour:p/2/0/r}${Minute:p/2/0/r}"
Storage = File-NFS-ИмяКлиента

} в описания старых пулов добавить параметр Next Pool мигрировать задания (run ИмяКлиента-migrate) для каждого из трёх пулов для перевода последующих записей новых заданий на новое место: заменить в описании основного задания имена пулов заменить в описании планировщика имена пулов перезагрузить (reload) директора В связи с ограничениями возможностей миграции (нельзя копировать, нельзя мигрировать данные между серверами хранения) создание "противопожарной" копии пришлось делать с помощью скриптов:

ночами на выходных делаются полные резервные копии данных с серверов в ночь на понедельник "свежие" тома полных резервных копий со всех серверов хранения в виде файлов сливаются (cp, NFS или ssh (find|cpio -oH ustar); шифрование: "openssl enc -aes256 -pass file:... -md sha1") на специально выделенный большой диск (hotswap) в понедельник делаются полные резервные копии данных с рабочих станций в ночь на вторник они также сливаются на тот же диск во вторник диск вынимается и вывозится в неизвестном направлении, а на его место ставится привезённый оттуда второй диск на следующей неделе цикл повторяется; таким образом у нас имеется хотя бы одна копия всех данных десятидневной давности (в худшем случае); правда, она не занесена в БД, но хоть что-то BMR (Bare Metal Recovery) - восстановление Linux клиента "с нуля"

В данном случае предполагается, что был потерян только один сервер, а вся сетевая инфраструктура, включая директор bacula и сервер хранения bacula, остались целыми.

Не рекомендуется пользоваться старыми версиями bacula для восстановления системы - была ошибка восстановления файлов с несколькими жёсткими ссылками (права доступа получались несколько странными).

В версии 3 подсистема была полностью переработана (отказались от создания собственного загрузочного диска в пользу Ubuntu LiveCD, загружаемого с USB флешки), документация в пакете rescue в каталоге linux/usb, не смотрел. Подготовка к восстановлению (опробовалось на CentOS 4.6/i386, CentOS 5.2/x86_64, 2.4.1) должна проводиться до катастрофы:

обеспечить наличие свежих файлов bootstrap создание единого загрузочного диска (Bacula Rescue CDROM) для всех компьютеров, имеющих однотипную настройку (обновлять при каждом изменении файловых систем, установке существенно новой (читай, несовместимой) версии bacula, версии клиентской ОС): установить busybox, mkisofs, sfdisk развернуть bacula-rescue-2.4.1 прочитать README и linux/cdrom/README самостоятельно собрать статическую версию клиента facula-fd (какая-то муть с kerberos/ssl в Red Hat Linux не даёт собрать версию с OpenSSL): cd исходные-тексты-bacula-2.4.1 make distclean сборка упрощённой статической версии клиента для установки в заданное место: ./configure --enable-client-only --enable-static-fd --disable-build-dird --disable-build-stored --prefix=/usr --sbindir=/usr/sbin --sysconfdir=/etc/bacula --with-scriptdir=/etc/bacula --enable-smartalloc make задуматься над замечаниями вида (getgrgid, initgroups, getgrnam, getpwnam, getpwuid, gethostbyname2, getservbyname) и что будет с восстановлением прав доступа: Using 'getgrgid' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking cp src/filed/static-bacula-fd /tmp попробовать запустить: /tmp/static-bacula-fd -t конфигурация пакета восстановления: cd исходные-тексты-bacula-rescue-2.4.1 ./configure --with-static-fd=/tmp --with-bacula-scripts=/usr/local/bacula/etc [--with-kernel=версия-ядра] su - cd исходные-тексты-bacula-rescue-2.4.1/linux/cdrom подправить roottree/etc/load_eth0, чтобы он загружал при восстановлении модули драйверов ethernet *.ko, а не *.o (для CentOS 5.2 надо как-то сузить список); а перед ними поставить загрузку модулей /lib/modules/*/misc/*.ko для VMware добавить в roottree/etc/sysinit загрузку требуемых модулей HBA (modprobe), например для VMware: sd_mod, [mptbase, mptscsi,] mptspi, [mptsas, mptscsih] (достаточно одного mptspi) добавить в roottree/etc/sysinit загрузку модулей device-mapper: (modprobe dm_mod, dm_mirror, dm_zero, dm_snapshot) в случае CentOS 4.6 закомментировать в makeinitrd новомодный способ создания RAM диска с помощью cpio добавить roottree/sbin/lvm в rootsbin.list копировать /usr/share/terminfo/l/linux в roottree/usr/share/terminfo/l/ (makebinaries) проблема с x86_64 в makebinaries заменить все исходящие /lib/ на /lib64/ /lib64/ld-linux-x86-64.so.2 ln -s lib lib64 удалить /etc/ld.so.cache из списка проблема не решена, делаю загрузочный диск на аналогичной, но 32-битной системе make all (или по частям, см. редактирование bacula-fd.conf) make kernel (наполняет roottree/lib/modules/; удаляет часть "ненужных" модулей; не находит файл /boot/map (вместо него System.map-версия-ядра); копирует ядро в cdtree/boot/isolinux/vmlinuz) make binaries создаёт дерево каталогов в roottree/ список полезных программ для создания /sbin берётся из файла rootsbin.list; не нашёл ash, ata-id, checkproc, hotplug, hwup, path_id, raidstart, scsi_info, udev, udevstart, vol_id и др. копирует необходимые разделяемые библиотеки в lib/ (не понимаю, зачем мучаться со static-bacula-fd, если разделяемые библиотеки всё равно используются - целых 15 МБ!) копирует инфраструктуру grub копирует lib/udev (кстати, здесь обнаруживаются ata_id, path_id, scsi_id, vol_id) копирует из /etc (rootetc.list): dev.d/, exports, filesystems, fstab, group, gshadow, hosts, init.d/, inittab (свой), load_eth0 (свой), modprobe.conf, modprobe.d/, mtab (свой), nsswitch.conf (свой), pam.d/, passwd, profile (свой), rc.d/ securetty (свой), security/, shadow, ssh/, start_network.sh (свой), sysconfig/ (забиваются HWADDR в ifcfg-eth*), sysinit (свой), syslog.conf, termcap (свой), terminfo/ (который теперь в /usr/share/), udev/ make bacula собирает информацию о файловых системах и сети (getdiskinfo, хранит в bacula/diskinfo/): точки монтирования в mount.bsi, mount.ext2.bsi, mount.ext3.bsi, mount.rei.bsi fstab.bsi (/etc/fstab) mtab.bsi (/etc/mtab) df.bsi ("df -Tl") sfdisk.disks.bsi ("sfdisk -s") disks.bsi (список дисков) sfdisk.имя-диска.bsi ("sfdisk -l") sfdisk.make.имя-диска.bsi ("sfdisk -d") swaps.bsi (/proc/swaps) route.bsi ("route -n") ifconfig.bsi ("ifconfig") lvm-pv.bsi lvm-vg.bsi lvm-lv.bsi информация о md и dm не собирается генерация скриптов, запускаемых при восстановлении partition.имя-диска create-pv create-vg create-lv md и dm не создаются format.имя-диска (файловые системы поверх md/dm не создаются; параметры файловых систем стандартные, обязателен ext_attr) start_network (зачем-то поднимает eth1, eth2 и выше не предусмотрено) mount_drives (а вот здесь файловые системы на md монтируются) umount_drives make_rescue_disk (по-моему, не делает ничего) copy_static_bacula копирует static-bacula-fd и bacula-fd.conf (в нём прописана /usr/local/bacula/var) в bacula/bin copy_to_roottree копирует только что заполненный каталог bacula/ в roottree/bacula-простоеимяхоста/ отредактировать roottree/bacula-простоеимяхоста/bin/bacula-fd.conf, заменяя /usr/local/bacula/var и /var/run на /temp скопировать dev.tar.gz в roottree здесь можно добавить свои файлы в roottree (войдут в RAM диск), например, roottree/bacula-имяхоста с других хостов make initrd создание образа RAM диска, в который войдёт содержимое roottree (126MB) сжатие образа в cdtree/boot/isolinux/initrd.img создание меню (cdtree/boot/isolinux/isolinux.cfg); в меню, кстати, есть memtest, а вот самого memtest - нет здесь можно добавить свои файлы в cdtree (будут доступны в /mnt/cdrom/) make iso # создание ISO-образа в bootcd.iso (33МБ) tar -zcvf bacula-имяхоста.tar.gz roottree/bacula-имяхоста записать bootcd.iso на болванку или залить bacula-имяхоста.tar.gz "в общий котел" Восстановление клиента:

восстановление виртуальной машины (копии nvram, *.vmdk, *.vmx; пустышка для *-flat.vmdk) загрузка с диска Rescue по умолчанию (скрипт загрузки - /etc/init (ранее был - /etc/linuxrc), затем выполняется /etc/sysinit) вместо обещанного login попадаем в shell

? trap "" 1 2 3 15 exec >/dev/console &1 при необходимости зачистка таблицы разделов диска и перезагрузка при использовании диска с несколькими каталогами bacula-имяхоста возникают проблемы с /etc/modprobe.conf в CentOS 5.2 проблемы с обнулением /dev (спасает заботливо припасённый dev.tar.gz - "tar zxkvf dev.tar.gz") cd bacula-имяхоста ./start-network (при тестировании взять за образец) ./partition.* !ручное создание md ./create-pv (в CentOS 5.2 не нашёлся /dev/urandom: "mknod /dev/urandom c 1 9") ./create-vg ./create-lv ./format.* (сначала физические диски, затем MD, затем LVM) ./mount_drives (!без "-o acl" в CentOS 5.2 ругается о невозможности восстановления ACL, с ним не ругается, но и не восстанавливает) восстановить на /mnt/disk каталоги, не включённые в backup (root:root): /dev, /dev/pts, /dev/shm (rwxrwxrwt), /media, /net, /proc, /selinux, /sys, /tmp (rwxrwxrwt), /var/lib/nfs/rpc_pipefs (и атрибуты SELinux) tar xzf /dev.tar.gz -C /mnt/disk mkdir /mnt/disk/temp cp bin/bacula* /mnt/disk/temp/ ?придать статус ext_attr файловой системе: setfattr -n security.selinux -v "system_u:object_r:bin_t:s0\000" /mnt/disk/temp/bacula-fd chroot /mnt/disk /temp/bacula-fd -c /temp/bacula-fd.conf [-f -d 99] запустить восстановление с удалённой bconsole (restore all, done, поменять корень [и клиента для теста]) дождаться завершения и остановить bacula-fd (убить головной процесс) сокеты хранятся в архиве, но не восстанавливаются не восстановились расширенные права доступа у файла /var/run/cups/certs/0 ("-r--r-----+", getfacl, "getfattr -d -m .") и атрибуты SELinux динамическая версия bacula-fd восстанавливает ACL, но не восстанавливает атрибуты SELinux (создать и заполнить /mnt/disk/lib64 (libacl.so.1, libpthread.so.0, libdl.so.2, libssl.so.6, libcrypto.so.6, libm.so.6, libgcc_s.so.1, libc.so.6, libattr.so.1, ld-linux-x86-64.so.2, libnsl.so.1, libcom_err.so.2, libkeyutils.so.1, libresolv.so.2, libselinux.so.1, libsepol.so.1) и /mnt/disk/usr/lib64 (libz.so.1, libwrap.so.0, libstdc++.so.6, libgssapi_krb5.so.2, libkrb5.so.3, libk5crypto.so.3, libkrb5support.so.0) динамическая версия bacula-fd, запущенная в chroot не восстанавливает ACL (процесс bacula-fd: root:system_r:unconfined_t:SystemLow-SystemHigh, обращается к /etc/selinux/config, /proc/mounts, /selinux/mls, /var/run/setrans/.setrans-unix, /etc/hosts.allow, /etc/hosts.deny, /etc/nsswitch.conf, /lib64/libnss_files.so.2 /dev/urandom - требуется для SSL/TLS, /dev/null - нужен всем; /etc/group и /etc/passwd требуются для восстановления ACL - имена в текстовом виде, /etc/localtime - требуется для правильного восстановления времени); export LANG=; те атрибуты SELinux, про которые знает restorecon, можно установить заново, создав /mnt/disk/.autorelabel и загрузившись с enforcing=0 !./run_grub (много раз ругается на отсутствие контроллера НГМД) ./umount_drives вынуть CD-ROM, reboot и пробуем загрузиться Учения по восстановлению серверной филиала после пожара

Вводная: предполагается пожар в одной из серверной с уничтожением всего находящегося в ней оборудования. Данная серверная в дополнение к обслуживанию локальных клиентов обеспечивает маршрутизацию между филиалами и доступ в Интернет. Резервное копирование осуществляется с помощью сервера bacula, находящегося в соседнем филиале.

Подготовительные действия:

!у меня были проблемы с BMR в версии 2.2.8, так что всех клиентов необходимо перевести на 2.4.1 и сделать полное копирование ?сервера на 2.4.1? Последовательность восстановления:

!адаптация настройки серверов соседних филиалов !пропал выход в Интернет и связь с другими филиалами !DNS сервера перевести в автономный режим !почта !восстановление сетевого оборудования, необходимого для подключения к серверу bacula !канал и оборудование связи с филиалом, в котором находится сервер bacula !необходимо иметь описание оборудования, монтажную схему и настройки оборудования !доставить оборудование и кабеля со склада !монтаж !настройка !центральный коммутатор внутреннего сегмента сети !необходимо иметь описание оборудования, монтажную схему и настройки оборудования !доставить оборудование и кабеля со склада !монтаж !настройка !восстановление межсегментного маршрутизатора !восстановление шлюза в интернет !восстановление сервера Интернет: внешний DNS, прокси-сервер, SMTP сервер, NTP, IMAP !восстановление сервера сегмента !восстановление серверов отделов, файловых серверов и серверов СУБД !восстановление системы резервного копирования !восстановление второстепенных функций !восстановление служебных функций Сохранение и восстановление каталога (БД)

Резервирование каталога (схема перекрёстного опыления):

модифицировать скрипт /usr/local/bacula/etc/make_catalog_backup на использование файла параметров (--defaults-extra-file=/usr/local/bacula/etc/mysqldump.cnf), в файле параметров задать пароль и прочие ключи (обеспечить права доступа):

[mysqldump]
add-drop-table
add-locks
#delete-master-logs
disable-keys
force
#lock-all-tables - хотелось бы, но требует права RELOAD
opt
password=пароль
protocol=socket
user=bacula

тестирование скрипта: "make_catalog_backup bacula" настраиваем "перекрёстный" сервер: отдельное задание для сохранения каталога:

Job {
  Name = ИмяРезервируемогоДиректора-catalog
#  Enabled = no
  Type = Backup
  Level = Full
  Write Bootstrap = "/usr/local/bacula/var/ИмяРезервируемогоДиректора-catalog.bsr"
# клиент уже описан
  Client = ИмяРезервируемогоДиректора-fd
# отдельное описание набора файлов
  FileSet= ИмяРезервируемогоДиректора-catalog
  Messages = Standard
# отдельный пул
  Pool = ИмяРезервируемогоДиректора-catalog
# отдельное расписание
  Schedule = ИмяРезервируемогоДиректора-catalog
# сервер хранения уже описан
  Storage = File-ИмяРезервируемогоДиректора
# перед резервным копированием необходимо сделать дамп БД
  Run Script {
    Runs When = Before
    Runs On Client = yes
    Fail Job On Error = yes
    Command = "/usr/local/bacula/etc/make_catalog_backup bacula bacula"
  }
# после резервного копирования дамп надо удалить
  Run Script {
    Runs When = After
    Runs On Client = yes
    Runs On Success = yes
    Runs On Failure = no
    Fail Job On Error = no
    Command = "/usr/local/bacula/etc/delete_catalog_backup"
  }
}

отдельное описание набора файлов

FileSet {
  Name = ИмяРезервируемогоДиректора-catalog
  Include {
    Options {
      compression = GZIP
      signature = SHA1
      onefs = yes
      aclsupport = yes
      noatime = yes
      checkfilechanges = yes
    }
    File = /usr/local/bacula/var/bacula.sql
  }
}

отдельное расписание (должно происходить сразу после всех работ на резервируемом директоре; сделать с запасом, т.к. синхронизации нет; необходимо убедиться, что сервера не копируют каталоги друг друга одновременно):

Schedule {
  Name = ИмяРезервируемогоДиректора-catalog
# копирование изменений происходит быстро
  Run = Level=Full Pool=ИмяРезервируемогоДиректора-catalog mon-sat at 2:00
# по воскресеньям происходит полное копирование, которое требует больше времени
  Run = Level=Full Pool=ИмяРезервируемогоДиректора-catalog sun at 6:00
}

пробный запуск учения Восстановление каталога при схеме перекрёстного опыления:

если сервер был полностью утрачен, то установить ОС и сервер bacula (если восстановление автоматическое (например, BMR), то мы получаем сервер и директор с устаревшей (испорченной) БД) очистка БД создать копию испорченного каталога (просто так, на всякий случай ;) при необходимости удалить испорченный каталог (drop_bacula_tables) создать новый пустой каталог (make_bacula_tables) восстанавливаем дамп каталога как обычный текстовый файл /usr/local/bacula/var/bacula.sql отключить запись двоичного журнала в MySQL и перезапустить его использовать востановленную текстовую копию каталога для востановления БД mysql -u bacula -p bacula < /usr/local/bacula/var/bacula.sql восстановить запись двоичного журнала в MySQL и перезапустить его проверка (например, bdcheck) При наличии только одного директора восстановить что-либо обычными средствами невозможно, но можно выполнить (run) задачу RestoreFiles и поменять bootstrap файл на созданный при сохранении текстовой копии каталога (остальные параметры также необходимо установить правильно).

Если bootstrap файл пропал вместе с БД (или не был сделан), то придётся использовать утилиту bextract (bls) или узнать имя тома, идентификатор сессии и время сессии из почтовых сообщений и сделать из этой информации bootstrap файл.

Если копия БД не была сделана или её невозможно восстановить, то необходимо создать новый пустой каталог (make_bacula_tables), запустить и остановить директора (он создаёт таблицы с описанием клиентов и серверов хранения), утилитой bscan восстановить содержимое БД непосредственно из томов.

Файл bootstrap хранит информацию откуда извлекать данные при восстановлении. Создаётся (Full) или дополняется (Incremental, Differential) автоматически при выполнении задания (имя файла задаётся директивой Write Bootstrap) или командой restore. Представляет собой текстовый файл, разбитый на строки. Каждая строка является фильтром для программы восстановления и представлена в виде "ключ=значение", ключ Volume разбивает файл на секции, различные ключи внутри секции сочетаются как AND, одинаковые как OR:

  • Volume=имя-тома (может быть несколько; дальнейшие фильтры применяются к данному тому до следующего тома)
  • Count=число-восстанавливаемых-файлов
  • VolFile=номер_файла-список_номеров-интервал_номеров (файлы в смысле магнитной ленты)
  • VolBlock=номер_блока-список_номеров-интервал_номеров (физичнские блоки на ленте; не используется)
  • VolSessionTime=время-в-формате-Unix
  • VolSessionId=идентификатор_сессии-список_номеров-интервал_номеров (задание уникально определяется парой "время сессии" и "идентификатор сессии" для тома)
  • JobId=идентификатор_задания-список_номеров-интервал_номеров (идентификатор задания не является уникальным, если имеется несколько директоров или производилась очистка БД)
  • Job=имя_задания-список_имён (можно использовать шаблоны)
  • Client=имя_клиента-список_имён (можно использовать шаблоны)
  • FileIndex=номер-список_номеров-интервал_номеров (первый файл сессии имеет номер 1)
  • FileRegex=регулярное-выражение (позволяет задать шаблон имён восстанавливаемых файлов)
  • Stream=список-потоков
  • Slot=номер

Для каждой утилиты необходимо задать (с помощью ключа "-c") имя конфигурационного файла bacula-sd.conf и имя устройства (при архивации на ленту реальное имя устройства типа /dev/nst0; при архивации на диск - полное имя файла, при этом имя файла рассматривается как имя тома, а имя каталога должно соответствовать описанию устройства в bacula-sd.conf).

Для реально автономной работы требуется статическая сборка.

bls - получение списка файлов. Ключи:

  • -?
  • -v (можно указывать дважды для увеличения степени болтливости)
  • -c имя-конфигурационного-файла
  • -b имя-bootstrap-файла
  • -V имена-томов (разделяются вертикальной чертой; в этом случае для дисковых томов указывается только имя каталога; можно использовать шаблоны)
  • -j (вывести список заданий вместо списка сохранённых файлов)
  • -L (вывести метку тома)
  • -e имя-файла (список исключений; полные имена файлов или каталогов; можно использовать шаблоны; обрабатывается после списка включаемых файлов)
  • -i имя-файла (список включаемых файлов; полные имена файлов или каталогов; можно использовать шаблоны; обрабатывается после bootstrap-файла)
  • -p (не прерываться при ошибках ввода/вывода)

bextract - восстановление файлов на "голой" системе. Вторым параметром указывается имя каталога назначения (добавляется к именам востанавливаемых файлов; буква диска из исходных имён файлов удаляется). Не умеет восстанавливать ACL и зашифрованные данные. Восстановление данных в непереносимом формате Win32 на UNIX/Linux платформе появилось в версии 3. Ключи:

  • -?
  • -v (можно указывать дважды для увеличения степени болтливости)
  • -c имя-конфигурационного-файла
  • -b имя-bootstrap-файла
  • -V имена-томов (разделяются вертикальной чертой; в этом случае для дисковых томов указывается только имя каталога; можно использовать шаблоны)
  • -e имя-файла (список исключений; полные имена файлов или каталогов; можно использовать шаблоны; обрабатывается после списка включаемых файлов)
  • -i имя-файла (список включаемых файлов; полные имена файлов или каталогов; можно использовать шаблоны; обрабатывается после bootstrap-файла)
  • -p (не прерываться при ошибках ввода/вывода)

bscan - восстановление БД по информации из тома. Если восстанавливается информация об очень старом томе, то она может быть автоматически удалена при выполнении следующего задания, как устаревшая, так что необходимо сразу же её защитить (например, изменить состояние тома командой update). Ключи:

  • -?
  • -v (можно указывать дважды для увеличения степени болтливости)
  • -c имя-конфигурационного-файла
  • -b имя-bootstrap-файла
  • -V имена-томов (разделяются вертикальной чертой; в этом случае для дисковых томов указывается только имя каталога; можно использовать шаблоны)
  • -p (не прерываться при ошибках ввода/вывода)
  • -m (обновлять информацию о носителе в БД; необходим для восстановления БД, оказавшейся в некорректном состоянии при аварийном завершении задания резервирования)
  • -n имя-БД (bacula)
  • -u имя-пользователя-СУБД (bacula)
  • -P пароль-СУБД (пустой)
  • -h имя-хоста-СУБД (локальное соединение)
  • -w имя-каталога-для-временных-файлов
  • -r (list records?)
  • -s (синхронизировать с БД или записать в БД; без этого ключа БД изменяться не будет)

bcopy - копирование тома. Информация в БД не заносится. Вторым параметром указывается имя устройства для записи. Ключи:

  • -?
  • -v (можно указывать дважды для увеличения степени болтливости)
  • -c имя-конфигурационного-файла
  • -b имя-bootstrap-файла
  • -p (не прерываться при ошибках ввода/вывода)
  • -i имена-исходных-томов (разделяются вертикальной чертой; в этом случае для дисковых томов указывается только имя каталога)
  • -o имена-записываемых-томов (разделяются вертикальной чертой; в этом случае для дисковых томов указывается только имя каталога)

btape - ручное управление НМЛ.

bsmtp - вспомогательная программа, использующаяся при посылке почты.

dbcheck - проверка БД. Некоторые проверки без создания дополнительных индексов выполняются очень (часы и сутки! обещано, что ускорено в версии 3) медленно (Check for orphaned File records; Check for orphaned Filename records; "Check for orphaned Path records"). Ключи:

  • -?
  • -v (можно указывать дважды для увеличения степени болтливости)
  • -c имя-конфигурационного-файла-директора
  • -C имя-ресурса-каталога
  • -f (исправлять найденные ошибки)
  • -b (пакетный режим)

сайт компании Bacula Systems S.A. перевод документации к версии 1.38 (смотреть xpdf) О разработке процедур резервного копирования, архивирования и восстановления серверов и баз данных пожелания к новым функциям в версии 3.0 (другие версии рядом)