Сетевая система резервного копирования и восстановления данных 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).
Система хорошо масштабируема.
Управляющий директор, СУБД, сервер хранения, сервер доступа к файловой системе, монитор и консоль выделены
в отдельные процессы и могут быть в нескольких экземплярах расположены в различных узлах сети.
При этом сохраняется возможность единой точки управления и мониторинга.
Компоненты могут быть легко разнесены в нужные места сети или удалённых сетей,
интерфейс прост, описан и управляем с точки зрения сетевого экрана.
Процесс резервирования автоматизирован с помощью единого планировщика.
Возможно параллельное выполнение нескольких заданий, включая запись в один том.
Приоритизация заданий (подход специфический).
Отсутствует автоматический запуск пропущенных заданий (есть повтор неудавшегося задания
и автоматическое преобразование резервного копирования изменений в полное копирование).
Ограничения на размер файлов, файловых систем и разделов -
не более 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, SQLLite от 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 типов (может быть один или несколько сервисов
каждого типа, расположение различных сервисов в сети определяется администратором):
сервер хранения (storage server) - получает задания от директора (порт 9103);
записывает или читает данные на локальные НМЛ, DVD или файловую систему;
обменивается данными с файловым сервером (по заданию директора;
на каждое задание файловый сервер открывает отдельную сессию);
показывает статус монитору;
должен быть установлен на каждом компьютере, к которому подключено одно из устройств хранения
файловый сервер (file server, client) - получает задания от директора (порт 9102);
читает или записывает данные из локальной файловой системы;
обменивается данными с сервером хранения (по заданию директора);
показывает статус монитору;
должен быть установлен на каждый компьютер, данные с которого необходимо резервировать
директор - основной процесс, который формирует задания согласно расписанию
и управляет серверами хранения и клиентами; обеспечивает интерфейс с РСУБД
для хранения информации о заданиях, томах, файлах и пр.;
информацию о файлах получает с сервера хранения в процессе резервного копирования;
каталог может быть восстановлен с ленты (файла, DVD);
необходимая для восстановления задания информация из каталога может быть сохранена
в текстовый файл (bootstrap);
информация о файлах различных клиентов может храниться в различных БД;
управляется с консоли (порт 9101);
показывает статус монитору; обычно устанавливается один экземпляр на сеть
консоль управления - позволяет управлять директором;
варианты - текстовый (bconsole),
Gnome 2 (bgnome-console, нет преимуществ),
wxWidgets (bwx-console, полезны только выбор файлов из дерева),
Qt4 (bat, полноценный графический клиент);
устанавливается на компьютере администратора и оператора или рядом с директором
монитор (bacula-tray-monitor) - позволяет отслеживать статус директоров,
файловых серверов и серверов хранения
(сворачивается в трей Gnome 2.2 или KDE 3.1); обычно устанавливается на компьютере администратора
или оператора
bacula-web (набор PHP-скриптов для получения красивых отчётов из БД,
поставляется в пакете bacula-gui; не смотрел)
bimagemgr (запись на CD/DVD через веб-интерфейс, поставляется в bacula-gui;
не смотрел)
bacula-rescue (создание загрузочных CD-ROM для восстановления "с нуля";
Bare Metal Recovery (больше похоже на набор для самоделкина,
полностью переделано в версии 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 не может записывать на болванку,
на которой сформирована файловая система (можно проверить попытавшись смонтировать диск).
Полная или быстрая очистка болванки перед первым использованием:
При описании каждого задания указывается какие файлы сохранять (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)
%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 \
-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;} })
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 раз
на быстрой локальной сети; необходимо согласовывать с настройками файловых серверов)
управление НЛМ (рекомендуется предварительное тестирование утилитой 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)
В файле настройки (/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 \
-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)
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)
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=идентификатор-задания] (удалить из каталога
информацию о задании, томе или пуле вместе со всеми зависимостями)
estimate [level=Full|Incremental|Differential] [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=имя-устройства-на-сервере-хранения] [[backup]client=имя-клиента]
[where=куда-восстанавливать] [strip_prefix=] [add_prefix=] [add_suffix=] [regexwhere=]
[pool=имя-пула] [fileset=имя-набора-файлов]
[restoreclient=на-какой-клиент-восстанавливать]
[jobid=идентификатор-задания] [before=YYYY-MM-DD HH:MM:SS | 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] [storage=имя-устройства-на-сервере-хранения]
[when=время-начала] [yes] (запустить задание; если параметров недостаточно, то недостающие
будут запрошены в интерактивном режиме; yes - не запрашивать подтверждение)
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 штук), текущие и запланированные
задания, включая имена предполагаемых томов)
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)
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
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);
при использовании нескольких шаблонов выполняется ИЛИ;
для каталога необходимо указывать завершающий '/')
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), типовой пример:
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)
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 - перемещение (миграция) данных из одного пула в другой
Level
для Backup:
Full
Incremental - файлы, изменившиеся после последнего удачного резервного копирования
любого типа (точнее, имеющие время изменения после времени
начала задания резервного копирования
с нем же именем, тем же набором файлов и тем же клиентом); если директор не нашёл
удачного полного копирования, то задание преобразуется в Full;
любое изменение описания набора файлов превращает его в другой набор
(сравниваются MD5); времена у директора и клиента должны быть синхронизованы
(bacula делает попытку учесть разницу)
Differential - файлы, изменившиеся после последнего полного копирования
VirtualFull - слияние полной резервной копии с последующими копиями изменений
(Synthetic Backup, Consolidation, Virtual Backup, Vbackup) в новую полную
резервную копию в другом пуле (или в том же самом, но об избегании
мёртвых захватов необходимо позаботится самостоятельно), без использования FD;
используется NextPool из описания пула)
для Verify:
InitCatalog (запоминает атрибуты файлов в каталоге, данные не запоминаются)
Catalog (сравнивает атрибуты в каталоге с текущим состоянием файлов)
VolumeToCatalog (сравнивает атрибуты в каталоге с данными на томе)
DiskToCatalog (сравнивает атрибуты файлов при последнем сохранении с текущим
состоянием файлов, задание сохранения указывается директивой Verify Job)
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")
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; если при сохранении в инкрементальном или дифференциальном режиме
обнаруживается, что предыдущее полное сохранение завершено с ошибкой, то делается
полное сохранение; полезно для рабочих станций)
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
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):
--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);
перед выполнением ./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 (улучшенная библиотека выделения памяти, обязательно)
--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-xattr
--with-dbi --with-dbi-driver= --with-db-port
динамическая и статическая сборка (требуются для восстановления "с нуля")
--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-адрес (адрес для получения сообщений)
Предварительно необходимо установить и настроить
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):
запустить "/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, секция каталог
запустить "/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=);
обеспечить правильные права доступа к этому файлу
?обеспечить внешними средствами (например, вторым директором и сервером хранения) создание
текстовой версии БД и её резервирования
Предварительно необходимо установить и настроить
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):
запустить "/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, секция каталог
запустить "/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=);
обеспечить правильные права доступа к этому файлу
?обеспечить внешними средствами (например, вторым директором и сервером хранения) создание
текстовой версии БД и её резервирования
Предварительно необходимо установить и настроить
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):
добавить " -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=);
обеспечить правильные права доступа к этому файлу
?обеспечить внешними средствами (например, вторым директором и сервером хранения) создание
текстовой версии БД и её резервирования
Предварительно необходимо установить 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 не помогает)
запустить "/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, секция каталог
добавить индексов в /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=);
обеспечить правильные права доступа к этому файлу
?обеспечить внешними средствами (например, вторым директором и сервером хранения) создание
текстовой версии БД и её резервирования
совместить статическую сборку (--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 не помогает)
запустить "/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, секция каталог
добавить индексов в /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=);
обеспечить правильные права доступа к этому файлу
?обеспечить внешними средствами (например, вторым директором и сервером хранения) создание
текстовой версии БД и её резервирования
/usr/local/bacula/lib/ (для версии 3.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/
scripts/bacula start, проверить
дырка на порт 9101 компьютера с директором
права доступа к /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
[настроить монитор (на 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
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
Процесс установки (bconsole собирается в любом случае):
развернуть (а также gcc, gcc-c++, openssl-devel, libtermcap-devel, 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 (не собирается консоль)
отредактировать /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)
для 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), так что установить уровень
сжатия не удастся
отредактировать 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 = "файл с открытым ключом этой консоли"
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 добавлена возможность копирования).
Для этого необходимо описать и запустить (возможно из планировщика) управляющее задание
типа 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 можно только переместить, нельзя скопировать
система не следит за блокировкой (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)
в понедельник делаются полные резервные копии данных с рабочих станций
в ночь на вторник они также сливаются на тот же диск
во вторник диск вынимается и вывозится в неизвестном направлении,
а на его место ставится привезённый оттуда второй диск
на следующей неделе цикл повторяется; таким образом у нас имеется хотя бы одна копия
всех данных десятидневной давности (в худшем случае);
правда, она не занесена в БД, но хоть что-то
В данном случае предполагается, что был потерян только один сервер,
а вся сетевая инфраструктура, включая директор bacula и сервер хранения bacula,
остались целыми.
Не рекомендуется пользоваться старыми версиями bacula для восстановления
системы - была ошибка восстановления файлов с несколькими жёсткими ссылками
(права доступа получались несколько странными).
В версии 3 подсистема была полностью переработана (отказались от создания
собственного загрузочного диска в пользу Ubuntu LiveCD, загружаемого с USB флешки),
документация в пакете rescue в каталоге linux/usb, не смотрел.
Подготовка к восстановлению (опробовалось на CentOS 4.6/i386,
CentOS 5.2/x86_64, 2.4.1) должна проводиться до катастрофы:
создание единого загрузочного диска (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
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)
в случае 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)
собирает информацию о файловых системах и сети (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
^C не срабатывает, так что необходима осторожность,
например, при использовании команды ping ;)
?
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)
запустить восстановление с удалённой 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 (много раз ругается на отсутствие контроллера НГМД)
Вводная: предполагается пожар в одной из серверной с уничтожением
всего находящегося в ней оборудования.
Данная серверная в дополнение к обслуживанию локальных клиентов
обеспечивает маршрутизацию между филиалами и доступ в Интернет.
Резервное копирование осуществляется с помощью сервера bacula, находящегося в соседнем филиале.
Подготовительные действия:
!у меня были проблемы с BMR в версии 2.2.8, так что всех клиентов необходимо
перевести на 2.4.1 и сделать полное копирование
?сервера на 2.4.1?
Последовательность восстановления:
!адаптация настройки серверов соседних филиалов
!пропал выход в Интернет и связь с другими филиалами
!DNS сервера перевести в автономный режим
!почта
!восстановление сетевого оборудования, необходимого для подключения к серверу bacula
!канал и оборудование связи с филиалом, в котором находится сервер bacula
!необходимо иметь описание оборудования, монтажную схему и настройки оборудования
!доставить оборудование и кабеля со склада
!монтаж
!настройка
!центральный коммутатор внутреннего сегмента сети
!необходимо иметь описание оборудования, монтажную схему и настройки оборудования
модифицировать скрипт /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
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"
}
}
отдельное расписание (должно происходить сразу после всех работ на
резервируемом директоре; сделать с запасом, т.к. синхронизации нет;
необходимо убедиться, что сервера не копируют каталоги друг друга одновременно):
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=номер_блока-список_номеров-интервал_номеров (физичнские блоки на ленте; не используется)
VolSessionId=идентификатор_сессии-список_номеров-интервал_номеров (задание уникально определяется
парой "время сессии" и "идентификатор сессии" для тома)
JobId=идентификатор_задания-список_номеров-интервал_номеров (идентификатор задания не является
уникальным, если имеется несколько директоров или производилась очистка БД)
Job=имя_задания-список_имён (можно использовать шаблоны)
Client=имя_клиента-список_имён (можно использовать шаблоны)
FileIndex=номер-список_номеров-интервал_номеров (первый файл сессии имеет номер 1)
Для каждой утилиты необходимо задать (с помощью ключа "-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 (можно указывать дважды для увеличения степени болтливости)
учёт удалённых и переименованных файлов при восстановлении (Accurate Backup),
директива Accurate=yes при описании задания, FD получает от директора список файлов,
сохранённых в предыдущих заданиях, для файловых систем с большим количеством файлов
требуется много ОП на клиенте (клиент под Solaris 8 падает)
в дополнение к заданиям миграции добавлены задания копирования задания в другой пул
без использования FD:
ключевое слово copies команды restore позволяет выбрать копию (по умолчанию
берётся первичная резервная копия или ближайшая доступная копия, если первичное
задание было удалено)
критерий выбора PoolUncopiedJobs при описании задания
изменена концепция обработки ACL: ACL для каждой платформы
(AIX, Darwin/OSX, FreeBSD, HPUX, IRIX, Linux, Tru64, Solaris) сохраняются
особым образом и восстанавливаются только для родной платформы
работа с расширенными атрибутами (--disable-xattr), включая SELinux;
для каждой платформы (Darwin/OSX, FreeBSD, Linux, NetBSD) сохраняются
особым образом и восстанавливаются только для родной платформы
(необходимо добавить xattrsupport = yes в Options)
переход на libtool по умолчанию (для статической сборки или сборки "по-старому"
необходимо указать --disable-libtool, --libdir=; например, в RHEL 4.1),
динамический загрузчик должен знать про каталог, в котором лежат .so!
слияние полной резервной копии с последующими копиями изменений
(Synthetic Backup, Consolidation, Virtual Backup, Vbackup) в новую полную
резервную копию в другом пуле (или в том же самом, но об избегании
мёртвых захватов необходимо позаботится самостоятельно), без использования FD
(при запуске задания необходимо указать level=VirtualFull,
используется NextPool из описания пула)
клиент Win64 FD (см. инструкцию)
управление поведением директора при запуске задания с тем же именем
(Duplicate Job Control), директивы при описании задания:
Allow Duplicate Jobs (= no)
Allow Higher Duplicates (= yes) - если дубликаты запрещены, то выбрать
задание с высшим приоритетом
Cancel Queued Duplicates (= yes) - если дубликаты запрещены и в очереди
уже стоит задание с тем же именем, то прервать его
Cancel Running Duplicates (= no) - если дубликаты запрещены и
задание с тем же именем уже выполняется, то прервать его)
аутентификация с использованием TLS вместо CRAM-MD5 (используются ранее
определённые директивы (TLS Enable, TLS Verify Peer и пр.),
включается директивой TLS Authenticate = yes)
bextract умеет извлекать данные в непереносимом формате Win32 на любой платформе
директива Max Full Interval в описании задания позволяет задать максимальный
промежуток времени между полными резервными копиями, при его превышении
резервное копирование изменений превращается в полное копирование
директива Max Diff Interval в описании задания позволяет задать максимальный
промежуток времени между дифференциальными резервными копиями, при его превышении
резервное копирование изменений превращается в дифференциальное копирование
опция Honor No Dump Flag при описании набора файлов (FreeBSD)
опция Exclude Dirs Containing при описании набора файлов позволяет задать
имя файла, присутствие которого в каталоге исключает содержимое каталога из
резервного копирования
система расширений FD;
директивы описания клиента (Plugin Directory, Plugin Options, Plugin Options ACL)
и набора файлов (Plugin); имеются расширения:
bpipe - позволяет использовать любую пару программ
для создания и чтения "псевдофайла" из архива
exchange - MS Exchange Server 2003/2007
возможность доступа к СУБД через libdbi (--with-dbi, --with-dbi-driver=, --with-db-port);
директивы секции Catalog: dbdriver, dbaddress, dbport, dbname, user, password
команда консоли: status slots (содержимое магазина автоподатчика)
команда консоли: list joblog (показать сохранённый в БД журнал задания)
команда @separator для bconsole позволяет задать разделитель команд
новый подход к восстановлению "с нуля" (Bare Metal Recovery) -
Ubuntu LiveCD, загружаемый с USB флешки (документация в пакете rescue в каталоге linux/usb)
директива Allow Mixed Priorities (= no) позволяет приоритетному
заданию начаться, не дожидаясь завершения низкоприоритетного
(д.б. установлено в обоих заданиях)
директива FileRegex в .bsr файле позволяет задать шаблон восстанавливаемых имён файлов
время ожидания FD по умолчанию уменьшено с 30 до 3 минут
поддержка Solaris ZFS/NFSv4 ACL (с возможностью конвертации из UFS в ZFS)
эмуляция виртуальной ленты (Device Type = vtape) для тестирования
улучшения в Bat (?)
секция RunScript позволяет задать несколько выполняемых команд
реализовано усечение тома на NFS
директива описания задания Max Run Sched Time (Max Start Delay + Max Run Time)
убраны директивы Max Wait Time
директивы Full/Diff/Incr Max Run Time позволяют задать
максимальное время выполнения задания в зависимости от его уровня
(Max Start Delay, Max Run Time, Max Wait Time)
директива Scratch Pool в описании пула позволяет задать определённый запасной пул
директива Spool Size при описании задания позволяет задать размер спула
Max Console Connections (= 20)
ускорен dbcheck (orphaned) за счёт создания временных индексов (!)
документация разбита на части (и недописана)
проверка совместимости версии FD и директора
?можно задать отдельную БД для пула (директива Catalog)?
?возможность восстановить только атрибуты файлов?
Изменения 2.4.4 относительно 2.4.1
больше информации о состоянии сервера хранения
исправлено множество ошибок (миграция,
выполнение программ с уникодными именами каталогов под MS Windows)
Изменения 2.4.1 относительно 2.2.8
в значительной мере переписан сервер хранения
предполагается совместимость клиентов 2.0/2.2
с директором и сервером хранения версии 2.4, но лучше проверить заранее
(директор и сервера хранения надо обновлять синхронно)
база данных совместима с 2.0 и 2.2
клиент под MS Windows теперь ведёт себя с монтированными файловыми системами (reparse point)
также, как в Unix/Linux (т.е. их надо указывать явно)
возможность собрать bat без QWT (--without-qwt)
исправлено множество ошибок, в т.ч. проблема при выборочном восстановлении
файлом с жёсткими ссылками
ключ configure --with-db-password
Изменения 2.2.8 относительно 2.2.6
"@имя файла"
@|имя-программы
ключ configure --archivedir переименован в --with-archivedir
Изменения 2.2.6 относительно 2.2.0
исправление критических для ветки 2.x ошибок
требуется GTK 2.10 для сборки Tray Monitor
Изменения 2.2.0 относительно 2.0.3
предполагается совместимость клиентов 2.0 (а 1.38?)
с директором и сервером хранения версии 2.2, но лучше проверить заранее
(директор и сервера хранения надо обновлять синхронно)
формат БД не изменился
версия Win32 не может быть остановлена из tray monitor
gnome-console переименована в bgnome-console
wx-console переименована в bwx-console
требуется "thread safe" версия клиента MySQL
первая версия bat (Bacula Administration Tool), требуется qt 4.2, qwt и qmake
(в FC6 установил из extras: qt4, qt4-devel, qwt, qwt-devel, qt4-x11);
очень соблазнительный вид
обнаружение разрыва соединения между серверами (Heartbeat Interval)
обнаружение изменения размера и времени модификации файлов во время копирования
(CheckFileChanges)
множество оптимизаций
лицензия - GPL2 без модификаций
новые опции ./configure: --enable-bwx-console, --enable-bat, --with-qwt=,
--with-db-name=, --with-db-user=, --enable-batch-insert (для PostgreSQL?)
новые команды в консоли: exec (запуск программ/скриптов),
memory (использование памяти директором),
update recyclepool, update jobid,
.sql, .api, .pwd
новые ключевые слова в консоли: restoreclient (куда пойдёт восстановление),
backupclient (какой клиент восстановливать), regexwhere, recyclepool
новые директивы bconsole.conf: Heartbeat Interval
новые директивы bacula-sd.conf: Client Connect Wait
новые директивы bacula-dir.conf в Director: Heartbeat Interval
новые директивы bacula-dir.conf в Client: Heartbeat Interval, TLS Allowed CN
новые директивы bacula-dir.conf в Storage: Heartbeat Interval
новые директивы bacula-dir.conf в Job: Regex Where, Strip Prefix, Add Prefix, Add Suffex
новые директивы bacula-dir.conf в Pool: Recycle Pool
новые директивы bacula-dir.conf в RunScript: FailJobOnError
новые директивы bacula-dir.conf в FileSet: CheckFileChanges, StripPath
монтирование и размонтирование внешних дисков, если ресурс Device имеет
директиву Removeable Media
конфигурационный файл может быть считан из пайпа
(надо поставить "|" перед именем файла)
ключ '-8' утилиты bsmtp для указания UTF-8
сокеты не восстанавливаются
опять обещано ускорение dbcheck, проверить
Изменения 2.0.3 относительно 2.0.0
директива Client Connect Wait в настройки сервера хранения
SD освобождает FD сразу по получении данных, не дожидаясь окончания записи и занесения в БД
Изменения 2.0.0 относительно 1.38.11
изменён формат БД (скрипт update_bacula_tables)
gconsole не работает
удалена директива настройки директора
"Accept Any Volume" (она всё равно не была реализована)
предполагается совместимость клиентов 1.38
с директором и сервером хранения версии 2, если не используется шифрование и RunScript,
но лучше проверить заранее
(сервера надо обновлять синхронно),
т.к. изменился алгоритм аутентификации по умолчанию
изменился формат хранения хешей MD5 и SHA1 в БД
(необходимо заново выполнить InitCatalog для использования возможностей верификации)
VSS в Win32 включён по умолчанию
ускорение восстановления с диска (прямое позиционирование вместо последовательного чтения),
для восстановления томов, сделанных в старой версии, может потребоваться
"Block Positioning = no" при описании ресурса Device сервера хранения
необходимо явно указывать 'Ignore Case = yes' при описании
клиента в MS Windows
перенос заданий с тома на том (Migration)
шифрование и цифровая подпись на стороне клиента (PKI: RSA+x509,
осторожнее с восстановлением ключей,
имена файлов и аттрибуты не шифруются)
поддержка мобильных USB DVD и дисков (настройка сервера хранения: Requires Mount,
Mount Point, Mount Command, Unmount Command)
использование mingw32 вместо VisualStudio
директор и сервер хранения под Win32
процедура восстановления и утилита bextract позволяет извлекать информацию из
непереносимого формата Win32 под любым клиентом (с потерей ACL)
снято ограничение в 260 символов для имён файлов под Win32
переделана система скриптов выполнения до и после резервирования на сервере и клиенте
(RunScript); скрипты, указанные в ClientRunAfterJob и RunScript,
выполняются сразу, не дожидаясь окончания записи и занесения в БД;
RunAfterJob - после освобождения буферов
поддержка SunOS ACL
ключ "days=" для консольных команд status и nextvol
команда консоли wait (wait jobid=, wait jobuid=, wait job=)
том может быть в состояниях: Enable, Disable, or Archive
(update volume enable=[on|off|archived]),
монтировать можно только тома в состоянии Enable
отчёты можно хранить в БД (Catalog в ресурсе Messages)
использование DVD доведено до работоспособного состояния
относительные имена в команде cd при восстановлении
в настройке консоли можно указывать несколько директоров
замена символов в Job WriteBootStrap (?)
при перенаправлении сообщений можно указывать не только хост, но и порт
директива WhereACL в ACL консоли (default, all, путь) позволяет ограничивать
место восстановления
ключ -n команды bconsole (отключает conio)
команда mount для автоподатчика
дополнительные типы запросов: список томов устройства хранения;
список томов, требующих замены
при описании пула можно указать устройство хранения
опции Maximum Changer Wait, Maximum Open Wait, Maximum Rewind Wait
возможность использовать Python для установки приоритета и уровня задания
сервер хранения может использовать несколько устройств
скрипт bacula разбит на bacula-ctl-dir, bacula-ctl-fd, bacula-ctl-sd
утилита wild для тестирования шаблонов (аналогично regex)
"нехорошие" символы в Win32 заменяются на '_'
опция noatime ресурса FileSet позволяет не изменять время последнего доступа
(отличается от опции keepatime, которая возвращает время последнего доступа в исходное
состояние, но портит ctime)
новый класс сообщений VOLMGMT
изменена процедура восстановления "с нуля"
авторство переведено на FSF Europe
директива "Mail On Success" в ресурсе Messages
директива DriveType (fixed, removable, cdrom, remote)
в опции Include ресурса FileSet при описании Win32 клиентов директора
директива EnhancedWild (yes, no) в опции Include ресурса FileSet
при описании Win32 клиентов директора; модифицирует обработку директив
Wild, WildDir и WildFile
относительные шаблоны при описании Win32 клиентов
расширение фигурных скобок в шаблонах для Win32 клиентов
dbcheck очищает мусор кусками (это должно было помочь ему закончить работу
в разумные сроки; проверял - не помогает)
bweb
Изменения 1.38.11 относительно 1.38.4
расширены возможности команды "update volume"
Device Type = file | tape | dvd | fifo
ключевое слово ujobid (jobid и jobname могут быть не уникальны)
переименованы скрипты запуска в bacula-ctl-dir, bacula-ctl-fd, bacula-ctl-sd
директива enable в описании задания
директивы консоли "enable job=" и "disable job="
команда wait может теперь ожидать завершения конкретного jobid
утилиты bregex и bwild для тестирования шаблонов
экспериментальная реализация регулярных выражений для W32