|
Bog BOS: Сетевая система резервного копирования и восстановления данных bacula
|
Последнее изменение файла: 2024.07.01
Скопировано с www.bog.pp.ru: 2024.11.23
Bog BOS: Сетевая система резервного копирования и восстановления данных bacula
- Общая характеристика системы
- Архитектура системы, основные понятия и компоненты
- Настройка:
- Примеры установки:
- Шифрование трафика
- Перенос сохранённых данных на новое место
- Сохранение и восстановление каталога (БД)
- Формат bootstrap файла
- Автономные утилиты
- Изменения
- Старые примеры установки:
- Установка 5.2.13 на CentOS 6.4 (директор, хранитель, текстовая консоль и клиент)
- Обновление с 5.0.3 до 5.2.6 на CentOS 5.4 x86-64 (директор, хранитель, текстовая консоль и клиент)
- Обновление с 3.0.1 до 5.0.1/5.0.3 на CentOS 5.4 x86-64 (директор, хранитель, текстовая консоль и клиент)
- Установка 3.0.1 на RHEL 4.7 x86-64 (директор, хранитель, текстовая консоль и клиент)
- Установка 2.2.4/2.2.7/2.2.8/2.4.1 на CentOS 5.0/5.2 x86/x86-64 (директор, хранитель, текстовая консоль и клиент)
- Обновление с 1.38.11 до 2.2.5 на CentOS 4.5 x86/x86-64 (директор, хранитель, текстовая консоль и клиент)
- Установка 2.0.3 на CentOS 5.0 (директор, хранитель, консоль и клиент)
- Установка 1.38.4 на CentOS 4.2 и 1.38.11 на CentOS 4.3 (директор, хранитель, консоль и клиент)
- Установка 2.2.4/2.2.7/2.2.8/2.4.1 на FC6 (клиент, консоли и bat)
- Установка 1.38.4 на FC3 (gnome консоль, монитор и клиент)
- Установка клиента 2.0.3/2.2.4/2.2.5/2.2.7/2.2.8/2.4.1/3.0.1/3.0.3/5.0.1/5.0.3/5.2.6 на F10, F8, CentOS/RHEL 5.0/5.1/5.2/5.3/5.4/5.5/6.2 (x86 и x86-64), FC6, CentOS4.4/4.6, FC5, RH8, Solaris 8
- Установка клиента 1.38.4 на CentOS 4.2, FC4, FC3, RH9, RH 5.2, RH 4.2; установка 1.38.10 на FC5; 1.38.11 на CentOS 4.3, FC6
- Ссылки
Сетевая система резервного копирования и восстановления данных bacula
позволяет системному администратору сохранять данные с многочисленных компьютеров
сети на накопители на магнитной ленте, устройства записи на CD/DVD (удалено),
файловую систему (файлы имитируют ленточные тома) или облако (имитирует файловую систему ;),
а также искать и восстанавливать (проверять) данные.
Имеется поддержка ленточных библиотек, автозагрузчиков со считывателем штрихкода с динамической разметкой томов
(метки тома в форматах IBM и ANSI, утилита проверки совместимости).
Возможность кеширования данных в файловую систему при записи на ленту и в облако.
От простейших средств резервного копирования (tar, dump, rsync) отличается наличием каталога и правил.
Каталог (данные о клиентах, заданиях, томах, сохранённых фалах) хранится в реляционной СУБД
(PostgreSQL, MySQL/MariaDB, SQLite - только для тестирования, удалено), возможность кеширования метаданных в файловую систему перед записью в СУБД.
Правила определяют сроки хранения и обеспечивают сохранность скопированных данных от преждевременного удаления.
Система хорошо масштабируема.
Управляющий директор, СУБД, сервер хранения, сервер доступа к файловой системе (клиент), монитор и консоль выделены
в отдельные процессы и могут быть в нескольких экземплярах расположены в различных узлах сети.
При этом сохраняется возможность единой точки управления и мониторинга.
Компоненты могут быть легко разнесены в нужные места сети или удалённых сетей,
интерфейс прост, описан и управляем с точки зрения сетевого экрана.
Имена файлов произвольной длины (для Win32 в версии 1 не длинее 260 - исправлено).
Хранение атрибутов файлов: времена создания (не используется при восстановлении), изменения и доступа, владелец и группа,
права доступа, POSIX ACL (в т.ч. для NTFS), с версии 2 - ACL SunOS.
В версии 3 - атрибуты для каждой платформы сохраняются особым образом и
восстанавливаются только для родной платформы, добавлена поддержка Solaris ZFS/NFSv4 ACL (с возможностью конвертации из UFS в ZFS).
Расширенные атрибуты (xattr, libattr, getxattr, setxattr) сохраняются, начиная с версии 3 (включая атрибуты SELinux и Samba).
Начиная с версии ? возможно восстанавливать файлы с неродной платформы, но без атрибутов.
Для каждого файла хранится также имя клиента и имя носителя.
Возможность сохранения открытых файлов NTFS (с помощью VSS - Volume Shadow Copy;
W98 и W2000 не имеют VSS!, только одна задача может использовать VSS!).
Поддержка имён файлов в UTF-8 для Unix/Linux и UTF-16 для Win32 (преобразуется в UTF-8 при хранении).
Возможность сохранять и восстанавливать разделы диска (только целиком)
и fifo-файлы (это позволяет дописывать свои программы хранения и восстановления).
Имеется возможность добавлять свои расширения (в комплекте расширения bpipe и был exchange).
Процесс резервирования автоматизирован с помощью единого планировщика (типа cron, т.е. туп).
Возможно параллельное выполнение нескольких заданий, включая запись в один том.
Приоритизация заданий (подход специфический, рекомендуется изучить перед планированием использования).
Отсутствует автоматический запуск пропущенных заданий (есть повтор неудавшегося задания
и автоматическое преобразование резервного копирования изменений в полное копирование).
Ограничения на размер файлов, файловых систем и разделов - не более 4 миллиардов файлов в СУБД.
Если надо более, то необходимо разбить БД на несколько (по клиентам)
или перед сборкой переключить FileId с 32-битного на 64-битное представление (в версии 3 переключено по умолчанию).
Есть поддержка многотомных архивов.
Имеется (имелась?) отдельная процедура резервного копирования
с целью восстановления "с нуля" (загружаемый CD).
При этом восстанавливаются не только данные, но и большинство системной информации
(разбиение на разделы, LVM). К сожалению, не восстанавливаются атрибуты файловых систем
и софтовый RAID (md). Пользоваться невозможно, в версии 3 полностью переделано на загрузочную флешку.
Отсутствуют "тяжелые" механизмы типа CDP (имеется имитация с использованием inotify), LAN-free, Serverless,
снятие копии со снапшота (что-то появилось, но не для всех), дедупликация (возможно с помощью внешних средств - ZFS и пр.,
требуется дополнение без исходных текстов, совместимое только с предкомпилированным
компанией Bacula Systems пакетом - aligned-sd.so, не пробовал, но эффективность сомнительна;
данные хранятся отдельно от метаданных и маленьких файлов с выравниванием каждого файла на границу записи),
автоматическое распараллеливание копирования с одного клиента (мне не удалось увидеть скорость потока более 270МБ/сек: LZO, настоящий SSD).
Миграция заданий между пулами реализована в версии 2.2 (только перемещение и только внутри одного сервера хранения).
В версии 3 добавлена возможность копирования заданий (опять внутри одного сервера хранения?).
В версии 3 появилась функция консолидации архивов.
В версии 9 доделана возможность создания виртуальной полной копии (создаётся на сервере
из полной копии и изменений) с автоматическим удалением ненужного.
Возможность запускать скрипты до и после задания на клиенте и сервере хранения.
Это позволяет создавать свои агенты для резервирования и восстановления БД.
Средств управления хранением данных (иерархическое хранения, учёт жизненного цикла) и работы с архивами нет.
Сжатие производится пофайлово на стороне клиента (gzip или LZO или zstd, однопоточное).
Каждый блок (около 64 КБ, размер задаётся) тома содержит контрольную сумму.
Возможность ограничения трафика появилась в версии ?.
Формат архива томов - свой (менялся в процессе развития).
Имеются автономные утилиты получения оглавления, восстановления файлов (до версии 3 с ограничениями),
восстановления БД по архивам, а также описание формата архива (и исходные тексты ;).
Основным интерфейсом управления является командная строка с выбором из меню при нехватке параметров.
В версии 2.2 появился многообещающий графический интерфейс bat (остался многообещающим - требуется осторожность при больших установках).
Графические консоли управления в предыдущих версиях бесполезны.
Имеется веб-интерфейс baculum (не освоено, т.к. предыдущие варианты оставили плохие воспоминания и были заброшены).
Интерактивное восстановление файлов с возможностью выбора нужной копии.
Имеется возможность указывать исключения в списке файлов с помощью регулярных выражений.
Автоматический запрос оператору на установку нужного тома.
Извещения о проблемах и необходимости ручного вмешательства по
email (различные сообщение на различные адреса для различных событий для различных групп серверов) и syslog.
Для индивидуального применения лучше подыскать другую программу
(эта слишком тяжела в развёртывании), зато после настройки работает в полностью автоматическом режиме.
Плохо переносит резкие смены конфигурации (как убрать все упоминания об удалённом клиенте,
его заданиях и томах? в версии 9.2.1 появилась команда "delete client=имя", недоделанная).
Плохая обработка ошибок при работе с диском (заполненный диск,
глюки с созданием нового тома при наличии файла) и сетью, перезагрузке серверов и клиентов,
завершившиеся с ошибкой задания остаются в БД навсегда (и, вообще, БД не чистится от мусора).
Хорошо хоть оператора извещает.
Много ручной работы (беготня по меню),
нет создания нескольких копий одновременно, нет консолидации частично заполненных носителей,
нет автоматического обнаружения новых серверов, файловых систем, СУБД.
Ручная установка как серверов, так и клиентов.
Средства перехода на новую версию - вручную.
Своя система аутентификации и авторизации для администраторов с возможностью
разбивки по ролям и областям ответственности, учёт действий пользователей.
Для аутентификации между процессами используется CRAM-MD5,
обеспечивающий достаточный (?) уровень защиты,
пароли не передаются, но хранятся в открытом виде.
Передаваемые между серверами данные можно шифровать с помощью TLS.
В версии 3 добавлена возможность аутентификации с помощью TLS.
Шифровка данных на стороне клиента в версии 2 (метаданные не шифруются).
SSL при обращении к СУБД с версии 7.
Шифрование томов на сервере хранения в версии 15.
Высокая скорость (наличие каталога с информацией о местонахождении
требуемого файла) и лёгкость восстановления (поиск по имени, времени).
Слабая защита "от дурака" в текстовой версии.
Независимость восстановления от платформы в версии 2 (с потерей атрибутов).
Возможность восстановления на другой хост, другой каталог (и возможность ограничить это).
Информация о заданиях, томах и файлах сохраняется во внешней СУБД
(MySQL от 4.1 (8 для bacula 15), PostgreSQL от 7.4 (9.6 для bacula 15), SQLite от 2.8.16 (SQLite 3 для bacula 15)):
какой файл с какого клиента был записан на какой носитель и когда.
Возможность восстановления каталога из резервной копии и с носителя.
В версии 3 добавлна возможность доступа к СУБД через libdbi, потом удалена.
Управление и учёт носителей (сколько времени хранить, где находится, что содержит);
метки на носителях (физические и логические), отслеживания перемещений нет.
Группировка томов в пулы со своими свойствами и назначением.
Имеется режим верификации, который позволяет сопоставить атрибуты
файлов в каталоге с текущим состоянием (в т.ч. MD5 или SHA1 хеши).
В версии 3 появилась возможность отслеживания
удаления и переименования файлов после сохранения (иначе при восстановлении удалённые файлы появятся вновь).
Написание скриптов на python (2.2, 2.3, 2.4 или 2.5) - выкинули.
Серверная часть для Linux, FreeBSD 5.0 и выше, Solaris 8 и выше, MS Windows 2008.
Клиенты для Linux, FreeBSD, Solaris, Win32 (W98, Me, NT, 2000, XP, 2003, Vista),
Win64 (2008, Vista, Windows 7, Windows 8), MacOS X/Darwin, OpenBSD, Irix (?), Tru64 (?), AIX (?), HPUX (?).
Документация сильно отстаёт от реальности, например, директора под MS Windows уже нет, а сервер хранения включён в комплект клиента.
Система поставляется в виде исходных текстов, что позволяет адаптировать её
под любую системы при наличии компилятора C++ не хуже gcc 4.3 (для версии 15).
Требуется LD_ASSUME_KERNEL=2.4.19 для запуска в RH с ядром 2.4 (проблема с нитями).
Распространяется с открытыми источниками (почти GPL2 в версии 1 и просто GPL2 в версиях 2 и 3,
с небольшими исключениями, сейчас Affero GPL Version 3).
Документация под лицензией CC-BY-SA.
Начальные разработчики - John Walker и Kern Sibbald (2000), передан Free Software Foundation of Europe.
Создана фирма для поддержки пользователей -
Bacula Systems S.A. (Kern Sibbald).
Документация написана для версии 1 ("the current production Bacula release is version 1.38.11"), к которой приложена пачка изменений.
Последняя бесплатная версия под MS Windows - 5.2.10 (вроде одумался и исполняемые файлы для версии 9 и выше имеются).
Загрузка пакетов после регистрации, но без SMS (не пробовал).
Работа с внешними снимками (LVM, ZFS, btrfs) и внешней дедупликацией (Deduplication Optimized Volumes, Aligned Volumes)
только с помощью бинарных пакетов (bsnapshot и aligned), которые совместимы только с фирменными бинарными сборками.
Недовольные коммерциализацией и медленным развитием сделали форк - bareos (был суд),
тоже не очень бурно развивается, плагины и рефакторинг, рефакторинг и платные плагины (версия 16.2).
Квоты, дедупликация (такая же ерунда как в bacula?), аудит (?), стыковка с Gluster и Ceph, инициация со стороны клиента (?),
Always Incremental.
При восстановлении наблюдалась скорость более 3 ГБ/сек.
Имеются проблемы при работе с большим количеством файлов в задании - тормозит как СУБД (MySQL),
так и директор, особенно при восстановлении при большом количестве инкрементных заданий.
Время обработки данных до начала восстановления (52 миллиона файлов, Xeon 3.5 GHz,
ОП более чем достаточно, версия 5.2.13, Accurate в Job, "restore all done", директор работает в 1 поток - создаёт restore.bsr,
экономит количество монтирований томов?):
- Full: 12 минут MySQL и 0 минут директор
- Full + Incremental: 12 минут MySQL и 22 минуты директор
- Full + 2 * Incremental: 12 минут MySQL и 44 минуты директор
- Full + 3 * Incremental: 12 минут MySQL и 91 минута директор
- Full + 4 * Incremental: 12 минут MySQL и 215 минут директор
- Full + 5 * Incremental: 12 минут MySQL и 236 минут директор
Я не использовал НМЛ при работе с bacula.
Система состоит из набора сервисов 5 типов и СУБД (может быть один или несколько сервисов
каждого типа, расположение различных сервисов в сети определяется администратором):
- сервер хранения (storage server, SD, bacula-sd) - получает задания от директора (порт TCP/9103);
записывает или читает данные и метаданные файлов на локальные НМЛ, файловую систему или облако;
обменивается данными с файловым сервером (по заданию директора;
на каждое задание файловый сервер открывает отдельную сессию с одноразовым паролем);
показывает статус монитору;
должен быть установлен на каждом компьютере, к которому подключено одно из устройств хранения
- файловый сервер (file server, client, FD, bacula-fd) - получает задания от директора (порт TCP/9102);
читает или записывает данные и метаданные из локальной файловой системы;
обменивается данными с сервером хранения (по заданию директора);
показывает статус монитору;
должен быть установлен на каждый компьютер, данные с которого необходимо резервировать
- директор - основной процесс (DIR, bacula-dir), который формирует задания согласно расписанию
и управляет серверами хранения и клиентами; обеспечивает интерфейс с РСУБД
для хранения каталога с информацией о заданиях, томах, файлах и пр.;
информацию о файлах (метаданные) получает с сервера хранения в процессе резервного копирования;
каталог может быть восстановлен с ленты (файла, облака);
необходимая для восстановления задания информация из каталога может быть сохранена
в текстовый файл (bootstrap, *.bsr) для возможности восстановления без доступа к каталогу (bextract);
информация о файлах различных клиентов может храниться в различных БД;
управляется с консоли (порт TCP/9101);
показывает статус монитору; обычно устанавливается один экземпляр на сеть (если РСУБД справляется),
но можно поставить отдельный директор для каждого сервера хранения
- консоль управления - позволяет управлять директором;
варианты - текстовый (bconsole),
Gnome 2 (bgnome-console, нет преимуществ, выброшен),
wxWidgets (bwx-console, полезны только выбор файлов из дерева, выброшен),
Qt4/Qt5 (bat, почти полноценный графический клиент);
устанавливается на компьютере администратора и оператора или рядом с директором;
веб-интерфейс (было много "подходов к снаряду", сейчас baculam);
- монитор (bacula-tray-monitor) - позволяет отслеживать статус директоров,
файловых серверов и серверов хранения
(сворачивается в трей Gnome 2.2 или KDE 3.1); обычно устанавливается на компьютере администратора
или оператора; для больших установок непригоден; не разворачивал в версии 5 и выше
Дополнительные компоненты:
- вспомогательные автономные утилиты (bls, bscan и др.)
- bacula-web (набор PHP-скриптов для получения красивых отчётов из БД,
поставляется в пакете bacula-gui; не смотрел)
- bimagemgr (запись на CD/DVD через веб-интерфейс, поставляется в bacula-gui;
не смотрел)
- bacula-rescue (создание загрузочных CD-ROM для восстановления "с нуля";
Bare Metal Recovery (больше похоже на набор для самоделкина,
полностью переделано в версии 3)
- bweb (управление и получение информации и статистики через веб-интерфейс;
в версии 2; набор perl скриптов; не смотрел)
- brestore (в версии 2; графическая утилита восстановления; Perl/GTK/Glade;
не смотрел)
- baculam - веб-интерфейс вместо всех предыдущих; не смотрел
- BWeb Management Suite - веб-интерфейс платной версии
В качестве РСУБД можно использовать MySQL/MariaDB
(версии от 4.1 (от 8 для bacula 15) ; желательно не в режиме совместимости ANSI/ISO;
при установке из пакетов потребуются пакеты mysql, mysql-server и mysql-devel;
при самостоятельной сборке требуется указать --enable-thread-safe-client),
PostgreSQL (не пробовал; 9.6 для bacula 15) или SQLLite (в крайнем случае или для тестирования).
Автор рекомендует использовать PostgreSQL, если требуется более 2 миллионов файлов на задание в режиме Accurate.
В версии 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
Основной единицей работы является задание (Job).
Директор даёт каждому заданию идентификатор - уникальный в рамках этого директора номер - JobId.
Уникальный (относительно) идентификатор задания состоит из идентификатора задания и времени запуска.
Сервер хранения даёт каждой сессии с клиентом (заданию) идентификатор VolSessionId, который образует
уникальный (относительно) идентификатор сессии в совокупности с временем сессии (VolSessionTime).
Типы заданий
- Backup
- Restore
- Admin (для запуска скриптов)
- Migration (перемещение сохранённых данных с одного тома в другой)
- Copy (копирование сохранённых данных с одного тома в другой)
- Verify
- Archive
- внутренние работы
- соединение с консолью
При описании задания определяются:
- что сохранять
- откуда - клиент (Client)
- какие файлы - набор файлов (FileSet)
- куда сохранять
- сервер хранения (Storage)
- пул (Pool, не том!), подходящий том из пула выбирается директором
- каталог для метаданных (Catalog)
- время запуска (Sheduler), директор заранее планирует последовательность выполнения заданий и монтирует тома
Запуск задания производится автоматически планировщиком или вручную с консоли,
директор обращается к файловому серверу и серверу хранения, файловый сервер обращается к серверу хранения
(если не используется "SD calls Client") и передаёт данные и метаданные,
сервер хранения передаёт полученные метаданные директору для включения в каталог.
Типы заданий резервирования:
- полное - все файлы
- дифференциальное - файлы, изменившиеся после последнего удачного полного резервирования
(точнее, имеющие время изменения после времени начала задания резервного копирования
с тем же именем, тем же набором файлов и тем же клиентом)
- инкрементальное - файлы, изменившиеся после последнего удачного резервирования любого типа
- виртуальное (Virtual Full) - консолидация имеющихся данных полного и инкрементального резервного
копирования в новую полную копию без обращения к клиенту
Информация хранится в БД ограниченное время. Можно отдельно задать
периоды хранения информации о файлах (определяется в описании клиента при настройке директора),
заданиях (при удалении задания удаляется информация о связанных с ним файлах;
определяется в описании клиента при настройке директора) и томах (определяется в описании пула
при настройке директора, вместе с информацией о томе удаляется информация о заданиях и файлах).
Срок хранения информации о файлах и заданиях (берутся из текущих настроек, не из БД) обычно проверяется в конце задания
резервирования для данного клиента. После удаления информации о файлах из каталога можно
восстановить только всё задание целиком (или необходимо предварительно поменять параметры хранения
и восстановить каталог утилитой bscan).
Консоль имеет команды ручного удаления: prune (с учётом времени хранения) и purge (без учёта).
Рекомендуется ежегодно выполнять dbcheck (удаление мусора) и
OPTIMIZE TABLE в MySQL (или mysqldump с последующим восстановлением).
Данные сохраняются на тома (бобина магнитной ленты, файл, облако).
Имя тома может состоять из букв, цифр и символов "-_:.".
На один том можно записывать произвольное количество заданий (регулируется настройкой).
Одно задание может быть разбито на несколько томов, если ен помещается на один.
Имя файла является частью метки файлового тома, так что переименовывать файлы нельзя.
Тома группируются в пулы томов: в описании задания указывается имя пула, а не конкретного тома.
Типы пулов:
- Backup (здесь хранятся данные)
- Scratch (резервные тома, при потребности перемещаются в нужный пул)
- Recycle (тома после очистки)
В начале каждого тома пишется метка тома, которая позволяет избежать установки неправильной ленты.
Метка тома содержит: признак метки, версию формата метки, время создания метки, время первой записи,
имя тома, имя предыдущего тома (?), имя пула, тип пула, MediaType, имя хоста, имя программы, версия программы.
В начале каждого задания пишется метка сессии: признак метки, версию формата метки, идентификатор задания,
время, номер тома в последовательности (?), имя пула, тип пула, имя задания, имя клиента, уникальное имя задания,
имя набора данных, тип задания, уровень задания, MD5 описания набора файлов.
В конце задания пишется метка сессии, содержащая число файлов, число байт, начальный блок, конечный блок,
начальный файл, конечный файл, количество ошибок, код завершения.
Параметры пула задаются при настройке директора (записываются в каталог при запуске директора
или командой 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 для интерпретатора python)
или достигнут разрешённый максимум числа томов, то bacula требует вмешательства оператора.
При использовании автоподатчиков и ленточных библиотек bacula стремится минимизировать
ручное вмешательство. Имеется возможность создать специальный пул Scratch, тома из которого
автоматически передаются в требуемый пул (настройки тома берутся из текущего пула).
Состояние тома можно узнать командой консоли "list volumes".
Удалить вручную информацию о заданиях и файлах на этом томе без проверки сроков хранения
можно командой консоли "purge jobs volume": (том переводится в состояние очищенного - Purged),
с проверкой сроков хранения - prune.
Удаление тома из каталога производится командой: delete volume (у меня удаление тома занимает 5 минут;
размер БД более 4 ГБ).
Содержимое тома делится на блоки, блок состоит из заголовка блока (метка, размер,
контрольная сумма, номер, идентификатор сессии, время сессии) и последовательности записей.
Чтение и запись производится блоками (Maximum block size?), содержащими данные одного задания.
Каждый файл внутри задания получает номер от клиента, начиная с 1 (FileIndex).
Для файла хранится несколько потоков различного типа (создаются и разбираются клиентом) - атрибуты, содержимое файла и т.д..
Каждая запись содержит заголовок записи (индекс файла, тип сессии, размер) и данные.
Обмен между сервером хранения и клиентом производится записями (Maximum Network Buffer Size?).
Потоки (частично):
- 1 - аттрибуты Unix
- 2 - несжатые данные
- 3 - MD5 файла
- 4 - сжатые gzip данные
- 5 - расширенные аттрибуты Unix
- 6 - разреженные данные
- 7 - разреженные данные, сжатые gzip
- 10 - SHA1 файла
- 11 - Win32 BackupRead data
- 12 - Win32 BackupRead data, сжатые gzip
- 13 - MacOS fork data
- 14 - HFS+ аттрибуты
- 15 - UNIX ACL
- 16 - Default UNIX ACL
- 17 - SHA-256
- 18 - SHA-512
- 19 - подписанная контрольная сумма
- 20 - зашифрованные данные
- 23 - зашифрованные сжатые gzip данные
- 29 - сжатые чем-то данные
- 30 - сжатые чем-то разреженные данные
- 31 - сжатые чем-то Win32 BackupRead data
- 32 - зашифрованные сжатые чем-то данные
- 33 - зашифрованные сжатые чем-то Win32 BackupRead data
- 1007 - Linux ACL default
- 1008 - Linux ACL access
- 1998 - расширенные аттрибуты Linux
При описании каждого задания (Job) указывается какие файлы и как сохранять (FileSet),
откуда их сохранять (Client), когда сохранять (Shedule), куда сохранять (Pool, Storage). Кроме заданий на
сохранение можно описывать задания на восстановление, верификацию и администрирование.
Каждый сервис имеет собственный файл настройки, имя которого можно задать
при запуске (ключ "-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.
Каждый конфигурационный файл состоит из "ресурсов" различных типов.
Ресурс состоит из имени типа ресурса и перечня директив в фигурных скобках.
Каждая директива располагается на отдельной строке и состоит из имени директивы
и значения, разделённых знаком равенства.
Длина строки ограничена 499 байтами (2000?) до версии 7.0.
Пробелы в имени являются незначащими, прописные и строчные буквы не различаются.
Значение, содержащее пробелы и прочие "нехорошие" символы, необходимо заключать в кавычки.
Обратная косая черта маскирует специальное значение следующего символа.
Пустые строчки и символы от знака '#' до конца строки игнорируются.
Символ ';' означает конец директивы, далее может идти следующая директива.
Конструкция '@абсолютное-имя-файла' на месте любой лексемы включает содержимое указанного файла.
Конструкция '@|sh -c команда' позволяет сгенерировать список включаемых файлов.
Каждый ресурс должен иметь директиву Name (с уникальным значением)
и может иметь директиву Description (должно показываться оператору, но непоказывается даже в команде show).
Например:
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 (всегда 30 дней), quarters (всегда 91 день), years (всегда 365 дней);
можно использовать составные значения - "5 min 30 sec")
Общие ключи запуска серверов:
- -c имя-конфигурационного-файла (по умолчанию имя-программы.conf в текущем каталоге)
- -t (проверить синтаксис файла настройки и завершить работу)
- -f (не отвязываться от терминала)
- -d уровень-отладки (от 0 до 99, выводится в syslog)
- -u имя-пользователя (после запуска сбрасывать привилегии)
- -g имя-группы
- -s (не перехватывать сигналы)
- -i (соединение произошло через inetd/xinetd)
- -v
- -?
Во всех файлах настройки задаётся ресурс Messages,
который управляет рассылкой сообщений, в зависимости от типа сообщения и имени задания.
Можно задавать несколько ресурсов Messages для заданий различного типа
(имя ресурса Messages указывается при описании задания).
Сообщение может быть отправлено в несколько мест назначения (в syslog и по e-mail) или не отправлено никуда.
Рекомендуется настраивать файловые сервера и сервера хранения так, чтобы
все сообщения пересылать директору - это позволяет централизовать обработку сообщений.
Каждое сообщение имеет один из следующих типов:
- info
- warning
- error (задание продолжает выполняться)
- fatal (задание пришлось снять)
- terminate (сервер остановлен)
- saved (?; список скопированных файлов; не надо посылать эти записи на консоль или директору!)
- notsaved (список файлов, которые не удалось скопировать)
- skipped (список файлов, которые были пропущены при копировании согласно настройке;
не надо посылать эти записи на консоль, в журнал или почту)
- mount (требования к оператору смонтировать том)
- restored (список восстановленных файлов; в формате "ls -l")
- all (не включает saved)
- security (нарушения авторизации, реализовано в 2.2)
- alert (проблема с лентой)
- volmgmt (не реализовано)
Директивы:
- Name (это имя указывается в директиве Messages описания задания;
имя по умолчанию задаётся в директиве Messages основного ресурса)
- MailCommand (команда отправки письма; например,
"/usr/local/bacula/sbin/bsmtp -h SMTP-сервер -f \"\(Bacula\) %d\" -s \"Bacula: %t %e of %c %l\" %r";
макроподстановки:
- %% - %
- %c - имя клиента
- %d - имя директора
- %e - код завершения (OK, Error, Fatal)
- %i - идентификатор задания
- %j - уникальное имя задания
- %l - тип резервирования (Full, Incremental, Differential, Base)
- %n - имя задания
- %r - получатели сообщения
- %t - тип задания (Backup, Restore, ...)
- OperatorCommand (команда для передачи сообщений оператору)
- какие сообщения куда посылать (в качестве элемента списка типов сообщений можно
указывать отрицания: "all, !saved, !skipped"):
- stdout (в качестве параметра указывается список типов сообщений через запятую)
- stderr (в качестве параметра указывается список типов сообщений через запятую)
- console (в качестве параметра указывается список типов сообщений через запятую;
имеется в виду консоль bacula)
- director (в качестве параметров указывается имя директора (пока игнорируется), знак '=',
список типов сообщений через запятую)
- file (в качестве параметров указывается имя файла, знак '=',
список типов сообщений через запятую; файл перезаписывается)
- append (в качестве параметров указывается имя файла, знак '=',
список типов сообщений через запятую; надо регулярно чиститься, например,
поместить отредактированный scripts/logrotate в /etc/logrotate.d/bacula;
для обработки смотри scripts/logwatch/)
- syslog (в качестве параметров указывается facility
(пока игнорируется и сообщения идут с типом DAEMON и уровнем ERR), знак '=',
список типов сообщений через запятую)
- mail (в качестве параметров указывается список получателей через запятую, знак '=',
список типов сообщений через запятую)
- mail on error (в качестве параметров указывается список получателей через запятую, знак '=',
список типов сообщений через запятую)
- mail on success (в качестве параметров указывается список получателей через запятую, знак '=',
список типов сообщений через запятую)
- operator (в качестве параметров указывается список получателей через запятую, знак '=',
список типов сообщений через запятую; сообщения не группируются, а посылаются поштучно)
- catalog (в качестве параметра указывается список типов сообщений через запятую;
записываются в СУБД в таблицу Log; очищается одновременно с удалением записи о задании)
TLS.
Во всех файлах настройки (директор, сервер хранения, клиент, консоль)
могут быть заданы директивы, обеспечивающие
шифрование передачи данных (не хранение!) с помощью TLS и системы сертификатов PKI
(не путать с директивами PKI, обеспечивающими шифрование хранения!).
Не поддерживается режим анонимного согласования Diffie-Hellman.
Имеется возможность использовать TLS для аутентификации вместо CRAM-MD5.
В данном описании клиентом называется тот, кто обращается к серверу, а сервером - тот кто отвечает на запросы клиента.
Директивы (пример использования):
- TLS Enable ("no"; консоль-директор: "status dir: Console connected using TLS";
директор-хранение: ?; директор-клиент: ?; клиент-хранение: ?;
если отключено, то остальные директивы, включая TLS Require, молча игнорируются)
- TLS PSK Enable (yes; в качестве PSK (Pre-Shared Key) используется пароль)
- 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 настроек клиента);
кстати, по умолчанию клиент обращается к серверу хранения, а не наоборот;
требуется в контексте сервера;
требуется в контексте клиента, если сервер настроен в режиме TLS Verify Peer
- TLS Key (имя файла, содержащего соответствующий сертификату незашифрованный приватный ключ настраиваемого субъекта;
в PEM формате (DER в Base64);
может содержать зашифрованный приватный ключ, если субъект является только клиентом (?))
- TLS Verify Peer (раньше "no", теперь "yes";
субъект в роли сервера будет требовать и проверять что сертификат клиента подписан правильным CA
и Common Name соответствует Address (откуда адрес в роли сервера?);
нельзя указывать в настройках консоли и в разделе FileDaemon настроек клиента и в разделе Storage настроек директора)
- TLS Allowed CN = список-через-запятую (""; субъект в роли сервера будет требовать и проверять сертификат клиента и
допускать только клиентов с указанным Common Name (при включённом TLS Verify Peer); директиву можно использовать несколько раз;
если не указать, то будет приниматься любой клиент, сертификат которого подписан подходящим CA;
при использовании в контексте клиента CN проверяется невзирая на TLS Verify Peer)
- TLS CA Certificate File (имя файла, содержащего сертификат[ы] CA в PEM формате (DER в Base64))
- TLS CA Certificate Dir (имя каталога, содержащего файлы с сертификатами CA;
имена файлов должны соответствовать OpenSSL хешам сертификатов с суффиксом ".0" )
- TLS DH File (имя каталога, содержащего файлы с параметрами Diffie-Hellmanв PEM формате ("openssl dhparam -out dh4096.pem -5 4096");
обеспечивает усиление защиты)
- TLS Authenticate (no; использовать TLS для аутентификации вместо (после?) CRAM-MD5,
при этом шифрование передачи отключается; с версии 3)
В файле настройки (/usr/local/bacula/etc/bacula-sd.conf)
должны быть описаны следующие ресурсы:
- Storage (описание, ровно один ресурс)
- Name (имя должно быть уникально, используется директором)
- Description?
- Working Directory (/usr/local/bacula/var, должны быть права на запись для baculas (или группы bacula для совмещения с директором)
и не должно быть прав на чтение для посторонних; сюда же по умолчанию кешируются атрибуты и данные)
- Pid Directory (/var/run, /run, systemd вмешивается в процесс)
- Dedup Directory (требуется для Global Endpoint Deduplication? надо много места)
- Dedup Index Directory (совпадает с DedupDirectory)
- Heartbeat Interval (300; в секундах;
сервер хранения регулярно посылает маркер клиенту;
необходим для борьбы со слишком умными маршрутизаторами,
которые закрывают соединение по истечению интервала неактивности,
при необходимости вмешательства оператора для монтирования ленты неактивность может быть длительной)
- Client Connect Wait (30 minutes до версии 3, 3 minutes в версии 3; в секундах; сколько времени ждать клиента после извещения от директора)
- Maximum Concurrent Jobs (20; заданием считается также запрос состояния, так что не надо уменьшать до 1)
- SDPort (9103)
- SDAddress (по умолчанию прослушиваются все доступные адреса)
- SDAddresses (более сложная форма задания адресов и портов для ipv4, ipv6 и др., например:
SDAddresses = { ipv4 = { addr = 192.168.0.1; port = http;} })
- ?Allow Compression = Yes (управление сжатием с точностью до сервера хранения)
- ?Plugin Directory (/usr/local/bacula/lib)
- Comm Compression (yes; сжимать управляющие сообщения по возможности)
- Director (аутентификационная информация для проверки директора или монитора;
для каждого директора или монитора нужен отдельный ресурс)
- Name (имя директора, которому позволено управлять этим сервером хранения)
- Password (пароль, который он должен предъявить; указывается в ресурсе Storage
в настройках директора)
- Monitor (no; если "yes", то директор сможет только узнать статус сервера)
- Device (описание устройства хранения; для каждого устройства - отдельный ресурс;
каждое устройство может монтировать только один том, даже если это файл;
так что при желании параллельно читать и записывать файлы в одном каталоге
необходимо описать достаточно устройств для этого каталога и иметь несколько ресурсов
Storage в настройках директора или организовать виртуальную библиотеку из нескольких устройств)
- Name (логическое имя, указывается директором в запросе напрямую директивой Device ресурса Storage директора;
или это имя указывается в описании библиотеки, а имя библиотеки указывается директором в директиве Device ресурса Storage)
- Device Type (bacula-sd может и сама догадаться о типе устройства, но тогда точка монтирования должна существовать всегда,
что неверно для автоматически монтируемых USB):
- File
- DVD (удалён?)
- Tape
- FIFO ("Always Open" д.б. No; надо использовать команду add вместо label)
- VTape (эмуляция ленты для тестирования, начиная с версии 3, удалён?)
- Aligned (требуется дополнение aligned-sd.so - только в бинарном виде и совместимо только с собранными фирмой бинарниками;
File Alignment = размер-блока-дедупликации (recordsize для ZFS, а сжатие?), Padding Size, Aligned Device, Minimum Aligned Size)
- Dedup (устройство хранения умеет дедуплицировать)
- Cloud
- Archive Device (имя устройства хранения НМЛ (/dev/nst0, /dev/hdc), DVD (уже нет?) или абсолютное имя каталога (/backup);
для НМЛ необходимо выбирать имя устройства, которое обеспечивает "неперематываемое" поведение в стиле Berkeley I/O;
при указании имени каталога в качестве имени файлов используются имена томов;
для FIFO файла директива RunBeforeJob должна запускать программу, которая будет читать из FIFO, а при восстановлении записывать в FIFO
(только если директор и сервер хранения работают на одном компьютере);
для FIFO надо использовать команду add вместо label, т.к. читать нельзя)
- Enable=yes
- Media Type (логический тип носителя; указывается директором в запросе;
используется при восстановлении для определения сервера хранения, способного прочитать том;
каждое устройство для записи в определённый каталог должно иметь соответствующий каталогу Media Type,
т.к. в БД хранится только Media Type, а не имя устройства)
- Maximum Concurrent Jobs (?; максимальное число одновременно выполняемых заданий на устройстве;
пока предел не превышен задачи будут назначаться на одно и то же устройство)
- Always Open (yes; для закрытия (освобождения НЛМ) требуется явно выдать команду консоли unmount
(кстати, ленту после закрытия требуется перематывать), а перед использованием команду mount;
no - автоматическое размонтирование ленты по завершению задания (с перематыванием)
и монтированием перед следующим заданием (с позиционированием в конец);
для FIFO обязательно "no"; при записи в файловую систему директива игнорируется)
- Random access (?; устройство поддерживает lseek(2); надо установить "Yes" для файлов
и "No" для лент и FIFO)
- Block Checksum (yes; подсчёт и запись или чтение и проверка CRC32)
- Maximum Volume Size (предпочтительно использовать директиву Maximum Volume Bytes
при настройке директора)
- Maximum File Size (1 gb; имеются в виду ленточные файлы и отметки в каталоге;
полезно для ускорения поиска файлов при восстановлении и обработки ошибок, причём не только на ленте;
в каталог заносятся записи JobMedia)
- Maximum File Index (?)
- Block Positioning (yes; использовать прямое позиционирование; необходимо отменить
при чтении старых томов в новой версии)
- Maximum Network Buffer Size (32768; по слухам назначение 65536 даёт ускорение до 5 раз
на быстрой локальной сети; необходимо согласовывать с настройками файловых серверов)
- Label media (no; для записи на диск предпочтительно указать "yes", что позволяет
автоматически размечать новые тома в соответствии с директивой LabelFormat ресурса Pool в настройках директора)
- Automatic mount (yes; при запуске bacula-sd и в начале каждого задания проверяет устройство на наличие тома)
- Read Only (no; не описано в основной документации)
- Sync On Close (no; полезно для сетевых устройств хранения)
- Set Volume Immutable (no; устанавливать аттрибут ’Immutable’ файла тома при переходе в состояние Full (не для Used!);
при очистке тома аттрибут сбрасывается (а при удалении?))
- Set Volume Append Only (no; устанавливать аттрибут ’Append_Only’ файла тома при первом задании;
при очистке тома аттрибут сбрасывается (а при удалении?))
- Minimum Volume Protection Time (30 days; время удержания аттрибута ’Immutable’; 0 - навсегда)
- управление НЛМ (рекомендуется предварительное тестирование утилитой btape):
- Control Device (устройство generic SCSI - /dev/sg...)
- Alert Command (внешняя программа (предлагается /opt/bacula/scripts/tapealert, внутри tapeinfo из пакета mtx),
вызываемая по завершению задания и освобождению устройства или возникновению ошибки;
проверяет наличие проблем с устройством; например, используется tapeinfo из пакета mtx (или пакета sg3 utils);
результаты доступны по команде "status storage")
- Worm Command (внешняя программа (например, isworm; требует tapeinfo и sdparm) для проверки не WORM ли это)
- Maximum Open Wait (5 minutes; при превышении задание терминируется с ошибкой; следующее задание может опять обратиться к устройству)
- Maximum Rewind Wait (5 minutes; при превышении задание снимается);
- Volume Poll Interval (5 minutes; периодический автоматический опрос устройства после указания оператору
установить том; 0 - не опрашивать)
- Minimum block size (64512; только для последовательных устройств)
- Maximum block size (64512; размер блока по умолчанию и максимальный);
- Hardware End of Medium (yes; имеется поддержка MTEOM (позиционирование ленты в конец
записанных данных) и отслеживание номера файла на ленте; нельзя использовать fast-eod (надо отключить в mt));
- 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; будет открыто при установке новой ленты и следующем запросе)
- Label Type (Bacula | ANSI | IBM) (при использовании ANSI и IBM имя не может быть больше 6 символов)
- Check Labels (no; проверка меток типа ANSI и IBM)
- Use LinTape (no; использовать драйвер IBM)
- управление кешированием на диск при записи на ленту:
- Spool Directory (Working Directory; куда кешировать данные для требующего монтирования устройства,
сюда же кешируются атрибуты (Spool Attributes) и данные (Spool Data) при описании задания или планировщика или команде run)
- Maximum Spool Size (0 - бесконечность; для всех одновременных заданий)
- Maximum Job Spool Size (0 - бесконечность; для каждого задания)
- Removable media (no?; для устройства типа File, если том (файл) не найден в указанном каталоге, то производится
поиск файла по имени тома по всему смонтированному в каталоге устройству и первый подходящий используется как том)
- Requires Mount (no; требуется "yes" для записи на [DVD или] съёмные диски,
которые не монтируются автоматически)
- Mount Point (для Requires Mount)
- Mount Command (для Requires Mount;
неактуально: 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; д.б. yes для устройств, входящих в библиотеку Autochanger (в т.ч. виртуальную),
не забыть указать и в директиве Device ресурса Storage конфигурации директора)
- Drive Index (0; номер в группе; передаётся скрипту mtx-changer и mtx)
- Autoselect (yes; иначе устройство не будет выбрано при обращении к библиотеке, директору необходимо указать его явно)
- Maximum Changer Wait (5 минут; при превышении производится переход к следующему устройству, затем обращение к оператору)
- Changer Device (устройство generic SCSI для автоматической смены томов - /dev/sg...; лучше определить в ресурсе Autochanger)
- Changer Command (программа для автоматической смены смены томов, например mtx-changer - использует mtx; лучше определить в ресурсе Autochanger)
- Autochanger (позволяет сгруппировать устройства, входящие в одну автоматизированную библиотеку, возможно виртуальную,
и обращаться к ним как к единому целому, позволяя серверу хранения выбрать доступный)
- Name (это имя указывается директором в запросе - директива Device ресурса Storage, не забыть указать Autochanger и там)
- Device (имена через запятую ресурсов Device; директиву Devices можно использовать несколько раз)
- Changer Device (/dev/null для виртуального дискового)
- Changer Command (/dev/null для виртуального дискового; имеются подстановки (%o - команда (load, unload),
%a - устройство для данных, %c - устройство позиционирования и т.д.))
- Label media (no; для записи на диск предпочтительно указать "yes", что позволяет
автоматически размечать новые тома в соответствии с директивой LabelFormat ресурса Pool в настройках директора)
- Automatic mount (yes; при запуске bacula-sd и в начале каждого задания проверяет устройство на наличие тома)
- Statistics (параметры сбора статистики в CSV (время, метрика, значение) или Graphite или команда statistics;
количество устройств, размер использованной памяти, для каждого устройства количество прочитанных и записанных байт, секунд, скорость, оставшееся место)
- Name (используется администратором в команде statistics?)
- Description
- Interval (300; интервал в секундах между сбором информации)
- Type ={CSV|Graphite}
- Metrics=фильтр (можно использовать шаблоны с "*", "?" и "!")
- Prefix=строка (добавляется перед именем метрики)
- File=имя-файла (для CSV)
- Host=имя-хоста-Graphite
- Port=номер-порта-Graphite
- Cloud
- Messages (правила рассылки сообщений директору)
В файле настройки (/usr/local/bacula/etc/bacula-fd.conf)
должны быть описаны следующие ресурсы:
- Client или FileDaemon (описание, ровно один ресурс)
- Name (имя должно быть уникально, это имя указывается в ресурсе Client директора;
не проверяется, но используется при создании сообщений)
- Working Directory (/usr/local/bacula/var,
не должно быть прав на чтение для посторонних;
сюда записывается статус-файл;
для архитектуры Win32 необходимо указывать букву устройства, каталог должен быть доступен на запись для пользователя SYSTEM)
- Pid Directory (/var/run)
- Heartbeat Interval (300s; 0 - бесконечность; необходим для борьбы со слишком умными маршрутизаторами,
которые закрывают соединение по истечению интервала неактивности;
получает отметки от сервера хранения, передаёт директору;
при отсутствии очередной отметки генерирует и посылает её серверу хранения и директору;
в версии 2.0 появилась новая директива управления keepalive с тем же именем?)
- Maximum Concurrent Jobs (было 2, теперь 20; заданием считается также запрос состояния, так что не надо уменьшать до 1)
- Maximum Job Error Count (1000; 0 - бесконечность; при достижении указанного количества ошибок задание признаётся неудачным;
что есть ошибка?)
- FDPort (9102)
- FDAddress (по умолчанию прослушиваются все доступные адреса, ожидая соединения от директора)
- FDAddresses (более сложная форма задания адресов и портов для ipv4, ipv6 и др., например:
FDAddresses = { ipv4 = { addr = 192.168.0.1; port = http;} })
- FDSourceAddress (по умолчанию исходя из таблицы маршрутизации; с какого адреса будут исходить пакеты)
- SDConnectTimeout (30 minutes; время ожидания установления соединения в сервером хранения; при неудаче задание снимается)
- Maximum Network Buffer Size (32768 в версии 1.38 и 65536 в версии 2.0;
по слухам назначение 65536 даёт ускорение до 5 раз
на быстрой локальной сети; необходимо согласовывать с настройками серверов хранения; не более 1 MB)
- Maximum Bandwidth Per Job (k/s - 1000 байт, kb/s - 1024 байт, m/s - миллион, mb/s - 2^20 байт)
- CommCompression=yes (при неэффективности отключается для каждой отдельной записи; надо выключить при передаче сжатых данных)
- Disable Command (список запрещённых директив через пробел: backup, cancel, estimate, restore, status, verify, accurate,
RunBeforeJob, RunAfterJob, Run и др.)
- SD Packet Check (0; сколько пакетов посылать серверу хранения между проверками)
- PKI Encryption ("No"; данные шифруются на стороне клиента;
имена файлов и прочие метаданные остаются открытими;
используются приватные RSA ключи с самоподписанными сертификатами X.509 (PKI);
для каждой сессии генерируется сессионный ключ для симметричного шифрования
(AES-CBC, 128 бит; встроены и другие алгоритмы, но пока не используются);
сессионный ключ шифруется (RSA) публичным ключом файлового сервера и "главным" ключом и передаётся
на сервер хранения в зашифрованном виде ("почти" RFC-3852);
незашифрованные архивы восстанавливаются,
так что директор может "восстановить" конфигурационный файл с другими ключами
и при следующем запуске bacula-fd они будут использоваться -
надо следить (не понял как: PKI Signature только сообщает
об ошибке, но файл записывает!);
в журнале задания помечается "Encryption: yes"; в статусе задания в БД отметки нет;
в статусе сервера отметки нет;
в метке тома и метке задания на томе отметки нет; bls шифрования не замечает;
bextract восстанавливает только метаинформацию)
- PKI Cipher (AES128 (AES128-CBC); AES192, AES256, blowfish)
- PKI Digest (SHA1 или SHA256 в зависимости от версии и настроек OpenSSL)
- 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
- ?Enable Snapshot (no)
- Director (аутентификационная информация для проверки директора или монитора;
для каждого директора или монитора - отдельный ресурс)
- Name (должно соответствовать имени, указанному в ресурсе Director настройки директора)
- Password (пароль, который директор должен предъявить;
указывается в ресурсе Client настройки директора)
- ConnectToDirector=no (соединение с директором инициируется клиентом по расписанию)
- Address=адрес-директора
- DirPort=9101 (порт при обращении клиента к директору)
- ReconnectionTime (40 mins; интервал обращения к директору, если отсутствует расписание)
- Schedule=имя-ресурса (расписание обращения к директору)
- Maximum Bandwidth Per Job (k/s - 1000 байт, kb/s - 1024 байт, m/s - миллион, mb/s - 2^20 байт)
- Disable Command (список запрещённых директив через пробел: backup, cancel, estimate, restore, status, verify, accurate,
RunBeforeJob, RunAfterJob и др.)
- Monitor (no; если "yes", то директор сможет только узнать статус сервера)
- Allowed Backup Directories = список-каталогов (разрешённые к резервированию каталоги; по умолчанию всё разрешено)
- Excluded Backup Directories = список-каталогов (запрещённые к резервированию каталоги; по умолчанию - никакие)
- Allowed Restore Directories = список-каталогов (куда можно восстанавливаться)
- Allowed Script Directories = список-каталогов (где разрешено хранить скрипты для Runscript;
также будет запрещено использование символов "$ ! ; \ & < > ‘ ( )" в именах скриптов)
- ?Comm Compression (yes; сжимать управляющие сообщения по возможности)
- Schedule (описание расписания обращения к директору)
- Name (имя расписания)
- Enabled=yes
- Connect [MaxConnectTime=время] время-обращения
- Messages (правила рассылки сообщений директору)
- Statistics (параметры сбора статистики в CSV (время, метрика, значение) или Graphite или команда statistics;
пока только размер использованной памяти)
- Name (используется администратором в команде statistics?)
- Description
- Interval (300; интервал в секундах между сбором информации)
- Type ={CSV|Graphite}
- Metrics=фильтр (можно использовать шаблоны с "*", "?" и "!")
- Prefix=строка (добавляется перед именем метрики)
- File=имя-файла (для CSV)
- Host=имя-хоста-Graphite
- Port=номер-порта-Graphite
- ?Console (сам себе неанонимная консоль, что позволяет клиенту инициировать резервное копирование)
Клиент может работать в режиме "читать всё, без права записи": "bacula-fd -k -u nobody -g nobody".
Обещана работа клиента под Windows XP, Windows Server 2000, Windows Server 2003, Windows Server 2008,
Vista, Windows 7 и Windows 8. Запускается как системный сервис, иконка с меню в трее.
Клиент версии 7.0 периодически посылает сообщения директору о количестве обработанных файлов и байт.
Директора старых версий пугаются.
Клиент версии 11 несовместим с bacula-sd версии 9: "Fatal error: hello.c:191 Bad caps from SD : auth cram-md5 ssl=1".
Модификации консоли:
- bconsole - чисто текстовая (ключ "-u" позволяет задать интервал неактивности)
- bat - графическая консоль (QT), но текстовые команды доступны и в ней;
предполагается влить в него функции монитора и отчёты bweb;
все подокна можно выделить из основного окна;
контексное меню по правой кнопке мыши; выбор восстанавливаемого файла
в графическом режиме, включая выбор восстанавливаемой версии;
построение графиков статистики использования (удалено?);
- bgnome-console - под Gnome; ничем не лучше текстовой; удалена
- bwx-console - под wxWidget; Linux и MS Windows; выбор восстанавливаемого файла
в графическом режиме; удалена
Аутентификация и авторизация доступа к директору может быть 3 типов:
- анонимная консоль со всеми правами: пароль доступа к директору указывается в ресурсе
Director настройки консоли и должен соответствовать директиве Password ресурса
Director настройки директора)
- "именованная" консоль: в настройках консоли и директора необходимо сконфигурировать
ресурсы Console, в которых указывается имя консоли и пароль доступа к директору;
права доступа определяются с помощью ACL в ресурсе Console настройки директора
- если имя консоли совпадает с именем клиента, то данная консоль имеет права выполнять
команду SetIP, чтобы изменить значение Address соответствующего ресурса Client
в настройке директора на IP консоли (необходимо при использовании динамических адресов DHCP);
команда SetIP должна быть разрешена в ACL
В файле настройки (bconsole.conf,
gnome-console.conf, wx-console.conf, bat.conf)
должны быть описаны следующие ресурсы:
- Director (аутентификационная информация для анонимного доступа к директору;
для каждого директора - отдельный ресурс; если их несколько, то при запуске программы
необходимо выбирать)
- Name (используется только для выбора)
- DIRPort (9101; номер порта для связи с директором)
- Address (адрес или имя хоста, на котором работает директор)
- Password (должен соответствовать директиве Password ресурса Director настройки директора)
- ConsoleFont (только для gnome-console)
- Name (предлагается Default)
- Font ("LucidaTypewriter 9", имя шрифта в формате Pango)
- Console (аутентификационная информация для неанонимного доступа к директору;
для каждой консоли, т.е. набора прав доступа необходимо описать свой ресурс, который
привязывается к ресурсу Director)
- Name (должно соответствовать директиве Name ресурса Console настройки директора;
должно совпадать с именем клиента для выдачи команды SetIP)
- Password (должен соответствовать директиве Password ресурса Console настройки директора)
- Director (имя ресурса Director; если при запуске выбирается этот директор,
то используется данная консоль)
- Heartbeat Interval (позволяет настроить значение keepalive)
- Comm Compression (yes; сжимать управляющие сообщения по возможности)
Ключи bconsole:
- -?
- -D имя-директора
- -l (выдать список директоров)
- -c имя-файла-конфигурации
- -d уровень-отладки
- -n (без редактора строки conio)
- -u секунд (максимальное время ожидания)
- -t (проверить конфигурацию)
Интернационализация отсутствует.
Выбрана гадкая локализация с разделением троек цифр в числе запятыми.
Попытка заменить LANG при запуске bacule-dir и bconsole не исправили ситуацию.
Для вывода информации из БД помогает команда консоли "gui on" в течении сеанса, но тогда отключается предупреждение о наличии новых сообщений.
Сервера в любом случае выводят числа с разделением групп цифр, включая отчёты о завершении заданий.
Команды консоли (имя команды можно сокращать (даже при неоднозначности!),
имя параметра - нет;
если параметров недостаточно, то недостающие будут запрошены;
для прерывания интерактивного задания параметров - не при вводе имени тома - необходимо ввести ".";
запущенную на выполнение команду прервать нельзя (^C не работает);
команды могут читаться из файла перенаправлением ввода;
максимальная длина команды - 511 символов;
jobid - номер задания, ujobid - уникальный идентификатор задания состояит из имени задания и времени запуска экземпляра):
- help [имя-команды]
- quit или exit (.quit для немедленного выхода без ожидпния завершения идущей команды)
- add [pool=имя-пула] [storage=имя-устройства] [jobid=идентификатор-задания] (добавить
новый том к пулу в каталоге, но не трогать устройство; для форматирования тома используйте команду label)
- autodisplay off|on (по умолчанию, выдаётся только извещение о наличии новых сообщений
от директора, чтобы их посмотреть необходимо выдать команду messages)
- automount on|off (по умолчанию, лента монтируется автоматически после
форматирования командой label)
- cancel [all] [jobid=список-через-запятую] [job=имя-задания] [ujobid=уникальный-идентификатор-задания]
(команда cancel без параметров
вызывает вывод текущих заданий и запрос номера из списка; завершение задачи требует времени -
запланированная задача помечается и завершается в момент запуска,
ждущая монтирования задача завершается после монтирования)
- create [pool=имя-пула] (создать запись пула в БД из описания ресурса в файле настройки;
при запуске директора автоматически создаются записи всех несуществовавших ранее пулов,
на которые есть ссылки в каком-либо задании; для существующего пула эквивалентна команде update)
- delete [volume=имя-тома] [pool=имя-пула] [jobid=идентификатор-задания] (удалить из каталога
информацию о задании, томе или пуле вместе со всеми зависимостями)
- delete job jobid=список-или-интервал-идентификаторов (например: jobid=3,4,7-9)
- delete client=имя-клиента
(недоделано: удалённый клиент остаётся в таблице Client, выдаётся в меню выбора клиента; помогает только dbcheck
(Eliminate orphaned FileSet records, Eliminate orphaned Client records;
при наличии в настройках - нельзя удалить, при отсутствии - увидеть)
- disable job=имя-задания [client=имя] [schedule=имя] [storage=имя [Drive=номер]] (временно запретить автоматическое планирование задания)
- enable job=имя-задания [client=имя] [schedule=имя] [storage=имя] (временно разрешить автоматическое планирование задания)
- estimate [job=имя-задания] [level=Full|Incremental|Differential|Base] [client=имя-клиента]
[fileset=имя-набора-файлов] [listing] [accurate=no|yes] (прикинуть приблизительный объём сохраняемых данных до сжатия;
ключевое слово listing позволяет получить полный список файлов;
обращается к клиенту; работает только Full)
- exec (запуск программ/скриптов), удалён?
- gui [on|off] (числа начинают выводиться без разделения троек запятыми и
отключается предупреждение о наличии сообщений)
- label [storage=имя-устройства-на-сервере-хранения] [volume=имя-тома] [pool=имя-пула] [slot=номера-слотов] (добавить
новый том к пулу в БД и форматировать том; предварительно может потребоваться
размонтировать ленту; если лента уже отформатирована, то требуется выполнить
команды purge и relabel)
- label [storage=имя-устройства-на-сервере-хранения] [pool=имя-пула] [slot=номера-слотов] barcodes
(имя тома считывается с печатной метки на ленте)
- list ... (извлечение информации из БД; можно добавлять свои команды в query.sql)
- list [jobtype=тип] jobs [joberrors] [jobstatus=код-завершения] [client=имя] [order={asc|desc}] [limit=число]
(joberrors не показывает задания с кодом завершения E и f)
- list ujobid=уникальный-идентификатор-задания [limit=число] [joblog]
- list [joblog] jobid=идентификатор-задания [copies] [limit=число] ("list copies" - показать все копии)
- list job=имя-задания [limit=число]
- list jobmedia [jobid=идентификатор-задания] [job=имя-задания] (каждый кусок тома (файл ленты) отдельно)
- list files [limit=число] [jobid=идентификатор-задания] [job=имя-задания]
- list pools
- list clients (информация в БД не обновляется
при изменении клиента ни автоматически, ни после reload)
- list jobtotals (всего и отдельно по именам заданий)
- list volumes [pool=имя-пула] [jobid=идентификатор-задания] [job=имя-задания]
- list media (-//-)
- list volume=имя-тома
- list nextvolume job=имя-задания [days=число-дней] (в первом приближении; может привести к переводу тома в состояние Purge или Recycle;
в большинстве случаев не работает)
- list snapshot [jobid=номер]
- llist ... (более подробная информация из БД)
- memory (использование памяти директором)
- messages (вывести накопившиеся сообщения от директора)
- mount [storage=имя-устройства-на-сервере-хранения] [slot=номер]
[jobid=идентификатор-задания] [job=имя-задания]
- prune files|jobs|volume [allfrompool {allpools | pool=имя}] [client=имя-клиента] [volume=имя-тома] [yes] (удалить из БД информацию о
файлах, заданиях или томах с истёкшим сроком хранения и всё с нею связанное)
- prune [volume=имя | [expired] volumes] [pool=имя-пула] [yes] (автоматическая чистка информации о томах)
- prune stats (очистка статистики о старых заданиях из JobHisto; нет в help; а чем смотрится?)
- prune snapshot [client=имя-клиента]
- purge files [jobid=идентификатор-задания] [job=имя-задания] [client=имя-клиента] [yes] (удалить из БД
информацию о файлах, если даже срок хранения не истёк)
- purge jobs client=имя-клиента [yes] (удалить из БД информацию о заданиях, если даже срок хранения не истёк)
- purge volume[=имя-тома] [action={truncate|all}] [allfrompool] [mediatype=тип] [pool=имя | allpools] [storage=имя] [yes]
(удалить из БД информацию о томе, если даже срок хранения не истёк;
урезать файл, если установлен "Action On Purge = Truncate";
не надо запускать purge, если задача уже ждёт новый том или работает с этим устройством)
- python restart (выкинули)
- query (выдаётся меню предопределённых SQL-запросов (поиск файла по краткому имени, по полному имени, том по номеру задания,
номер задания по имени или номеру тома и др.);
имя файла со списком SQL запросов задаётся директивой QueryFile)
- relabel storage=имя-устройства-на-сервере-хранения oldvolume=старое-имя-тома volume=новое-имя-тома
(заново отформатировать старый том; должен быть в состоянии Purged или Recycle)
- release storage=имя-устройства-на-сервере-хранения (перемотать ленту;
перед следующим использованием заново прочесть метку, устройство не освобождается)
- reload (прочитать заново конфигурационный файл bacula-dir.conf; планировщик ставит
задания в очередь за 2 часа до наступления события, настройки заданий в очереди не изменяются;
если в момент reload выполнялись какие-то задания, то задание на изменение параметров ставится
в очередь - до 32 штук по умолчанию)
- restart [incomplete] [job=имя] [client=имя] [fileset=имя] [level=уровень] [storage=имя] [jobid=номер] [when=время] [comment=текст]
[spooldata=yes|no] [all] (интерактивный выбор при недостатке параметров, все задачи, кроме незавершённых (остановленных командой stop),
начинаются с самого начала)
- restore [storage=имя-устройства-на-сервере-хранения] [[backup]client=имя-клиента]
[where=куда-восстанавливать] [strip_prefix=] [add_prefix=] [add_suffix=] [regexwhere=]
[pool=имя-пула] [fileset=имя-набора-файлов] [restorejob=задание-шаблон]
[restoreclient=на-какой-клиент-восстанавливать]
[jobid=список-идентификаторов-задания-через-запятую] [before="YYYY-MM-DD HH:MM:SS" | current]
{file=полное-имя-файла | <файл-с-полными-именами-файлов}
[bootstrap=имя-файла] [select] [noautoparent]
[all] [done] [yes] [copies] (восстановить файлы с указанием откуда и куда);
strip_prefix, add_prefix, add_suffix, regexwhere позволяют
переименовать файлы при восстановлении (с версии 2.2);
current - из последней резервной копии,
before - только начавшиеся ранее задания (before и current не работают);
select - переходить в интерактивный режим выбора файлов;
copies - показывать возможные копии восстанавливаемых заданий;
noautoparent - не восстанавливать родительские каталоги при восстановлении отдельных файлов;
all - выбрать все файлы;
done - не переходить в интерактивный режим ("all done" - значительно быстрее);
yes - не запрашивать подтверждение, иначе
после выбора параметров предлагается меню с возможностью их модифицировать
(сервер хранения, имя задания, имя набора файлов, на какой клиент восстанавливать,
когда, приоритет, имя файла bootstrap для чтения ("run job=RestoreFiles"), куда восстанавливать,
режим замещения (never приводит к неправильным правам доступа к восстановленным каталогам),
переименование (File Relocation: strip_prefix, add_prefix, add_suffix, regexwhere) файлов при восстановлении с версии 2.2,
номер задания (?),
опции файлового агента (Plugin) с версии 3);
regexwhere позволяет задать список регулярных выражений для поиска и замены строк
("/pred/rect/,/pdata/rdata/" заменяет /prod/u01/pdata на /rect/u01/rdata);
конфигурационный файл директора должен содержать хотя бы одно описание задания типа Restore, содержащий параметры по умолчанию;
создаётся файл bootstrap;
каталог для восстановления рекомендуется создавать
заранее с правильными правами доступа, особенно в MS Windows ("/tmp/bacula-restore/e" для файлов с диска "E:\");
файлы записываются в файловую систему указанного клиента;
если записи о файлах уже удалены из каталога, то можно восстановить все файлы
или файлы, удовлетворяющие регулярному выражению (с версии 3);
имена пользователей и групп хранятся в числовом виде;
не описаны ключи: comment=, jobuser=, jobgroup=;
восстановление с использованием нескольких серверов хранения возможно в версии директора 5 и клиента 3.1.3;
если параметров для однозначного выбора идентификатора задания
(идентификаторов заданий) резервного копирования недостаточно,
то пользователю выдаётся меню, позволяющее найти нужное задание
- вывести параметры последних 20 заданий
- вывести список заданий, содержащих указанный файл
- ввести список идентификаторов заданий через запятую (полезно для аварийно завершившихся заданий;
порядок важен)
- ввести SQL запрос для поиска
- восстановить последнее резервное копирования для указанного клиента
(выбирается последнее полное копирование и последующие инкрементальные и/или
дифференциальные копирования; аварийно завершившиеся задания не используются;
если записи о файлах были удалены из БД - следите за JobFiles в описании заданий,
то восстановление будет неполным)
- восстановить наборы файлов указанного клиента, копирования которых началось до указанного времени
- ввести список полных имён файлов для восстановления (имена вводятся по одному на строке;
пустая строка - конец списка;
если перед именем ввести символ '<', то список будет прочтён из указанного файла;
если перед именем ввести символ '?', то список будет прочтён из указанной SQL таблицы
(формат: JobId, FileIndex))
- ввести список полных имён файлов для восстановления, будут использованы задания, начавшиеся до указанного времени
- вывести список номеров заданий для указанного клиента и набора файлов, позволяющих восстановить самые свежие файлы
- вывести список номеров заданий для указанного клиента и набора файлов, позволяющих восстановить файлы, начавшиеся до указанного времени
- ввести идентификаторы заданий и список каталогов для восстановления
(порядок идентификаторов важен;
имена вводятся по одному на строке; пустая строка - конец списка;
если перед именем ввести символ '<', то список будет прочтён из указанного файла;
подкаталоги необходимо указывать явно)
- ввести идентификатор задания для вычисления даты, на которую будет произведено восстановление, и цепочки зависимых заданий
- resume (синоним restart)
- run [job=имя-задания] [client=имя-клиента] [fileset=имя-набора-файлов]
[level=Full|Incremental|Differential|Base|VolumeToCatalog|DiskToCatalog|Catalog|VirtualFull]
[jobid=номер] [storage=имя-устройства-на-сервере-хранения] [comment=текст] [nextpool=имя-тома]
[when=время-начала] [accurate={yes|no}] [optimizespeed=false] [spooldata=false] [yes]
(запустить задание; если параметров недостаточно, то недостающие
будут запрошены в интерактивном режиме; yes - не запрашивать подтверждение;
nextpool определяет целевой пул для миграций и виртуальныхх заданий; jobid определяет опорное задание)
- setbandwidth limit=кибибайт [jobid=номер] [ujobid=уникальный-идентификатор] [job=имя] [client=имя] (позволяет ограничивать указанное задание)
- setdebug [level=число] [trace=0|1] {dir|client=имя|storage=имя|all} [options=перечень]
[tags=[!][+][-]{all|bvfs|sql|memory|scheduler}] (отладочная печать в syslog;
пароль к СУБД открытым текстом; trace - дописывать в файл bacula.trace в текущий каталог демона)
- setip (авторизованный клиент с динамическим адресом может указать его здесь)
- show [client=имя] [job=имя] [pool=имя] [fileset=имя] [schedule=] [storage=] {тип-ресурса | all}
(показать текущее значение ресурсов файла настройки (не БД) указанного типа:
directors, clients, counters, jobs, storages, catalogs, schedules, filesets, groups,
pools, messages, all, help; нечеловеческий формат для отладки)
- show disabled (выдать список заданий с временно отключённым планировщиком)
- snapshot [client=имя] [job=имя] [jobid=номер] list
- snapshot [client=имя] [job=имя] [jobid=номер] listclient
- snapshot [client=имя] [job=имя] [jobid=номер] prune (удалить истёкшие снимки из каталога и клиента)
- snapshot [client=имя] [job=имя] [jobid=номер] delete
- snapshot [client=имя] [job=имя] [jobid=номер] sync (директор получает список от клиента и записывает в БД)
- snapshot [client=имя] [job=имя] [jobid=номер] update
- sqlquery (переход в режим прямого доступа к SQL; каждая команда завершается по ";"; выход по вводу ".";
рекомендую клиента mysql вместо этого)
- status dir=имя-директора [days=дней-вперёд]
(состояние соответствующего сервера: прошлые (10 штук), текущие и запланированные
задания, включая имена предполагаемых томов)
- status client=имя-клиента (состояние соответствующего сервера: прошлые (10 штук) задания)
- status schedule [job=имя-задания ...] [client=имя ...] [schedule=имя] [days=дней-вперёд] [limit=число] [time=время-отсчёта]
(список запланированных заданий, по умолчанию - 20 штук)
- status [select] storage[=имя-сервера-хранения] [slots] (состояние сервера хранения, какие тома установлены в ленточной библиотеке;
выводится информация обо всех устройствах сервера хранения, а не только об устройстве ресурса Storage директора)
- status all
- status network client=имя-клиента (оценить пропускную способность сети)
- stop [jobid=номер] [job=имя] [ujobid=уникальный-идентификатор] [all] (задание помечается как незавершённое и может быть продолжено позднее)
- time
- trace (off; включить/выключить трассировку, добавляется в файл bacula.trace в текущем каталоге демона)
- truncate storage=имя pool=имя
- unmount storage=имя-устройства-на-сервере-хранения [drive=номер]
- unmount [ jobid=имя-задания | job=имя-задания ]
- update pool[=имя] (обновить информацию о пулах в БД из ресурса Pool)
- update volume[=имя] [pool= | volstatus= | VolRetention= | VolUse= | MaxVolJobs= | MaxVolBytes = |
Recycle= | enabled= | recyclepool= | ...]
(система запрашивает какую информацию о каком томе изменить)
- update volume=имя [pool=имя] allfrompool (обновить всю информацию для тома)
- update volume allfrompool=имя (обновить всю информацию для всех томов пула)
- update volume fromallpools (обновить всю информацию для всех томов)
- update slots (директор запрашивает считыватель шриховых кодов и вносит соответствующие
изменения в БД)
- update slots scan (для автоматизированных библиотек, не имеющих считыватель штриховых кодов -
сервер хранения считывает метку каждой ленты и директор вносит соответствующие
изменения в БД)
- use [catalog=имя-БД] (использовать БД из указанного ресурса для работы с каталогом;
автор не советует использовать несколько БД, система путается)
- var строка (тестирование подстановки переменных для Label Format)
- version
- wait [jobid=номер-задания | jobuid=уникальный-идентификатор | job=имя-задания]
(ждать завершения задания или всех заданий; используется в пакетных заданиях)
Команды для работы в пакетном режиме и для графических оболочек:
- .api (?)
- .backups job=имя-задания
- .bvfs_get_jobids jobid=номер [all] (выдать список заданий, требуемых для восстановления указанного задания)
- .bvfs_update [jobid=список]
- .bvfs_versions client=имя pathid=номер filenameid=номер jobid=номер
- .bvfs_lsdirs pathid=номер path=полный-путь jobid=список [limit=число] [offset=число]
- .bvfs_lsfiles pathid=номер path=полный-путь jobid=список [limit=число] [offset=число]
- .bvfs_restore fileid=список-номеров dirid=список-номеров hardlink=список-номеров path=имя-файла-для-создания-списка-файлов
- .bvfs_cleanup path==имя-файла-для-создания-списка-файлов
- .bvfs_clear_cache yes
- .bvfs_decode_lstat lstat="кодированная строка состояния файла"
- .clients (просто список имён клиентов)
- .defaults client=имя-клиента
- .die (аварийное завершение директора)
- .dir (в режиме интерактивного восстановления)
- .estimate job=имя [level=уровень] (предполагаемый размер задания исходя из статистики в БД)
- .exit
- .filesets (просто список имён наборов файлов)
- .help (выдаёт подсказку для обычных (без точки) команд ;)
- .jobs (просто список имён заданий)
- .levels (просто список имён уровней)
- .ls client=имя path=путь
- .messages (выдать накопленные сообщения по-быстрому)
- .msgs (выдать накопленные сообщения)
- .pools (просто список имён пулов)
- .pwd
- .quit
- .sql
- .status ...
- .storage (просто список имён серверов хранения)
- .types (просто список типов заданий)
Команды, выполняемые самой консолью (только текстовый вариант):
- @input имя-файла (читать команды из файла)
- @output [имя-файла [w|a]] (перенаправить вывод в файл; w - затирая, a - добавляя; пустое имя файла - терминал)
- @tee [имя-файла [w|a]] (перенаправить вывод одновременно в файл и на терминал; w - затирая, a - добавляя; пустое имя файла - терминал)
- @tall [имя-файла] (перенаправить ввод и вывод одновременно в файл и на терминал)
- @version
- @time (вывести текущее время, а куда?)
- @quit
- @exit
- @sleep секунд
- @# коментарий
- @separator символ (позволяет задать разделитель команд)
bconsole может быть использована в пакетном режиме.
Команды интерактивного режима выбора файлов при восстановлении ("нехорошие"
имена файлов необходимо заключать в кавычки):
- help или ?
- quit (выйти из интерактивного режима без восстановления)
- done (или просто Enter; выйти из интерактивного режима и восстановить отмеченные файлы)
- exit (синоним done)
- cd (для смены диска в MS Windows: "cd c:" или "cd C:")
- pwd
- ls (вывести список файлов в текущем каталоге; можно использовать шаблоны; перед именами отмеченных файлов выводится "*";
после имён каталогов выводится "/")
- lsmark (показывает только отмеченное; обходит каталог, включая подкаталоги)
- dir (вывести список файлов в текущем каталоге с подробностями; можно использовать шаблоны);
"dir *vnc*" вызывает Segmentation violation
- find (аналог "find / -name", можно использовать несколько аргументов и шаблоны)
- mark (позволяет отметить файл или каталог (рекурсивно) для предстоящего восстановления;
только в текущем каталоге; можно использовать шаблоны;
"mark *" в каталоге верхнего уровня отметит всё)
- markdir (отметить каталог без его содержимого;
необходимо отмечать все вышестоящие директории при восстановлении отдельных файлов,
иначе они могут быть созданы при восстановлении с неправильными правами доступа)
- unmark
- unmarkdir
- count (выводит число отмеченных файлов в текущем каталоге и ниже и общее количество файлов)
- estimate (общее количество файлов, количество отмеченных файлов и предполагаемый объём)
gnome-console (gnome-console.conf) и wx-console отличаются
только возможностью выбирать восстанавливаемые файлы мышкой (wx-console медленна и с неправильным
шрифтом). Удалены.
Монитор позволяет узнать состояние серверов (директоров, файловых серверов,
серверов хранения), к которым ему разрешён доступ. Неудобен при большом (более 20) количестве демонов.
В файле настройки (/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)
В файле настройки (bacula-dir.conf) должны быть описаны следующие ресурсы
(рекомендую не использовать ресурсы повторно, т.е. для каждого Client/FileSet определять отдельные
задание, планировщик, хранитель, пул; каждое задание в отдельный том):
- Director (описание, ровно один ресурс, имя и пароль директора для доступа из консоли)
- Client (отдельное описание для каждого клиента, т.е. файлового сервера (FD); используется однократно при описании задания)
- Name (используется при описании ресурса Job и командах консоли)
- Enabled (yes)
- Address (имя, полное имя или IP адрес)
- FD Port (9102; порт, на котором слушает клиент)
- Catalog (имя ресурса Catalog, используемого для хранения в СУБД информации,
связанной с данным клиентом)
- Password (должен соответствовать паролю в соответствующем ресурсе Director настройки файлового сервера bacula-fd.conf)
- Snapshot Retention (0 sec - немедленно по завершению резервного копирования;
сколько времени хранить информацию о снимках в каталоге и сами снимки на клиенте после создания снимка;
можно удалить командой "snapshot prune"; перекрывается директивой Snapshot Retention в ресурсе Job)
- File Retention (60 days; период хранения информации о файлах
данного клиента в каталоге (см. AutoPrune) после завершения задания;
более короткий период хранения задания или тома может повлечь более раннее удаление информации о файлах;
данные на ленте (файловой системе) не удаляются)
- Job Retention (180 days; период хранения информации о заданиях
данного клиента в каталоге (см. AutoPrune); данные на ленте (файловой системе) не удаляются;
более короткий период хранения тома (ресурс Pool) может
повлечь более раннее удаление информации о заданиях;
ассоциированные с удаляемым заданием записи о файлах и носителях (JobMedia) также удаляются)
- AutoPrune (yes; удалять в конце каждого задания из каталога записи о файлах и заданиях,
срок хранения которых истёк)
- Maximum Concurrent Jobs (1; дополнительные ограничения указываются также в ресурсах
Director, Job и Storage; не рекомендуется указывать больше, чем в настройках клиента;
для реальной параллельности файловые тома должны лежать в разных каталогах)
- Maximum Bandwidth Per Job (k/s - 1000 байт в секунду, Kb/s - 1024 байта в секунду, m/s, Mb/s)
- Priority (не реализовано, от 1 до 1000, меньше - больший приоритет)
- SD Calls Client (no; обычно клиент получает от директора временный пароль и стучится к серверу хранения)
- FD Storage Address (адрес или имя или полное имя сервера хранения, разрешение имени в адрес производится на клиенте,
позволяет директору самому использовать один адрес SD, а клиенту передавать другой адрес SD для подключения)
- Allow FD Connections (no; позволяет клиенту стучаться к директору)
- FileSet (отдельное описание для каждого набора сохраняемых файлов;
используется однократно при описании задания для указания списка сохраняемых файлов (имена в UTF-8, для MS Windows UTF-16 перекодируется в UTF-8);
рекомендуется тестирование из консоли: "estimate job=... listing";
если в Win32 переименовать или переместить файлы, то они не включаются в задание - нет ctime, а mtime не изменяется (Accurate?))
- Storage (отдельное описание для каждого устройства или библиотеки на сервере хранения;
используется при описании задания для указания устройства (каталога файловой системы), на котором будут монтироваться тома)
- Name (имя ресурса; используется при описании ресурса Job; это не имя сервера!)
- Enabled (yes)
- Address (адрес или имя или полное имя сервера хранения, разрешение имени в адрес производится на клиенте)
- FD Storage Address (адрес или имя или полное имя сервера хранения, разрешение имени в адрес производится на клиенте,
позволяет директору самому использовать один адрес SD, а клиенту передавать другой адрес SD для подключения)
- SD Port (9103; порт, который слушает сервер хранения)
- Password (должен соответствовать паролю в ресурсе Director настройки сервера хранения)
- Device (должно соответствовать директиве Name ресурса Device или Autochanger настройки сервера хранения;
нельзя делать 2 ресурса Storage с одинаковыми директивами Address и Device - не проверяется, но блокируется)
- Media Type (должно соответствовать директиве Media Type ресурса Device
настройки сервера хранения; рекомендуется давать уникальные имена всем типам носителей
и файловым "устройствам" (каталогам))
- Autochanger (no; yes, no или имя ресурса Autochanger;
при использовании команд label и add запрашивается номер слота;
поиск свободных томов начинается с имеющихся в магазине с попыткой их освободить командами prune)
- Maximum Concurrent Jobs (1; максимальное количество одновременно идущих заданий, использующих данный ресурс;
не рекомендуется увеличивать, так как в результате
несколько заданий могут быть записаны на один том чередующимися кусками;
для реальной параллельности дисковые тома должны лежать в разных каталогах)
- Maximum Concurrent Read Jobs (0 - бесконечность; ограничение на количество подзадач чтения для заданий Copy, Migration и VirtualFull,
чтобы они не заблокировали все имеющиеся устройства библиотеки не оставив свободных устройств для подзадач записи;
задание восстановления не считается чтением;
рекомендуется задать меньше половины от имеющихся устройств библиотеки)
- Allow Compression (yes; разрешить программное сжатие на FD (клиенте))
- Heartbeat Interval (300 sec; интервал keepalive на сокетах, связывающих с сервером хранения; 0 - не изменять системные установки)
- Autochanger (то же самое, что и Storage, но Autochanger; всегда Autochanger= yes)
- Pool (отдельное описание для каждого набора томов (лент, DVD, файлов);
используется при описании задания для указания пула из которого должен быть взят том;
информацию о имеющихся пулах и томах директор берёт из СУБД, а не из bacula-dir.conf;
кладёт в СУБД из bacula-dir.conf при запуске или по команде "create pool=";
после внесения изменений в описание пула в конфигурации необходимо выполнить команду "update pool";
если пул упомянут хотя бы в 1 задании, то изменения в bacula-dir.conf автоматически вносятся в СУБД (но update надёжнее ;);
описание пула задаёт параметры по умолчанию для создаваемых томов;
создание тома (разметка и занесение информации в СУБД) происходит: по команде label, по команде add (без разметки),
автоматически по необходимости;
для изменения параметров уже существующего тома необходимо выполнить команду "update volume")
- Name (имя Scratch зарезервировано для пула запасных томов - при необходимости система
самостоятельно переводит том из него в требуемый пул)
- Maximum Volumes (0 - бесконечность; проверяется только при автоматической разметке, командой label можно создать любое количество томов)
- Maximum Pool Bytes (0 - бесконечность; ограничение на суммарную ёмкость пула)
- Pool Type = (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 - бесконечность; по достижении указанного числа байт, записанных в том,
он переводится в состояние Full; проверка производится перед записью блока;
не сработало при аварийном завершении записи в файл в версии 1.38)
- Volume Use Duration=0 (0 - бесконечность; отсчитывается с момента первой записи; по достижении
том переводится в состояние Used; проверка производится только в конце задания, так что
перевод может быть отложен до конца следующего задания, использующего данный том;
команда "status dir" также вызывает проверку и изменение состояния томов;
плохо совместим с одновременной записью нескольких заданий на том)
- Catalog Files=yes (заносить информацию о сохранённых файлах в каталог)
- AutoPrune (yes; удалять из каталога записи о файлах и заданиях,
срок хранения которых истёк в соответствии с Volume Retention, при поиске доступного
на запись тома)
- Volume Retention (365 days; время хранения информации о заданиях и файлах на данном
томе в каталоге; отсчёт начинается с момента перехода из состояния Appendable в Full или Used;
проверка производится при поиске свободного тома (требуется AutoPrune);
команда "status dir" также вызывает проверку и изменение состояния томов;
стирание информации о томе ведёт к стиранию информации о заданиях и файлах
(и наоборот - если вся информация о заданиях и файлах стёрта, то информация о томе стирается);
принимается во внимание кратчайший из Job Retention, File Retention и Volume Retention;
сами данные не стираются (том не переводится в состояние Recycled);
не рекомендуется устанавливать меньше 2 интервалов между полным сохранением;
вместо указанных в bacula-dir.conf 40 дней в реальности устанавливается 50 дней, вместо 16 - 20)
- Cache Retention (время хранения кешированных данных после записи в облако; очищается командой "cloud prune")
- Action On Purge=Truncate (пометить файл при очистке тома как доступный к урезанию;
пометить: "prune volume allfrompool pool=имя-пула yes"
и урезать: "truncate storage=имя-ресурса-сервера-хранения pool=имя-пула")
- Scratch Pool (имя запасного пула для данного пула вместо стандартного пула Scratch)
- RecyclePool (в какой пул переводить том, когда данные в нём больше не нужны (в реальности тома в состоянии Purged);
по умолчанию - оставлять в текущем; полезен при использовании пула 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), то удаляются из каталога
все записи о заданиях и файлах на самом старом томе независимо от срока хранения и
том повторно используется; полезно при фиксированном (и достаточном!) числе томов в пуле;
не рекомендуется)
- File Retention (интервал хранения информации о файлах в каталоге после завершения задания резервного копирования,
имеет приоритет над значением в описании ресурса клиента)
- Job Retention (интервал хранения информации о заданиях в каталоге после завершения задания,
имеет приоритет над значением в описании ресурса клиента)
- Cleaning Prefix (если имя тома начинается с указанной строки, то том считается чистящей
лентой и запись на него не производится - для автомагазинов со штриховыми метками (CLN))
- Label Format (шаблон для создания имени тома (имени файла) при
автоматической разметке тома; требует указания Label Media в настройках сервера хранения;
имя тома может содержать буквы, цифры и '-_:.'; шаблон заключается в кавычки;
шаблон может включать имена переменных - начинаются с '$', '${' или '[';
переменные делятся на счётчики (прибавляется единица при указании символа "+ справа от имени),
переменные окружения (LANG=en_US.UTF-8, PATH, HOME=/var/spool/bacula, LOGNAME=baculad, USER=baculad, SHELL)
и внутренние переменные (Year, Month, Day, Hour, Minute, Second,
WeekDay (0 - воскресенье), Job, Dir (имя директора), Level, Type, JobId, JobName (уникальный идентификатор), Storage, Client, NumVols,
Pool (не рекомендуется, т.к. это может оказаться не тот пул), Catalog, MediaType);
предполагалось заменить Label Format скриптом на python, но потом python был выброшен;
определено множество функций над переменными,
например, "${Month:p/2/0/r}" - дополнить значение целой переменной до 2 позиций символом ноль с выравниванием вправо;
если имена переменных в шаблоне не используются, то имя тома образуется из строки,
к которой добавляется $NumVols (число томов в пуле) + 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, Accurate, Priority и Messages для задания; используется однократно при описании задания
для указания времени автоматического запуска задания)
- Name (указывается при описании задания)
- Enabled (yes)
- Run = [ переназначение-ресурсов ...] время-выполнения
(можно описывать несколько запусков в одном расписании, даже в одно и то же время;
время-выполнения представляет собой шаблон повторения (аналогично cron),
накладывающий ограничения на ежечасный повторяющийся цикл (в начале каждого часа (0-23)
каждого дня недели (Monday-Sunday) каждого дня месяца (1-31)
каждой недели (first-sixth) каждого месяца (january-december) и года);
ограничивающая маска может состоять из элементов или интервалов;
неделя начинается в понедельник;
посмотреть получившиюся битовую маску (час, день месяца, месяц, день недели, неделя месяца, неделя года) можно командой "show schedules" в консоли,
битовые маски нумеруются с 0, но неделя начинается с воскресенья;
примеры частей шаблонов: monday-friday, sat, daily, lastday,
first (первая неделя месяца), w02 (вторая неделя года; w01 - это неделя, в которой
находится первый четверг года; w00 перед ней), at 12:03,
february, feb, on weekly, monthly, hourly, 2-15 (дни месяца с 2 по 15);
примеры шаблонов: "1st sun at 12:50", "2nd-5th sun at 12:50", "mon-sat at 12:50";
чтобы запустить задание несколько раз в час необходимо использовать несколько директив Run;
переназначение-ресурсов задания может быть следующим (разделяются пробелами или запятыми):
- Level=уровень-резервного-копирования
- Pool=имя-пула
- {Full|Differential|Incremental}Pool=имя-пула (изменять пул только при соответствующем фактическом уровне резервного копирования)
- Next Pool=имя-пула-записи (для Copy и Migrate; имеет приоритет над описанием задания и пула)
- Storage=имя-ресурса-хранения
- Messages=имя-ресурса-обработки-сообщений
- Accurate=yes|no
- SpoolData=yes|no (кешировать запись на диск при записи на НМЛ; удалено)
- SpoolSize= (удалено)
- WritePartAfterJob= (по умолчанию - yes; для записи на DVD, см. описание ресурса Job; удалено)
- Priority=приоритет
- Job (отдельное описание для каждого задания резервного копирования и восстановления: ссылки на ресурсы Client (один), FileSet (один),
Storage (один), Pool, Schedule (один); задание может использовать только 1 сервер хранения (иначе восстановление не будет работать);
обычно одно задание резервного копирования для каждого клиента и общее на восстановление;
проблема восстановления при наличии нескольких заданий копирования с одинаковым Client и FileSet
(а backup и copy можно?);
одно задание может описывать резервное копирование разных уровней (через Schedule))
- Name (указывается в команде run, уникальное имя формируется из имени задания и даты/времени запуска)
- Enabled (yes; включить в автоматическое планирование)
- Tag (""; метка для поиска задания; можно несколько через запятую)
- Type (тип задания)
- Backup
- Restore - задаёт шаблон для выполнения команды restore, недоступна для планирования, FileSet не используется
- Verify - сравнить содержимое каталога с файловой системой или резервной копией
- Admin - административные задачи типа чистки каталога, не обращаются к клиенту
- Migrate - перемещение ранее скопированных данных из одного пула в другой
(в версии 5.0 и внутри пула, в версии 7 и между серверами хранения): определяет исходный пул,
определяет пул назначения (Next Pool), просматривает задания из томов исходного пула
в соответствии с критериями и определяет задания, сохранённые в рамках которых данные необходимо перенести в новый пул,
порождает задания по переносу данных (по одному для каждого исходного задания),
порождённые задания последовательно для каждого тома переносят данные в новый пул без обращения к клиентам
(информация о старом расположении файлов
удаляется из БД; информация о заданиях и томах остаётся; сами данные остаются);
управляющее задание не ассоциируется с файлами;
одновременно читать и писать на одно устройство bacula не умеет (хотя обещает для дисков),
так что необходмо описывать виртуальные ленточные библиотеки;
дополнения несовместимы с миграцией/копированием/виртуальными копиями;
порождённые задания пишут в bootstrap файл, определённый в описании исходного задания;
в bootstrap файл пишется информация о непонятно какой копии,
инкрементальные задания дописывают его, что с неё восстановится непонятно;
время начала и завершения задания берутся из исходных заданий (добавляется поле RealEndTime)
- Copy - копирование ранее скопированных данных из одного пула в другой
(в версии 5.0 и внутри пула, в версии 7 и между серверами хранения);
управляющее задание не ассоциируется с файлами;
для восстановления с копии необходимо явно указать номер задания по переносу данных (ключ copies команды restore выдаёт его);
при удалении скопированного задания копия становится оригиналом; см. замечания к Migrate
- Level (подтип задания по умолчанию, может быть изменён планировщиком, командой run или автоматически)
- для Backup:
- Full
- Incremental - файлы, изменившиеся после последнего удачного резервного копирования
любого типа (точнее, имеющие время изменения (mtime и ctime) после времени
начала задания резервного копирования с тем же именем, тем же набором файлов и тем же клиентом; см. Accurate);
если директор не нашёл успешного полного копирования (те же задание, клиент и набор файлов) или превышен Max Full Interval,
то задание преобразуется в Full, если превышен Max Virtual Full Interval, то задание преобразуется в Virtual Full;
любое изменение описания набора файлов превращает его в другой набор
(ранее сравнивались MD5 описания, теперь сравниваются списки файлов?);
времена у директора и клиента должны быть синхронизованы (bacula делает попытку учесть разницу)
- Differential - файлы, изменившиеся после последнего полного копирования, аналогично Incremental
- VirtualFull - слияние самой свежей полной резервной копии с последующими копиями изменений
(Synthetic Backup, Consolidation, Virtual Backup, Vbackup) в новую полную
резервную копию в другом пуле (или в том же самом, но об избегании
блокировок устройства хранения необходимо позаботится самостоятельно), без использования клиента;
используется NextPool из описания пула или планировщика или задания для определения пула записи);
одновременно читать и писать на одно устройство bacula не умеет (хотя обещает для дисков),
так что необходмо описывать виртуальные ленточные библиотеки;
несколько заданий могут одновременно читать из одного тома с версии 7.0;
при отсутствии необходимого количества исходных заданий завершается с ошибкой;
время начала и завершения задания берутся из последнего исходного задания (добавляется поле RealEndTime);
в команде "run jobid=" можно явно указать идентификатор последнего задания в цепочке консолидации или всю цепочку заданий через запятую
(пропускаются задания с другим именем, если не указано alljobid=);
в этом случае уровень получившегося задания не обязательно Full и определяется по самому старшему уровню заданий из цепочки;
bootstrap файл дописывается в конец, для восстановления его начало надо обрезать вручную;
- Base - базовая точка отсчёта для всех (включая Full) дальнейших резервных копирований
- для Verify (типы атрибутов файлов для сравнения задаются в описании набора файлов директивой verify):
- InitCatalog (запоминает атрибуты файлов в каталоге, данные не запоминаются)
- Catalog (сравнивает атрибуты в каталоге с текущим состоянием файлов; "run jobid=номер-задания-InitCatalog job=имя"; изменения вносятся в каталог)
- VolumeToCatalog (сравнивает атрибуты в каталоге с данными на томе, имя задания сохранения может указываться директивой Verify Job
или номер в команде run; проверка производится на клиенте,
т.е. все данные (только заголовки?) туда пересылаются, там распаковываются и сравниваются;
bls в несколько раз быстрее;
изменения вносятся в каталог;
при обнаружении ошибки в томе выдаётся список файлов - надо быть готовым получить на экран и письмом список
из десятков миллионов файлов и иметь место в рабочем каталоге);
у Windows клиентов в каталоге всегда на 1 файл больше (VSS?)
проверка всех заданий
gui on
@output /tmp/jobs.list
list jobtype=Backup jobs
@output
gui off
awk '{if ($17=="T") print}' /tmp/jobs.list| awk '{print "run job=Verify Level=VolumeToCatalog client="$4"-fd fileset="$4" pool="$4" storage=File-"$4" jobid="$2" yes"}' > /tmp/jobs.console
@input /tmp/jobs.console
- DiskToCatalog (сравнивает атрибуты файлов указанного задания из каталога с текущим
состоянием файлов, имя задания сохранения может указываться директивой Verify Job или номер в команде run;
bls в несколько раз быстрее;
точки монтирования есть в каталоге, но не находятся на диске;
что сравнивается для инкрементального задания непонятно;
только 1 задание, нельзя проверить цепочку Full+Incremental)
- Data (сравнивает данные на томе с текущим состоянием файлов;
при использовании опции Accurate также проверяются данные каталога;
bls в несколько раз быстрее;
чтение файлов на клиенте отсутствует (а как же проверяются контрольные суммы?)
только да или нет; клиент д.б. версии 7.4 и выше);
например, проверка выполненного задания:
Job {
Name = Verify
Type = Verify
Level = VolumeToCatalog
Accurate = Yes
Client = имя-клиента
FileSet = имя-набора-данных
Messages = Standard
Pool = имя-пула
Maximum Concurrent Jobs = 1
Allow Mixed Priority = Yes
}
# соответствуют ли записи в БД содержимому тома
run job=Verify jobid=номер
# то же задание Verify можно использовать для проверки других заданий
run job=Verify client=другой-клиент fileset=другой-набор pool=другой-пул storage=имя-сервера-хранения jobid=номер
# что изменилось на диске (ожидается полное задание) относительно записей в каталоге
run job=Verify level=DiskToCatalog client=другой-клиент fileset=другой-набор pool=другой-пул storage=имя-сервера-хранения jobid=номер
# сравнение содержимого тома и файловой системы
run job=Verify level=Data client=другой-клиент fileset=другой-набор pool=другой-пул storage=имя-сервера-хранения jobid=номер
- Base (список имён опорных заданий) - при любом типе резервного копирования не изменившиеся
со времени базового копирования файлы не дублируются (опорное задание может относиться к другому клиенту),
для адекватного использования требуется сверка контрольных сумм;
bscan не работает
- Accurate (No; учёт удалённых и переименованных файлов при резервировании и восстановлении (Accurate Backup);
FD получает от директора список файлов, сохранённых в предыдущих заданиях, и их атрибуты для сравнения с текущим состоянием;
без Accurate перемещённые файлы и каталоги не будут сохранены в режиме Incremental (mtime и ctime не меняются),
а удалённые между полным и инкрементальным резервированием файлы будут понапрасну восстановлены);
для файловых систем с большим количеством файлов требуется много ОП на клиенте (128 MB на миллион файлов);
клиент версии ? под Solaris 8 падает
- Verify Job (имя задания создания или изменения каталога для задания типа Verify (ищется последнее задание с этим именем);
см. VolumeToCatalog и DiskToCatalog;
по умолчанию сравнение с только что завершившимся заданием)
- JobDefs (имя шаблона задания; значения директив шаблона используются в качестве умолчания)
- Bootstrap (для задания восстановления указывается имя файла,
который содержит всю необходимую для восстановления информацию, включая имена файлов;
позволяет восстанавливать файлы в отсутствии записей в каталоге; может задаваться или создаваться командой restore)
- Write Bootstrap (шаблон имени файла;
при резервном копировании в этот файл записывается информация, которая позволяет
легче восстанавливать файлы; для полного сохранения и копирования файл перезаписывается, для
частичного и VirtualFull - добавляется новая запись; рекомендуется хранить эти файлы на другом хосте;
если имя файла начинается с '|', то файл подаётся на вход указанной программы,
например, можно послать его почтой; замена символов в шаблоне:
- %% - %
- %c - имя клиента
- %d - имя директора
- %e - статус выполнения (OK, Error, Fatal Error, Canceled, Differences, Unknown term code)
- %i - идентификатор задания
- %j - уникальный идентификатор задания
- %l - тип резервного копирования
- %n - имя задания
- %s - время (?)
- %t - тип задания
- %v - имя тома (а если их несколько?)
- Client (имя ресурса, только один на задание, с каким клиентом работать)
- FileSet (имя ресурса, только один на задание, какие файлы и как сохранять; для Restore обязательно указывается, но не используется)
- Messages (имя ресурса, как обрабатывать сообщения)
- Snapshot Retention (0 sec (сразу по завершению копирования);
время удержания снимков в каталоге и клиенте; для реальной очистки необходимо выполнить команду "snapshot prune";
приоритетнее аналогичной директивы ресурса Client)
- Pool (имя ресурса, не более 1 на задание; для задания резервного копирования (кроме виртуальной копии) определяет пул для записи,
для задания миграции, копирования и виртуальной копии - исходный пул для поиска копируемых заданий)
- [Full | Differential | Incremental | Virtual Full] Backup Pool (имя ресурса, наивысший приоритет
при определении имени пула; в т.ч. если задание типа Incremental было преобразовано в Full или Virtual Full)
- Backups To Keep (при консолидации Virtual Full оставлять указанное количество заданий неполного копирования неконсолидированными -
Progressive Virtual Full, Incremental Forever with Consolidation; не работает с Differential)
- Delete Consolidated Jobs (no; при консолидации Virtual Full удалять консолидированные задания)
- Schedule (имя ресурса, не более 1 на задание (может иметь много команд Run), если не указать, то задание можно будет запускать только вручную)
- Storage (имя ресурса или список через запятую, описывает устройство хранения, меньший приоритет, чем из описания пула)
- StorageGroupPolicy (ListedOrder; способ выбора сервера хранения из списка: ListedOrder, LeastUsed, FreeSpace, LastBackedUpTo, LastBackupedToStore,
FreeSpaceLeastUsed)
- StorageGroupPolicyThreshold (уточнение для выбора при использовании политики FreeSpaceLeastUsed)
- Max Start Delay (0 (бесконечность); максимальное ожидание в очереди на запуск)
- [Incremental | Differential] Max Run Time (0 (бесконечность); от момента запуска;
в любом случае убивается сторожевым механизмом через 200 (было 6) дней работы)
- Max Run Sched Time (Max Start Delay + Max Run Time; максимальное время с запланированного момента запуска)
- Max Wait Time (0; ожидание установки тома от момента запуска)
- Incremental Max Wait Time (0; убрано в версии 3)
- Differential Max Wait Time (0; убрано в версии 3)
- Maximum Spawned Jobs (600 (было 300 и 100); ограничение на количество заданий, генерируемых заданием миграции и копирования; суммарное? в моменте?)
- Maximum Bandwidth (в байтах/сек, k/s, kb/s, m/s или mb/s; без учёта сжатия и TLS)
- Max Full Interval (0 (бесконечность); позволяет задать максимальный
промежуток времени от начала последнего полного копирования при превышении которого
резервное копирование изменений превращается в полное копирование)
- Max Virtual Full Interval (0 (бесконечность); позволяет задать максимальный
промежуток времени от начала последнего полного копирования при превышении которого
резервное копирование изменений и дифференциальное превращается в виртуальное полное копирование;
в документации упоминается также полное копирования, надеюсь, что нет)
- Max Diff Interval (0 (бесконечность); позволяет задать максимальный
промежуток времени от начала последнего дифференциального копирования при превышении которого
резервное копирование изменений превращается в дифференциальное копирование, удалён?)
- Max Full Age (0 (бесконечность); позволяет задать максимальный интервал между полным копированием
и текущим копированием изменений или дифференциальным копированием;
при его превышении делается полное копирование, удалён?)
- Prefer Mounted Volumes (yes; предпочитать устройство с подходящей смонтированной лентой или свободное;
минимизирует количество монтирований или распараллеливает запись)
- Prune Jobs (no; значение "yes" перекрывает настройки AutoPrune в ресурсе Client)
- Prune Files (no; значение "yes" перекрывает настройки AutoPrune в ресурсе Client)
- Prune Volumes (no; значение "yes" перекрывает настройки AutoPrune в ресурсе Pool)
- ?Selection Type (способ выбора заданий для миграции или копирования из пула;
дополнительный параметр задаётся директивой Selection Pattern)
- SmallestVolume (выбираются задания из наименее занятого тома)
- OldestVolume (выбираются задания из тома, последняя запись в который самая давняя)
- Client (список клиентов, данные которых сохранены в тома исходного пула,
фильтруется регулярным выражением из Selection Pattern; выбираются все задания
для отфильтрованного списка клиентов)
- Volume (выбираются задания из томов исходного пула, имена которых (томов)
удовлетворяют регулярному выражению из Selection Pattern)
- Job (список имён заданий, данные которых сохранены в тома исходного пула,
фильтруется регулярным выражением из Selection Pattern; выбираются все задания
для отфильтрованного списка заданий)
- SQLQuery (Selection Pattern должен содержать SQL-запрос SELECT, возвращающий
нужные JobId для миграции в качестве первого поля), например, самая свежая полная копия:
Selection Type = SQLQuery
Selection Pattern = "SELECT DISTINCT Job.JobId FROM Client,Job,JobMedia,Media,Pool
WHERE Client.Name='имя клиента' AND
Client.ClientId=Job.ClientId AND
Level='F' AND
JobStatus IN ('T', 'W') AND
JobMedia.JobId=Job.JobId AND
JobMedia.MediaId=Media.MediaId AND
Pool.PoolId=Job.PoolId AND
Pool.Name= 'имя пула'
ORDER BY Job.StartTime DESC LIMIT 1;"
- PoolOccupancy (вычисляется размер исходного пула (основывается на записях в БД о томах);
если он превышает значение параметра
пула "Migration High Bytes", то задания из самых "старых" томов выбираются для
миграции до достижения параметра пула "Migration Low Bytes"
- PoolTime (выбираются задания, которые хранятся в пуле дольше указанного в параметре
пула Migration Time)
- Pool Uncopied Jobs (выбрать для копирования ещё нескопированные задания)
- ?Selection Pattern (дополнительный параметр - в кавычках - для Selection Type)
- ?Next Pool (имя пула назначения для задания миграции, имеет приоритет над описанием пула)
- ?Purge Migration Job (no; удалить из каталога информацию о перемещённых заданиях сразу по завершению миграции)
- Run Script { ... } (выполнение скрипта до или после задания;
можно указывать несколько директив;
в версии 3 можно указывать несколько команд в секции;
стандартный вывод команды попадает в отчёт задания; (замена символов:
%% - %, %c - имя клиента, %d - имя демона, %e - код завершения: OK, Error, Fatal Error, Canceled, Differences, Unknown;
%b - количество байт, %C - клонированное задание, %i - идентификатор задания, %j - уникальный идентификатор задания,
%l - уровень резервного копирования, %n - имя задания, %s - время (since), %t - тип задания,
%D - имя директора, %E - нефатальных ошибок, %f - имя набора файлов (только для директора), , %h - адрес клиента, %F - количество файлов,
%I - идентификатор задания миграции или копирования, %p - имя пула (только для директора), %P - PID, %o - приоритет, %R - прочитано байт,
%S - имя предыдущего задания (только для клиента), %v - имя тома (только для директора), %w - имя сервера хранения, %x - спулинг);
директивы:
- Runs When = [Never | Before | After | Always | AfterVSS | AfterSnapshot]
- Runs On Success = yes (After выполняется только при успешном завершении резервного копирования)
- Runs On Failure = no (After выполняется только при успешном завершении резервного копирования)
- Runs On Client = yes (только если задание выполняется на клиенте - Copy, Migration, Admin не выполняются на клиенте)
- Fail Job On Error = yes (при ошибке скрипта (возврат не 0) считать задание проваленным;
например, можно использовать для учёта праздников)
- Command = полное-имя (в документации указано, что здесь можно использовать
полное имя программы, имя программы из $PATH или конструкцию вида "sh -c имя-скрипта",
но когда-то я указывал просто имя скрипта и работало;
можно использовать несколько раз;
на Windows можно запускать .com, .exe, .bat (на экране возникает командного окно);
поиск относительных имён производится аналогично "cmd /c" (запускается 'cmd /c "строка"');
обрабатывается %PATH% и системные переменные окружения (только System Environment);
на Windows полное имя файла записывается с указанием буквы
устройств, но с использованием прямой косой черты; если имя содержит спецсимволы,
то его необходимо заключить в дополнительные кавычки, которые "прикрыть" символами '\';
для надёжности рекомендуется запускать .bat без параметров,
в который уже вставлять всё остальное; при успешном завершении выполнять "exit 0")
- Console (команда, выполняемая директором: delete, disable, enable, estimate, list,
llist, memory, prune, purge, reload, status, setdebug, show, time, trace, update,
version, .client, .jobs, .pool, .storage. ; вывод в журнал от имени задания с номером 0);
можно использовать несколько раз;
- Run Before Job (сокращение от Run Script - выполняется на сервере до резервного копирования)
- Run After Job (сокращение от Run Script - выполняется на сервере после успешного резервного копирования)
- Run After Failed Job (сокращение от Run Script - выполняется на сервере после неудачного резервного копирования)
- Client Run Before Job (сокращение от Run Script - выполняется на клиенте до резервного копирования)
- Client Run After Job (сокращение от Run Script - выполняется на клиенте после резервного копирования)
- Console Run Before Job (сокращение от Run Script - выполняется в консоли перед заданием; удалена?)
- Console Run After Job (сокращение от Run Script - выполняется в консоли после задания; удалена?)
- Rerun Failed Levels (no; если при резервном копировании в инкрементальном или дифференциальном режиме
обнаруживается, что предыдущее полное сохранение завершено с ошибкой, то делается
полное сохранение; полезно для рабочих станций;
директива Ignore FileSet Changes при этом не выполняется,
может получиться "лишнее" полное копирование;
преобразование инкрементального копирования в полное производится в момент планирования,
а не при начале выполнения, если планирование происходит во время полного копирования,
то получится "лишнее" полное копирование;
пул определяется исходным инкрементальным заданием, а не получившимся полным)
- Spool Data (no; буферизовать на диск при записи на ленту; при этом каталог также кешируется на диск)
- Spool Attributes (no (yes с версии 6); сервер хранения будет буферизовать атрибуты файлов перед передачей
их директору в своём рабочем каталоге, отдельный файл на задание - имя-sd.attr.имя-задания.дата.spool,
150 байт на файл - 30GB для 200 миллионов файлов;
аварийно завершённые задания не будут иметь записей о файлах в БД)
- Spool Size (по умолчанию из Maximum Spool Size из описания Device)
- Where (для задания восстановления указывается директория, в которую будут восстанавливаться
файлы по умолчанию; '/' - на прежнее место)
- Add Prefix (для задания восстановления; добавляется к именам каталогов слева)
- Add Suffix (для задания восстановления; добавляется к именам файлов справа)
- Strip Prefix (для задания восстановления; строка удаляется от начала имени),
например, перенос файлов с диска C: на D:
Strip Prefix = c:
Add Prefix = d:
- RegexWhere (для задания восстановления; регулярное выражение используется
для переименования файлов при восстановлении)
- Replace (always; для задания восстановления указывается, что делать если файл уже существует:
always (заменять), ifnewer (заменять, если восстанавливаемый файл новее имеющегося), ifolder, never)
- RestoreClient (для задания восстановления указывается клиент восстановления по умолчанию; по умолчанию равен клиенту резервного копирования)
- Prefix Links (no; при восстановлении "не на место" абсолютные символьные ссылки
модифицируются в соответствии с Where)
- Maximum Concurrent Jobs (1; ограничивает параллельное выполнение заданий с этим именем)
- Reschedule On Error (no; при ошибочном завершении заново запланировать выполнение задания
с учётом интервала (Reschedule Interval) и количества повторений (Reschedule Times); прерванные задания не повторяются;
запланированные задачи не сохраняются при перезапуске директора)
- Reschedule Incomplete Jobs (yes; незавершённые (?) задачи планирутся заново
с учётом интервала (Reschedule Interval) и количества повторений (Reschedule Times); прерванные задания не повторяются)
- Reschedule Interval (30 min; интервал между попытками)
- Reschedule Times (0; количество повторений; 0 - это бесконечность)
- Allow Incomplete Jobs (yes; если no, то незавершённые задания преобразуются в ошибочные)
- Allow Duplicate Jobs (yes; запускать задание с тем же именем, если предыдущее не завершилось;
при запрете одновременного запуска одно из заданий будет прервано, для определения какое из дублирующихся заданий прерывать
используются директивы Allow Higher Duplicates (удалена), Cancel Queued Duplicates, Cancel Lower Level Duplicates, Cancel Running Duplicates;
по умолчанию - текущее (только что запущенное))
- Allow Higher Duplicates (всегда no; если дубликаты запрещены, то оставить задание с высшим приоритетом;
не работала как ожидалось и была удалена
- Cancel Lower Level Duplicates (no; прервать задание низшего уровня (Incremental) в пользу высшего (Full); при равенстве уровней директива игнорируется)
- Cancel Queued Duplicates (no; если дубликаты запрещены, то прервать поставленное в очередь (первое),
но ещё не запущенное, задание с тем же именем)
- Cancel Running Duplicates (no; если дубликаты запрещены, то прервать уже выполняющееся (первое)
задание с тем же именем)
- Run (позволяет запустить другое задание до текущего (не взирая на приоритет);
возможно запустить задание с тем же именем - клонирование задания (рекурсия не допускается);
в качестве значения в кавычках указываются параметры как для консольной команды run (%l - уровень текущего задания;
%s - время отсечки (since) текущего задания): "nightly storage=DDS-4 level=%l since=\"%s\"";
можно модифицировать сервер хранения (позволяет одновременно сохранять данные на 2 устройства), уровень копирования и пр.;
- Priority (10; максимальный приоритет - 1;
действует только на планируемые задания - если низкоприоритетное задание уже запущено, то планируемое высокоприоритетное будет его ждать;
если при этом будет запланировано ещё одно низкоприоритетное задание, то оно будет ждать ждущего высокоприоритетного;
задания с различными приоритетами не могут исполняться параллельно, если не установлено Allow Mixed Priority
- Allow Mixed Priority (no; позволяет высокоприоритетному заданию начаться, не дожидаясь завершения низкоприоритетного;
д.б. установлено во всех запущенных заданиях)
- Write Part After Job (no; при записи на DVD создаётся новая сессия по концу задания не
дожидаясь заполнения дискового кеша, что гарантирует опустошение кеша на момент
завершения задания; удалена)
- Heartbeat Interval (0 - не изменять значение по умолчанию; удалена)
- JobDefs (описание шаблона для заданий; можно использовать любые директивы Job, но не все
из них наследуются во всех версиях: Messages, Storage, Pool; не рекомендую связываться)
- Catalog (описание интерфейса с РСУБД для хранении информации о заданиях и файлах клиента;
описания всех пулов хранятся во всех каталогах)
- Name (имя ресурса; указывается в ресурсе Client)
- DB Socket (имя локального сокета; только для MySQL;
если не указаны имя сокета или адрес DB, то используется стандартный сокет)
- DB Address (имя или IP адрес СУБД)
- DB Port
- [db]user
- [db]password
- DB Name
- в версии 3 добавлена возможность доступа к СУБД через libdbi, а в версии ? убрана:
- dbdriver ("dbi:mysql")
- dbaddress
- dbport
- dbname
- user
- password
- в версии 7.4 добавлена возможность соединения с СУБД MySQL по SSL
- dbsslkey
- dbsslcert
- dbsslca (сертификат CA)
- dbsslcipher (алгоритм шифрования)
- Messages (правила рассылки сообщений)
- Console (
определяет права доступа для консоли;
у анонимной консоли (отсутствует Name) по умолчанию имеются права на всё, её пароль в ресурсе Director;
у именованной консоли по умолчанию права отсутствуют;
рекомендуется завести отдельную консоль для монитора
с пустыми ACL и списком команд "status, .status";
- Name (должно быть указано в настройках консоли в ресурсе Console)
- Password (должно быть указано в настройках консоли в ресурсе Console для именованной консоли и в ресурсе Director анонимной)
- AuthenticationPlugin (описание дополнения аутентификации BPAM (Bacula Pluggable Authentication Modules) - "ldap:параметры";
"totp:параметры" (Time-based One-Time Password; требуется qrencode, btotp (не поставляется), mpack (?)))
- JobACL (список через запятую имён ресурсов заданий, к которым имеет доступ данная консоль;
можно использовать ключевое слово "all"; можно использовать несколько директив; можно использовать шаблоны)
- ClientACL (можно использовать ключевое слово "all"; можно использовать шаблоны)
- BackupClientACL (можно использовать ключевое слово "all"; можно использовать шаблоны)
- RestoreClientACL (можно использовать ключевое слово "all; можно использовать шаблоны")
- DirectoryACL (список каталогов, в которые можно восстанавливать, через запятую; можно использовать ключевое слово "all")
- UserIdACL (список uid/gid при восстановлении; для Windows только "all"; можно использовать шаблоны)
- StorageACL (можно использовать ключевое слово "all"; можно использовать шаблоны)
- ScheduleACL (можно использовать ключевое слово "all"; можно использовать шаблоны)
- PoolACL (можно использовать ключевое слово "all"; можно использовать шаблоны)
- FileSetACL (можно использовать ключевое слово "all"; можно использовать шаблоны)
- CatalogACL (можно использовать ключевое слово "all"; можно использовать шаблоны)
- CommandACL (список команд, к которым имеет доступ данная консоль; например: status; можно использовать ключевое слово "all")
- WhereACL ("/tmp/bacula-restores"; куда можно восстанавливать файлы; можно использовать ключевое слово "all";
"/" означает восстановление на исходное место; можно использовать несколько директив; можно использовать шаблоны)
- Plugin Options ACL (удалено?)
- Counter (определяет собственные переменные для использования в директиве
Label Format; там же можно добавлять единицу при использовании)
- Name (имя переменной)
- Minimum (0; также значение по умолчанию)
- Maximum (2^31)
- Catalog (имя ресурса с описанием каталога, в котором хранить счётчик; иначе счётчик будет сбрасываться при
каждом запуске bacula)
- Statistics (параметры сбора статистики в CSV (время, метрика, значение) или Graphite или команда statistics;
например, bacula.dir.config.clients, bacula.dir.config.jobs, bacula.dir.config.filesets, bacula.dir.config.pools, bacula.dir.config.schedules,
bacula.dir.config.storages, bacula.jobs.queued.all, bacula.jobs.running.all, bacula.jobs.all, bacula.jobs.success.all,
bacula.jobs.error.all, bacula.jobs.warning.all, bacula.jobs.files, bacula.jobs.bytes, bacula.volumes.all, bacula.volumes.available,
bacula.volumes.bytes, bacula.volumes.errors.all, bacula.volumes.full.all, bacula.volumes.used.all,)
- Name (используется администратором в команде statistics?)
- Description
- Interval (300; интервал в секундах между сбором информации)
- Type ={CSV|Graphite}
- Metrics=фильтр (можно использовать шаблоны с "*", "?" и "!")
- Prefix=строка (добавляется перед именем метрики)
- File=имя-файла (для CSV)
- Host=имя-хоста-Graphite
- Port=номер-порта-Graphite
Гибкость настройки системы 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,
и включать в конфигурационный файл с помощью директивы '@'.
Мотивация. После многих лет успешного использования схемы перекрёстного опыления
стала мешать необходимость еженедельно делать полную копию всего набора файлов несмотря на то, что за неделю меняется порядка 10%.
Количество наборов, которые не успевают сохраняться за сутки, перевалило за десяток, несмотря на все
ухищрения в виде ручного деления набора и использование lvmcache.
Пришло время опробовать средство консолидации резервных копий, которое позволяет обойтись исключительно
инкрементальными копиями, что сокращает время копирования и уменьшает нагрузку на рабочие массивы.
К сожалению, увеличивается нагрузка на массив резервной копии, но эта нагрузка имеет последовательный характер.
Диспозиция. Имеется 2 серверных помещения, в которых размещены более сотни серверов,
которые большей частью представляют собой вычислительные узлы и файловые серверы общего пользования
для оперативной работы (быстрые диски и SSD кеш) и долговременого хранения (медленные диски).
В большинстве случаев применяются различные версии CentOS, в небольшом количестве Solaris, HP-UX и Windows.
Основной объём хранимой информации представляет собой домашние каталоги разработчиков, а также коллективные архивы групп.
Имеются также сверхоперативные хранилища, но они не резервируются.
Также по 13 этажам здания разбросаны ПК сотрудников (различные виды Linux и Windows), информацию с которых также необходимо резервировать.
Изначально было выбрано резервное копирование на диски.
Задачи резервного копирования были сгруппированы по следующим типам:
- домашние каталоги разработчиков и общие данные
- небольшое количество файловых систем,
каждая файловая система имеет большой размер (десятки терабайт) и большое количество файлов (сто миллионов),
несколько файловых систем могут находиться на 1 сервере;
необходимо обеспечить восстановление файловых систем на подготовленные сервера в течение суток (RTO), что непросто для таких объёмов;
большая глубина (RPO) не требуется, т.к. эти данные архивируются с достаточной глубиной
- месячный цикл не подошёл из-за проблем со скоростью восстановления наборов файлов сбольшим количеством файлов;
придётся мириться с недельным циклом, который оказывает бОльшую нагрузку на систему хранения
- недельный цикл состоит из ежедневной инкрементальной копии и еженедельной виртуальной полной копии в тот же пул;
попытки удаления консолидированных задач с резервированием (Backups To Keep) и без не удались -
обязательно возникал неприемлемый побочный эффект;
пул состоит фиксированного количества томов - (2 полных и 14 инкрементальных (не все полезны в любой момент времени);
1 задание на том, время хранения 13 дней 1 минута
- инициализация производится нормальным полным копированием в момент указанный в планировщике для виртуальной копии
с последующим включением планировщика;
если инициализация не укладывается в сутки, то необходимо пропустить цикл
или придётся удалять эту затравку после первой архивной копии;
- возможность архивации обеспечивается отдельным пулом томов и задачей копирования последней полной копии из основного пула в архивный пул
на следующий день после виртуальной полной копии, возможно хранение томов архивного пула на отдельном носителе или отдельном
сервере хранения в отдалении для увеличения катастрофоустойчивости;
количество томов в архивном пуле задаётся жёстко исходя из требуемой глубины или возможностей;
время хранения 10 лет для возможности архивации выведенных из эксплуатации, но переиспользование тома при исчерпании количества
томов в пуле вне зависимости от времени хранения (Purge Oldest Volume);
задание копирования портит bootstrap-файлы несмотря на указание использовать отдельный bootstrap-файл
(т.к. реализовано в виде надстройки с генерацией управляющего задания и задания создающего полную копию);
- обеспечивается восстановление на любой день на глубину от 1 до 2 недель и с недельным интервалом на требуемую (возможную) глубину архива;
обеспечить фиксированную глубину для экономного использования дискового пространства не удалось
- подготовка серверов к восстановлению (установка системы) обеспечивается другими средствами
- системные данные серверов и сервисы
- имеют небольшой размер (до 1 ТБ) и небольшое количество файлов (до 3 миллионов);
имеются СУБД и репозитории, что требует особого подхода в некоторых случая (см. пример с каталогами bacula);
необходимо обеспечить восстановление файловых систем на подготовленные сервера в течение суток (RTO);
требуется большая глубина (RPO), т.к. эти данные более нигде не хранятся;
требуется долговременное хранение данных серверов, выведенных из эксплуатации (резервное копирование прекращается, но данные могут потребоваться);
- месячный цикл состоит из ежедневной инкрементальной копии и ежемесячной виртуальной полной копии в тот же пул;
попытки удаления консолидированных задач с резервированием (Backups To Keep) и без не удались -
обязательно возникал неприемлемый побочный эффект;
пул состоит фиксированного количества томов - 64 или 65 (2 (3?) полных и 62 (63?) инкрементальных (не все полезны в любой момент времени);
1 задание на том, время хранения 61 день 10 минут
- инициализация производится нормальным полным копированием в момент указанный в планировщике для виртуальной копии
с последующим включением планировщика;
- возможность архивации обеспечивается отдельным пулом томов и задачей копирования последней полной копии из основного пула в архивный пул
на следующий день после виртуальной полной копии, возможно хранение томов архивного пула на отдельном носителе или отдельном
сервере хранения в отдалении для увеличения катастрофоустойчивости;
количество томов в архивном пуле задаётся жёстко исходя из требуемой глубины или возможностей;
время хранения 10 лет для возможности архивации выведенных из эксплуатации, но переиспользование тома при исчерпании количества
томов в пуле вне зависимости от времени хранения (Purge Oldest Volume);
задание копирования портит bootstrap-файлы несмотря на указание использовать отдельный bootstrap-файл
(т.к. реализовано в виде надстройки с генерацией управляющего задания и задания создающего полную копию);
- обеспечивается восстановление на любой день на глубину от 1 до 2 месяцев и с месячным интервалом на требуемую (возможную) глубину архива;
обеспечить фиксированную глубину для экономного использования дискового пространства не удалось
- подготовка серверов к восстановлению (установка системы) обеспечивается другими средствами
- информация с ПК имеет небольшой размер (до 1 ТБ) и небольшое количество файлов (до 3 миллионов);
необходимо обеспечить восстановление файловых систем на подготовленные ПК в течение суток (RTO);
требуется большая глубина (RPO), т.к. эти данные более нигде не хранятся, а люди уходят в отпуска;
требуется долговременное хранение данных уволившихся сотрудников (резервное копирование прекращается, но данные могут потребоваться);
можно использовать месячный цикл как для системных данных серверов, но с индивидуальным подходом ко времени запуска задания
инкрементального резервного копирования (в обговоренные рабочие часы рабочих дней);
виртуальное резервное копирование и копирование в архив можно по-прежнему делать по ночам;
список файлов также необходимо согласовывать индивидуально
При наличии 2 серверных было принято решение использовать 2 сервера копирования
со схемой "перекрёстного опыления"
(резервное копирование серверов из первой серверной осуществлялось сервером копирования из второй серверной,
а серверов из второй серверной - сервером копирования из первой серверной),
чтобы увеличить катастрофоустойчивость решения и обеспечить возможность восстановления самих серверов резервного хранения и накопленных БД.
Выбор сервера копирования для ПК осуществляется исходя из наличия места.
Сервер копирования включает сервер хранения, директор и СУБД.
Возможно добавление серверов хранения на удалённой территории для архивных пулов, но требуется большая пропускная способность каналов
передачи данных (пересылаются полные копии).
Предварительно обеспечить взаимное резервное копирования каталогов директоров.
Настройки клиентов (разрешаем обоим директорам доступ ко всем клиентам, чтобы не менять при перемещении,
все пароли лучше сделать разными):
Director {
Name = первый-dir
Password = "пароль от директора 1 к клиенту N"
}
Director {
Name = второй-dir
Password = "пароль от директора 2 к клиенту N"
}
FileDaemon {
Name = ИмяХоста-fd
FDport = 9102
WorkingDirectory = /usr/local/bacula921/var
Pid Directory = /var/run
Maximum Concurrent Jobs = 20
Plugin Directory = /usr/local/bacula921/lib
}
Messages {
Name = Standard
director = backup-orvs-dir = all, !skipped, !restored
# к сожалению пока bacula не проверяет имя директора
# director = backup2-orvs-dir = all, !skipped, !restored
}
Настройки серверов хранения, резервные копии хранятся в /backup/bacula (права 750 для baculas:bacula),
общая часть (приведён первый, второй по аналогии):
Storage {
Name = первый-sd
Description = "test backup storage server in подразделение (расположение) Имя-Хоста"
SDPort = 9103
# здесь хранится кеш атрибутов файлов до завершения задания, требуется сотня гигабайт, права 775 для baculas:bacula
WorkingDirectory = "/backup/bacula/spool"
Pid Directory = "/var/run"
Plugin Directory = "/usr/local/bacula921/lib"
Maximum Concurrent Jobs = 20
Client Connect Wait = 60m
TLS Enable = yes
# пусть клиент решает, нужна защита иили нет
TLS Require = no
# проверка клиента по разовому паролю, полученному от директора
TLS Verify Peer = no
TLS CA Certificate File = "/usr/local/bacula921/etc/ca.crt" # сертификат нашего центра сертификации
TLS Certificate = "/usr/local/bacula921/etc/доменное-имя-сервера.crt" # сертификат сервера
TLS Key = "/usr/local/bacula921/etc/доменное-имя-сервера.open.key" # открытый ключ сервера
}
Director {
Name = первый-dir
Password = "пароль от директора 1 к серверу хранения 1"
TLS Enable = yes
# передача от директора д.б. защишена
TLS Require = yes
# сертификат директора надо проверить
TLS Verify Peer = yes
TLS Allowed CN = "доменное имя хоста директора 1"
TLS CA Certificate File = "/usr/local/bacula921/etc/ca.crt" # сертификат нашего центра сертификации
TLS Certificate = "/usr/local/bacula921/etc/доменное-имя-сервера.crt" # сертификат сервера
TLS Key = "/usr/local/bacula921/etc/доменное-имя-сервера.open.key" # открытый ключ сервера
}
Director {
Name = второй-dir
Password = "пароль от директора 2 к серверу хранения 1"
TLS Enable = yes
# передача от директора д.б. защишена
TLS Require = yes
# сертификат директора надо проверить
TLS Verify Peer = yes
TLS Allowed CN = "доменное имя хоста директора 2"
TLS CA Certificate File = "/usr/local/bacula921/etc/ca.crt" # сертификат нашего центра сертификации
TLS Certificate = "/usr/local/bacula921/etc/доменное-имя-сервера.crt" # сертификат сервера
TLS Key = "/usr/local/bacula921/etc/доменное-имя-сервера.open.key" # открытый ключ сервера
}
@/usr/local/bacula921/etc/НаборФайлов1.sd.include
...
Messages {
Name = Standard
director = первый-dir = all
# пока имя директора не проверяется
# director = второй-dir = all
}
Настройки серверов хранения, для каждого набора файлов (создаётся подкаталог
/backup/bacula/НаборФайлов1 для хранения томов пула и архивного пула;
такая вычурная конструкция необходима для заданий виртуального копирования, которые читают и пишут в один и тот же пул,
а ещё хочется иметь возможность восстанавливаться, пока что-то пишется):
Autochanger {
Name = FileStorage-НаборФайлов1
Device = FileStorage-НаборФайлов1-Dev1, FileStorage-НаборФайлов1-Dev2, FileStorage-НаборФайлов1-Restore
Changer Command = /dev/null
Changer Device = /dev/null
}
Device {
Name = FileStorage-НаборФайлов1-Dev1
Archive Device = /backup/bacula/НаборФайлов1
Device Type = File
Media Type = File-НаборФайлов1
Maximum Concurrent Jobs = 1
Random Access = Yes
Maximum Network Buffer Size = 65536
LabelMedia = yes
Maximum block size = 262144
RemovableMedia = no
Autochanger = yes
}
Device {
Name = FileStorage-НаборФайлов1-Dev2
Archive Device = /backup/bacula/НаборФайлов1
Device Type = File
Media Type = File-НаборФайлов1
Maximum Concurrent Jobs = 1
Random Access = Yes
Maximum Network Buffer Size = 65536
LabelMedia = yes
Maximum block size = 262144
RemovableMedia = no
Autochanger = yes
}
Device {
Name = FileStorage-НаборФайлов1-Restore
Archive Device = /backup/bacula/НаборФайлов1
Device Type = File
Media Type = File-НаборФайлов1
Maximum Concurrent Jobs = 1
Random Access = Yes
Maximum Network Buffer Size = 65536
LabelMedia = yes
Read Only = yes
Maximum block size = 262144
RemovableMedia = no
Autochanger = yes
AutoSelect = no
}
Настройки директоров, общая часть (приведён первый, второй по аналогии):
Director {
Name = первый-dir
Description = "first backup director подразделение at доменное имя хоста (расположение)"
Password = "пароль для консоли"
Messages = Daemon
WorkingDirectory = "/usr/local/bacula921/var"
PidDirectory = "/var/run"
QueryFile = "/usr/local/bacula921/etc/query.sql"
TLS Enable = yes
TLS Require = yes
TLS Verify Peer = yes
TLS CA Certificate File = "/usr/local/bacula921/etc/ca.crt" # сертификат нашего центра сертификации
TLS Certificate = "/usr/local/bacula921/etc/доменное-имя-сервера.crt" # сертификат сервера
TLS Key = "/usr/local/bacula921/etc/доменное-имя-сервера.open.key" # открытый ключ сервера
TLS Allowed CN = "bacula-console@доменное-имя-консоли1"
...
Heartbeat Interval = 60
Maximum Concurrent Jobs = 20
FD Connect Timeout = 30m
SD Connect Timeout = 60m
DIRport = 9101
MaximumReloadRequests = 256
}
Job {
Name = "RestoreFiles"
Type = Restore
# Bootstrap = /usr/local/bacula921/var/.bsr
Client=НаборФайлов1-fd
# The FileSet and Pool directives are not used by Restore Jobs
# but must not be removed
FileSet=НаборФайлов1
Pool = НаборФайлов1
Messages = Standard
Where = /tmp/bacula-restores
Maximum Concurrent Jobs = 20
Allow Mixed Priority = Yes
}
Job {
Name = Verify
Type = Verify
Level = VolumeToCatalog
Accurate = Yes
Client = НаборФайлов1-fd
FileSet = НаборФайлов1
Messages = Standard
Pool = НаборФайлов1
Maximum Concurrent Jobs = 20
Allow Mixed Priority = Yes
}
@/usr/local/bacula921/etc/НаборФайлов1.dir.include
...
Catalog {
Name = MyCatalog1
DB Socket = /var/lib/mysql/mysql.sock
dbname = "bacula"; dbuser = "bacula"; dbpassword = "пароль пользователя bacula для MySQL"
}
Messages {
Name = Standard
mailcommand = "/usr/local/bacula921/sbin/bsmtp -h smtp-хост -f \"\(Bacula\: первый-dir имя-хоста) \<%r\>\" -s \"Bacula 1: %t %e of %n (%c) %l\" %r"
operatorcommand = "/usr/local/bacula921/sbin/bsmtp -h smtp-хост -f \"\(Bacula\: первый-dir имя-хоста \<%r\>\" -s \"Bacula 1: Intervention needed for %j\" %r"
mail = email-адрес-администратора = all, !skipped
operator = email-адрес-администратора = mount
console = all, !skipped, !saved
append = "/var/log/bacula/bacula.log" = all, !skipped
catalog = all, !skipped
}
Messages {
Name = Daemon
mailcommand = "/usr/local/bacula921/sbin/bsmtp -h smtp-хост -f \"\(Bacula\: первый-dir имя-хоста) \<%r\>\" -s \"Bacula 1 daemon message\" %r"
mail = email-адрес-администратора = all, !skipped
console = all, !skipped, !saved
append = "/var/log/bacula/bacula.log" = all, !skipped
}
Настройки директоров для каждого набора файлов с недельным циклом, оформляются в отдельный файл
имя-набора.dir.include для каждого набора файлов, в котором всё своё, включая своё задание, задание архивирования,
планировщик, планировщик архивирования, клиент, набор файлов, сервер хранения, устройство хранения, пул, пул архивирования.
Несколько раз пробовал группировать ресурсы для упрощения настройки и каждый раз жалел при первом же изменении стратегии резервного копирования.
Job {
Name = НаборФайлов1
# Enabled = No # для временного отключения планирования
Type = Backup
Accurate = Yes
Write Bootstrap = "/usr/local/bacula921/var/НаборФайлов1.bsr"
Client = НаборФайлов1-fd
FileSet = НаборФайлов1
Messages = Standard
Pool = НаборФайлов1
Schedule = НаборФайлов1-incremental-virtualfull
Next Pool = НаборФайлов1
# разрешить только 1 задачу, чтобы задание виртуальной копии дожидалось завершения инкрементальной копии
Maximum Concurrent Jobs = 1
# нам не нужны дполонительные полные копии - места нет
Reschedule Incomplete Jobs = No
# задание виртуальной копии имеет то же самое имя, должно вставать в очередь
Allow Duplicate Jobs = Yes
# требуется для механизма синхронизации заданий резервного копирования каталогов
Allow Mixed Priority = Yes
}
Schedule {
Name = НаборФайлов1-incremental-virtualfull
Run = Level=Incremental mon-sun at 00:00
# рекомендуется разнести клиентов по дням недели
Run = Level=VirtualFull mon at 00:10
}
Client {
Name = НаборФайлов1-fd
Address = доменное-имя-клиента
FDPort = 9102
Catalog = MyCatalog1
Password = "пароль от директора 1 к клиенту 1"
File Retention = 10 year
Job Retention = 10 year
Maximum Concurrent Jobs = 1
}
FileSet {
Name = НаборФайлов1
# не делать полное копирование после изменения списка
Ignore FileSet Changes = Yes
Include {
Options {
wildfile = "*.gz"
wildfile = "*.tgz"
wildfile = "*.tar"
wildfile = "*.Z"
wildfile = "*.xz"
wildfile = "*.7z"
wildfile = "*.DNG"
wildfile = "*.JPG"
wildfile = "*.jpg"
wildfile = "*.VOB"
wildfile = "*.MOV"
wildfile = "*.m2ts"
wildfile = "*.bz2"
wildfile = "vstorm2.tran_int*"
wildfile = "*.rar"
wildfile = "*.zip"
wildfile = "*.rpm"
wildfile = "*.iso"
wildfile = "*.ISO"
wildfile = "*.nrg"
signature = SHA1
accurate = pinscmug
onefs = yes
noatime = yes
checkfilechanges = yes
aclsupport = yes
xattrsupport = yes
verify = pinscm1ug
}
Options {
compression = LZO
signature = SHA1
accurate = pinscmug
onefs = yes
noatime = yes
checkfilechanges = yes
aclsupport = yes
xattrsupport = yes
verify = pinscm1ug
}
# каждую файловую систему отдельно
File = /НаборФайлов1
}
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
}
}
Pool {
Name = НаборФайлов1
Maximum Volumes = 16
Pool Type = Backup
Storage = File-НаборФайлов1
Maximum Volume Jobs = 1
Volume Retention = 13 days 10 min
Recycle = yes
Recycle Oldest Volume = yes
Label Format = "НаборФайлов1-${Year}${Month:p/2/0/r}${Day:p/2/0/r}-${Hour:p/2/0/r}${Minute:p/2/0/r}${Second:p/2/0/r}"
}
Storage {
Name = File-НаборФайлов1
# DNS-разрешение происходит на клиенте, не надо вписывать сюда 127.0.0.1!
Address = доменное-имя-сервера-хранения-1
SDPort = 9103
Password = "пароль директора 1 к серверу хранения 1"
Device = FileStorage-НаборФайлов1
Media Type = File-НаборФайлов1
Autochanger = yes
Maximum Concurrent Jobs = 5
TLS Enable = yes
# нужно, если сервер хранения на другом сервере
TLS Require = no
TLS CA Certificate File = "/usr/local/bacula921/etc/ca.crt" # сертификат нашего центра сертификации
TLS Certificate = "/usr/local/bacula921/etc/доменное-имя-сервера.crt" # сертификат сервера
TLS Key = "/usr/local/bacula921/etc/доменное-имя-сервера.open.key" # открытый ключ сервера
}
Storage {
Name = Restore-НаборФайлов1
# DNS-разрешение происходит на клиенте, не надо вписывать сюда 127.0.0.1!
Address = доменное-имя-сервера-хранения-1
SDPort = 9103
Password = "пароль директора 1 к серверу хранения 1"
Device = FileStorage-НаборФайлов1-Restore
Media Type = File-НаборФайлов1
Autochanger = yes
Maximum Concurrent Jobs = 5
TLS Enable = yes
# нужно, если сервер хранения на другом сервере
TLS Require = no
TLS CA Certificate File = "/usr/local/bacula921/etc/ca.crt" # сертификат нашего центра сертификации
TLS Certificate = "/usr/local/bacula921/etc/доменное-имя-сервера.crt" # сертификат сервера
TLS Key = "/usr/local/bacula921/etc/доменное-имя-сервера.open.key" # открытый ключ сервера
}
Job {
Name = НаборФайлов1-archive
# Enabled = No # для временного отключения планирования
Type = Copy
Accurate = Yes
Selection Type = SQLQuery
Selection Pattern = "SELECT DISTINCT Job.JobId FROM Client,Job,JobMedia,Media,Pool WHERE Client.Name='НаборФайлов1-fd' AND Client.ClientId=Job.ClientId AND Level='F' AND JobStatus IN ('T', 'W') AND JobMedia.JobId=Job.JobId AND JobMedia.MediaId=Media.MediaId AND Pool.PoolId=Job.PoolId AND Pool.Name= 'НаборФайлов1' ORDER BY Job.StartTime ASC LIMIT 1;"
Write Bootstrap = "/usr/local/bacula921/var/НаборФайлов1-archive.bsr"
Client = НаборФайлов1-fd
FileSet = НаборФайлов1
Messages = Standard
Pool = НаборФайлов1
Schedule = НаборФайлов1-archive
Next Pool = НаборФайлов1-archive
Allow Mixed Priority = yes
}
Schedule {
Name = НаборФайлов1-archive
# на следующий день после виртуальной полной копии
Run = Wed at 00:20
}
Pool {
Name = НаборФайлов1-archive
Maximum Volumes = 1
Pool Type = Backup
Storage = File-НаборФайлов1
Maximum Volume Jobs = 1
Volume Retention = 10 year
Recycle = yes
Purge Oldest Volume = yes
Label Format = "НаборФайлов1-archive-${Year}${Month:p/2/0/r}${Day:p/2/0/r}-${Hour:p/2/0/r}${Minute:p/2/0/r}${Second:p/2/0/r}"
}
Требуется проработка аварийных ситуаций:
- задание зависло
- аварийное завершение задания
- инкрементальная копия не успела за сутки - не готовиться?
- виртуальная копия не успела за сутки
- архивное копирование не успело за сутки
- переполнился диск
- упала (зациклилась, заблокировалась) СУБД
- клиента выключили временно
- клиента выключили навсегда
- необходимо перезагрузить сервер с директором
- необходимо восстановить клиента
- необходимо восстановить сервер резервного копирования
- пропала инкрементальная копия в середине (просто удалить хвост?)
Настройки директоров для каждого набора файлов с месячным циклом, оформляются в отдельный файл
имя-набора.dir.include для каждого набора файлов аналогично недельному циклу.
Отличия состоят в планировщике (день месяца вместо дня недели), количестве томов в пуле (65 вместо 16),
времени хранения тома (61+ день вместо 13+)
Катастрофоустойчивый вариант - иметь 2 SD в разных местах и использовать их попеременно.
Не рекомендуется доверять защиту от записи неизменяемых томов настройкам типа "Enabled = no" и пр.,
а закрыть их от записи командой "chmod a-w ...".
Некоторые ключи (обрабатываются также стандартные ключи configure):
- --help[=recursive] (выдать список ключей, полезно при освоении новной версии)
- куда устанавливать файлы:
- --prefix=каталог-установки (например, /usr/local/bacula1502)
- --mandir=каталог-установки-документации (?по умолчанию - /usr/share, несмотря на описание)
- --with-pid-dir (/var/run, в CentOS7 ссылка на /run; сюда будет записываться файл с номером процесса)
- --with-subsys-dir (/var/run/subsys, в CentOS7 нет такого, есть /var/run/lock/subsys; здесь хранятся блокировки процессов)
- собираемые подсистемы и включаемые возможности:
- --enable-bat (консоль управления с графическим интерфейсом;
рекомендуется для управляющего хоста; требует QT4.2 или QT5 (в FC6 пакеты qt4, qt4-devel, qt4-x11; в F10 - в пакете qt);
не работает при сборке только клиента;
при наличии нескольких qt перед выполнением ./configure требуется установить переменную окружения
QTDIR=/usr/lib64/qt4 и добавить /usr/lib64/qt4/bin в PATH)
- --with-qwt[=каталог] (пакеты qwt и qwt-devel требуются для сборки bat) (устарело)
- --enable-bwx-console (консоль под wxWidgets; не имеет смысла; требуются пакеты wxGTK, wxGTK-devel) (устарело)
- --enable-gnome (консоль под GNOME2; не имеет смысла) (устарело)
- --enable-tray-monitor (аплет мониторинга для Gnome или KDE; требуется GTK 2.10) (устарело)
- --enable-smartalloc (детектор утечки для улучшенной библиотеки выделения памяти, автор без этой опции не собирает;
выводит трассировку выделения памяти в syslog daemon:info)
- --enable-lockmgr (алгоритм избегания мёртвых захватов - deadlock; без неё блокировки случаются, но редко)
- --enable-client-only (собирать только файловый сервер fd и текстовую консоль (?))
- --disable-build-dird (требуется в дополнение к --enable-client-only)
- --enable-build-dird
- --disable-build-stored (требуется в дополнение к --enable-client-only)
- --enable-build-stored
- --disable-conio (не использовать conio - более переносимый заменитель readline - в текстовой консоли)
- --disable-ipv6
- --enable-readline (использовать readline в текстовой консоли)
- --with-readline[=каталог]
- --enable-batch-insert (добавление в БД ускоряется в 10 раз; СУБД д.б. "thread safe")
- --disable-bee (поддержка BEE - Bacula Enterprise?)
- --disable-largefile (отключить поддержку файлов более 2ГБ)
- --disable-s3
- --disable-afs
- --disable-lzo
- --disable-acsls (разделение ленточных библиотек между приложениями)
- --disable-acl
- --disable-xattr
- --disable-gpfs
- --disable-antivirus-plugin
- --disable-docker-plugin
- --disable-kubernetes-plugin
- --disable-cdp-plugin
- --disable-totp-bpam
- --disable-ldap-bpam
- --with-tcp-wrappers[=каталог] (в /etc/hosts.deny и /etc/hosts.allow необходимо указывать
имена серверов, задаваемые в настроечных файлах, а не имена программ;
в RHEL 8 пакет tcp wrappers удалён из дистрибутива)
- --with-curl[=каталог]
- --with-zstd[=каталог]
- --with-openssl[=каталог] (используется для шифрования обмена между серверами bacula
и шифрования PKI на уровне файлового сервера fd)
- --with-sbin-perm= (0750)
- --with-cython= (?)
- --with-postgresql[=каталог]
- --with-mysql[=каталог]
- --with-embedded-mysql[=каталог]
- --with-sqlite3[=каталог]
- --with-x (X Window System)
- --with-s3[=каталог] (хранилище S3)
- --with-aws (Amazon Storage Cloud)
- --with-afsdir[=каталог] (AFS)
- --with-lzo[=каталог]
- --with-gpfsdir[=каталог]
- --with-ldap[=каталог]
- --with-systemd[=каталог-для-.service]
- --with-python[=каталог] (использовать python версий 2.2, 2.3, 2.4, 2.5) (устарело)
- --with-dbi --with-dbi-driver= --with-db-port (устарело?)
- динамическая и статическая сборка (требуются для восстановления "с нуля")
- --disable-libtool --libdir=
- --enable-static-tools (утилиты bls, bextract и bscan без разделяемых библиотек)
- --enable-static-fd (рекомендуется использовать "make static-bacula-fd" в src/filed;
несовместим с --openssl и --with-python)
- --enable-static-sd (-//-)
- --enable-static-dir (-//-)
- --enable-static-cons (-//-)
- параметры скриптов и создаваемых конфигурационных файлов (всё это можно поменять позднее)
- --with-working-dir=каталог (префикс/var; здесь сервера хранят данные между запусками,
здесь же хранятся bootstrap-файлы и спулятся метаданные)
- --with-archivedir=каталог (/tmp; архивный каталог сервера хранения и куда восстанавливать по умолчанию)
- --with-basename=имя-ресурса (?)
- --with-hostname=имя-хоста (?)
- --with-scriptdir=каталог-скриптов
- --with-bsrdir=каталог-bsrs (?)
- --with-logdir=каталог-журналов
- --with-plugindir=каталог
- --with-dump-email=... (сюда будет посылаться core dump ;)
- --with-job-email=e-mail-адрес (адрес для получения сообщений)
- --with-smtp-host=адрес-SMTP-сервера
- --with-baseport (9101, 9102, 9103; номера используемых TCP портов)
- --with-dir-password=пароль
- --with-fd-password=пароль
- --with-sd-password=пароль
- --with-mon-dir-password=пароль
- --with-mon-fd-password=пароль
- --with-mon-sd-password=пароль
- --with-db-name=имя-БД (bacula)
- --with-db-user=имя-пользователя-СУБД (bacula)
- --with-db-password=пароль
- --with-db-port=порт (null)
- --with-db-ssl-options=
- --with-dir-user=имя-пользователя-директора (рекомендуется предварительно завести отдельную группу для процессов bacula
и отдельного пользователя для выполнения директора)
- --with-dir-group=имя-группы (-//-)
- --with-sd-user=имя-пользователя-хранителя (рекомендуется предварительно завести отдельную группу для процессов bacula
и отдельного пользователя для выполнения сервера хранения; этот пользователь должен
иметь доступ к устройствам хранения)
- --with-sd-group (-//-)
- --with-fd-user=имя-пользователя (этот пользователь должен иметь доступ ко всем резервируемым
файлам; в большинстве случаев - это будет root)
- --with-fd-group=имя-группы (-//-)
Предварительно необходимо установить и настроить
MariaDB (поток mariadb:10.3/server, включая
mariadb-server, mariadb, mariadb-common, mariadb-connector-c, mariadb-connector-c-config, mariadb-errmsg,
perl-DBD-MySQL, perl-DBI, perl-Math-BigInt, perl-Math-Complex, mariadb-backup, mariadb-server-utils),
readline-devel, zlib-devel, lzo-devel, libzstd-devel, openssl-devel, krb5-devel,
libacl, libacl-devel, libattr, libattr-devel, libcurl-devel, libcap-devel, kernel-devel, git; поток python36:3.6/build.
Процесс установки
- [добавление bacula в /etc/group], пользователей в группу bacula, baculad и baculas в /etc/passwd и /etc/shadow
- развернуть bacula-15.0.2.tar.gz
- [make distclean] (удаление кеша ./configure)
- ./configure --prefix=/usr/local/bacula1502 --mandir=/usr/local/bacula1502/man --with-pid-dir=/usr/local/bacula1502/var --with-openssl --enable-smartalloc --with-job-email=адрес --with-smtp-host=адрес --with-dir-user=baculad --with-dir-group=bacula --enable-batch-insert --with-sd-user=baculas --with-sd-group=bacula --with-mysql --with-subsys-dir=/var/lock/subsys --with-working-dir=/usr/local/bacula1502/var --enable-lockmgr --disable-conio --enable-readline --disable-ipv6 --with-lzo --with-systemd --with-logdir=/var/log/bacula --enable-build-dird --enable-build-stored --disable-bee --disable-s3 --disable-afs --disable-acsls --disable-gpfs --disable-antivirus-plugin --disable-docker-plugin --disable-kubernetes-plugin --disable-totp-bpam --disable-ldap-bpam --with-zstd=yes
- просмотреть результат (config.out и config.log)
- make [-j8] # неиспользуемые sendit (bcollector.c), fstypeid (fstype.c), reconnect (mysql.c)
- [остановить и удалить предыдущую версию] (оставлял версию bacula-fd 9 для работы с директором 9 на другом сервере)
- make install # в /usr/local/bacula1502/
- etc/ (bconsole, bconsole.conf,
bacula, bacula_config,
tapealert,
bacula-ctl-dir, bacula-ctl-fd, bacula-ctl-sd,
mtx-changer, mtx-changer.conf,
disk-changer,
btraceback.gdb, btraceback.dbx, btraceback.mdb,
baculabackupreport, bacula-tray-monitor.desktop,
bacula-fd.conf,
create_mysql_database, update_mysql_tables, make_mysql_tables, grant_mysql_privileges, drop_mysql_tables, drop_mysql_database,
create_bacula_database, update_bacula_tables, make_bacula_tables, grant_bacula_privileges, drop_bacula_tables, drop_bacula_database,
make_catalog_backup.pl, make_catalog_backup, delete_catalog_backup,
bacula-dir.conf,
query.sql,
bacula-sd.conf,
key-manager.py, install-key-manager.sh,
isworm
)
- sbin/ (bacula, btraceback, bacula-fd, bfdjson, bconsole, bbconsjson, bacula-dir, bdirjson, bacula-sd, bsdjson,
bls, bextract, bcopy, bscan, btape, bregex, bsmtp, bwild, dbcheck, md5tobase64.py, get_malware_abuse.ch)
- lib/ (bpipe-fd.so,
libbac-15.0.2.so,
libbaccats-15.0.2.so (ссылка на libbaccats-mysql.so), libbaccats-mysql-15.0.2.so, libbaccats-mysql.so (сылка на libbaccats-mysql-15.0.2.so),
libbaccfg-15.0.2.so, libbaccfg.so (ссылка на libbaccfg-15.0.2.so),
libbacfind-15.0.2.so, libbacfind.so (ссылка на libbacfind-15.0.2.so),
libbacsd-15.0.2.so, libbacsd.so (ссылка на libbacsd-15.0.2.so),
libbacsql-15.0.2.so, libbacsql.so (ссылка на libbacsql-15.0.2.so))
- man/man1/ (bsmtp.1 bat.1)
- man/man8/ (bacula.8 bacula-dir.8 bacula-fd.8 bacula-sd.8 bconsole.8 bcopy.8 bextract.8 bls.8 bscan.8 btape.8 btraceback.8 dbcheck.8 bwild.8 bregex.8
bfdjson.8 bsdjson.8 bdirjson.8 bbconsjson.8)
- share/doc/bacula/ (тексты лицензий)
- var/
- /var/log/bacula
- [mkdir /var/log/bacula]
- [chown baculad:bacula /var/log/bacula]
- [chmod 770 /var/log/bacula]
- отредактированный (добавить "su baculad bacula") scripts/logrotate в /etc/logrotate.d/bacula
- обеспечить доступ с компьютеров, на которых установлены консоли и мониторы к порту 9101
- обеспечить доступ директора на порт 9102 к компьютерам, на которых установлены клиенты
- обеспечить доступ директора на порт 9103 к компьютерам, на которых установлены серверы хранения
- обеспечить файловую систему для хранения файлов и права доступа (2.5TB (1%) сразу куда-то делись - раньше такого не было!)
pvcreate /dev/sda /dev/sdb
vgcreate grid0154big /dev/sda /dev/sdb
lvcreate --stripes 2 --stripesize 64K --name bacula -l +100%FREE grid0154big /dev/sda /dev/sdb # -stripesize 1m
mkfs.xfs -L bacula -d su=64k,sw=2 -i attr=2 -l su=64k,lazy-count=1 -m crc=1 -m reflink=0 [-m finobt=0] /dev/grid0154big/bacula # su=1m
mkdir /backup
vim /etc/fstab # LABEL=bacula /backup xfs nodiratime,relatime,attr2,logbufs=8,logbsize=256k,inode64,filestreams 1 2
systemctl daemon-reload
mount /backup
mkdir /backup/bacula
chown baculas:bacula /backup/bacula
chmod 750 /backup/bacula
- [chmod go+rx /usr/local/bacula1502/etc/grant_mysql_privileges]
- запустить "/usr/local/bacula1502/etc/grant_mysql_privileges -p" под обычным пользователем (запрашивает mariadb пароль root)
(даёт права к bacula.* пользователю bacula без пароля, так что пароль надо
устанавливать самому:
mysql -u root -p
SELECT Host, User FROM mysql.user;
SET PASSWORD FOR 'bacula'@'localhost' = PASSWORD('пароль');
SET PASSWORD FOR 'bacula'@'%' = PASSWORD('пароль');
SELECT * FROM mysql.user;
удалить ~/.mysql_history
- установить пароль в /usr/local/bacula1502/etc/bacula-dir.conf, секция каталог
- chmod go+rx /usr/local/bacula1502/etc/create_mysql_database
- запустить "/usr/local/bacula1502/etc/create_mysql_database -u bacula -p" под обычным пользователем (запрашивает пароль пользователя bacula)
- chmod go+rx /usr/local/bacula1502/etc/{make_mysql_tables,update_mysql_tables,drop_mysql_tables}
- запустить "/usr/local/bacula1502/etc/make_mysql_tables -u bacula -p" под обычным пользователем (запрашивает пароль пользователя bacula)
(update_mysql_tables обновляет формат таблиц, drop_mysql_tables очищает таблицы;
архив скриптов обновлений лежит в upgradedb)
- создать ключи и сертификаты TLS, в т.ч. открытый ключ /usr/local/bacula1502/etc/имя-хоста.open.key (baculad:bacula 440) и bacula-console@...
- cp platforms/systemd/bacula-dir.service /lib/systemd/system/bacula-dir1502.service
- cp platforms/systemd/bacula-fd.service /lib/systemd/system/bacula-fd1502.service
- cp platforms/systemd/bacula-sd.service /lib/systemd/system/bacula-sd1502.service
- systemctl daemon-reload
- отредактировать настройки /usr/local/bacula1502/etc/bacula-fd.conf
- [systemctl start bacula-fd1502 (нервно реагирует на тестовые запросы от zabbix;
несовместимость с сервером 5.2.13)]
- [systemctl status bacula-fd1502]
- [systemctl enable bacula-fd1502]
- создать каталоги для пулов в /backup/bacula с правильными правами (baculas:bacula)
- отредактировать настройки /usr/local/bacula1502/etc/bacula-sd.conf
- chown baculas:bacula /usr/local/bacula1502/etc/bacula-sd.conf /usr/local/bacula1502/sbin/bacula-sd
- chmod 640 /usr/local/bacula1502/etc/bacula-sd.conf
- systemctl start bacula-sd1502
- лишняя строка "yes" в /usr/lib/systemd/system/bacula-sd1502.service (RequiresMountsFor) # --with-pid-dir?
- Pid Directory = "yes" - это ненормально # --with-pid-dir=/usr/local/bacula1502/var
- отсутствует дополнительная группа SupplementaryGroups=baculas
- добавил "-T -d 9"
- systemctl daemon-reload
- systemctl start bacula-sd1502
- systemctl status bacula-sd1502
- systemctl enable bacula-sd1502
- отредактировать настройки /usr/local/bacula1502/etc/bacula-dir.conf
- chown baculad:bacula /usr/local/bacula1502/etc/bacula-dir.conf /usr/local/bacula1502/sbin/bacula-dir
- chmod 640 /usr/local/bacula1502/etc/bacula-dir.conf
- chgrp bacula /usr/local/bacula1502/sbin/bsmtp
- systemctl start bacula-dir1502
- systemctl status bacula-dir1502
- systemctl enable bacula-dir1502
- chgrp bacula /usr/local/bacula1502/etc/bconsole.conf /usr/local/bacula1502/etc/bconsole # чтобы запускать консоль не с правами root
- настроить /usr/local/bacula1502/etc/bconsole.conf
- опробовать /usr/local/bacula1502/etc/bconsole
- вручную скопировать scripts/logwatch/logfile.bacula.conf в /usr/share/logwatch/default.conf/logfiles/bacula.conf,
scripts/logwatch/services.bacula.conf в /usr/share/logwatch/default.conf/services/bacula.conf,
scripts/logwatch/applybaculadate в /usr/share/logwatch/scripts/shared/applybaculadate,
scripts/logwatch/bacula в /usr/share/logwatch/scripts/services/bacula
- скопировать examples/sample-query.sql в /usr/local/bacula1502/etc/query.sql, отредактировать
- [шифрование PKI]
- обеспечить вторым директором и сервером хранения создание текстовой версии БД и её резервирования
- проверить, что восстановленная БД работает
- мониторинг (шаблоны bacula-sd, bacula-dir в zabbix)
- через некоторое время (1.5 месяца) опять проявился глюк MariaDB с InnoDB - при старте очередного задания в момент интенсивной
работы предыдущего mysqld уходит в "бесконечный" цикл (LOCK/UNLOCK/DELETE/INSERT)
Тестовые задачи
- резервирование share5f (4,133,165 файлов, 17.29 TB), LZO - за 21:59:12 (запись 71220.8 KB/s, чтение 220782 KB/s), 5.637 TB (3.1:1)
- резервирование share5f (4,133,165 файлов, 17.29 TB), ZSTD1 - за 1:4:18:3 (запись 40737.4 KB/s, чтение 171097 KB/s), 4.151 TB (4.2:1)
- резервирование share5f (4,138,514 файлов, 17.29 TB), GZIP1 - за 2:4:2:52 (запись 24194.6 KB/s, чтение 91939 KB/s), 4.533 TB (3.8:1)
- восстановление share5f (4,133,165 файлов, 17.29 TB), LZO - за 10:28:51 (запись 458466.1 KB/s, чтение 147892 KB/s)
- восстановление share5f (4,133,165 файлов, 17.29 TB), ZSTD1 - за 9:53:42 (запись 485730.7 KB/s, чтение 156687 KB/s); на более быстрый сервер - 787452.7 KB/s
- резервирование share5a (2,315,905 файлов, 42.12 TB), LZO - за 1:1:23:36 (запись 271119.8 KB/s, чтение 460902 KB/s), 24.78 TB (1.7:1)
- резервирование share5a (2,329,947 файлов, 47.1 TB), ZSTD1 - за 2:0:41:30 (запись 116832.9 KB/s, чтение 268715 KB/s), 20.48 TB (2.3:1)
- восстановление share5a (2,315,905 файлов, 42.69 TB), LZO - за 1:21:54:48 (запись 258327.6 KB/s, чтение 151957 KB/s); ненормально медленно, discard
- восстановление share5a (2,315,905 файлов, 42.69 TB), LZO - за 1:19:57:34 (запись 269809.6 KB/s, чтение 158711 KB/s); ненормально медленно, nodiscard
bacula-win64 содержит bacula-fd.ex (включая alldrives-fd.dll и cdp-fd.dll; отсутствует vss-fd.dll), bacula-sd.exe, bat.exe, bacula-tray-monitor.exe,
bconsole.exe, а также утилиты bcopy, bextract, bls, bsleep, bsmtp, cdp-client, expr64.
Предварительно необходимо установить и настроить
MariaDB (5.5.60 из пакетов, включая пакеты mysql,
mysql-server и mysql-devel), readline-devel, zlib-devel, lzo-devel, openssl-devel, krb5-devel,
libacl, libacl-devel, libattr, libattr-devel, python-devel.
Процесс установки
- развернуть bacula-9.2.1.tar.gz
- [make distclean] (удаление кеша ./configure)
- QTDIR=/usr/lib64/qt4 PATH=/usr/lib64/qt4/bin:$PATH ./configure --prefix=/usr/local/bacula921 --mandir=/usr/local/bacula921/man --with-tcp-wrappers --with-openssl [--enable-smartalloc] --with-job-email=адрес --with-smtp-host=сервер --with-dir-user=baculad --with-dir-group=bacula --enable-batch-insert --with-sd-user=baculas --with-sd-group=bacula --with-mysql --with-subsys-dir=/var/lock/subsys --with-working-dir=/usr/local/bacula921/var --enable-lockmgr --disable-conio --enable-readline --enable-bat --disable-ipv6 --with-lzo --with-systemd --with-logdir=/var/log/bacula
- просмотреть результат (config.out)
- make [-j8]
- добавление bacula в /etc/group, baculad и baculas в /etc/passwd и /etc/shadow
- [остановить и удалить предыдущую версию] (оставлял версию bacula-fd 5.2.13 для работы с директором 5.2.13 на другом сервере)
- make install # в /usr/local/bacula921/
- etc/ (bconsole, bconsole.conf, bacula, bacula_config, tapealert, bacula-ctl-dir, bacula-ctl-fd, bacula-ctl-sd, mtx-changer, mtx-changer.conf,
disk-changer,
btraceback.gdb, btraceback.dbx, btraceback.mdb, baculabackupreport, bacula-tray-monitor.desktop,
bacula-fd.conf, bat.conf,
create_mysql_database, update_mysql_tables, make_mysql_tables, grant_mysql_privileges, drop_mysql_tables, drop_mysql_database,
create_bacula_database, update_bacula_tables, make_bacula_tables, grant_bacula_privileges, drop_bacula_tables, drop_bacula_database,
make_catalog_backup.pl, make_catalog_backup, delete_catalog_backup,
bacula-dir.conf, query.sql, bacula-sd.conf)
- sbin/ (bacula, btraceback, bacula-fd, bfdjson, bat, bconsole, bbconsjson, static-bconsole, bacula-dir, bdirjson, bacula-sd, bsdjson,
bls, bextract, bcopy, bscan, btape, bregex, bsmtp, bwild, dbcheck)
- lib/ (bpipe-fd.so, libbac-9.2.1.so, libbaccats-9.2.1.so, libbaccats-mysql-9.2.1.so, libbaccats-mysql.so,
libbaccfg-9.2.1.so, libbaccats.so, libbaccfg-9.2.1.so, libbaccfg.so, libbacfind-9.2.1.so, libbacfind.so,
libbacsd-9.2.1.so, libbacsd.so, libbacsql-9.2.1.so, libbacsql.so)
- man/man1/ (bsmtp.1 bat.1)
- man/man8/ (bacula.8 bacula-dir.8 bacula-fd.8 bacula-sd.8 bconsole.8 bcopy.8 bextract.8 bls.8 bscan.8 btape.8 btraceback.8 dbcheck.8
bwild.8 bregex.8)
- share/doc/bacula/ (документация qt-console)
- var/
- mkdir /var/log/bacula
- chown baculad:bacula /var/log/bacula
- chmod 770 /var/log/bacula
- отредактированный ("su baculad bacula") scripts/logrotate в /etc/logrotate.d/bacula
- обеспечить доступ с компьютеров, на которых установлены консоли и мониторы к порту 9101
- обеспечить доступ директора на порт 9102 к компьютерам, на которых установлены клиенты
- обеспечить доступ директора на порт 9103 к компьютерам, на которых установлены серверы хранения
- обеспечить файловую систему для хранения файлов и права доступа
pvcreate /dev/sda /dev/sdb
vgcreate x130all36 /dev/sda /dev/sdb
lvcreate --stripes 2 --stripesize 64K --name full -l +100%FREE x130all36 /dev/sda /dev/sdb
mkfs.xfs -L bacula -d su=64k,sw=2 -i attr=2 -l su=64k,lazy-count=1 -m crc=1 /dev/x130all36/full
mkdir /backup
vim /etc/fstab # LABEL=bacula /backup xfs nodiratime,relatime,attr2,logbufs=8,logbsize=256k,inode64,filestreams,nobarrier 1 2
mount /backup
mkdir /backup/bacula
chown baculas:bacula /backup/bacula
chmod 750 /backup/bacula
- если имеется БД, то обновить её ("update_bacula_tables -u root -p";
update_mysql_tables позволяет обновить с версии БД 12 (bacula 5.0) до 16 (bacula 9.2)),
каталог updatedb содержит скрипты для промежуточных обновлений), поменять права на скрипты и скопировать файлы конфигурации,
пропустить пункты вплоть до запуска сервисов
- обеспечить файловую систему для MySQL на SSD
pvcreate /dev/sdc
vgcreate SSD /dev/sdc
lvcreate --name mysql --size 200GB SSD
mkfs.ext4 -j -L mysql -m 0 -O sparse_super -t largefile -v /dev/mapper/SSD-mysql
vim /etc/fstab # LABEL=mysql /var/lib/mysql ext4 data=ordered,nodiratime,relatime,journal_checksum,delalloc,rw,nosuid,nodev,noexec,auto,nouser 1 2
mount /var/lib/mysql
- установить MariaDB 5.5.60
- настроить /etc/my.cnf и /etc/my.cnf.d/mysql-clients.cnf и /etc/my.cnf.d/server.cnf по образцу (memlock?)
- chmod go+rx /usr/local/bacula921/etc/grant_mysql_privileges
- запустить "/usr/local/bacula921/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('пароль');
SELECT * FROM mysql.user;
удалить ~/.mysql_history
- установить пароль в /usr/local/bacula921/etc/bacula-dir.conf, секция каталог
- chmod go+rx /usr/local/bacula921/etc/create_mysql_database
- запустить "/usr/local/bacula921/etc/create_mysql_database -u bacula -p" под обычным пользователем
- chmod go+rx /usr/local/bacula921/etc/{make_mysql_tables,update_mysql_tables,drop_mysql_tables}
- запустить "/usr/local/bacula921/etc/make_mysql_tables -u bacula -p" под обычным пользователем
(update_mysql_tables обновляет формат таблиц, drop_mysql_tables очищает таблицы;
архив скриптов обновлений лежит в upgradedb)
- cp platforms/systemd/{bacula-dir.service,bacula-fd.service,bacula-sd.service} /lib/systemd/system/ (или bacula-dir921.service и т.д.)
- systemctl daemon-reload
- отредактировать настройки /usr/local/bacula921/etc/bacula-fd.conf
- [systemctl start bacula-fd (нервно реагирует на тестовые запросы от zabbix;
несовместимость с сервером 5.2.13)]
- [systemctl status bacula-fd]
- [systemctl enable bacula-fd]
- создать каталоги для пулов в /backup/bacula с правильными правами
- перенести и отредактировать настройки /usr/local/bacula921/etc/bacula-sd.conf
- chown baculas:bacula /usr/local/bacula921/etc/bacula-sd.conf /usr/local/bacula921/sbin/bacula-sd
- chmod 640 /usr/local/bacula921/etc/bacula-sd.conf
- systemctl start bacula-sd
- systemctl status bacula-sd
- systemctl enable bacula-sd
- перенести и отредактировать настройки /usr/local/bacula921/etc/bacula-dir.conf
- chown baculad:bacula /usr/local/bacula921/etc/bacula-dir.conf /usr/local/bacula921/sbin/bacula-dir
- chmod 640 /usr/local/bacula921/etc/bacula-dir.conf
- chgrp bacula /usr/local/bacula921/sbin/bsmtp
- systemctl start bacula-dir
- systemctl status bacula-dir
- systemctl enable bacula-dir
- chgrp bacula /usr/local/bacula921/etc/bconsole.conf /usr/local/bacula921/etc/bconsole # чтобы запускать консоль не с правами root
- настроить /usr/local/bacula921/etc/bconsole.conf
- опробовать /usr/local/bacula921/etc/bconsole
- аналогично для bat (/usr/local/bacula921/etc/bat.conf и /usr/local/bacula921/sbin/bat)
- вручную скопировать scripts/logwatch/logfile.bacula.conf в /usr/share/logwatch/default.conf/logfiles/bacula.conf,
scripts/logwatch/services.bacula.conf в /usr/share/logwatch/default.conf/services/bacula.conf,
scripts/logwatch/applybaculadate в /usr/share/logwatch/scripts/shared/applybaculadate,
scripts/logwatch/bacula в /usr/share/logwatch/scripts/services/bacula
- chgrp bacula /usr/local/bacula921/etc/bat.conf /usr/local/bacula921/sbin/bat
- опробовать /usr/local/bacula921/sbin/bat
- накатил заплатку src/stored/askdir.c (Fix bugs #2335 and #2349 Volume messages printed many times)
- patch
- make
- systemctl stop bacula-sd
- cd src/stored
- make install
- chown baculas:bacula /usr/local/bacula921/sbin/bacula-sd
- systemctl start bacula-sd
- создать ключи и сертификаты TLS, в т.ч. открытый ключ /usr/local/bacula921/etc/имя-хоста.open.key
- chown baculad:bacula /usr/local/bacula921/etc/имя-хоста.open.key
- chmod 440 /usr/local/bacula921/etc/имя-хоста.open.key
- шифрование PKI
- обеспечить вторым директором и сервером хранения создание текстовой версии БД и её резервирования
- проверить, что восстановленная БД работает
- мониторинг (шаблоны bacula-sd, bacula-dir в zabbix)
- схема исключительно инкрементального копирования на дисковые массивы с архивацией и перекрёстным опылением
- одновременно закончились 2 задачи Copy, в результате: ERR=Lock wait timeout exceeded;
похоже, что не хватило innodb_lock_wait_timeout (блокировка строк на запись в Innodb), уже увеличенного с 50 до 120 секунд;
увеличил до 480 (/etc/my.cnf.d/server.cnf и "SET GLOBAL innodb_lock_wait_timeout = 480;")
- через некоторое время проявился глюк с InnoDB - при старте задания mysql уходит в бесконечный цикл
(ждал 2 часа), шевеление БД помогает запуститься, но предсказать момент возникновения и автоматизировать шевеление не удалось;
на одном из серверов (небольшое количество больших клиентов) вернулся к MyISAM, на другом (большое количество небольших клиентов)
оставил InnoDB; размер БД для MyISAM меньше на треть, но блокировки не дают работать с БД параллельно
Процесс установки (доставить пакеты gcc, gcc-c++, readline-devel, zlib-devel, lzo-devel, openssl-devel, krb5-devel,
libacl, libacl-devel, libattr, libattr-devel, e2fsprogs-devel, libzstd, libzstd-devel):
- развернуть
- [make distclean]
- ./configure --enable-client-only --disable-build-dird --disable-build-stored --prefix=/usr/local/bacula1502 --mandir=/usr/local/bacula1502/man
--with-openssl --enable-smartalloc --with-subsys-dir=/var/lock/subsys --with-working-dir=/usr/local/bacula1502/var
--disable-conio --enable-readline --disable-ipv6 --with-lzo --with-systemd --with-logdir=/var/log/bacula --with-zstd=yes
[--with-baseport=9104]
- просмотреть результат (config.out)
- make [-j8]
- [остановить старую версию, если не хотим оставить её для совместимости со старым директором]
- make install
- /usr/local/bacula1502/etc/ - 771 (bconsole, bacula (запуск всех 3 демонов), bacula_config (результат configure),
bacula-ctl-dir(!), bacula-ctl-fd, bacula-ctl-sd(!), mtx-changer (!), -mtx-changer.conf (!), tapealert (!), disk-changer (!), isworm (!),
btraceback.gdb, btraceback.dbx, btraceback.mdb, bacula-fd.conf, bacula-tray-monitor.desktop (!),
bconsole, bconsole.conf, baculabackupreport, key-manager.py, install-key-manager.sh)
- /usr/local/bacula1502/sbin/ (btraceback, bacula-fd, bconsole,
bacula (запуск всех 3 сервисов?), bfdjson, bbconsjson, get_malware_abuse.ch, md5tobase64.py, static-bconsole (?))
- /usr/local/bacula1502/man/ (man1, man8)
- /usr/local/bacula1502/lib/ (libbac*, libbaccfg*, libbacfind*, bpipe-fd.so)
- /usr/local/bacula1502/share/doc/bacula/ (ChangeLog, INSTALL, LICENSE*, README, ReleaseNotes, VERIFYING)
- /usr/local/bacula1502/var - 770
- /var/log/bacula
- настроить клиента
- отредактировать /usr/local/bacula1502/etc/bacula-fd.conf (имя директора и пароль;
имя монитора и пароль; имя директора в секции сообщений, другой порт, если ставили рядом со старой версие)
- дырка на входной порт 9102
- обеспечить доступ к серверу хранения (порт 9103)
- для systemd
- cp platforms/systemd/bacula-fd.service /lib/systemd/system/ (или bacula-fd1502.service)
- systemctl daemon-reload
- systemctl start bacula-fd1502
- systemctl status bacula-fd1502
- systemctl enable bacula-fd1502
- для initd
- make install-autostart-fd
- [добавить "export LANG=" в /etc/rc.d/init.d/bacula-fd, если система русифицирована]
- service bacula-fd start
- service bacula-fd status
- добавить клиента в настройки директора и хранителя
- тестирование
Процесс установки (доставить пакеты gcc, gcc-c++, readline-devel, zlib-devel, lzo-devel, openssl-devel, krb5-devel,
libacl, libacl-devel, libattr, libattr-devel, tcp_wrappers-devel, e2fsprogs-devel):
- развернуть
- make distclean
- ./configure --enable-client-only --disable-build-dird --disable-build-stored --prefix=/usr/local/bacula1502 --mandir=/usr/local/bacula1502/man
--with-openssl --enable-smartalloc --with-subsys-dir=/var/lock/subsys --with-working-dir=/usr/local/bacula1502/var
--enable-lockmgr --disable-conio --enable-readline --disable-ipv6 --with-lzo --with-systemd --with-logdir=/var/log/bacula --with-zstd=yes
- просмотреть результат (config.out)
- make -j8
- [остановить старую версию, если не хотим оставить её для совместимости со старым директором]
- make install
- /usr/local/bacula922/etc/ (bconsole, bacula (запуск всех 3 демонов), bacula_config (результат configure),
bacula-ctl-dir(!), bacula-ctl-fd, bacula-ctl-sd(!), mtx-changer (!), mtx-changer.conf (!), tapealert (!), disk-changer (!),
btraceback.gdb, btraceback.dbx, btraceback.mdb, bacula-fd.conf, bacula-tray-monitor.desktop (!),
bconsole, bconsole.conf)
- /usr/local/bacula922/sbin/ (btraceback, bacula-fd, bconsole,
bacula (запуск сервисов), bfdjson, bbconsjson)
- /usr/local/bacula922/man/ (man1, man8)
- /usr/local/bacula922/lib/ (libbac*, libbaccfg*, libbacfind*, bpipe-fd.so)
- /usr/local/bacula922/share/doc/bacula/ (ChangeLog, INSTALL, LICENSE*, README, ReleaseNotes, VERIFYING)
- консоль, если она тут нужна (а зачем она тут?)
- дырка на порт 9101 директора
- настроить /usr/local/bacula922/etc/bconsole.conf
- права доступа к /usr/local/bacula922/etc/bconsole.conf, /usr/local/bacula922/sbin/bconsole и
/usr/local/bacula922/etc/bconsole, чтобы запускать консоль не с правами root
- опробовать /usr/local/bacula922/etc/bconsole
- настроить клиента
- отредактировать /usr/local/bacula922/etc/bacula-fd.conf (имя директора и пароль;
имя монитора и пароль; имя директора в секции сообщений, другой порт, если ставили рядом со старой версие)
- дырка на входной порт 9102
- обеспечить доступ к серверу хранения (порт 9103)
- дляsystemd
- cp platforms/systemd/bacula-fd.service /lib/systemd/system/ (или bacula-fd922.service)
- systemctl daemon-reload
- systemctl start bacula-fd922
- systemctl status bacula-fd922
- systemctl enable bacula-fd922
- для initd
- make install-autostart-fd
- [добавить "export LANG=" в /etc/rc.d/init.d/bacula-fd, если система русифицирована]
- service bacula-fd start
- service bacula-fd status
- добавить клиента в настройки директора и хранителя
- тестирование
Процесс установки
- обеспечить доступ с компьютеров, на которых установлены консоли и мониторы к порту 9101
- обеспечить доступ директора на порт 9102 к компьютерам, на которых установлены клиенты
- обеспечить доступ к серверу хранения (порт 9103)
- установка пакетов bacula-client, bacula-common, bacula-libs
- добавить в tray-monitor.conf новую секцию Client и перезапустить монитор
- добавить в bacula-sd.conf новые секции и перезапустить сервер хранения
- добавить в bacula-dir.conf новые секции Job и Client (и всё что они тянут: FileSet, Schedule, Storage, Pool) и перезапустить директор (reload в консоли)
- отредактировать настройки /etc/bacula/bacula-fd.conf (имя директора и пароль; имя монитора и пароль; имя клиента)
- systemctl start bacula-fd
- попробовать запустить задание вручную из консоли (run)
- systemctl enable bacula-fd
Предварительно необходимо установить и настроить
MySQL (5.5.41 из пакетов, включая пакеты mysql, mysql-server и mysql-devel)
Процесс установки (без графики):
- обеспечить доступ с компьютеров, на которых установлены консоли и мониторы к порту 9101
- обеспечить доступ директора на порт 9102 к компьютерам, на которых установлены клиенты
- обеспечить доступ директора на порт 9103 к компьютерам, на которых установлены серверы хранения
- установка пакетов bacula-client, bacula-common, bacula-libs, bacula-console, bacula-director, bacula-libs-sql, bacula-storage
- alternatives --config libbaccats.so # поменять на mysql
- cd /usr/libexec/bacula
- sed -i -e 's/default_db_type=postgresql/default_db_type=mysql/g' *
- пользователи baculas и baculad и группа bacula с нужными идентификаторами
- права доступа к файловому хранилищу (при необходимости создать или передать со старого сервера)
- перенос файлов с томами с предыдущего сервера (тоже версия 5.2)
- chown baculad:bacula {/var/spool/bacula,/var/log/bacula}
- chmod g+w {/var/spool/bacula,/var/log/bacula}
- chmod go+rx /usr/libexec/bacula/grant_mysql_privileges
- запустить "/usr/libexec/bacula/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('пароль');
SELECT * FROM mysql.user;
удалить ~/.mysql_history
- установить пароль в /etc/bacula/bacula-dir.conf
- журнал
- touch /var/log/bacula.log
- chown baculad:bacula /var/log/bacula.log
- отредактированный scripts/logrotate в /etc/logrotate.d/bacula
- chmod go+rx /usr/libexec/bacula/create_mysql_database
- запустить "/usr/libexec/bacula/create_mysql_database -u bacula -p" под обычным пользователем
- chmod go+rx /usr/libexec/bacula//make_mysql_tables (update_mysql_tables, drop_mysql_tables)
- сделать копию БД bacula на старом сервере "mysqldump -f --opt bacula --add-drop-table
--add-locks --disable-keys --user=bacula -p > имя.sql"
- удалить "ENGINE=MyISAM" ("sed -i 's/ENGINE=MyISAM/ENGINE=InnoDB/' имя.sql")
- загрузить её на новом сервере: "mysql --user=bacula bacula -p < имя.sql"
(XtraDB Compact заняло в 1.47 раза больше места, чем Aria; время загрузки базы Aria вдвое меньше;
время запуска большого задания одинаково; требования к памяти в несколько раз меньше для Aria)
- перенести и отредактировать настройки bacula-sd.conf, bacula-fd.conf, bacula-dir.conf
- создать ключи и сертификаты TLS
- chgrp bacula /etc/bacula/x134.cs.niisi.ras.ru.open.key
- chmod g+r /etc/bacula/x134.cs.niisi.ras.ru.open.key
- исправить пользователя и группу в /etc/sysconfig/bacula-sd, systemctl start bacula-sd, протестировать, systemctl enable bacula-sd
- исправить пользователя в /etc/sysconfig/bacula-dir, systemctl start bacula-dir, протестировать, systemctl enable bacula-dir
- systemctl start bacula-fd, протестировать, systemctl enable bacula-fd
- права доступа к /etc/bacula/bconsole.conf, чтобы запускать консоль не с правами root
- опробовать bconsole
- права чтения к bacula-dir.conf для baculad, иначе не будет работать команда reload
- задать пароль внутри /usr/libexec/bacula/make_catalog_backup (лучше через --defaults-file=);
обеспечить правильные права доступа к этому файлу
- ?обеспечить внешними средствами (например, вторым директором и сервером хранения) создание
текстовой версии БД и её резервирования
- ? проверить, что восстановленная БД работает
Процесс установки клиента:
- установка должна производиться с правами администратора/администратора домена
(устанавливается как сервис)
- выбрать компоненты (клиент, документация, консоль, wx-консоль)
- указать каталог для установки (c:\bacula)
- отредактировать bacula-fd.conf (имя и пароль директора и монитора;
кстати, директива Monitor в версии 1.38.4 не распознаётся; имя директора в ресурсе Messages)
- установить как системный сервис, т.е. будет запускаться при старте ОС
- дырка на входной порт 9102 (netsh firewall ...)
- обеспечить доступ к серверу хранения (порт 9103)
- для первого раза запустить из панели управления (администрирование -> службы)
- netstat -an (должен прослушиваться порт 9102)
- должна появиться иконка в трее (у меня не появляется, т.к. захожу через rdesktop)
- bacula-fd.exe /status
- Диспетчер задач (Ctrl-Alt-Del) должен показывать bacula-fd в списке процессов под пользователем
SYSTEM (при работе в домене возможно потребуется сменить SYSTEM на идентификатор
администратора домена)
Если сервис не запускается, то можно проверить синтаксис:
cd c:\bacula\bin
bacula-fd -t >out
type out
Если сервис не запускается, то можно получить трассировку в файле bacula.trace:
bacula-fd -d100 -c c:\bacula\bin\bacula-fd.conf
выполнить команду "trace on" в консоли
запустить задание и завершить работу bacula-fd
Эксклюзивно открытые файлы не сохраняются (если не включить поддержку
Volume Shadow Copy Service - VSS - в XP и 2003 и в настройках FileSet; при этом файлы сохраняются
на момент начала выполнения задания - делается snapshot файловой системы; нельзя выполнять
несколько заданий параллельно; команда status client позволяет узнать о наличии VSS,
но она может быть не запущена; реальное использование VSS указывается в отчёте о завершении
задания: "VSS Backup Job...", "Generate VSS snapshots").
Полезная утилита vssadmin позволяет узнать о проблемах.
О сохранении системного реестра необходимо позаботиться отдельно (regedit /e).
При отсутствии VSS рекомендуется предварительно сохранять состояние системы (systemstate.bkf надо сохранить потом с помощью bacula):
ntbackup backup systemstate /F c:\systemstate.bkf
Информация о владельцах файлов и правах доступа сохраняются, если
выключён режим совместимости (portable yes). Зато файлы невозможно восстановить с помощью ОС,
отличной от MS Windows NT/2K/XP/2003, пока этот режим не включить. В том числе не работают
утилиты bls и bextract (заработали в версии 3.0?).
Настройка консоли:
- В ресурсе Director должно быть указано описание директора с произвольным паролем
- В ресурсе Console определяется имя консоли и пароль соответствующие настройкам директора
(ресурс Console директора определяет набор ACL)
При частичном восстановлении недостающие каталоги создаются,
принадлежащими пользователю SYSTEM, что может вызвать проблемы доступа (cacls).
Опции запуска:
- /help
- /status
- /service - запустить как службу
- /run
- /install - установить как службу
- /remove - удалить службу
- /events
- /kill
Новая версия устанавливается в "c:\Program Files\Bacula\bin", а настройки
в "c:\Documents and Settings\All Users\Application Data\Bacula".
Для шифрования потоков (шифровать трафик между директором и сервером хранения не обязательно, т.к. они находятся на одном хосте)
с помощью TLS (описание директив) необходимо (используется собственный CA,
предполагается полное соответствие между IP адресами и полными именами DNS во всех участвующих узлах сети):
- создать открытый ключ и сертификат для каждого директора (CN - его-IP-адрес или полное имя хоста)
с полмощью openssl:
cd /etc/pki/tls
openssl genrsa -out private/${CN}.open.key 2048 # незашифрованный!
# или зашифрованный ключ придётся расшифровать перед копированием на сервер (использовать зашифрованный ключ не получится)
#openssl genrsa -des3 -out private/${CN}.key 2048
# запросить сертификат сервера и подписать своим CA
openssl req -new -reqexts v3_req_server -key private/${CN}.key -out certs/${CN}.csr
openssl ca -in certs/${CN}.csr -out certs/${CN}.crt
- создать открытый ключ и сертификат для каждого сервера хранения (CN=полное-имя-хоста)
- создать открытый ключ и сертификат для каждого сервера хранения (CN=bacula-sd@имя-хоста),
а где используется?
- создать открытый ключ и сертификат для каждого файлового сервера (CN=полное-имя-хоста)
- создать открытый ключ и сертификат для каждого файлового сервера (CN=bacula-fd@полное-имя-хоста),
а где используется?
- создать открытый ключ и сертификат для каждой консоли (CN=bacula-console@полное-имя-хоста)
- настройка каждой консоли и bat (bat.conf), в каждый раздел Director
TLS Enable = yes
TLS Require = yes # не подключаться при отсутствии TLS
TLS CA Certificate File = "файл с корневым сертификатом"
TLS Certificate = "файл с сертификатом этой консоли"
TLS Key = "файл с открытым ключом этой консоли"
- настройка файлового сервера (клиента), bacula-fd.conf:
Director {
...
TLS Enable = yes
TLS Require = yes
TLS Verify Peer = yes
TLS Allowed CN = "CN-директора"
TLS Allowed CN = ...
TLS CA Certificate File = "файл с корневым сертификатом"
TLS Certificate = "файл с сертификатом этого файлового сервера, у которого CN=полное-имя-хоста"
TLS Key = "файл с открытым ключом этого файлового сервера, у которого CN=полное-имя-хоста"
}
Director {
...
Monitor = yes
TLS Enable = yes
TLS Require = no
TLS Verify Peer = no
TLS CA Certificate File = "файл с корневым сертификатом"
TLS Certificate = "файл с сертификатом этого файлового сервера, у которого CN=полное-имя-хоста"
TLS Key = "файл с открытым ключом этого файлового сервера, у которого CN=полное-имя-хоста"
}
FileDaemon {
TLS Enable = yes
TLS Require = yes
TLS CA Certificate File = "файл с корневым сертификатом"
TLS Certificate = "файл с сертификатом этого файлового сервера, у которого CN=полное-имя-хоста"
TLS Key = "файл с открытым ключом этого файлового сервера, у которого CN=полное-имя-хоста"
}
- настройка сервера хранения (bacula-sd.conf):
Storage {
...
# сюда ломятся клиенты FD
TLS Enable = yes
TLS Require = yes # no, если не все клиенты умеют TLS?
TLS Verify Peer = no # директор даёт клиенту разовый пароль, который сервер хранения проверяет
TLS CA Certificate File = "файл с корневым сертификатом"
TLS Certificate = "файл с сертификатом этого сервера хранения, у которого CN=полное-имя-хоста"
TLS Key = "файл с открытым ключом этого сервера хранения, у которого CN=полное-имя-хоста"
}
Director {
...
# сюда ломится директор
TLS Enable = yes
TLS Require = yes # необязательно, если директор и хранение на одном хосте
TLS Verify Peer = yes
TLS Allowed CN = "CN-директора"
TLS CA Certificate File = "файл с корневым сертификатом"
TLS Certificate = "файл с сертификатом этого сервера хранения, у которого CN=полное-имя-хоста"
TLS Key = "файл с открытым ключом этого сервера хранения, у которого CN=полное-имя-хоста"
}
Director {
...
Monitor = yes
TLS Enable = yes
TLS Require = no
TLS Verify Peer = no
TLS CA Certificate File = "файл с корневым сертификатом"
TLS Certificate = "файл с сертификатом этого сервера хранения, у которого CN=полное-имя-хоста"
TLS Key = "файл с открытым ключом этого сервера хранения, у которого CN=полное-имя-хоста"
}
- настройка директора (bacula-dir.conf):
Director {
...
TLS Enable = yes
TLS Require = yes # консоль должна использовать TLS
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 = yes # консоль должна использовать TLS
TLS Verify Peer = yes
TLS Allowed CN = "CN-консоли" # эту консоль разрешить
TLS Allowed CN = "..."
TLS CA Certificate File = "файл с корневым сертификатом"
TLS Certificate = "файл с сертификатом этого директора"
TLS Key = "файл с открытым ключом этого директора"
}
...
Storage {
TLS Enable = yes
TLS Require = no # позволяет управлять обязательностью со стороны сервера хранения
TLS CA Certificate File = "файл с корневым сертификатом"
TLS Certificate = "файл с сертификатом этого директора"
TLS Key = "файл с открытым ключом этого директора"
}
...
Client {
...
TLS Enable = yes
TLS Require = yes
TLS CA Certificate File = "файл с корневым сертификатом"
TLS Certificate = "файл с сертификатом этого директора"
TLS Key = "файл с открытым ключом этого директора"
}
...
В bacula имеются средства переноса данных резервного копирования
на новое место (в версии 3 добавлена возможность копирования, в версии 5 добавлена возможность
работать внутри одного пула, в версии 7 добавлен перенос между серверами хранения).
Для этого необходимо описать и запустить (возможно из планировщика) управляющее задание
типа Migrate, которое:
- определяет исходный пул (указывается в описании задания директивой Pool,
можно изменить в момент запуска)
- определяет пул назначения (указывается в описании исходного пула директивой Next Pool,
в описании пула назначения обязательно указывать Storage)
- просматривает задания из томов исходного пула
(только в состояниях Full, Used и Error; но помечает все?) в соответствии
с критериями (директивы Selection Type и Selection Pattern,
с учётом параметров исходного пула: Migration Time, Migration High Bytes, Migration Low Bytes),
указанными в задании
- самый маленький том
- самый старый том
- имя (регулярное выражение) клиента
- имя (регулярное выражение) тома
- имя (регулярное выражение) задания
- SQL запрос
- поддержание максимального размера пула
- поддержание времени хранения заданий в пуле
- определяет задания, сохранённые в рамках которых данные необходимо перенести в новый пул
- порождает задания по переносу данных (по одному для каждого исходного задания)
- порождённые задания переносят данные в новый пул (информация о старом расположении файлов
удаляется из БД; информация о заданиях и томах остаётся; сами данные остаются)
- по их завершении вносятся изменения в БД:
- удаляется информация о данных, сохранённых исходными заданиями
(сами исходные тома остаются на всякий случай);
тип заданий меняется с "B" на "M"
- вносится информация о новых заданиях, необходимая для восстановления с нового места;
информация о мигрировавших заданиях отличается от исходных заданий только
параметром RealEndTime отличающимся от EndTime
- с управляющими заданиями информация о файлах в БД не связывается
Ограничения и неприятности:
- миграция возможна только внутри одного сервера хранения
- до версии 3 можно только переместить, нельзя скопировать
- до версии 5 система не следит за блокировкой (deadlock) ресурсов
- тома внутри пула д.б. одного типа (Media Type)
- журнал некоторых (управляющих?) заданий не записывается в БД
- большой поток сгенерированных заданий
- мигрировавшие данные м.б. сразу удалены из-за истечения срока хранения;
обработка ошибок при этом неадекватная
Использование заданий миграции для переноса части заданий на новое устройство
(массив, NFS, NAS):
В связи с ограничениями (версия 3) возможностей миграции (нельзя копировать,
нельзя мигрировать данные между серверами хранения) создание "противопожарной" копии
пришлось делать с помощью скриптов:
- ночами на выходных делаются полные резервные копии данных с серверов
- в ночь на понедельник "свежие" тома полных резервных копий со всех серверов
хранения в виде файлов сливаются (cp, NFS или ssh (find|cpio -oH ustar); шифрование:
"openssl enc -aes256 -pass file:... -md sha1")
на специально выделенный большой диск (hotswap)
- в понедельник делаются полные резервные копии данных с рабочих станций
- в ночь на вторник они также сливаются на тот же диск
- во вторник диск вынимается и вывозится в неизвестном направлении,
а на его место ставится привезённый оттуда второй диск
- на следующей неделе цикл повторяется; таким образом у нас имеется хотя бы одна копия
всех данных десятидневной давности (в худшем случае);
правда, она не занесена в БД, но хоть что-то
Резервирование каталога при использовании схемы перекрёстного опыления (2 директора):
- модифицировать скрипты /usr/local/bacula/etc/make_catalog_backup на использование файла параметров
(--defaults-extra-file=/usr/local/bacula/etc/mysqldump.cnf) и рабочий каталог достаточного размера вместо /usr/local/bacula/var,
в файле параметров задать пароль и прочие ключи (обеспечить права доступа):
[mysqldump]
add-drop-table
add-locks
disable-keys
force
opt
password=пароль
protocol=socket
user=bacula
- модифицировать скрипты /usr/local/bacula/etc/make_catalog_backup на использование рабочего каталога достаточного размера
вместо /usr/local/bacula/var (я использую каталог на файловой системе резервного копирования /backup/bacula/spool,
нужны права директору на запись)
- тестирование скриптов: "make_catalog_backup bacula bacula" (15 минут для БД MyISAM размером 110GB на SSD;
3 минуты для БД InnoDB размером 24 GB на SSD)
- модифицировать скрипты /usr/local/bacula/etc/delete_catalog_backup на использование рабочего каталога
- модифицировать скрипты /usr/local/bacula/etc/make_catalog_backup на псевдосинхронизацию запуска
(в качестве альтернативы можно использовать запуск задания через консоль с подключением к противоположному директору, возможны наложения)
(не срабатывает при нахлёсте ночных серий за сегодня и завтра):
# флаг взводится по завершению всех ночных заданий на этом сервере, кроме резервирования каталога соседнего директора
until test -e catalog.flag
do
sleep 60
done
rm catalog.flag
# только на одном из серверов, паузы должно быть достаточно
# для резервирования каталога соседнего директора иначе возможен клинч
sleep 600
- настраиваем каждый директор:
- отдельное задание для сохранения каталога соседнего директора
(обычное сохранение файлов для соседнего директора тоже должно быть для сохранения настроек и bootstrap,
из него берутся настройки директора для ресурсов клиента и сервера хранения):
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
# должно запускаться после всех обычных ночных заданий
Priority = 20
# разрешать обычным заданиям запускаться до завершения резервирования каталога
Allow Mixed Priority = yes # во всех заданиях!
# сервер хранения уже описан
Storage = File-ИмяРезервируемогоДиректора
# перед резервным копированием необходимо там сделать дамп БД и здесь взвести флаг, что идёт последнее задание
Run Script {
Runs When = Before
Runs On Client = no
Command = "/usr/local/bacula/etc/last.sh" # touch /backup/bacula/spool/catalog.flag
Runs On Success = yes
Fail Job On Error = yes
}
Run Script {
Runs When = Before
Runs On Client = yes
Fail Job On Error = yes
Command = "/usr/local/bacula/etc/make_catalog_backup bacula bacula"
}
# после резервного копирования дамп надо удалить там
Run Script {
Runs When = After
Runs On Client = yes
Runs On Success = yes
Runs On Failure = no
Fail Job On Error = no
Command = "/usr/local/bacula/etc/delete_catalog_backup"
}
}
- отдельное описание набора файлов
FileSet {
Name = ИмяРезервируемогоДиректора-catalog
Include {
Options {
compression = LZO
signature = SHA1
onefs = yes
aclsupport = yes
noatime = yes
checkfilechanges = yes
}
File = /backup/bacula/spool/bacula.sql # поменять на правильное
}
}
- отдельное расписание (должно происходить сразу после всех работ на
резервируемом директоре; сделать с запасом, т.к. синхронизации нет;
необходимо убедиться, что сервера не копируют каталоги друг друга одновременно;
можно пожертвовать данными за последний день и делать копию до начала ежедневного цикла - тогда синхронизация не нужна):
Schedule {
Name = ИмяРезервируемогоДиректора-catalog
Run = Level=Full Pool=ИмяРезервируемогоДиректора-catalog mon-sun at 00:21
}
- отдельный пул
Pool {
Name = ИмяРезервируемогоДиректора-catalog
Pool Type = Backup
Maximum Volume Jobs = 1
Volume Retention = 7 days
Maximum Volumes = 10
AutoPrune = yes
Recycle = yes
Recycle Oldest Volume = yes
Label Format = "ИмяРезервируемогоДиректора-catalog-${Year}${Month:p/2/0/r}${Day:p/2/0/r}-${Hour:p/2/0/r}${Minute:p/2/0/r}${Second:p/2/0/r}"
}
- пробный запуск
- учения по восстановлению
- завести новую БД (baculatest): "grant_mysql_privileges_test -p" (пользователь уже есть, только права к baculatest),
"create_mysql_database_test -u bacula -p", "make_mysql_tables_test -u bacula -p"
- восстановить текстовое представление БД bacula (внутри нет имени БД) с помощью соседнего директора
- остановить сервер MySQL
- создать копию каталога (просто так, на всякий случай ;)
- отключить запись двоичного журнала в MySQL (закоментировать log-bin в [mysqld] в /etc/my.cnf; для InnoDB всё равно ib_logfile* пишется)
- запустить MySQL
- mysql -u bacula -p baculatest < имя-файла.sql
- восстановить запись двоичного журнала в MySQL и перезапустить его
- запустить bacula-dir
- проверка (например, dbcheck - нужно поменять файл конфигурации;
"show table status" очень приблизительный для InnoDB)
Восстановление каталога при схеме перекрёстного опыления:
При наличии только одного директора восстановить каталог
обычными средствами невозможно, но можно (после установки ОС и bacula с нуля)
поменять bootstrap файл на созданный при сохранении текстовой копии каталога,
остальные параметры также необходимо установить правильно) и
выполнить (run) задачу RestoreFiles.
Если bootstrap файл пропал вместе с БД (или не был сделан), то придётся
использовать утилиту bextract (bls) или узнать имя тома, идентификатор сессии и время сессии
из почтовых сообщений и сделать из этой информации bootstrap файл.
Если копия БД не была сделана или её невозможно восстановить, то
необходимо создать новый пустой каталог (make_bacula_tables), запустить и остановить директора
(он создаёт таблицы с описанием клиентов и серверов хранения), утилитой bscan восстановить
содержимое БД непосредственно из томов (работает не всегда).
Файл bootstrap (.bsr, ASCII) позволяет bacula (или bextract) узнать откуда извлекать данные
при восстановлении без доступа к БД.
Создаётся (Full; Copy - это тоже как бы Full, в результате bsr портится данными от копии с неожиданной датой
к которой потом дописываются последующие инкрементальные задания)
или дополняется (Incremental, Differential, Virtual Full тоже дописывает в конец файла,
для восстановления его начало надо обрезать вручную) автоматически при выполнении задания
(имя файла задаётся директивой Write Bootstrap, для восстановления всех файлов)
или командой restore (для восстановления указанных файлов, оптимизируется чтобы не восстанавливать далее удаляемое).
Может быть создан в текстовом редакторе из текста письма.
Может быть использован в задаче восстановления ("run job=RestoreFiles").
Представляет собой текстовый файл, разбитый на строки.
Строки, начинающиеся с "#" - это комментарий.
Имена заключаются в двойные кавычки.
Каждая строка является фильтром для программы
восстановления и представлена в виде "ключ=значение", ключ Volume разбивает файл на секции,
различные ключи внутри секции сочетаются как AND, одинаковые как OR:
- Volume=имя_тома (в bootstrap файле может быть несколько; дальнейшие фильтры применяются к данному тому до следующего тома)
- Count=количество_восстанавливаемых_файлов
- VolFile=номер_файла | список_номеров_файлов | интервал_номеров_файлов (файлы в смысле магнитной ленты - записи между метками EOF)
- VolBlock=номер_блока | список_номеров_блоков | интервал_номеров_блоков (физические блоки на ленте; не используется для дисков)
- VolSessionTime=время_в_формате_Unix (UTC?)
- VolSessionId=идентификатор_сессии | список_номеров | интервал_номеров (задание уникально определяется
парой "время сессии" и "идентификатор сессии" для тома)
- JobId=идентификатор_задания | список_идентификаторв | интервал_идентификаторов (идентификатор (номер) задания не является
уникальным, если имеется несколько директоров или производилась очистка БД)
- Job=имя_задания | список_имён (можно использовать шаблоны или? регулярные выражения)
- Client=имя_клиента | список_имён (можно использовать шаблоны или? регулярные выражения)
- FileIndex=номер | список_номеров | интервал_номеров (файлы в смысле файловой системы, первый файл сессии имеет номер 1,
файл м.б. растянут между секциями, м.б. несколько копий файла,
файл уникально адресуется в БД и томе по VolSessionId, VolSessionTime и FileIndex)
- FileRegex=регулярное_выражение (расширенное? позволяет задать шаблон имён восстанавливаемых файлов)
- Stream=поток | список_потоков | интервал_потоков (1007 - default ACL, 1008 - access ACL)
- Slot=номер
- VolStartAddr=интервал_адресов (вместо VolStartFile, VolStartBlock)
- VolEndAddr=интервал_адресов (вместо VolEndFile, VolEndBlock)
- VolAddr=смещение_начала-смещение_конца
- MediaType=
Для каждой утилиты необходимо задать (с помощью ключа "-c") имя конфигурационного
файла bacula-sd.conf и первым параметром имя устройства (при архивации на ленту реальное имя устройства типа /dev/nst0;
при архивации на диск - полное имя файла, при этом имя файла рассматривается как имя тома, а имя
каталога должно соответствовать описанию устройства в bacula-sd.conf).
Длина командной строки ограничена (511 байт?).
Перед запуском утилиты убедитесь, что сервер хранения остановлен.
Для реально автономной работы требуется статическая сборка.
bls - получение списка файлов (в размере обрезаются младшие цифры для больших файлов).
Утилита ничего не знает о шифровании и дополнительных правах доступа.
Проблемы при обработке заданий Virtual Full.
Ключи:
- -?
- -v (можно указывать дважды для увеличения степени болтливости)
- -c имя-конфигурационного-файла (bacula-sd.conf)
- -b имя-bootstrap-файла
- -V имена-томов (разделяются вертикальной чертой; в этом случае для дисковых томов указывается
только имя каталога; можно использовать шаблоны)
- -j (вывести список заданий вместо списка сохранённых файлов)
- -k (вывести список блоков вместо списка сохранённых файлов)
- -L (вывести метку тома)
- -E (с дополнительной проверкой)
- -e имя-файла (список исключений; полные имена файлов или каталогов; можно использовать шаблоны;
обрабатывается после списка включаемых файлов)
- -i имя-файла (список включаемых файлов; полные имена файлов или каталогов;
можно использовать шаблоны; обрабатывается после bootstrap-файла)
- -p (не прерываться при ошибках ввода/вывода)
- -d уровень-отладки
Проверка "читаемости" архивов:
/usr/local/bacula/sbin/bls -c /usr/local/bacula/etc/bacula-sd.conf -p -j -E /backup/bacula/*/* > /tmp/bls.all.log
egrep -v 'bls JobId 0: End of Volume|End of all volumes|Using device:|Errors=0|acquire.c:200|Volume Record:|End Job Session Record:|Begin Job Session Record:' /tmp/bls.all.log|less
или с учётом возможности "падения" bls и необходимости параллелизма
cd /backup/bacula
echo */* | xargs --max-args=1 --max-procs=потоков bls.sh
где bls.sh:
d=`dirname $1`
f=`basename $1`
/usr/local/bacula/sbin/bls -c /usr/local/bacula/etc/bacula-sd.conf -p -j -E /backup/bacula/$d/$f > /tmp/bls/$d.$f.log
bextract - восстановление файлов на "голой" системе. Вторым параметром
указывается имя каталога назначения (добавляется к именам востанавливаемых файлов;
буква диска из исходных имён файлов удаляется).
Утилита ничего не знает о шифровании.
Не умеет восстанавливать ACL ("Error: Unknown stream=1998 ignored. This shouldn't happen!") и зашифрованные данные.
Восстановление данных в непереносимом формате Win32 на UNIX/Linux платформе появилось в версии 3.
Ключи:
- -?
- -v (можно указывать дважды для увеличения степени болтливости)
- -c имя-конфигурационного-файла (bacula-sd.conf)
- -b имя-bootstrap-файла
- -V имена-томов (разделяются вертикальной черто
- -b имя-bootstrap-файла
- -V имена-томов (разделяются вертикальной чертой; в этом случае для дисковых томов указывается
только имя каталога; можно использовать шаблоны)
- -e имя-файла (список исключений; полные имена файлов или каталогов; можно использовать шаблоны;
обрабатывается после списка включаемых файлов)
- -i имя-файла (список включаемых файлов; полные имена файлов или каталогов;
можно использовать шаблоны; обрабатывается после bootstrap-файла)
- -p (не прерываться при ошибках ввода/вывода)
bscan - восстановление информации о выполненных заданиях (тома, задания, файлы) в БД
по содержимому тома с данными. Если восстанавливается информация
об очень старом томе, то она может быть автоматически удалена при выполнении следующего задания,
как устаревшая, так что необходимо сразу же её защитить (например, изменить состояние тома
командой "update volume" на Read-Only).
Не всё понимает: "SOS_LABEL: Job record not found for JobId: 0" (RunAfter).
Номера заданий создаются новые.
Утилита bscan 9.2.1 восстановила неправильно и в конце упала (и это не первый раз).
Перед запуском bscan на чистой базе необходимо предварительно запустить директора с правильным bacula-dir.conf,
чтобы он создал записи Client и Storage (они не сохраняются в тома).
Ключи:
- -?
- -v (можно указывать дважды для увеличения степени болтливости)
- -c имя-конфигурационного-файла (bacula-sd.conf)
- -b имя-bootstrap-файла
- -V имена-томов (разделяются вертикальной чертой; в этом случае для дисковых томов указывается
только имя каталога; можно использовать шаблоны;
все тома заводятся в пул первого из них)
- -p (не прерываться при ошибках ввода/вывода)
- -m (обновлять информацию о томах в БД; в частности, необходим для восстановления БД, оказавшейся в
некорректном состоянии при аварийном завершении директора до завершения задания записи на этот том)
- -D тип-СУБД
- -n имя-БД (bacula)
- -u имя-пользователя-СУБД (bacula)
- -P пароль-СУБД (пустой)
- -h имя-хоста-СУБД (локальное соединение)
- -t порт
- -w имя-каталога-для-временных-файлов
- -r (list records?)
- -s (синхронизировать с БД или записать в БД; без этого ключа БД изменяться не будет)
- -S (демонстрировать прогресс)
- -d уровень-отладки
bcopy - копирование тома. Информация в БД не заносится. Вторым параметром
указывается имя устройства для записи. Позволяеи копировать данные между лентами разных типов, лентой и файлом.
Ключи:
- -?
- -v (можно указывать дважды для увеличения степени болтливости)
- -c имя-конфигурационного-файла
- -b имя-bootstrap-файла
- -p (не прерываться при ошибках ввода/вывода)
- -i имена-исходных-томов (разделяются вертикальной чертой;
в этом случае для дисковых томов указывается только имя каталога)
- -o имена-записываемых-томов (разделяются вертикальной чертой;
в этом случае для дисковых томов указывается только имя каталога)
btape ключи имя-устройства - ручное управление НМЛ, с диском не работает,
команды: bsf, bsr, cap (выдача списка описанных и реальных возможностей устройства),
clear, eod, eom, fill (тестирование ёмкости), unfill, fsf, help, label, load, quit, rawfill, readlabel, rectest,
rewind, scan, scanblocks, speed (тестирование скорости), status,
test (автоматическая проверка соответствия свойств устройства описанию), weof, wr, rr, rb, qfill.
Ключи:
- -?
- -v
- -c имя-конфигурационного-файла-сервера-хранения
- -b имя-bootstrap-файла (позволяет копировать часть тома)
- -p (не прерываться при ошибках ввода/вывода)
- -d уровень-отладки
bsmtp - вспомогательная программа, использующаяся при посылке почты.
dbcheck - проверка и очистка БД.
Перед запуском необходимо остановить директора.
Некоторые проверки (orphaned {File,Path,Filename}) выполняются очень (часы и сутки!) медленно
и хотят дополнительных индексов и соответствующего места под копии таблиц (добавление индекса, проверка, удаление индекса),
ускорено в версии 3, достаточно быстро в 9.2.1 (БД на 100 млн строк в File в пределах часа - InnoDB, SSD).
"Eliminate orphaned Path records" не работает, если хоть одно задание имеет HasCache=1.
Необходимо запускать регулярно (раз в год) для удаления мусора, который bacula ленится чистить во время работы (dbcheck может очистить половину).
После очистки желательно сделать "OPTIMIZE TABLE ...", т.к dbcheck не освобождает место на диске, а только помечает его свободным в БД.
Для починки БД используейте средства самой СУБД.
Ключи:
- -?
- -v (можно указывать дважды для увеличения степени болтливости)
- -c имя-конфигурационного-файла-директора
- -C имя-ресурса-каталога
- -f (исправлять найденные ошибки, иначе только извещать)
- -b (пакетный режим, иначе выдаёт меню операцию)
- -B (вывести настройки каталога и завершить работу)
Удаление индекса после аварийно завершённого dbcheck:
show index from File;
drop index idxPIchk on File;
bregex - тестирование регулярных выражений на указываемом файле. Регулярные выражения вводятся интерактивно. Ключи:
- -?
- -f имя-файла
- -l (не печатать номера строк)
- -n (выводить неподходящие строки вместо подходящих)
- -d уровень-отладки
bwild - тестирование шаблонов на указываемом файле. Шаблоны вводятся интерактивно. Ключи:
- -?
- -f имя-файла
- -l (не печатать номера строк)
- -n (выводить неподходящие строки вместо подходящих)
- -d уровень-отладки
testfind позволяет тестировать настройки Include.
Изменения 15.0.2 относительно 13.0.4
- изменение формата каталога (1026),
единый скрипт обновления таблиц (update_bacula_tables), во время обновления размер БД удваивается
- обещается возможность использования старых FD
- директор и сервера хранения надо обновлять синхронно, клиент на сервере с директором д.б. той же серии
- на этот раз изменился формат томов (с BB02 до BB03) - шифрование, замена crc32 на XXH64,
новые тома не будут читаться на старом сервере хранения
- аутентификация пользователя консоли по TOTP (Time based One Time Password);
bconsole генерирует случайное число, показывает QR код, пользователь сканирует QR,
установленная на смартфоне программа генерирует разовый пароль (например, Aegis), директор проверяет его (bacula-totp-dir-plugin; Authentication Plugin = "totp")
- шифрование томов - ?
- использование флагов файлов для защиты томов от случайной перезаписи (Append Only и Immutable); директивы SetVolumeAppendOnly, SetVolumeImmutable и
Minimum Volume Protection Time в ресурсе Device (флаги i и a команды chattr); команда "update volumeprotect" для поиска томов с неправильными флагами
- дополнение антивирус Clamav для заданий типа Verify
- детектор всякого плохого (Abuse.ch) на ходу; таблица FileEvent для вирусов и команда "list fileevent"
- ограничения доступа для директора в настройках клиента -
директивы AllowedBackupDirectories, AllowedScriptDirectories (также запрещены символы из списка "$!;\&<>`()"; none - никаких скриптов),
ExcludeBackupDirectories, AllowedRestoreDirectories ресурса Director
- новые политики группы хранилищ, в т.ч. для задач копирования и миграции -
FreeSpace (использовать хранилище с наибольшим свободным местом), LastBackedUpTo (равномерное распределение задач),
FreeSpaceLeastUsed (достаточно (StorageGroupPolicyThreshold - отклонение от максимума) свободного места и меньше заданий)
- алгоритм сжатия zstd - в ресурсе FileSet опции директивы Compression - zstd1, zstd10 и zstd19 (zstd = zstd10)
- Kubernetes CSI Volume Snapshot
- драйвер Amazon Cloud на замену в будущем S3
- Bacula Installation Manager (BIM) - установка FD и регистрация его с директором, настройка сетевого экрана, SELinux и пр.
- "RunsWhen = AtJobCompletion" ресурса RunScript ресурса Job - запускается после завершения задания и позволяет изменить статус завершения
- описание содержимого в таблице FileSet - имена использованных дополнений или "**files**" для обычных файлов
- множество новых полей таблицы Job - isVirtualFull, Encrypted, LastReadStorageId, WriteStorageId, Rate, CompressRatio, StatusInfo, RealStartTime и др.
- новые поля таблицы Media: Protected, UseProtect, VolEncrypted
- список дополнений в таблице Client - ?
- в таблице Job в поле PriorJobId записываются проверенные jobid (а если их несколько?)
- команда консоли .search для поиска строки (не менее 4 символов) среди имён клиентов, заданий и томов
- множество мелких изменений команд консоли, больше JSON
- RunsWhen=Queue - запуск скрипта, который решает не пора ли запустить задание из очереди
- новые состояния заданий - ожидание сервера хранения или FD
- JobTimestamp, PriorJobId и PriorJobName при форматировании метки тома
- "status dir" показывает прогресс заданий копирования и миграции
- ключевой параметр limit команды "status director" для ограничения количества запланированных заданий; по умолчанию - 50
- улучшения baculum
- XXHASH опции Signature ресурса FileSet - ?
- дополнения для заданий типа Verify
- "status client" не показывает пароли
- при неудачном соединении генерируется событие (event) безопасности
- команда reload меняет время pid-файла
- клиент 15 (начиная с 11?) несовместим с bacula-sd версии 9: "Fatal error: hello.c:191 Bad caps from SD : auth cram-md5 ssl=1"
Изменения 13.0.4 относительно 11.0.6
- изменение формата каталога,
единый скрипт обновления таблиц (update_bacula_tables), во время обновления размер БД удваивается
- обещается возможность использования старых FD
- директор и сервера хранения надо обновлять синхронно, клиент на сервере с директором д.б. той же серии
- при описании задания или пула можно указывать несколько хранилищ и StorageGroupPolicy = {ListedOrder | LeastUsed}
- дополнение для Kubernetes
- "Accurate = o" для сохранения только метаданных и ACL при неизменности контрольной суммы
- поддержка Windows CSV (Cluster Shared Volumes)
- соединения демонов записываются в журнал задания
- метки (tag) объектов каталога типа том, задание и клиент;
команда консоли tag для добавления, удаления и просмотра меток (фильтрация по типу, имени объекта и имени метки);
метку задания можно указать в ресурсе Job
- SHA256 и SHA512 (значения опции Signature ресурса FileSet; значение 2 и 3 опции Verify)
- аутентификация пользователя консоли по LDAP как пример BPAM (--with-ldap --enable-ldap-bpam);
bconsole запрашивает имя и пароль, проверяет директор
- параметр PriorJob для команды bconsole "llist job" - ?
- команда консоли .jlist - list в формате json
- переменная PreviousJobId для почтовых извещений - ?
- директива MaximumJobErrorCount - ?
- bsmtp" список получателей через запятую
- .bvfs_lsfiles allfiles
- улучшения baculum
- опции пакетной установки клиента bacula на Windows (ключи: -ConfigClientName, -ConfigClientInstallService, -ConfigClientStartService и т.п.;
компоненты: -ComponentCDPPlugin, -ComponentFile и т.д.)
- директива SDPacketCheck конфигурации bacula-fd.conf
Изменения 11.0.6 относительно 9.6.7
- изменение формата каталога (имя файла из таблицы FileName в File),
единый скрипт обновления таблиц (update_bacula_tables), во время обновления размер БД удваивается
- обещается возможность использования старых FD
- директор и сервера хранения надо обновлять синхронно, клиент на сервере с директором д.б. той же серии
- автоматическое использование TLS всеми демонами (директива TLS PSK Enable)
- клиенты за NAT (уже было!) - директива Connect To Director ресурса Director настроек bacula-fd.conf;
там же директива Schedule и ресурс Schedule (расписание соединений)
- Continious Data Protection (CDP) - приложение cdp-client отслеживает (inotify) все изменения в сконфигурированных каталогах и кладёт их в кеш;
резгулярно задание bacula обращается к bacula-fd и забирает их из кеша
- глобальная директива Autoprune ресурса Director имеет приоритет над директивами ресурсов Pool и Client
- аудит: запуск и останов демонов, подключение консолей, выполнение команд;
события могут записываться в таблицу БД, в файл или syslog; events в ресурсе Messages;
команда консоли для вывода событий "list events"; команда консоли для создания события ".events type=... source=... text="..."
- prune jobs all - ищет все комбинации клиент/пул и использует алгоритм очистки на них, в конце удаляет все ненужные для восстановления задания и файлы
- динамический адрес клиента - адрес клиента может определяться выполнением скрипта: 'Address = "|скрипт имя-клиента"'
- возможность запретить очистку тома - "Volume Retention = 0" ресурса Pool
- поддержка файлов на Windows не в UTF16
- управление снимками на Windows
- поддержка расширенных атрибутов system.cifs_acl
- поддержка ACL GPFS (IBM)
- улучшения baculum
- запрос при нехватке места на диске - ?
- упрощение Windows FileSet - ?
- QT5 для bat на Windows - ?
- планировщик на клиентах - ?
- улучшение команды reload (сохраняет больше текущих значений)
- поддержка MySQL 8
- клиент 15 (начиная с 11?) несовместим с bacula-sd версии 9: "Fatal error: hello.c:191 Bad caps from SD : auth cram-md5 ssl=1"
Изменения 9.6.7 относительно 9.4.4
- улучшения baculum
- Docker Plugin
- интерфейс сбора статистики для Graphite (ресурс Statistics, директивы: Name, Type = Graphite, Host, Port, Interval = 5 mins, Metrics = all;
команда консоли statistics [json])
- директива SyncOnClose ресурса Device
Изменения 9.4.4 относительно 9.2.2
- Amazon S3 (используется локальный кеш, в т.ч. для восстановления;
CacheRetention (0 - не чистить) в ресурсе Pool;
Device Type = Cloud и Cloud = тип и MaximumPartSize=размер-куска-кеша в ресурсе Device и множество других параметров;
кеш - это каталог (не файл) с именем тома); требуется дополнительный драйвер S3 (без исходников?)
- автоматическая обработка ленточных кассет WORM; требуется sdparm и tapeinfo;
скрипт определения задаётся директивой Worm Command ресурса Device; директива Control Device
Изменения 9.2.2 относительно 9.0.8
- формат каталога не изменился (16?)
- обещается возможность использования старых FD (не все функции поддерживаются, новые FD не работают со старым директором)
- можно почистить все тома пула: "prune allfrompool {pool=имя | allpools}"
- команда bconsole "delete client" позволяет удалить клиента и всё, что с ним связано;
удалённый клиент остаётся в таблице Client, выдаётся в меню выбора клиента; помогает только dbcheck
(Eliminate orphaned FileSet records, Eliminate orphaned Client records)
- команда "status schedule" позволяет задать несколько параметров client и job
- при восстановлении все родительские каталоги автоматически восстанавливаются, чтобы избежать проблем с правами доступа;
отменить можно параметром noautoparent команды restore
(опробовал на /etc/yum.conf, права /etc восстановлены неправильно)
- Add command to change the pool of a job and the associated volumes (?)
- tray monitor позволяет восстанавливать
- клиент 9.0 не восстанавливает ACL от сервера 9.2 (а от 15.2 восстанавливает)
Изменения 9.0.8 относительно 7.4.7
- изменение формата каталога, единый скрипт обновления таблиц (update_bacula_tables)
- обещается возможность использования старых FD
- переписан сервер хранения (динамически загружаемые модули)
- улучшение поддержки автозагрузчиков с несколькими устройствами (требуется правка bacula-dir.conf раздел Storage поменять на Autochanger);
позволяет зарезервировать устройство для задач восстановления
- директива настроек директора "Backups To Keep" для задания "Virtual Full" позволяет
(Progressive Virtual Fulls, Incremental Forever with Consolidation)
обеспечивать не менее указанного количества инкрементальных копий при консолидации виртальной полной резервной копии
- директива настроек директора "Delete Consolidated Jobs" позволяет удалять консолидированные задания
- изменено поведение TapeAlert
- команды ограничения доступа с консоли (секция Console файла bacula-dir.conf): ClientACL = список-клиентов,
RestoreClientACL = список-клиентов, BackupClientACL = список-клиентов
- команда list учитывает указанные выше права
- директива "Directory ACL" позволяет указать список каталогов через запятую для восстановления с ограниченной консоли
- новый tray monitor может инициировать запуск задания резервного копирования (считывает команды для bconsole из указанного файла!)
- bconsole может инициировать запуск задания резервного копирования (директор использует тот же канал для обхода NAT):
права в секции Console в bacula-dir.conf, директива Remote = yes в секции Director в bacula-fd.conf, специфический bconsole-remote.conf
- новые утилиты: bbconsjson, bdirjson, bfdjson, bsdjson (вывод конфигурации в формате json)
- удалён dvd-handler
- счётчик использования устройства для реализации поочерёдного использования (round robin)
- по умолчанию Maximum Concurrent Jobs для директора равно 20 (было 1)
- PluginDirectory в bacula-sd.conf и bacula-fd.conf
- восстановление mtime и atime для символических ссылок
- тестирование пропускной способности сети между клиентом и сервером хранения - команда консоли "status network"
- устройства хранения только на чтение (уже было?)
- SSL соединение к PostreSQL
- list и llist показывают дату истечения срока хранения (уже было?)
- изменение приоритета идущего задания - "update jobid=номер prio"
- параметры joberrors, jobstatus=код, client=имя-клиента, order={asc|desc|, level=уровень и jobtype=тип для команды bconsole "list jobs"
- команда bconsole "@tall имя-файла" позволяет записывать весь ввод и вывод в файл
- команда bconsole .estimate job=имя-задания
- по умолчанию все сообщения между компонентами bacula сжимаются с версии 6.6, для отключения необходимо указать "Comm Compression = no"
bacula-dir.conf: Director, bacula-fd.conf: Client, bacula-sd.conf: Storage, bconsole.conf: Console
- новый формат тома, подходящий для дедупликации ZFS или NetApp (Deduplication Optimized Volumes, Aligned Volumes)
с помощью специального модуля хранения (нет исходных текстов)
Изменения 7.4.7 относительно 7.0.5
- изменение формата каталога, единый скрипт обновления таблиц (update_bacula_tables)
- дополнительные переменные: %E - количество нефатальных ошибок, %R - количество прочитанных с диска байт,
%P - номер процесса, %C - клонированное задание
- отключение/подключение клиентов, планировщиков, устройств хранения
- управление снимками (требуется закрытый пакет bacula-enterprise-snapshot)
- опция M для аккуратных заданий (время модификации файла)
- дисковые устройства хранения только на чтение
- перезапуск незавершённых или упавших заданий (restart, resume, stop)
- команда Truncate
- очистка томов с истёкшим временем хранения
- очистка заданий миграции
- SSL соединение к MySQL (директивы в секции Catalog: dbsslkey, dbsslcert, dbsslca, dbsslcapath, dbsslcipher)
- list и llist показывают дату истечения срока хранения, можно указать тип сортировки (order=ascending|decending),
limit=количество, jobstatus=
- директива "Max Virtual Full Interval" аналогична "Max Full Interval", но для виртуальных заданий (если долго не было полных заданий,
то текущее инкрементальное задание преобразуется в полное)
- директива "Virtual Full Backup Pool" позволяет задать пул при преобразовании
- в настройках заданий проверки можно задать VerifyData
- адаптация к systemd, MySQL 5.7 и gcc 6.0
- директивы ConsoleRunBeforeJob и ConsoleRunAfterJob (дополнение к RunScripts)
Изменения 7.0.5 относительно 5.2.13
- удалены gnome-console, tray-monitor, wx-console, win32
- добавлен baculum (веб интерфейс)
- копирование и миграция заданий между серверами хранения
- для борьбы с сетевыми экранами добавлена возможность обращения сервера хранения к клиенту ("SD Calls Client" в настройках клиента)
- в описании задания можно также указывать "Next Pool", ключ nextpool= в команде run
- команда "status storage" теперь фильтрует ресурсы, старое поведение по "status select storage"
- команда "status schedule [days=10] [limit=100] [time="YYYY-MM-DD HH:MM:SS"] [schedule=имя] [job=имя]
- настройка алгоритма шифрования для OpenSSL для файлового сервера:
PkiCipher = {AES128 | AES192 | AES256 | blowfish} и PkiDigest = {SHA1 | SHA256}
- truncate storage=имя pool=имя
- параллельное чтение тома на диске ускоряет копирование, миграцию и сборку виртуальных полных копий
- сборка виртуальных полных копий по номеру завершающего задания или списку заданий
- "FD Storage Address" в настройках ресурса клиента позволяет директору и клиенту обращаться к серверу хранения по разным адресам
- директива "Maximum Bandwidth Per Job" позволяет ограничить используемую пропускную способность сети
в настройках клиента (FileDaemon) и описаниях задания в байтах/секунду (суффиксы: k/s - 1000 байт, kb/s - 1024 байт,
m/s - миллион, mb/s - 2^20 байт)
- команда "setbandwidth limit=кибибайт jobid=номер" позволяет ограничивать указанное задание
- директива "Maximum Concurrent Read" (не действует на задания по восстановлению)
- дополнительные переменные для RunScript: %P - номер процесса, %C - признак клонирования
- устройства, которые умеют только читать: "Read Only = yes" в ресурсе Device
- команда "prune expired volumes [pool=имя]" (особенно полезна в сочетании с "Truncate On Purge"
- run [optimizespeed=false] (отключение оптимизации скорости работы с жёсткими ссылками за счёт расхода памяти)
- запрет на исполнение команд в настройках файлового сервера "DisableCommand = "команды через пробел""
- максимальная длина строки файла настройки увеличена с 499 до бесконечности
- ограничение количества параллельных задания копирования и миграции в описании задания: Maximum Spawn Jobs = 300
- клиент посылает, а "status dir" отображает прогресс выполнения задания
- в месяце появилась шестая неделя
- lastday в директиве run в описании планировщика
- командам cancel и restart можно указать интервал идентификаторов заданий или all
- убраны блокировки при обращении к каталогу в bconsole
- декодирование загадочных строк: .bvfs_decode_lstat lstat="строка"
Изменения 5.2.13 (RHEL 7.1) относительно 5.2.6
- многострочный INSERT в MySQL
- бэкпортирование кода StorageId
- утилита bpluginfo
Изменения 5.2.6 относительно 5.0.3
- новый формат каталога (версия 14),
при установке из rpm скрипт update_bacula_tables запускается автоматически
(рекомендуется предварительно сделать копию БД)
- совместимость серверов 5.2 и клиентов 5.0 и 3.0 обещается, но не гарантируется
- сервер хранения и директор должны быть одной версии
- сжатие LZO (lzo2)
- трей-монитора под MS Windows
- удаление заданий миграции
- изменился алгоритм очистки старых заданий (в частности, не позволяется удалять задания,
которые необходимы для восстановления с момента последнего полного копирования)
- проверка произвольного задания
- в bat панель brestore вместо просмотра версий
- bat -t (?)
- для сборки bat требуется Qt версии 4.6.2 (Qt 4.7.4 начиная с 5.2.4)
- директор может быть собран с поддержкой PostgreSQL, MySQL и SQLite3;
для установки СУБД по умолчанию необходимо скопировать libbaccats-СУБД-версия.so
в libbaccats-версия.so (ну и поменять 7 скриптов ;)
- возможность выбора директора в bconsole
- команда restorejob в bconsole
- добавлены коды %b (байт задания) и %F (файлов задания) и %h (адрес клиента) в скрипты
- новые опции ./configure (?)
- расширения сервера хранения
- в подкомандах restore можно использовать несколько шаблонов имён файлов
Изменения 5.0.3 относительно 5.0.2
- добавлены коды %b (байт задания) и %F (файлов задания) в скрипты
- сортировка колонок на странице Media в bat
- попытка автоматической подгонки размера тома в каталоге к реальному
(разница может образоваться в результате сбоя)
- команды .dump и .exit
- максимальный размер блока увеличен до 20MB
Изменения 5.0.2 относительно 3.0.3 (номер версии 4 зарезервирован для Enterprise):
- новый формат каталога (версия 12),
при установке из rpm скрипт update_bacula_tables запускается автоматически
- работа с MySQL замедлилась (авторы рекомендуют не пытаться ускориться,
добавляя новые индексы, а переключаться на PostgreSQL; я переключился на SSD ;)
- управление максимальным числом одновременно выполняемых заданий с точностью до устройства
(директива Maximum Concurrent Jobs в описании устройства, одновременность в пределах одного пула томов)
- восстановление с нескольких серверов хранения (автоматическое переключение при переходе от одного задания к другому)
- дедупликация файлов (это не то, о чём вы подумали) - файлы (даже в режиме Full) сохраняются только,
если они изменились относительно состояния на момент выполнения задания типа Base, bscan не работает
- управление сжатием с точностью до сервера хранения (AllowCompression)
- опция Accurate при описании набора файлов (позволяет задать проверку контрольных сумм, а не только проверку времени
создания/изменения файла при определении списка изменённых файлов)
- автозавершение командной строки (по Tab), разрешено пользоваться readline
- интервалы хранения информации о заданиях и файлов в описании пула
- клиент может работать в режиме "читать всё, без права записи": "bacula-fd -k -u nobody -g nobody"
- расширение списка команд для разработки GUI: .bvfs_update, .bvfs_lsdirs, .bvfs_lsfiles
- управление проверкой контрольных сумм с точностью до сервера хранения (Block Checksum)
- развитие Bat (детальное описание задания; работа со списком томов - Media List, включая детальное описание тома),
реализация под Win32
- перед установкой новой версии клиента под MS Windows необходимо удалить старую
- восстановительная флешка (Linux Bare Metal Recovery USB Key)
- задания Migrate, Copy и Virtual Full могут читать и писать в один и тот же пул
- обнуление размера файла при очистке тома (ActionOnPurge=Truncate в описании пула и команда "purge volume")
- make_catalog_backup.pl: безопасное хранения паролей доступа к каталогу
- команда: show disabled
- улучшение работы с ACL (здравствуй, Vista?)
- совместимость серверов 5.0.1 и клиентов 2.4 и 3.0 обещается, но не гарантируется
- изменилась семантика работы директивы "Allow Duplicate Jobs" (CancelLowerLevelDuplicates)
Изменения 3.0.3 относительно 3.0.1
- директива задания адреса исходящих соединений
- опция accurate={yes|no} для команды estimate
- ключи configure: --with-hostname, --with-bsrdir, --with-logdir
- в меню восстановления добавлена возможность построения полного восстановления при указания номера одного из заданий
- аккуратнее обрабатывается ситуация переполнения диска
Изменения 3.0.1 относительно 2.4.4
- изменился формат БД (версия 11, 64-битный индекс файлов,
./update_bacula_tables, временое удвоение используемого места)
- учёт удалённых и переименованных файлов при восстановлении (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 в настройки сервера хранения
- убраны улучшения ClientRunBeforeJob, позволяющие генерировать списки Include/Exclude
- 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 доведено до работоспособного состояния
- остановка планирования конкретных заданий (disable job=)
- относительные имена в команде 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
- кнопка "Dir Status" в консоли Gnome
|
Bog BOS: Сетевая система резервного копирования и восстановления данных bacula
|
Copyright © 1996-2024 Sergey E. Bogomolov; www.bog.pp.ru