Конфигурирование службы Director

Из всех конфигурационных файлов, необходимых для запуска Bacula, конфигурационный файл службы Director – самый сложный. Именно его пользователю придется конфигурировать чаще всего, а именно по мере добавления клиентов, или же придется изменять наборы файлов FileSet.

Более подробная информация о конфигурационных файлах и ресурсах, включая типы данных, с которыми работает ПО Bacula содержится в разделах ниже.

Типы ресурсов службы Director

Ресурс службы Director может принадлежать к одному из следующих типов:

Job, JobDefs, Client, Storage, Catalog, Schedule, FileSet, Pool, Director, или Messages. В данном руководстве они представлены в наиболее логичном порядке.

Примите во внимание тот факт, что все действия так или иначе касаются задач.

  • Ресурс Director – служит для определения имени службы Director и пароля доступа для авторизации в консоли. Конфигурационный файл может содержать только одно определение службы Director. Если вы используете на машине /dev/random или bc, Bacula сгенерирует произвольный пароль в процессе конфигурации, в противном случае поле будет оставлено пустым.
  • Ресурс Job — служит для определения задач резервного копирования/восстановления, а также для привязки ресурсов Client, FileSet и Schedule, которые будут использоваться для каждой задачи. Как правило, все задачи Jobs имеют различные имена, соответствующие каждому клиенту (то есть одна задача для каждого клиента, при этом каждая задача будет отличаться и иметь иное имя).
  • Ресурс Defs – опциональный ресурс для значений по умолчанию, используемый ресурсами Job.
  • Ресурс Schedule – определяет момент, в который внутренним планировщиком Bacula должна быть автоматически запущена задача. Вы можете иметь несколько планировщиков, однако каждая задача будет использовать только один из них.
  • Ресурс FileSet – определяет набор файлов, резервные копии которых должны быть созданы для каждого клиента. Вы можете определять сколько угодно ресурсов FileSets, однако каждая задача будет использовать только один из них.
  • Ресурс Client – определяет, какой клиент подлежит резервному копированию. Вы можете иметь сколько угодно ресурсов Client, однако каждая задача будет использовать только один из них.
  • Ресурс Storage — определяет, на каком физическом устройстве должны быть смонтированы тома. Пользователь может задать один или более ресурсов Storage.
  • Ресурс Pool — определяет пул томов, которые могут быть использованы для конкретной задачи. Как правило, пользователи используют один пул по умолчанию. Однако, если вы работаете с большим количеством клиентов или томов, вы можете использовать несколько пулов. Пулы позволяют ограничивать ресурсы Job (Client) использованием конкретных массивов томов.
  • Ресурс Catalog – определяет, какая БД должна хранить список файлов и имена томов, на которых создана их резервная копия. Многие пользователи используют один каталог. Однако в случае множества клиентов, вы можете использовать несколько каталогов. Использование нескольких каталогов несколько осложнит управление ими, так как вам придется помнить, какие данные содержатся в каком каталоге.
  • Ресурс Messages – используется для того, чтобы задать каталог, в который будут отсылаться сообщения об ошибке или информационные сообщения. Вы можете задать несколько различных ресурсов сообщений, и, следовательно, конкретные классы сообщений для различных пользователей и локаций (файлы,…).

Ресурс Director

Ресурс Director определяет атрибуты служб Director, запущенных в сети. В текущей версии используется только один ресурс Director, однако в итоговой версии появится возможность использования нескольких ресурсов Director в целях поддержки дублирования индексов и баз данных.

Director

Запуск ресурса Director. Необходимо использовать один и только один ресурс Director.

Name = name

Имя службы Director, используемое системным администратором. Это обязательная директива.

Description = text

Следующее поле содержит описание службы Director, которое будет отображаться в графическом интерфейсе пользователя. Это опциональное описание.

Password = UA-password

Данная директива задает пароль, который необходимо указывать при использовании консоли Bacula для авторизации. Этот пароль должен совпадать с паролем, заданным в ресурсе Director конфигурационного файла консоли. В целях обеспечения безопасности, пароль никогда не передается по сети, вместо этого вместе с паролем создается хэш-код ответа на запрос. Это обязательная директива. Если у вас на машине используется /dev/random или консоль bc, Bacula сгенерирует произвольный пароль в процессе конфигурации; в противном случае, поле будет оставлено пустым и вам придется ввести пароль вручную.

Пароль задается простым текстом. Он генерируется как указано выше. В целях безопасности лучше использовать произвольный пароль.

Messages = Messages-resource-name

Ресурс сообщений указывает, куда необходимо доставлять сообщения службы Director, которые не связаны с конкретной задачей. Большинство сообщений связаны с определенными задачами, и будут направлены в ресурс Messages, указанный задачей. Однако некоторые сообщения генерируются в отсутствии запущенной задачи. Это обязательная директива.

Working Directory = Directory

 Это обязательная директива, которая задает каталог, в который служба Director может помещать файлы состояния. Этот каталог должен использоваться только Bacula, но может использоваться совместно с прочими службами Bacula daemon. Однако примите во внимание, что, если каталог используется совместно с другими службами Bacula daemon (например, File daemon и Storage daemon), необходимо использовать уникальные имена Name для каждой службы daemon.  По умолчанию в процессе конфигурирования Bacula создаются уникальные имена служб daemon с использованием суффиксов -dir, -fd, и -sd. Стандартное расширение оболочки службы Directory производится при считывании конфигурационного файла в целях корректного использования значений типа $HOME. Это обязательная директива. Указанный рабочий каталог должен быть создан заранее и должен быть доступен для записи и чтения службе Bacula, которая к нему обращается.

Если вы указали пользователя Director user и/или группу Director group в строке /configure с суффиксами-with-dir-user и/или -with-dir-group, владельцу рабочего каталога Working Directory и группе будут присвоены эти значения.

Pid Directory = Directory

Это обязательная директива, которая позволяет задать каталог, в который служба Director может помещать файлы с ID соответствующего процесса. Файл с ID процесса используется для завершения работы Bacula и для предотвращения одновременного запуска нескольких копий Bacula. Это обязательная директива. Стандартное расширение оболочки для Directory выполняется при считывании конфигурационного файла для правильного использования значений типа $HOME.

Указанный каталог PID должен быть создан заранее и быть доступным для чтения и записи службе Bacula daemon, которая к нему обращается.

Как правило, в системах Linux, данный каталог задается как: /var/run. Если вы устанавливаете Bacula не в системном каталоге, вы можете использовать рабочий каталог, как описано выше.

Scripts Directory = Directory

Это опциональная директива и, если она задана, то указывает каталог, к которому служба Director обращается за скриптом запуска DirStartup.py, написанным на языке Python. Этот каталог может также использоваться другими службами Bacula daemon. Стандартное расширение оболочки каталога выполняется при считывании конфигурационного файла для правильного использования значений типа $HOME.

QueryFile = Path

Это обязательная директива, которая задает каталог и файл, в котором Director сможет найти записанные SQL-операторы для команды консоли Query. Стандартное расширение оболочки для Path выполняется при считывании конфигурационного файла для правильного использования значений типа $HOME. Это обязательная директива.

Heartbeat Interval = time-interval

Это опциональная директива и, если она задана, то служба Director будет вынуждена задать интервал «keepalive» в секундах на каждом выходе, который она открывает для ресурса Client. Значение, заданное директивой, является приоритетным. Директива выполняется только в системах (Linux, …) которые позволяют использовать функцию TCP_KEEPIDL setsockopt. Значение по умолчанию равно нулю.

Maximum Concurrent Jobs = number

где number – это общее количество задач Director, которое должно быть запущено одновременно. По умолчанию используется параметр равный 1, но пользователь может задать другое значение.

Формат тома становится более сложным при запуске нескольких задач одновременно. Соответственно восстановление может занять больше времени, если служба Bacula будет вынуждена перебирать перемежающиеся блоки тома множества запущенных задач. Этого можно избежать, если различные задачи будут записаны в различные тома, или если будет использована функция буферизации данных.

FD Connect Timeout = time

где time – это время, в течение которого служба Director будет пытаться продолжать связываться с File daemon для запуска задачи. По истечении заданного времени Director отменит задачу. По умолчанию задан период в 30 минут.

SD Connect Timeout = time

где time – это время, в течение которого служба Director будет пытаться продолжать связываться с Storage daemon для запуска задачи. По истечении заданного времени Director отменит задачу. По умолчанию задан период в 30 минут.

DirAddresses = IP-address-specification

Директория используется для определения портов и адресов, на которых служба Director daemon будет «слушать» подключения консоли Bacula. Для наглядности приведем пример:

 DirAddresses  = {

    ip = {addr = 1.2.3.4; port = 1205;}

    ipv4 = {

        addr = 1.2.3.4; port = http;}

    ipv6 = {

        addr = 1.2.3.4;

        port = 1205;

    }

    ip = {

        addr = 1.2.3.4

        port = 1205

    }

    ip = {addr = 1.2.3.4 }

    ip = {addr = 201:220:222::2 }

    ip = {

        addr = bluedot.thun.net

    }

}

где ip, ip4, ip6, addr, и port – это ключевые слова. Примите во внимание тот факт, что адрес может быть задан как четыре группы цифр, разделенные точками, так и с использованием нотации IPv6, либо с использованием условного имени (только в IP спецификации). Порт может быть обозначен с помощью численного, либо мнемонического значения из файла /etc/services. Если порт не задан, будет использован порт по умолчанию. Если указана ip группа, разрешение может быть задано с использованием IPv4 или IPv6. Если задан протокол ip4, допускается использование только IPv4 разрешений. То же самое действует и для протокола ip6.

Примите во внимание, что, если вы используете директиву DirAddresses, вы должны использовать либо директиву DirPort, либо DirAddress в том же ресурсе.

DirPort = port-number

Директива задает порт (положительное целое число), на котором Director daemon будет «слушать» подключения консоли Bacula. Тот же номер порта должен быть указан в ресурсе Director в конфигурационном файле Console. По умолчанию используется значение 9101, поэтому эту директиву использовать не обязательно. Эта директива не используется, если задается директива DirAddresses (несколько адресов).

DirAddress = IP-Address

Эта директива является необязательной, но, если она используется, сервер Director (для программы Console) будет привязан к указанному IP-адресу, который является либо доменным именем, либо IP-адресом, указанным в виде четырех цифр, разделенных точками, в строке либо в строке с кавычками. Если эта директива не задана, Director будет привязан к любому доступному адресу (по умолчанию). Обратите внимание на то, что в отличие от указанной выше директивы DirAddresses, данная директива позволяет указать только один адрес. Эта директива не должна использоваться, если задается директива DirAddresses.

DirSourceAddress = IP-Address

Эта директива не является обязательной, но, если она задана, сервер Director (при инициировании подключения к хранилищу или file daemon) запросит подключения с указанного адреса. Можно указать только один IP-адрес. Если эта директива не задана, сервер Director запросит исходящие соединения в соответствии с системной таблицей маршрутизации (по умолчанию).

Statistics Retention = time

Директива Statistics Retention определяет время, в течение которого Bacula будет хранить статистику записей задач в базе данных каталога после окончания времени выполнения задачи (в таблице JobHistory). Если время истекает и, если пользователь запустит команду prune stats, Bacula удалит записи о задачах старше указанного периода.

Статистические записи не используются в целях восстановления бэкапов. Они используются исключительно в целях планирования мощности, биллинга, и так далее. Дополнительную информацию вы найдете в разделе, посвященном конфигурированию файла.

По умолчанию используется срок, равный 5 годам.

VerId = string

где string – это идентификатор, который можно использовать в целях технической поддержки. Это строка отображается при использовании команды version.

MaximumConsoleConnections = number

где number – это максимальное число подключений консоли, которые можно установить одновременно. По умолчанию используется значение равное 20, но можно использовать большее значение.

Пример допустимого определения ресурса Director представлен ниже:

Director {

  Name = HeadMan

  WorkingDirectory = «$HOME/bacula/bin/working»

  Password = UA_password

  PidDirectory = «$HOME/bacula/bin/working»

  QueryFile = «$HOME/bacula/bin/query.sql»

  Messages = Standard

}

Ресурс Job

Ресурс Job определяет задачу (резервное копирование, восстановление, …), которую выполняет ПО Bacula. Каждое определение ресурса Job содержит имя клиента Client и набора файлов FileSet для резервного копирования, планировщик Schedule выполнения задачи, в котором должны храниться данные, используемый пул носителей Pool. По сути, каждый ресурс Job должен задавать файл, хранилище, задачу по резервному копированию/восстановлению/уровень и планировщик соответственно. Примечание, необходимо указывать FileSet для задачи восстановления, хотя этот параметр больше не используется.

Заданная задача может относится только к одному типу (Backup, Restore, …). Если вы хотите создать резервную копию нескольких наборов файлов на одном или нескольких клиентах, вы должны определить задачу для каждого из них.

Примите во внимание тот факт, что вы задаёте только одну задачу для создания полных, дифференциальных и инкрементальных резервных копий, поскольку различные уровни бэкапов связаны вместе одним уникальным именем задачи. Как правило, пользователь задает только одну задачу для одного клиента, но, если вы используется множество файлов, вы можете разбить одну задачу на несколько, каждой из которых будет соответствовать свой набор файлов. 

В настоящее время для выполнения нескольких задач нельзя использовать несколько служб Storage daemon. Вам придется создавать разные задачи и гарантировать, что каждой задаче соответствует уникальное сочетание клиента и набора файлов. Для восстановления клиента Bacula использует параметры Client и FileSet, поэтому вам не удастся выполнить восстановление, если существует несколько задач, которым соответствуют один и тот же клиент и набор файлов, или несколько хранилищ. Проблему можно решить, задав несколько определений  FileSet (имена должны быть разными, но содержимое FileSet может быть одинаковым).

Job

Запуск ресурса Job. Требуется по меньшей мере один ресурс Job.

Name = name

Имя ресурса Job. Это имя должно быть указано в команде Run в консоли программы для запуска задачи. Если имя содержит пробелы, его необходимо задать в кавычках. Будет лучше присвоить имя задачи, соответствующее имени клиента, бэкап которого будет создаваться задачей. Данный подход позволит идентифицировать задачи.

Если задача уже запущена, уникальное имя задачи будет состоять из имени, которое указал пользователь в данной директиве, за которым последует данные о времени и дате, на которые назначено выполнение задачи. Это обязательная директива.

Enabled = yes|no

Эта директива позволяет включать/отключать автоматическое исполнение задачи через планировщик.

Type = job-type

Директива Type задает один из следующих типов задач: Backup, Restore, Verify, или Admin. Это обязательная директива. В рамках определенного типа задач существуют различные уровни, которые будут описаны ниже.

Тип Backup служит для запуска задачи резервного копирования. Как правило, пользователь задает по меньшей мере одну задачу по резервному копированию для каждого клиента. Пока не будет отключена функция каталогизирования, вся важная статистика и данные о файлах, которые были скопированы, будут помещены в каталог.

Тип Restore служит для запуска задачи восстановления. Как правило, пользователь задает по меньшей мере одну задачу восстановления, которая служит в качестве подобия прототипа, которую сможет модифицировать пользователь, используя программу консоли в целях восстановления. Несмотря на то, что определенная основная информация из задачи восстановления сохраняется в каталоге, объем этой информации минимален по сравнению с объемом информации, сохраняемой для задачи резервного копирования. Например, не генерируются записи относительно файловой БД, поскольку никакие файлы не сохраняются.

Задачи типа Restore нельзя запускать автоматически с помощью планировщика, как в случае с задачами типа Backup, Verify и Admin. Чтобы восстановить файлы, вам необходимо использовать команду restore в консоли.

Verify

Запуск задачи сверки. Как правило, задачи типа verify позволяют сравнивать содержимое каталога с файловой системой, или с каталогом, резервная копия которых была создана. К тому же, задача служит проверки возможности чтения ленты, на которую были записаны данные. Также команда verify используется для обнаружения «ловушек».

Admin

Запуск задачи администратора. Задачи типа Admin могут быть использованы для периодической обрезки каталога в случае, если вы не хотите выполнять ее по завершении каждой задачи резервного копирования. Несмотря на то, что задачи типа Admin записываются в каталог, объем сохраняемых данных минимален.

Level = job-level

Директива Level задает уровень задачи по умолчанию, которую необходимо запустить. Каждому отдельному типу задачи (Backup, Restore, …) соответствует различный набор уровней, которые можно задавать. Различные значение, заданные в ресурсе Schedule, как правило, замещают значения директивы Level. Это необязательная директива, однако, необходимо указывать либо ее, либо замещающее значение в ресурсе Schedule.

Задачи типа Backup могут иметь один из следующих уровней:

Full (полный бэкап)

Если задан данный тип задачи, будут созданы бэкапы всех файлов из FileSet, неважно были ли они изменены, или нет.

Incremental (инкрементальный бэкап)

Если задан данный тип задачи, будут созданы бэкапы всех файлов из FileSet, которые были изменены с момента последнего успешного резервного копирования, выполненного с помощью той же задачи, с использованием того же набора файлов FileSet и клиента Client. Если служба Director не может найти предыдущий  допустимый полный бэкап, тогда уровень задачи будет повышен до полного резервного копирования. Когда Director ищет записи о последнем допустимом бэкапе в БД каталога, он ищет предыдущую задачу:

  • С тем же именем задачи.
  • С тем же именем клиента.
  • С тем же набором файлов (если в наборе файлов произошли изменения, то данный набор будет считаться другим набором файлов).
  • Задачу, которая представляла собой полный, дифференциальный или инкрементальный бэкап.
  • Задачу, которая была нормально завершена (не завершилась неудачей и не была отменена).
  • Задачу, которая была начата не позднее указанного времени Max Full Interval.

Если задача не соответствует всем вышеперечисленным условиям, служба Director повысит уровень задачи инкрементального резервного копирования до полного. В противном случае, будет создан инкрементальный бэкап.

Служба File daemon (Client) решает, какие файлы в включить в инкрементальный бэкап, сравнивая время начала выполнения предыдущей задачи (полный, дифференциальный или инкрементальный бэкап) с временем последней модификации файла (st_mtime) и временем последнего изменения файла (st_ctime). Если файл был модифицирован или изменен на или после этого момента времени, будет создана его резервная копия.

Некоторые антивирусы могут изменять st_ctime во время сканирования. Например, если антивирусное ПО Bacula попытается сбросить st_аtime, которое не используется ПО Bacula, изменится значение st_ctime, а Bacula создаст резервную копию файла во время создания инкрементального или дифференциального бэкапа. В случае использования антивируса Sophos вы можете запретить ПО сбрасывать st_atime и тем самым изменить st_ctime с помощью опции -no-reset-atime.

Если Bacula выполняет инкрементальное резервное копирование, будут созданы инкрементальные бэкапы всех модифицированных файлов, находящихся в системе. Однако любой файл, удаленный с момента создания последнего полного резервного копирования, по-прежнему будет находится в каталоге Bacula. Это значит, что даже если между полным резервным копированием и временем восстановления были удалены некоторые файлы, они все равно будут восстановлены. После следующего полного резервного копирования удаленные файлы больше не будут отображаться в каталоге.

Кроме того, если вы перемещаете каталог, а не копируете его, файлы в нем перестают содержать время модификации (st_mtime), или же меняется атрибут (st_ctime). В результате эти файлы, скорее всего не будут включены в инкрементальную или дифференциальную резервную копии, которые зависят исключительно от данных временных меток. Если вы перемещаете каталог и хотите создать его корректную резервную копию, сначала его необходимо будет скопировать, а затем удалить оригинал.

Для управления удаленными файлами или изменениями в каталоге во время инкрементального резервного копирования вы можете использовать точный режим. Этот процесс будет потреблять большой объем памяти.

Differential (дифференциальный бэкап)

Если задан данный тип задачи, будут созданы бэкапы всех файлов из FileSet, которые были изменены с последнего полного резервного копирования, выполненного с помощью той же задачи. Если служба Director не может найти предыдущий  допустимый полный бэкап для той же задачи, набора файлов и клиента, тогда уровень задачи будет повышен до полного резервного копирования. Когда Director ищет записи о последнем допустимом бэкапе в БД каталога, он ищет предыдущую задачу:

  • С тем же именем задачи.
  • С тем же именем клиента.
  • С тем же набором файлов (если в наборе файлов произошли изменения, то данный набор будет считаться другим набором файлов).
  • Задачу, которая представляла собой полный, дифференциальный или инкрементальный бэкап.
  • Задачу, которая была нормально завершена (не завершилась неудачей и не была отменена).
  • Задачу, которая была начата не позднее указанного времени Max Full Interval.

Если задача не соответствует всем вышеперечисленным условиям, тогда служба Director повысит уровень задачи дифференциального резервного копирования до полного. В противном случае, будет создан дифференциальный бэкап.

Служба File daemon (Client) решает, какие файлы в включить в дифференциальный бэкап, сравнивая время начала выполнения предыдущего полного бэкапа с временем последней модификации файла (st_mtime) и временем последнего изменения файла (st_ctime). Если файл был модифицирован или изменен на или после этого момента времени, будет создана его резервная копия.

Время начала выполнения задачи, используемое в данном случае, показано после слова Since в отчете о выполнении задачи. В редких случаях использование времени начала создания предыдущей резервной копии может привести к тому, что бэкапы некоторых файлов будут созданы дважды. Однако именно это позволяет гарантировать отсутствие любых пропусков. Как и в случае с инкрементальным бэкапом, необходимо убедиться в том, что часы на сервере и клиенте синхронизированы, чтобы избежать вероятности пропуска файла. Обратите внимание на то, что в версиях 1.33 или выше ПО Bacula автоматически выполняет необходимые корректировки времени между сервером и клиентом. Таким образом, Bacula использует синхронизированное время.

Если Bacula выполняет дифференциальное резервное копирование, будут созданы бэкапы всех модифицированных файлов, находящихся в системе. Однако любой файл, удаленный с момента последнего полного резервного копирования, по-прежнему будет находится в каталоге Bacula. Это значит, что даже если между полным резервным копированием и временем восстановления были удалены некоторые файлы, они все равно будут восстановлены. После следующего полного резервного копирования удаленные файлы больше не будут отображаться в каталоге. Чтобы удалить такие файлы из каталога во время дифференциального резервного копирования, потребуется очень много времени, и данная функция пока не поддерживается Bacula. Возможно, функция будет реализована в будущем.

Как было сказано выше, когда вы перемещаете каталог, а не копируете его, файлы больше не содержат время модификации (st_mtime), или будет изменен атрибут st_ctime. Как следствие, возможно, не будут созданы резервные копии этих файлов в ходе инкрементального или дифференциального резервного копирования, которые зависят от таких временных меток. Если вы перемещаете каталог и хотите создать его корректную резервную копию, сначала его необходимо будет скопировать, а затем удалить оригинал. Или, как вариант, вы можете переместить каталог, а затем использовать программу touch для обновления временных меток.

Для управления удаленными файлами или изменениями в каталоге во время дифференциального резервного копирования вы можете использовать точный режим. Этот процесс будет потреблять большой объем памяти.

Пользователи часто задаются вопросом, для чего нужен дифференциальный бэкап, если все изменения с успехом фиксирует инкрементальный бэкап. Существуют различные мнения по этому поводу. Однако наиболее обоснованным можно считать мнение, согласно которому, дифференциальный бэкап эффективно объединяет все инкрементальные и дифференциальные бэкапы, сделанные с момента создания последнего полного бэкапа, в единый дифференциальный бэкап. В результате: 1. Возникает своего рода резервирование, поскольку в случае, если не удастся использовать объединенный бэкап, можно будет использовать старые разрозненные бэкапы. 2. Что более важно, такой вид резервного копирования сокращает количество томов, необходимых для выполнения восстановления, и позволяет избежать необходимости считывать все тома, на которые были записаны предыдущие дифференциальные и инкрементальные бэкапы.

Для типа задач Restore не нужно указывать уровни.

Тип задач Verify может использовать один из следующих уровней:

InitCatalog

Выполняет сканирование указанного набора файлов FileSet и хранит атрибуты файлов в БД  каталога. Поскольку файловые данные не сохраняются, может возникнуть вопрос, для чего необходимо выполнять данное действие. Данная операция служит в качестве функции ловушки Tripwire при использовании ПО Bacula. Другими словами, она позволяет сохранять состояние набора файлов, заданное FileSet, и позже проверять, были ли эти файлы модифицированы или удалены, или же были добавлены новые файлы. Опция позволяет определять вмешательство в работу системы. Как правило, пользователь задает набор файлов FileSet, который содержит файлы, не подлежащие изменению (например, /sbin, /boot, /lib, /bin, …). Пользователь запускает уровень InitCatalog один раз, в момент первой настройки системы, и каждый раз, после очередного изменения (обновления) системы. После этого, если пользователь захочет проверить состояние файловой системы, он использует директиву Verify level = Catalog. Она позволяет сравнивать результаты выполнения команды InitCatalog и текущее состояние файлов.

Catalog

Сравнивает текущее состояние файлов с состоянием, которое было сохранено во время выполнения команды InitCatalog. Все расхождения отражаются в отчете. Элементы, которые содержит отчет, определяются командой verify, указанной в директиве Include в указанном ресурсе FileSet (смотрите описание ресурса FileSet ниже по тексту). Как правило, эта команда запускается один раз в день для обнаружения любых изменений в системных файлах.

Примите во внимание, что, если вы запустите две задачи Verify Catalog на одном клиенте в одно и то же время, вы получите неверные результаты. Это объясняется тем, что задача Verify Catalog изменяет БД каталога во время исполнения в целях отслеживания новых файлов.

VolumeToCatalog

Этот уровень вынуждает Bacula читать данные атрибута файла, записанные в том, с момента выполнения последней задачи резервного копирования, указанной в директиве VerifyJob. Данные атрибута файла сравниваются со значениями, сохраненными в базе данных каталога. Все расхождения отображаются в отчете. Данный уровень похож на уровень DiskToCatalog, за исключением того, что вместо сравнения атрибутов файла диска с базой данных каталога данные атрибута, записанные в том, считываются и сравниваются с базой данных каталога. Несмотря на то, что данные атрибута, включая подписи (MD5 или SHA1), сравниваются, фактические данные файла не сравниваются.

Примите во внимание, что, если вы запустите две задачи Verify VolumeToCatalog на одном клиенте в одно и то же время, вы получите неверные результаты. Это объясняется тем, что задача Verify VolumeToCatalog изменяет БД каталога во время исполнения.

DiskToCatalog

Этот уровень вынуждает Bacula считывать файлы, которые в настоящий момент находятся на диске, и сравнивать текущие атрибуты файлов с атрибутами, сохранёнными в каталоге с момента последнего резервного копирования для задачи, указанной в директиве VerifyJob. Этот уровень отличается от уровня VolumeToCatalog, описанного выше тем, что он не сравнивает атрибуты с предыдущей задачей Verify, а сравнивает их с последним бэкапом. Если вы запустите этот уровень, вам необходимо указать опции сверки в операторах включения. Эти опции определяют, какие поля атрибутов необходимо сравнить.

Эта команда может быть очень полезной, если у вас возникнут проблемы с диском, так как она сравнит текущее состояние вашего диска с последним успешным бэкапом.

Примите во внимание, что последняя версия (1.32c) не определяет удаленные файлы.

Accurate = yes|no

В точном режиме, служба File daemon точно знает, какие файлы сохранились после последнего бэкапа. Таким образом, она сможет определить удаленные и переименованные  файлы.

Восстанавливая набор файлов FileSet на конкретную дату (включая «самые последние») ПО Bacula сможет восстановить те файлы и каталоги, которые существовали в момент создания последнего бэкапа, то есть до указанной даты, и  гарантирует, что все удаленные файлы были на самом деле удалены, а переименованные каталоги должным образом восстановлены.

В этом режиме File daemon должен хранить данные обо всех файлах в памяти. Поэтому, если системе не хватает памяти, процесс резервного копирования может занять либо очень много времени, либо завершиться неудачей.

Для 500 000 файлов (стандартная десктопная версия Linux-системы) потребуется около 64 Мб ОЗУ службы File daemon для хранения необходимой информации.

В данном режиме, служба File daemon должна сохранять в памяти все данные относительно файлов. Если вашей машине хватает памяти, бэкап может выполняться либо крайне медленно, либо завершиться неудачей.  

Verify Job = Job-Resource-Name

Если вы запустили задачу сверки без данной директивы, последняя запущенная задача будет сравниваться с каталогом, что означает, что вам потребуется немедленно запустить команду сверки после выполнения резервного копирования. Если вы зададите директиву Verify Job, Bacula найдет последнюю запущенную задачу с указанным именем. Директива позволяет запускать все задачи по созданию бэкапов, а затем запускать задачи сверки для тех бэкапов, которые вы хотите проверить (как правило, используется директива VolumeToCatalog) на предмет возможности считывания их с ленты после записи.

JobDefs = JobDefs-Resource-Name

Если задана директива JobDefs-Resource-Name, все значения, содержащиеся в именнованном ресурсе JobDefs будут использоваться в качестве значений по умолчанию для текущей задачи. Любое значение, которое пользователь явным образом укажет в текущем ресурсе Job, будет являться приоритетным. Использование данной директивы позволяет записывать ресурсы Job в более компактном виде, если в одной и более директив JobDefs задается массив директив. Директива полезна в частности в том случае, если вы используете множество схожих задач с незначительными расхождениями, например для различных клиентов. Простой пример использования директивы JobDefs приведен в файле bacula-dir.conf используемом по умолчанию.

Bootstrap = bootstrap-file

Директива Bootstrap задает файл bootstrap (загрузочный файл), который, в случае, если он указан, будет использоваться во время выполнения задач по восстановлению и будет проигнорирован при выполнении других типов задач. Загрузочный файл содержит список магнитных лент, которые необходимо использовать при выполнении задачи восстановления, а также список файлов, подлежащих восстановлению. Данная директива является опциональной и, если она задана, используется только для задач восстановления. К тому же это значение можно изменить в случае запуска задачи по восстановлению из консоли.

Если вы используете команду Restore в консоли для запуска задачи восстановления, файл загрузки будет создан автоматически из файлов, выбранных вами для восстановления.

Более подробная информация о файле восстановления приведена в разделе, посвященном восстановлению файлов.

Write Bootstrap = bootstrap-file-specification

Директива writebootstrap задает имя файла  bootstrap для запуска каждой задачи резервного копирования. Эта директива применима только к задачам резервного копирования. Если задача резервного копирования представляет собой задачу по созданию полного бэкапа, Bacula удалит все содержимое указанного файла перед записью загрузочных данных. Если задача представляет собой инкрементальный или дифференциальный бэкап, Bacula добавит текущие загрузочные данные в конец файла.

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

Если директива bootstrap-file-specification начинается с символа вертикальной черты (|), Bacula используется определение в качестве имени программы, которой ПО передаст загрузочные данные. Такой программой может являться скрипт оболочки, который отправит вам загрузочные данные по электронной почте.

В версиях 1.39.22 и старше, перед открытием файла или выполнением указанной команды, ПО Bacula выполняет процедуру подстановки символов, как в случае с директивой RunScript. Для автоматического управления загрузочными файлами вы можете использовать данную директиву в ресурсах JobDefs:

JobDefs {

   Write Bootstrap = «%c_%n.bsr»

   …

}

Client = client-resource-name

Директива Client задает клиента Client (File daemon), который будет использован в текущей задаче. Для одной задачи можно использовать только одного клиента. Клиент запускается на машине, резервная копия которой должна быть создана, и отсылает запрашиваемые файлы в Storage daemon для создания бэкапа, или получает их в случае восстановления. Более подробная информация изложена в разделе, посвященном описанию ресурса Client. Это обязательная директива.

FileSet = FileSet-resource-name

Директива FileSet задает набор файлов FileSet, который будет использоваться в текущей задаче. Директива FileSet указывает, резервные копии каких каталогов (или файлов) должны созданы, и какие функции должны быть применены (например, функция сжатия, …). Для одной задачи можно задать только один ресурс FileSet. Более подробная информация изложена в разделе, посвященном описанию ресурса FileSet. Это обязательная директива.

Base = job-resource-name, …

Директива Base позволяет указывать список задач, которые будут использовать во время создания полного бэкапа в качестве основного. Это опциональная директива. Более подробная информация изложена в разделе, посвященном описанию задачи создания базового бэкапа.

Messages = messages-resource-name

Директива Messages указывает, какой ресурс Message должен быть использован для данной задачи и куда необходимо отсылать различные сообщения. Например, вы можете направить отдельные сообщения в журнал регистрации событий, а прочие могут отсылаться на почту. Более подробная информация изложена в разделе, посвященном ресурсу Message. Это обязательная директива.

Pool = pool-resource-name

Директива Pool задает пул томов, в которых можно создавать резервные копии данных. Несколько установленных копий  Bacula используют только дефолтный пул Default. Однако, если вы хотите указать различные массивы томов для разных клиентов или задач, вам, возможно, потребуется использовать несколько пулов. Более подробная информация изложена в разделе, посвященном описанию ресурса Pool. Это обязательная директива.

Full Backup Pool = pool-resource-name

Директива Full Backup Pool задает пул, который должен использоваться для полных бэкапов. Это значение будет считаться приоритетным. Это опциональная директива.

Differential Backup Pool = pool-resource-name

Директива Differential Backup Pool задает пул, который должен использоваться для дифференциальных бэкапов. Это значение будет считаться приоритетным. Это опциональная директива.

Incremental Backup Pool = pool-resource-name

Директива Incremental Backup Pool задает пул, который должен использоваться для инкрементальных бэкапов. то значение будет считаться приоритетным. Это опциональная директива.

Schedule = schedule-name

Директива Schedule определяет, какой планировщик будет использоваться для выполнения задачи. Планировщик определяет, когда бут начато автоматическое выполнение задачи и задача какого уровня будет запущена (инкрементальный бэкап, …). Это опциональная директива. Если она не будет задана, выполнение задачи можно будет инициировать только вручную через консоль. Несмотря на то, что вы можете задать только один ресурс Schedule для одной задачи, ресурс Schedule  может содержать несколько директив Run, что позволяет запускать задачу в различные моменты времени. Каждая директива run позволяет заменять дефолтные значения ресурсов Job, Level, Pool, Storage, и Messages. Более подробная информация изложена в разделе, посвященном ресурсу Schedule.

Storage = storage-resource-name

Директива Storage определяет имя хранилища, в котором вы ходите создать резервную копию данных FileSet. Дополнительная информация изложена в разделе ресурс Storage. Ресурс Storage может быть также указан в ресурсе задачи Pool. При этом, значение в ресурсе Pool будет приоритетным. Это определение ресурса Storage не является обязательным ни для ресурса Job ни для ресурса Pool, однако оно должно быть задано, чтобы избежать возникновения ошибки.

Max Start Delay = time

Где time – это максимальная задержка между запланированным временем начала выполнения задачи и фактическим временем. Например, начало выполнения задачи может быть назначено на 1:00 после полудня, но по причине запуска прочих задач, запуск данной задачи может быть отложен. Если  задать время задержки 3600 секунд (один час), но выполнение задачи не было начато до 2:00 часов после полудня, задача будет отменена. Данная директива может использоваться для того, чтобы ограничить выполнение задач в дневное время. По умолчанию используется значение, равное 0, что означает отсутствие задержки.

Max Run Time = time

Где time – это максимальное время выполнения задачи, начиная с момента запуска задачи (не обязательно должно совпадать со временем, на которое было назначено выполнение задачи).

По умолчанию, таймер системы отменит любую задачу, которая будет выполняться более 6 дней. Время, по истечении которого таймер системы отменит задачу, не зависит от директивы MaxRunTime, и не может быть изменено.

Incremental|Differential Max Wait Time = time

Эти директивы  были заменены директивой Incremental|Differential Max Run Time начиная с версии 2.3.18.

Incremental Max Run Time = time

Где time – это максимальное время, в течение которого может выполняться задача по созданию инкрементального бэкапа, начиная с момента запуска задачи (не обязательно должно совпадать со временем, на которое было назначено выполнение задачи)

Differential Max Wait Time = time

Где time – это максимальное время, в течение которого может выполняться задача по созданию дифференциального бэкапа, начиная с момента запуска задачи (не обязательно должно совпадать со временем, на которое было назначено выполнение задачи).

Max Run Sched Time = time

Где time – это максимальное время, в течение которого может выполняться задача, начиная с момента запуска задачи. Директива позволяет ограничить исполнение задач в течение рабочего времени. Директива может быть представлена в виде Max Start Delay + Max Run Time.

Max Wait Time = time

Где time – это максимальное время, в течение которого задача может блокироваться в ожидании ресурса (например, в ожидании монтирования ленты, или выполнения задач службами storage или file), начиная с момента запуска задачи (не обязательно должно совпадать со временем, на которое было назначено выполнение задачи). Эта директива функционирует в полном объеме, начиная с версии Bacula 2.3.18 и выше.

Рисунок: Директивы для управления временем выполнения задач

Maximum Bandwidth = speed

параметр speed (скорость) задает максимально допустимую пропускную способность канала, которую может использовать задача. Параметр скорости необходимо указывать в k/s, kb/s, m/s или mb/s.

Max Full Interval = time

Где time – это максимально допустимый возраст (начиная с времени запуска) последнего успешного полного бэкапа, который необходим для выполнения задач по созданию инкрементальных или дифференциальных бэкапов. Если возраст последнего полного бэкапа превышает заданное время, задачи по созданию инкрементальных или дифференциальных бэкапов будут автоматически переведены на уровень создания полного бэкапа. Если директива не задана, или указано значение 0, тогда не учитывается «возраст» предыдущего полного бэкапа.

Prefer Mounted Volumes = yes|no

Если директиве Prefer Mounted Volumes присвоено значение yes (значение по умолчанию), Storage daemon должен будет выбрать либо авточейнджер, либо диск с уже смонтированным допустимым томом, вместо диска, неготового к использованию. Это значит, что все задачи будут добавляться по возможности к одному и тому же тому (при условии правильно выбранного тома – нужного пула, … для такой задачи), если вы не используете несколько пулов. Если диски с допустимыми томами не доступны, Storage daemon выберет первый доступный диск.  Если в одно и то же время будет запущено несколько задач, все они предпочтут использовать смонтированный том. Первая задача запросит смонтировать том, а все последующие задачи будут использовать его же.

Если директиве Prefer Mounted Volumes присвоено значение no, Storage daemon предпочтет поиск неиспользованного диска, в противном случае все запущенные задачи будут добавлены к одному и тому же тому (при условии, что используется один пул для всех задач). Директива Prefer Mounted Volumes с параметром no может использоваться в случае сайтов с множественными авточейнджерами, которые предпочитают максимизировать скорость создания бэкапов за счет использования дополнительных дисков и томов. Это значит, что задача предпочтет использовать неиспользованный диск вместо уже используемого диска.

Несмотря на вышеизложенное, мы рекомендуем присваивать директиве значение no, поскольку она позволяет различным дискам обмениваться томами, что может привести к зависанию Storage daemon. Мы будем принимать отчеты об ошибках, но не можем гарантировать, что сможем решить проблему в разумные сроки.

Лучшей альтернативой для использования нескольких дисков является использование нескольких пулов. Таким образом, Bacula будет вынуждено монтировать тома из этих пулов на разных дисках.

Prune Jobs = yes|no

Как правило, команда отсечения задач из каталога задается в ресурсе Client для каждого клиента с помощью директивы AutoPrune. Если задана данная директива и ей присвоено значение yes, она заменит значение, указанное в ресурсе Client. По умолчанию используется значение no.

Prune Files = yes|no

Как правило, команда отсечения файлов из каталога задается в ресурсе Client для каждого клиента с помощью директивы AutoPrune. Если задана данная директива и ей присвоено значение yes, она заменит значение, указанное в ресурсе Client. По умолчанию используется значение no.

Prune Volumes = yes|no

Как правило, команда отсечения томов из каталога задается в ресурсе Pool для каждого пула с помощью директивы AutoPrune. Примите во внимание, что данная директива отличается от директив для задач и файлов, которые задаются для каждого клиента. Если задана данная директива и ей присвоено значение yes, она заменит значение, указанное в ресурсе Pool. По умолчанию используется значение no

RunScript {body-of-runscript}

Директива RunScript ведет себя как ресурс, потому что она требует открытия и закрытия фигурных скобок вокруг ряда директив, которые составляют тело команды runscript.

Указанная команда (смотрите описание ниже) запускается как внешняя программа до или после текущей задачи. Директива является опциональной. По умолчанию директива выполняется на стороне клиента также, как и в случае с ClientRunXXXJob.

Консольные команды представляют собой специальные команды, которые отсылаются службе director, а не ОС. В настоящий момент, результаты исполнения консольных команд отсылаются в журналы регистрации событий с параметром jobid 0.

Вы можете использовать следующие консольные команды: delete, disable, enable, estimate, list, llist, memory, prune, purge, reload, status, setdebug, show, time, trace, update, version, .client, .jobs, .pool, .storage. Более подробна информация изложена в разделе, посвященном описанию консоли. Пример:

   Console = «prune files client=%c»

   Console = «update stats age=3»

Для каждой директивы RunScript вы можете задать более одной команды/консольной команды.

Вы можете использовать следующие функции в теле runscript:

Функция

Значение

Значение по умолчанию

Комментарии

Runs On Success

Yes / No (Да / Нет)

Yes (Да)

Запуск команды, если удалось выполнить JobStatus

Runs On Failure

Yes / No (Да / Нет)

No (Нет)

Запуск команды, если не удалось выполнить JobStatus

Runs On Client

Yes / No (Да / Нет)

Yes (Да)

Запуск команды в клиенте

Runs When

Before | After | Always | AfterVSS (До  /После / Всегда / ПослеVSS)

Never (Никогда)

При запуске команды

Fail Job On Error

Yes / No (Да / Нет)

Yes (Да)

Задача не выполнена, если скрипт возвращает значение, отличное от 0.

Command

 

 

Путь к скрипту

Console

 

 

Консольная команда

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

Помимо этого, командная строка парсится, а затем передается в ОС. Это значит, что для выполнения указанной команды будет произведен поиск пути, однако, в отсутствии командного интерпретатора, если вы захотите выполнить сложные команды или функции командной оболочки, вы должны будете вызвать скрипт оболочки и выполнить команду внутри такого скрипта.

Перед тем, как передать указанную команду в ОС, Bacula выполнит следующую подстановку символов:

    %% = %

    %b = байты задачи

    %c = имя клиента

    %C = в случае, если задача является клонированной задачей (только на стороне director)

    %d = имя Daemon (например, host-dir или host-fd)

    %D = имя Director (также подходит для file daemon)

    %e = состояния завершения задачи

    %f = набор файлов задачи (только на стороне director)

    %F = файлы задачи

    %h = адрес клиента

    %i = JobId идентификатор задачи

    %j = уникальный идентификатор задачи

    %l = уровень задачи

    %n = имя задачи

    %p = имя пула (только на стороне director)

    %P = текущий PID

    %s = с момента времени

    %t = тип задачи (резервное копирование, …)

    %v = имя тома (только на стороне director)

    %w = имя хранилища (только на стороне director)

    %x = включить буферизацию? («да» или «нет»)

Не во всех ситуациях допускается подстановка символов.  Символ %e для состояния завершения задачи редактирует следующие значения:

  • OK (ок)
  • Error (ошибка)
  • Fatal Error (критическая ошибка)
  • Canceled (отменено)
  • Differences (различия)
  • Unknown term code (неизвестное имя кода)

Таким образом, если вы отредактируете команду в командной строке, вам потребуется заключить ее в кавычки.

Вы можете использовать следующие укороченные команды:

Ключевое слово

 

Run Before Job

Run After Job

Run After Failed Job

Client Run Before Job

Client Run After Job

Примеры:

RunScript {

    RunsWhen = Before

    FailJobOnError = No

    Command = «/etc/init.d/apache stop»

}

 

RunScript {

    RunsWhen = After

    RunsOnFailure = yes

    Command = «/etc/init.d/apache start»

}

Примечания для команды ClientRunBeforeJob

По причинам совместимости данная укороченная команда будет исполнена, как только клиент ее получит. Если команда была задана по ошибке, другой удаленный runscripts будет отклонен. Чтобы убедиться в том, что все команды были отосланы и выполнены, можно использовать синтаксис RunScript.

Особенности работы с Windows

Вы можете запускать скрипты сразу после инициализации снапшотов с помощью ключевого слова AfterVSS.

К тому же, в случае Windows клиента, убедитесь в том, что вы указали правильный путь к скрипту. Скрипт или программа должны представлять собой файл с расширением .com, .exe или .bat. Если вы просто вставите имя программы, Bacula выполнит поиск по тем же правилам, по которым выполняет поиск командная строка cmd.exe (текущий каталог, каталог Bacula bin, и ПУТЬ). ПО даже попробует найти файлы с различными расширениями в той же последовательности, в которой эту операцию совершает cmd.exe. Команда должна представлять собой компонент, который cmd.exe или command.com распознают в качестве исполняемого файла.

Однако, если в имени программы вы используете символ /, Bacula посчитает, что вы указали полное имя, поэтому вам необходимо задать три символа расширения файла.

Команда запускается в среде Win32, поэтому, Unix-подобные команды не будут работать до тех пор, пока вы не установите и не сконфигурируете Cygwin в дополнение и отдельно от Bacula.

Для выполнения команды будет совершен поиск System %Path% (мы считаем, что из System Environment и User Environment, только System environment (системная среда) будет доступна для bacula-fd, запущенной в качестве службы).

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

Если вы используете скрипт в каталоге Bacula bin, то можно использовать следующие  строки:

        Client Run Before Job = systemstate

или

        Client Run Before Job = systemstate.bat

или

        Client Run Before Job = «systemstate»

или

        Client Run Before Job = «systemstate.bat»

или

        ClientRunBeforeJob = «\»C:/Program Files/Bacula/systemstate.bat\»»

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

ClientRunBeforeJob = «\»C:/Program Files/Software

     Vendor/Executable\» /arg1 /arg2 \»foo bar\»»

Специальные символы

&<>()@^|

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

Если кто-то попытается войти в систему, во время исполнения команды появится пустое командное окно, запускающее команды.

Некоторые предложения, выдвинутые Филом Страччино, для запуска службы на машинах Win32 с «родной» службой Win32 File daemon:

  1. Предположим, вы хотите, чтобы директива ClientRunBeforeJob задавала файл .bat, который и будет запускать команды со стороны клиента, а не пытаться запускать (например) regedit /e напрямую.
  2. Командный файл должен явно возвращать 0 в случае успешного выполнения.
  3. Путь к командному файлу должен быть задан в формате Unix:

ClientRunBeforeJob = «c:/bacula/bin/systemstate.bat»

А не в формате DOS/Windows:

ClientRunBeforeJob =

«c:\bacula\bin\systemstate.bat» INCORRECT

В случае Win32 существуют определенные ограничения:

ClientRunBeforeJob = «C:/Program Files/Bacula/bin/pre-exec.bat»

Строки подобно той, которая указана выше, не будут работать, так как существуют ограничения cmd.exe, используемой для исполнения команд. Bacula приставляет перед строкой, которую вы указали, префикс cmd.exe /c . Чтобы проверить работу команды, необходимо набрать cmd /c «C:/Program Files/test.exe» в окне cmd и увидите, что получится. Если команда выполняется правильно, необходимо вставить символ (\) перед каждой парой двойных кавычек («), а затем вставить кавычки с двух сторон всей строки, перед тем, как скопировать ее в .conf файл Director’а. Вы должны либо поставить одну пару кавычек, либо использовать короткое имя и не помещать путь к команде в кавычки.

Если задаются параметры /C или /K, тогда остаток командной строки после переключателя обрабатывается в качестве командной строки, в то время как следующая логика используется для обработки символы кавычек («):

  1. Если выполняются все следующие условия, тогда символы кавычек в командной строке сохраняются:
    • нет переключателя /S.
    • используются две пары кавычек.
    • между парой кавычек не используется ни один из следующих специальных символов:

&<>()@^|

  • между двумя парами кавычек содержится один или больше пробелов.
  • строка между двумя парами кавычек – это имя исполняемого файла.
  1. В противном случае, необходимо посмотреть, является ли первый символ кавычкой, и, если является, необходимо удалить кавычки перед заглавным символом и удалить последний символ кавычек в конце командной строки, сохраняя любой текст после последних кавычек.

Следующий пример использования директивы Client Run Before Job был предложен пользователем:

Вы можете написать скрипт оболочки, чтобы создать резервную копию базы данных DB2 в памяти FIFO. Скрипт выглядит следующим образом:

 #!/bin/sh

 # ===== backupdb.sh

 DIR=/u01/mercuryd

 

 mkfifo $DIR/dbpipe

 db2 BACKUP DATABASE mercuryd TO $DIR/dbpipe WITHOUT PROMPTING & sleep 1

Следующей строкой в ресурсе Job в файле bacula-dir.conf должна быть:

 Client Run Before Job = «su — mercuryd -c \»/u01/mercuryd/backupdb.sh ‘%t’

‘%l’\»»

Если задача запущена, вы получите сообщения в результате исполнения скрипта о том, что резервное копирование запущено. Даже если запущенная команда будет использовать символ &, задача будет заблокирована до выполнения команды «db2 BACKUP DATABASE». Таким образом, задача по резервному копированию будет приостановлена.

Чтобы исправить ситуацию строка «db2 BACKUP DATABASE» должна быть изменена на:

db2 BACKUP DATABASE mercuryd TO $DIR/dbpipe WITHOUT PROMPTING > $DIR/backup.log

2>&1 < /dev/null &

Важно перенаправить входные и выходные данные фоновой команды в /dev/null, чтобы скрипт не был заблокирован.

Run Before Job = command

Указанная команда запускается в качестве внешней программы до запуска текущей задачи. Это необязательная директива, однако, если она задана, и если код завершения запущенной программы не возвращает ноль, текущая задача Bacula будет отменена.

Run Before Job = «echo test»

 

строка эквивалентна:

RunScript {

 Command = «echo test»

 RunsOnClient = No

 RunsWhen = Before

}

Луц Киттлер подчеркнул, что использование директивы RunBeforeJob, может представлять собой простой способ изменения графиков работы на выходные. Предположим, вы регулярно выполняете полное резервное копирование по пятницам, однако, четверг и пятница являются выходными. Чтобы избежать смены лент между четвергом и пятницей, когда никого не будет в офисе, вы можете создать директиву RunBeforeJob которая бы возвращала ненулевое значение в четверг и нулевое в другие дни. Таким образом, задача не будет запускаться в четверг, а в пятницу будет использована лента, которую вы вставили в среду.

Run After Job = command

Указанная команда запускается в качестве внешней программы, если текущая задача завершится нормально (без ошибки и без отмены). Это необязательная директива. Если код завершения запущенной программы не возвращает ноль, Bacula создаст предупредительное сообщение. Перед отправкой указанной команды в ОС, Bacula выполнит подстановку символов, как описано выше для директивы RunScript.

Пример использования этой директивы приведен в соответствующем разделе руководства по устранению неисправностей при работе с Bacula Enterprise.

Смотрите директиву Run After Failed Job, если хотите запустить скрипт после неудачно завершённой задачи.

Run After Failed Job = command

Указанная команда запускается в качестве внешней программы после того, как текущая задача завершится ошибкой.  Это необязательная директива . Командная строка должна представлять собой допустимое имя программы или имя скрипта оболочки. Если код завершения запущенной программы не возвращает ноль, Bacula создаст предупредительное сообщение. Перед отправкой указанной команды в ОС, Bacula выполнит подстановку символов, как описано выше для директивы RunScript. Примите во внимание тот факт, что, если вы хотите, чтобы ваш скрипт  запускался независимо от статуса задачи, вы можете использовать следующий скрипт:

RunScript {

 Command = «echo test»

 RunsWhen = After

 RunsOnFailure = yes

 RunsOnClient  = no

 RunsOnSuccess = yes    # default, you can drop this line

}

Пример использования этой директивы приведен в соответствующем разделе руководства по устранению неисправностей при работе с Bacula Enterprise.

 

Client Run Before Job = command

Эта директива похожа на директиву Run Before Job, за исключением того, что программа запускается на машине клиента. К системам Unix применимы те же ограничения, которые указаны для директивы RunScript.

Client Run After Job = command

Указанная команда запускается на машине клиента, как только завершается буферизация данных, чтобы по мере возможности можно было перезапускать приложения на клиенте.

Смотрите комментарии к директиве RunScript, если речь идет о клиентах Windows.

Rerun Failed Levels = yes|no

Если директиве присвоено значение yes (по умолчанию no) и Bacula определяет, что предыдущая задача более высокого уровня (то есть полное или дифференциальное резервное копирование) была выполнена неудачно, текущий уровень задачи будет обновлен до более высокого уровня. В частности, эта директива полезна при использовании портативных машин, которые часто оказываются вне зоны досягаемости. И если полное резервное копирование было выполнено неудачно, вы сможете выполнить полный бэкап повторно.

При использовании данной директивы необходимо принимать во внимание следующее: во-первых, невыполненная задача – это любая запущенная задача, которая не была нормально завершена (необходимо убедиться в том, что одновременно не запущены две задачи с одинаковым именем); во-вторых, директива Ignore FileSet Changes не принимается в расчет при проверке уровней на предмет отказа, то есть любое изменение в FileSet приведет к повторному запуску задачи.

Spool Data = yes|no

Если директиве присвоено значение yes (по умолчанию no), Storage daemon должен будет буферизировать данные для данной задачи на диске, а не записывать их в том (как правило, на ленту).

Таким образом, в том будут записываться большие блоки данных вместо небольших. Эта директива полезна в том случае, если одновременно запущено несколько задач по резервному копированию на ленту. Как только будут получены все данные или будет достигнут максимальный размер буферного файла, данные будут извлечены из буфера и записаны на ленту.

Буферизация данных позволит избежать чередования дат нескольких задач и  остановки и запуска диска.

Мы не рекомендуем использовать эту функцию, так как она может замедлить выполнение задач резервного копирования.

ПРИМЕЧАНИЕ: Если директиве присвоено значение yes, директиве Spool Attributes автоматически будет присвоено значение yes.

Spool Attributes = yes|no

По умолчанию директиве присвоено значение no. Это значит, что атрибуты файлов отсылаются Storage daemon службе Director в том виде, в котором они храниться на ленте. Однако если вы хотите избежать замедления процесса записи на ленту в результате обновления БД, вы можете присвоить данной директиве значение yes. В этом случае Storage daemon буферизирует атрибуты файлов, а Storage направит их во временный файл в рабочем каталоге Working Directory. После завершения записи данных задачи на ленту, атрибуты и координаты будут посланы службе Director.

ПРИМЕЧАНИЕ: Если директиве Spool Data присвоено значение yes, директиве Spool Attributes автоматически будет присвоено значение yes.

SpoolSize=bytes

Где bytes – это максимальный размер буфера для конкретной задачи. Значением по умолчанию является максимальный размер буфера устройства. Директива доступна в Bacula версии 2.3.5 и выше.

Where = directory

Директива применяется только к задачам восстановления и задает префикс для имени каталога всех восстанавливаемых файлов. Директива позволяет восстанавливать файлы в различных местах, из которых они были сохранены. Если не задан оператор Where или задан с использованием (/), файлы будут восстановлены в исходное местоположение. Мы использовали оператор Where в примере конфигурационного файла для восстановления в /tmp/bacula-restores. Директива также позволяет предотвратить случайную перезапись файлов.

Add Prefix = directory

Эта директива  применима только к задачам восстановления и задает префикс перед именем каталога всех восстанавливаемых файлов. Директива использует функцию file relocation, реализованную в Bacula 2.1.8 и выше.

Add Suffix = extention

Эта директива  применима только к задачам восстановления и задает суффикс каталога всех восстанавливаемых файлов. Директива использует функцию file relocation, реализованную в Bacula 2.1.8 и выше.

Использование директивы Add Suffix=.old, /etc/passwd будет восстановлен в /etc/passwsd.old

Strip Prefix = directory

Эта директива применима только к задачам восстановления и позволяет удалять префикс перед именем каталога всех восстанавливаемых файлов. Директива использует функцию file relocation, реализованную в Bacula 2.1.8 и выше.

Использование директивы Strip Prefix=/etc, /etc/passwd будет восстановлен в /passwd

В системе Windows, если нужно восстановить c:/files в d:/files, можно использовать следующие директивы:

 Strip Prefix = c:

 Add Prefix = d:

RegexWhere = expressions

Эта директива применима только к задачам восстановления и задает регулярное выражение для всех имен восстанавливаемых файлов. Директива использует функцию file relocation, реализованную в Bacula 2.1.8 и выше.

Replace = replace-option

Эта директива применима только к задачам восстановления и указывает, что произойдет, если Bacula захочет восстановить уже существующий файл или каталог. Вместо значения replace-option можно подставить одно из следующих значений:

always

если восстанавливаемый файл уже существует, он будет удален и заменен копией из бэкапа. Это значение по умолчанию.

ifnewer

если архивный файл (на ленте) создан позже существующего, существующий файл будет  удален и заменен  копией из бэкапа.

ifolder

если архивный файл (на ленте) создан раньше существующего, существующий файл будет  удален и заменен  копией из бэкапа.

never

если восстанавливаемый файл уже существует, Bacula пропустит восстановление этого файла.

Prefix Links=yes|no

Если для задачи восстановления указан префикс пути Where, необходимо применить его к абсолютным ссылкам. По умолчанию используется значение No. Если используется значение Yes, то во время восстановления файлов в альтернативный каталог,  любая абсолютная гибкая ссылка будет также изменена и будет указывать на новый каталог.  

Maximum Concurrent Jobs = number

где number – это максимальное количество задач из текущего ресурса Job, которое может быть запущено одновременно. Примите во внимание, что директива ограничивает только задачи с именами, схожими с именем ресурса. Все прочие ограничения относительно максимального количества одновременно запущенных  задач, заданных в ресурсах Director, Client, или Storage, также будут добавлены к ограничениям, указанным в данной директиве. По умолчанию директиве присвоено значение 1. Однако пользователь может задать большее значение. Мы настоятельно рекомендуем читать все предупреждения, появляющиеся под данной директивой в ресурсе Director.

Reschedule On Error = yes|no

Если директива активна, а задача завершается ошибкой, задаче будет назначено новое время выполнения с учетом значение, заданных в директивах Reschedule Interval и Reschedule Times. Если вы сами отменили задачу, она не будет запланирована еще раз.  По умолчанию используется значение no (то есть задача не будет запланирована снова).

Директива может использоваться в случае использования портативных машин, которые не всегда подключены к сети или включены.

Reschedule Interval = time-specification

Если вы задали директиву Reschedule On Error = yes, и задача завершилась ошибкой,  она будет повторно запланирована после того, как истечет указанный интервал времени. Если интервал не задан, при возникновении ошибки задача не будет повторено запланирована для выполнения. По умолчанию используется  интервал в 30 минут (1800 секунд).

Reschedule Times = count

Эта директива задает максимальное число раз повторного выполнения задачи. Если значение равно 0 (по умолчанию), задача будет повторно планироваться для выполнения бесконечное количество раз.  

Allow Duplicate Jobs = yes|no

Рисунок: Использование директивы Allow Duplicate Jobs

Если директива активна, будут запущены копии задач. Если директиве присвоено значение no (по умолчанию), тогда в один момент времени может быть запущена только одна задача с указанным именем.

Если директиве Allow Duplicate Jobs присвоено значение no, однако, существуют две одинаковые задачи, и ни одна из трех директив, описанных ниже, не позволяет отменить задачу, тогда текущая задача (вторая запущенная) будет отменена.

 

Allow Higher Duplicates = yes|no

Эта директива была реализована в версии 5.0.0, но она не работает должным образом. Если директива используется, то ей необходимо присвоить значение no. В более поздних версиях Bacula директива отключена.

Cancel Lower Level Duplicates = yes|no

Если директиве Allow Duplicate Jobs присвоено значение no, а директиве Cancel Lower Level Duplicates присвоено значение yes, Bacula выберет дублированные задачи более высокого уровня. Например, программа отменит задачу по созданию инкрементального бэкапа для запуска задачи по созданию полной резервной копии. Директива применима только к задачам резервного копирования. По умолчанию директиве присвоено значение no. Если уровни дублированных заданий одинаковы, выполнение директивы не приведет к изменениям. Будут рассмотрены другие директивы Cancel XXX Duplicate.

 

Cancel Queued Duplicates = yes|no

Если директиве Allow Duplicate Jobs присвоено значение no, а директиве Cancel Queued Duplicates присвоено значение yes, будет отменена любая задача, которая была поставлена в очередь, но еще не была выполнена. По умолчанию используется значение no.

Cancel Running Duplicates = yes|no

Если директиве Allow Duplicate Jobs присвоено значение no, а директиве Cancel Running Duplicates присвоено значение yes, будет отменена любая запущенная задача. По умолчанию используется значение no.

Run = job-name

Директива Run (не нужно путать с функцией Run в планировщике Schedule) позволяет запускать другие задачи или клонировать задачи. С помощью ключевых слов, позволяющих осуществлять клонирование (смотрите ниже), вы можете создавать бэкапы одинаковых данных, или двух или более дисков одновременно.  Значение job-name, как правило, соответствует имени текущего ресурса Job (создается клон). Однако в качестве такого имени может выступать любое имя задачи.

Часть директивы после знака равенства должна быть заключена в двойные кавычки. Эта часть может содержать любые строки или набор функций, которую может указать пользователь при вводе команды Run в консоли. Например, storage=DDS-4 …. К тому же существуют специальные ключевые слова, которые позволяют клонировать текущие задачи. Это слова level=%l и since=%s. Символ %l в ключевом слове level позволяет задавать фактический уровень текущей задачи, а символ %s в слове since позволяет вводить время, которое используется в текущей задачи, для сравнения. Примите во внимание, что в случае использования слова since символ %s должен быть заключен в двойные кавычки, перед которыми должен ставится символ \. Например:

run = «Nightly-backup level=%l since=\»%s\» storage=DDS-4″

Клонированная задача не запустит дополнительные клоны, в результате чего рекурсия становится невозможной.

Примите во внимание, что все клонированные задачи, указанные в директиве Run, передаются для исполнения до исполнения исходных задач (во время инициализации). Это значит, что любая клонированная задача будет запущена до исходной, и может даже заблокировать запуск исходной задачи, если вы не разрешите одновременное исполнение нескольких задач. Даже если клонированной задаче присвоить более низкий приоритет, в случае отсутствия других запущенных задач, она все равно будет исполнятся до исходной задачи.

Если вы попытаетесь расставить приоритеты при выполнении задач, используя функцию клонирования (директива Run), вы обнаружите, что проще всего это сделать, используя ресурс RunScript или директиву RunBeforeJob.

Priority = number

Эта директива позволяет управлять приоритетом выполняемых задач. Для того чтобы использовать директиву, нужно задать положительное значение отличное от нуля. Чем выше значение, тем ниже приоритет задачи. Предположим, что вы запустили несколько задач одновременно. Все задачи в очереди с приоритетом 1 будут запущены до задач с приоритетом 2, и так далее независимо от порядка, заданного планировщиком.

Приоритет влияет только на задачи, ожидающие исполнения в очереди, но не на уже запущенные задачи. Если одна или несколько задач с приоритетом 2 уже запущены, а новые задачи запланированы с приоритетом 1, перед выполнением задач с приоритетом 1 должны быть завершены все задачи с приоритетом 2, если не используется директива Allow Mixed Priority.

По умолчанию используется значение 10.

Если вы хотите запустить несколько задач одновременно, нужно помнить о следующем:

  • Смотрите раздел, посвященный настройке запуска нескольких параллельных задач в руководстве по устранению неисправностей при работе с Bacula Enterprise.
  • Bacula запускает несколько задач параллельно, только если они имеют одинаковый приоритет. ПО не запустит одновременно задачи с приоритетом 1 и 2.
  • Если Bacula выполняет задачу с приоритетом 2, и при этом запланирована новая задача с приоритетом 1, программа будет ожидать завершения задачи с приоритетом 2, даже если параметры директивы Maximum Concurrent Jobs позволяют выполнять две задачи одновременно.
  • Предположим, что Bacula выполняет задачу с приоритетом 2, при этом, запланирована и поставлена в очередь новая задача с приоритетом 1, ожидающая завершения задачи с приоритетом 2. Если запустить вторую задачу с приоритетом 2, ожидающая задача с приоритетом 1 не позволит одновременно запустить задачу с приоритетом 2. Это значит, что до тех пор, пока в очереди ожидает задача с более высоким приоритетом, никакие новые задачи с более низким приоритетом не будут запущены, несмотря на то, что параметры директивы Maximum Concurrent Jobs позволяют выполнять две задачи одновременно. Функция гарантирует, что задачи с более высоким приоритетом будут выполняться в первую очередь.

Если вы хотите запустить несколько задач с различным приоритетом, запускать их в одно и то же время не стоит, так как Bacula должна проверять каждую задачу. Если Bacula начинает с задач с более низким приоритетом, то сначала будут запускаться именно такие задачи. Если данное поведение программы вызывает определенные сложности, вы можете запустить задачу с более высоким приоритетом за несколько секунд до запуска задачи с более низким приоритетом. Таким образом, Bacula сможет просмотреть задачи в нужном порядке, и будет соблюден ваш график выполнения задач.

Allow Mixed Priority = yes|no

Эта директива реализована в версии 2.5 и более поздних версиях. Если директиве присвоено значение yes (по умолчанию no), то задача может выполнена несмотря на то, что была запущена задача с более низким приоритетом. То есть задача с более высоким приоритетом не должна ожидать завершения других задач. Планировщик будет смешивать задачи с разными приоритетами, только если всем текущим задачам присвоено значение true.

Обратите внимание на то, что запускаться раньше будут только задачи с более высоким приоритетом. Предположим, Director разрешит выполнение двух параллельных задач. Будут запущены две задачи с приоритетом 10, а еще две будут находится в очереди. Если в очередь будет добавлена задача с приоритетом 5, она будет запущена, как только завершится одна из уже выполняемых задач. Новые задачи с приоритетом 10 не будут выполняться до завершения задачи с приоритетом 5.

Ниже приведен пример допустимого определения ресурса Job:

Job {

  Name = «Minou»

  Type = Backup

  Level = Incremental                 # default

  Client = Minou

  FileSet=»Minou Full Set»

  Storage = DLTDrive

  Pool = Default

  Schedule = «MinouWeeklyCycle»

  Messages = Standard

}

Ресурс JobDefs

Ресурс JobDefs позволяет использовать те же директивы, которые использует ресурс Job. Однако ресурс JobDefs не создает задачу, а просто ссылается на нее и позволяет использовать значения по умолчанию. Функция позволяет задавать несколько практически идентичных задач, каждая из которых может ссылаться на ресурс JobDefs и получать значения по умолчанию. Для каждой задачи, при этом, необходимо будет указывать отклонения от значений по умолчанию.

Ресурс Schedule

Ресурс Schedule позволяет использовать средства автоматического планирования выполнения задач. Он также позволяет заменять ресурсы Level, Pool, Storage и Messages, используемые по умолчанию. Если ресурс Schedule не указан в задаче, задача может быть запущена только вручную.

Schedule

Запуск директив планировщика Schedule. Ресурс Schedule не является обязательным, но необходимо задать по меньшей мере один ресурс для автоматического исполнения задач.

Name = name

Имя планировщика. Директива Name является обязательной.

Run = Job-overrides Date-time-specification

Директива Run определяет, когда должно выполняться задание, и какие ресурсы должны быть заменены. Вы можете указать несколько директив Run в ресурсе Schedule. В таком случае, все они будут применены. Если вы одновременно запускаете две директивы Run, две задачи запускаются одновременно (с интервалом в одну секунды).

Директива Job-overrides позволяет заменять параметры Level, Storage, Messages, и Pool, указанные в ресурсе Job. Кроме того, параметры FullPool, IncrementalPool и DifferentialPool позволяют заменять параметры пула в соответствии с тем, какой уровень задачи резервного копирования используется.

С помощью функции замены вы можете настроить конкретную задачу. Например, можно настроить, чтобы сообщения для инкрементных резервных копий, выводились в файл журнала, а сообщения для еженедельных или ежемесячных полных резервных копий отправлялись по электронной почте.

Функция Job-overrides задается следующим образом: keyword = value, где keyword (ключевое слово) — это Level, Storage, Messages, Pool, FullPool, DifferentialPool или IncrementalPool, а value – это значения, которые заданы в соответствующих форматах для ресурса Job. Вы можете задать несколько функций Job-overrides в одной директиве Run, разделив их одним или несколькими пробелами, или разделив их конечной запятой.

Например:

Level=Full

Все файлы в наборе файлов FileSet, были они изменены или нет.

Level=Incremental

Все файлы, которые были изменены с создания последнего бэкапа.

Pool=Weekly

Использование пула под названием Weekly.

Storage=DLT_Drive

Использование функции DLT_Drive для устройства хранения.

Messages=Verbose

Использование ресурса сообщений Verbose для задачи.

FullPool=Full

Использование пула под названием Full, в случае если задача является задаче создания полного бэкапа, или задачей обновленной до полного бэкапа.

DifferentialPool=Differential

Использование пула под названием Differential, в случае если задача является задачей по созданию дифференциального бэкапа.

IncrementalPool=Incremental

Использование пула под названием Incremental, в случае если задача является задачей по созданию инкрементального бэкапа.

Accurate=yes|no

Функция определяет будет или не будет ПО Bacula использовать точный режим для указанной задачи. В некоторых случаях функция позволяет экономить ресурсы памяти и ЦП на сервере каталога.

Директива Date-time-specification определяет время, когда задача должна быть запущена. Параметр используется с определенной периодичностью, то есть по умолчанию Bacula запускает задачу в начале часа каждого дня каждой недели каждого месяца. Поскольку пользователю не требуется такое количество повторов, необходимо задать лимит времени для выполнения задачи. Любой параметр задаваемый данной директивой является повторяемым и заменяет собой значение по умолчанию. Лимит задается путем определения маски или точного часа, дня месяца, дня недели, недели месяца, недели года и месяца года, в который необходимо запускать задачу. Задав одно или более значений параметра, пользователь сможет задать график выполнения задачи с любой частотой повтора.

Как правило, необходимо указывать месяц, день, час и минуту запуска задачи. Из этих четырех параметров, параметр day (день) является особенным, так как вы можете указать день месяца, например 1, 2, … 31, или день недели, понедельник, вторник, … воскресенье. Наконец, вы также можете указать указатель недели, чтобы ограничить график первой, второй, третьей, четвертой или пятой неделею месяца.

Если вы укажете только день недели, например, вторник, задача будет запускаться каждый час каждого вторника каждого месяца. То есть значение месяца и часа являются значениями по умолчанию.

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

Дата / время выполнения задачи может быть указана следующим образом в формате «псевдо» BNF:

<void-keyword>    = on

<at-keyword>      = at

<week-keyword>    = 1st | 2nd | 3rd | 4th | 5th | first |

                    second | third | fourth | fifth

<wday-keyword>    = sun | mon | tue | wed | thu | fri | sat |

                    sunday | monday | tuesday | wednesday |

                    thursday | friday | saturday

<week-of-year-keyword> = w00 | w01 | … w52 | w53

<month-keyword>   = jan | feb | mar | apr | may | jun | jul |

                    aug | sep | oct | nov | dec | january |

                    february | … | december

<daily-keyword>   = daily

<weekly-keyword>  = weekly

<monthly-keyword> = monthly

<hourly-keyword>  = hourly

<digit>           = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0

<number>          = <digit> | <digit><number>

<12hour>          = 0 | 1 | 2 | … 12

<hour>            = 0 | 1 | 2 | … 23

<minute>          = 0 | 1 | 2 | … 59

<day>             = 1 | 2 | … 31

<time>            = <hour>:<minute> |

                    <12hour>:<minute>am |

                    <12hour>:<minute>pm

<time-spec>       = <at-keyword> <time> |

                    <hourly-keyword>

<date-keyword>    = <void-keyword>  <weekly-keyword>

<day-range>       = <day>-<day>

<month-range>     = <month-keyword>-<month-keyword>

<wday-range>      = <wday-keyword>-<wday-keyword>

<range>           = <day-range> | <month-range> |

                          <wday-range>

<date>            = <date-keyword> | <day> | <range>

<date-spec>       = <date> | <date-spec>

<day-spec>        = <day> | <wday-keyword> |

                    <day> | <wday-range> |

                    <week-keyword> <wday-keyword> |

                    <week-keyword> <wday-range> |

                    <daily-keyword>

<month-spec>      = <month-keyword> | <month-range> |

                    <monthly-keyword>

<date-time-spec>  = <month-spec> <day-spec> <time-spec>

Обратите внимание на то, что параметр «неделя года» wnn соответствует определению стандарта ISO, согласно которому первая неделя – это неделя, которая включает первый четверг года, или, как вариант, неделя, которая содержит 4 января. Недели пронумерованы от w01 до w53. Для Bacula w00 — это неделя, предшествующая первой неделе в формате ISO (т. е. первые несколько дней в году, если они наступят до четверга). w00 не определяется параметром ISO. Неделя начинается с понедельника и заканчивается в воскресенье.

Согласно NIST (Национальный институт стандартов и технологий США), время 12am и 12pm является неоднозначным и может быть интерпретировано как угодно. Однако 12:01 — это то же самое, что и 00:01, а 12:01, это то же самое, что 12:01, поэтому Bacula определяет 12am как 00:00 (полночь), а 12pm как 12:00 (полдень). Вы можете избежать такой неоднозначности (путаницы), используя время в формате 24 часов (т. е. без am / pm). Эта функция доступна начиная с Bacula версии 2.0.3.

Пример ресурса Schedule, который называется WeeklyCycle, и выполняет задачу по созданию полного бэкапа каждое воскресенье в 2:05 ночи, и инкрементального бэкапа с понедельника по субботу в 2:05 ночи:

Schedule {

  Name = «WeeklyCycle»

  Run = Level=Full sun at 2:05

  Run = Level=Incremental mon-sat at 2:05

}

Пример для месячного цикла выглядит так:

Schedule {

  Name = «MonthlyCycle»

  Run = Level=Full Pool=Monthly 1st sun at 2:05

  Run = Level=Differential 2nd-5th sun at 2:05

  Run = Level=Incremental Pool=Daily mon-sat at 2:05

}

Задача выполняется первого числа каждого месяца:

Schedule {

  Name = «First»

  Run = Level=Full on 1 at 2:05

  Run = Level=Incremental on 2-31 at 2:05

}

Задача выполняется каждые 10 минут:

Schedule {

  Name = «TenMinutes»

  Run = Level=Full hourly at 0:05

  Run = Level=Full hourly at 0:15

  Run = Level=Full hourly at 0:25

  Run = Level=Full hourly at 0:35

  Run = Level=Full hourly at 0:45

  Run = Level=Full hourly at 0:55

}

Комментарии к использованию ресурса Schedule

Bacula хранит планировщик задач в виде битов маски. Существует шесть типов масок и полей минут для каждого планировщика. Масками являются час, день месяца (mday), месяц, день недели (wday), неделя месяца (wom), и неделя года (woy). Если вы задаете месяц впервые, маска будет очищена и будет выбран бит, соответствующий выбранному месяцу. Если вы задаете второй месяц, в маску будет добавлен еще один бит. Таким образом, Bacula проверяет маски, чтобы убедиться, что биты заданы в соответствии с текущем временем, а задачи исполняются в выбранные вами два месяца. Если вы задаете час (hour), будет очищена маска часа, а выбранный вами час будет добавлен в маску в виде бита. Минуты будут храниться в поле минут.

Для любого планировщика вы можете посмотреть, как организованы биты. Для этого вам необходимо выполнить команду show schedules в программе консоли. Примите во внимание тот факт, что в битовой маске первым днем недели является воскресенье (ему присвоено значение 0 битов).

Ресурс FileSet

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

Любое изменение, внесенное в список файлов, включенных в задачу, приведет к тому, что Bacula автоматически создаст новый набор файлов (заданный именем и контрольной суммой MD5 содержимого). При создания очередного нового набора файлов Bacula на следующем этапе создает новый полный бэкап.  

Bacula может обрабатывать самые различные символы, например, Английский (США) ASCII, Немецкий, Французский, Китайский, … Однако программа делает это путем шифрования всех символов в формате UTF-8. Поэтому программа требует, чтобы все конфигурационные файлы (включая те, которые считываются на машинах Win32) были созданы в формате UTF-8. Формат UTF-8, как правило, используется по умолчанию на машинах, на которых установлена ОС Linux, но не на всех машина Unix, и не на машинах  Windows. Поэтому нужно быть внимательным и убедиться в том, что среда настроена должным образом перед запуском Bacula. На большинстве современных машин, которые используют файловую систему Win32, конфигурационные файлы можно редактировать в блокноте, выбрав в качестве итогового формата формат UTF-8.

Чтобы гарантировать возможность считывания конфигурационных файлов Bacula, включая иностранные символы, переменная среды LANG должна заканчиваться .UTF-8. Например, en_US.UTF-8. Синтаксис может отличаться в зависимости от ОС, равно как и вид выражения.

Bacula предполагает, что все имена файлов созданы в формате UTF-8 на машинах Linux и Unix. На машинах Win32 они создаются в формате Unicode (UTF-16) и автоматически конвертируются в формат UTF-8.

FileSet

Запуск ресурса FileSet. Для каждой задачи резервного копирования должен быть задан один ресурс FileSet.

Name = name

Имя ресурса FileSet. Это обязательная директива.

Ignore FileSet Changes = yes|no

Как правило, при изменении списка файлов, включенных или исключенных из задачи, на следующем этапе будет создан полный бэкап файлов. Таким образом, Bacula гарантирует сохранение всех выполненных изменений.

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

Если директиве присвоено значение yes, любые изменение, сделанные в списке включенных или исключенных файлов, не приведет к созданию на следующем этапе полного бэкапа.

По умолчанию используется значение no. В этом случае, при возникновении любых изменений в наборе файлов, Bacula создаст полный бэкап на следующем этапе.

Enable VSS = yes|no

Если данной директиве присвоено значение yes, File daemon будет уведомлен о том, что пользователь хочет использовать резервную копию службы теневого копирования томов (VSS) для текущей задачи. По умолчанию директиве присвоено значение yes. Эта директива поддерживается только службами File daemon Win32 с поддержкой VSS. Теневое копирование тома будет выполняться только на дисках Windows, если диски (например, C:, D:, …) будут явно упомянуты в директиве File. Для получения дополнительной информации смотрите раздел, посвященный теневому копированию томов в Windows.

 

Include { Options {file-options} …; file-list }

Exclude { file-list }

Ресурс Include должен содержать список каталогов и/или файлов для обработки во время выполнения задач резервного копирования. Как правило, создается резервная копия всех файлов, найденных во всех подкаталогах любого каталога из списка Include File. Ресурс Include также может содержать один или несколько ресурсов Options, которые определяют такие параметры, как сжатие, которое должно применяться ко всем или любому подмножеству файлов, найденных при обработке списка файлов для резервного копирования. Ресурс Options описан ниже по тексту.

Ресурс FileSet может содержать любое количество ресурсов Include, каждый из которых имеет свой собственный список каталогов или файлов для резервного копирования и параметры резервного копирования, определенные одним или несколькими ресурсами Options. Список файлов состоит из строк, в каждой из которых содержится одно имя файла или каталога. Имена каталогов должны быть указаны без завершающего слэша в нотации Unix.

Пользователи Windows должны указывать каталоги (даже c: / …) в нотации Unix. Если вы используете условные обозначения Windows, вы, скорее всего, не сможете восстановить файлы из-за того, что разделитель пути, используемый в Windows, был определен в качестве escape-символа задолго до того, как появилась система Windows, а Bacula придерживается таких условных обозначений.

Пользователь должен указывать полный путь для каждого каталога и файла, который он перечисляет в наборе файлов. Кроме того, на машинах Windows до имени каталога или файла необходимо всегда указывать префикс диска (например, c: / xxx), используя разделители имен в нотации Unix (прямой слэш). Буква диска может быть задана в верхнем или нижнем регистре (например, c: / xxx или C: / xxx).

При обработке каталога Bacula по умолчанию переходит из каталога в подкаталог, сохраняя в обратном порядке все файлы и подкаталоги. Bacula по умолчанию не будет затрагивать другие файловые системы (или точки монтирования на языке Unix). Это означает, что если вы укажете корневой раздел (например, /), Bacula сохранит только корневой раздел, но не другую смонтированную файловую систему. Аналогично в системах Windows вы должны явно указать каждый из дисков, которые вы хотите сохранить (например, c: / и d: / …). Кроме того, по крайней мере в случае систем Windows, скорее всего, потребуется заключить каждый параметр в двойные кавычки, в частности, если имя каталога (или файла) содержит пробелы. Команда df в системах Unix покажет вам, какие точки монтирования вы должны указать, чтобы сохранить все файлы. Пример приведен ниже.

Будьте осторожны, не включите каталог в список дважды. В противном случае, Bacula создаст резервную копию дважды, что приведет к существенному уменьшению объема хранилища.  На самом деле включить каталог в список дважды довольно просто. Например:

Include {

    Options { compression=GZIP }

    File = /

    File = /usr

  }

В системе Unix /usr является подкаталогом  (а не смонтированной файловой системой). В результате /usr будет скопирован дважды.

Обратите внимание на синтаксис, используемый при конфигурировании набора файлов:

  1. После оператора Include и перед открывающейся фигурной скобкой ({) отсутствует знак (=). То же самое касается оператора Exclude.
  2. Каждому каталогу (или файлу), который должен быть включен или исключен из списка, предшествует запись File =. Ранее каталоги и файлы просто перечислялись в отдельных строках.
  3. Функции, которые ранее указывались в строке Include, должны указываться в соответствующем ресурсе Options.
  4. При использовании подстановочных символов или регулярных выражений имена каталогов должны всегда завершаться символом (/), а имена файлов не содержать завершающего слэша.

Ресурс Options является необязательным, но если он задан, он будет содержать список функций типа keyword=value, которые будут применяться к списку файлов. Ниже приведено описание списка файлов. Несколько ресурсов Options могут быть указаны один за другим. Поскольку файлы находятся в указанных каталогах, функции будут применяться к именам файлов, определяя порядок создания резервной копии таких файлов. Подстановочные символы и шаблоны регулярных выражений, соответствующие частям ресурсов Options, проверяются в порядке, в котором они указаны в наборе файлов, до первого совпадения. В случае обнаружения первого совпадения, сжатие и функции, заданные в ресурсе Options, будут применены к совпавшему шаблону.

В отсутствии ресурса Option или в отсутствии совпадений с заданными функциями, будет создаваться копия любого файла. Это значит, что, если вы хотите исключить какие-то файлы, вам придется явно указывать функцию с обозначением exclude = yes, совпадающую с определенным шаблоном.

Как только Bacula определит, что ресурс Options совпадает с нужным файлом, этот файл будет сохранен без учета наличия других возможных ресурсов Options. Это значит, что любые подстановочные символы должны появляться до ресурса Options resource без подстановочных символов.

Если, по какой-то причине, Bacula проверяет все ресурсы Options на предмет совпадения с файлом, резервная копия которого должна быть создана, но не находит совпадений (как правило, по причине несовпадающих подстановочных символов), программа по умолчанию создаст копию файла.  

Однако, стоит отметить, что в случае отсутствия совпадений, Bacula применит функции из последнего ресурса Options. Как следствие, если вы хотите задать определенный набор функций, необходимо будет поместить их в последний ресурс Options.

Чтобы избежать проблемы со сканированием конфигурационного файла, рекомендуем помещать подстановочные символы и регулярные выражения в двойные кавычки.

Примеры того, как работают данные выражения, приведены ниже.

Использование большого количества регулярных выражений приведет к затратам большого объема ресурсов ЦП. Мы рекомендуем по возможности упрощать выражения, или заменять подстановочными выражениями.

В ресурсе Options используются следующие директивы:

compression=GZIP

Будет произведено программное сжатие всех файлов с использованием формата GNU ZIP. Сжатие выполняется поэтапно (файл за файлом) службой File daemon. В случае возникновения проблем с чтением одного единственного файла с ленты, проблема коснется только этого файла. Как правило, эта функция не используется, если вы используете современный ленточный накопитель, поскольку будет выполняться дисковое сжатие. Иногда, при использовании программного и аппаратного сжатия файлы могут занять больше места в томе.

 

Программное сжатие играет важную роль, если вы записываете том в файл, а также может помочь в том случае, если вы работаете на производительной машине, но не имеете доступа к высокоскоростной сети передачи данных. Во всех остальных случаях лучше использовать аппаратное сжатие. Как уже было сказано выше, не стоит применять программное и аппаратное сжатие одновременно.

При использовании формата сжатия GZIP применяется 6-ой уровень сжатия по умолчанию (то есть  GZIP = GZIP6). Если вы хотите задать другой уровень сжатия (с 1 по 9), вы можете указать его номер без пробелов. Например, уровень compression=GZIP1 позволит минимально пережимать файлы, но будет использовать самый быстрый алгоритм сжатия. Уровень compression=GZIP9 позволит максимально пережимать файлы, но будет использовать самый сложный и медленный алгоритм сжатия. Согласно документации GZIP, уровень сжатия выше 6, как правило не дает большего сжатия, но потребляет больше ресурсов ЦП.

Вы можете заменить эту функцию с помощью функции AllowCompression в ресурсе Storage.

compression=LZO

Будет произведено программное сжатие всех файлов с использованием формата LZO. Сжатие выполняется поэтапно (файл за файлом) службой File daemon. Все утверждения, касающиеся формата GZIP, применимы к формату LZO.

Формат LZO позволяет быстрее производить сжатие и расшифровку сжатого архива, но при этом уровень сжатия несколько уступает уровню сжатия  формата GZIP. Если позволяет скорость работы ЦП, данный формат позволит вам существенно ускорить сжатие файлов и быстрее создавать бэкапы.

Примите во внимание, что Bacula использует только один уровень сжатия LZO1X-1 указанный LZO.

Вы можете заменить эту функцию с помощью функции AllowCompression в ресурсе Storage.

signature=SHA1

SHA1 подпись будет вычислена для всех сохраненных файлов. Алгоритм SHA1 считается более медленным по сравнению с алгоритмом MD5, но превосходит его с точки зрения шифрования (меньше вероятность конфликтов и возможного взлома). Алгоритм добавляет на 4 байта данных больше чем алгоритм MD5. Мы настоятельно рекомендует использовать данную функцию, либо функцию шифрования MD5 применительно ко всем файлам. Примите во внимание, что к любому файлу можно применить либо алгоритм MD5, либо SHA1.

signature=MD5

Подпись MD5 будет вычислена для всех сохраненных файлов. При использовании данной опции на обработки любого файла затрачивается на 5% ресурсов больше.  Помимо процессорного времени, подпись MD5 добавляет еще 16 байт к каждому файлу в каталог. Мы настоятельно рекомендует использовать данную функцию, либо функцию шифрования SHA1 применительно ко всем файлам.

basejob=options

При выполнении директив Backup Level=Full и BaseJobs используются опциональные функции, заданные буквами.  Буквы соответствуют тем, которые используются в директиве verify= options.

accurate=options

При выполнении директив Backup Level=Incremental/Differential в точном режиме. используются опциональные функции, заданные буквами. Буквы соответствуют тем, которые используются в директиве verify= options

verify=options

При выполнении директив Verify Level=Catalog и задач уровня DiskToCatalog. Пользователь может использовать комбинацию из следующих букв:

i сравнение индексных дескрипторов

p сравнение битов полномочий

n сравнение количества связей

u сравнение id пользователя

g сравнение id группы

s сравнение размера

a сравнение времени доступа

m сравнение времени модификации (st_mtime)

c сравнение времени изменения (st_ctime)

d уменьшение размера файла отчета

5 сравнение подписи MD5

1 сравнение подписи SHA1

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

Как правило, используют следующий набор функций для сверки в директивах Level=Catalog или Level=DiskToCatalog —  pins5, то есть сравниваются биты полномочий, индексные дескрипторы, количество связей, размер и, наконец, изменения в подписи MD5.

onefs=yes|no

Если данной директиве присвоено значение yes (по умолчанию), Bacula создаст резервную копию одной файловой системы. То есть программа не будет создавать копии файловых систем, смонтированных в подкаталоге. Если вы используете систему *nix , вы даже можете не знать о существовании нескольких различных файловых систем, так как они часто монтируются самой ОС (например, /dev, /net, /sys, /proc, …). Bacula предупредит пользователя о том, что не перейдет к обработке другой файловой системы. Функция полезна, если вы забыли создать копию конкретного раздела. Пример информационного сообщения в отчете о выполнении задачи приведен ниже:

 

rufus-fd: /misc is a different filesystem. Will not descend from / into /misc

rufus-fd: /net is a different filesystem. Will not descend from / into /net

rufus-fd: /var/lib/nfs/rpc_pipefs is a different filesystem. Will not descend from /var/lib/nfs into /var/lib/nfs/rpc_pipefs

rufus-fd: /selinux is a different filesystem. Will not descend from / into /selinux

rufus-fd: /sys is a different filesystem. Will not descend from / into /sys

rufus-fd: /dev is a different filesystem. Will not descend from / into /dev

rufus-fd: /home is a different filesystem. Will not descend from / into /home

Примите во внимание, что в ранних версиях Bacula, представленное выше сообщение имело вид:

Filesystem change prohibited. Will not descend into /misc

Если вы хотите создать резервную копию нескольких файловых систем, вы можете явно указать каждую файловую систему, которую хотите сохранить. В противном случае, если вы установите для директивы onefs значение no, Bacula выполнит резервное копирование всех смонтированных файловых систем (т. е. Выйдет за пределы точек монтирования), найденных в наборе файлов. Таким образом, если вы используете файловые системы NFS или Samba, смонтированные в каталоге, указанном в наборе файлов, программа создаст резервные копии этих файловых систем. Мы рекомендуем присваивать директиве onefs значение yes и явно указывать каждую файловую систему, резервная копия которой должна быть создана. Явное обозначение файловых систем, резервные копии которых необходимо создать, позволяет избежать вероятности зацикливания. Ниже также приведен пример, в котором директиве onefs присвоено значение no и используется директива fstype = ext2,…

Если вы думаете, что Bacula должна была создать резервную копию конкретного каталога, но не создала, несмотря на использование директивы onefs=no, выполните следующую проверку:

  stat /

  stat <filesystem>

параметр filesystem замените нужной файловой системой. Если значение параметра Device: для `/’ и вашей файловой системы различаются, то эти каталоги находятся в разных файловых системах. Например:

stat /

  File: `/’

  Size: 4096            Blocks: 16         IO Block: 4096   directory

Device: 302h/770d       Inode: 2           Links: 26

Access: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)

Access: 2005-11-10 12:28:01.000000000 +0100

Modify: 2005-09-27 17:52:32.000000000 +0200

Change: 2005-09-27 17:52:32.000000000 +0200

 

stat /net

  File: `/home’

  Size: 4096            Blocks: 16         IO Block: 4096   directory

Device: 308h/776d       Inode: 2           Links: 7

Access: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)

Access: 2005-11-10 12:28:02.000000000 +0100

Modify: 2005-11-06 12:36:48.000000000 +0100

Change: 2005-11-06 12:36:48.000000000 +0100

Внимание, даже если вы включили / home в список файлов для резервного копирования, вы получите сообщение вида , что «/home is a different filesystem», при обработке Bacula каталога /. Данное сообщение не свидетельствует об ошибке. Оно означает, что при обработке команды File =, ссылающейся на вторую часть сообщения, Bacula не будет перемещаться в каталог, упомянутый в первой части сообщения. При этом, возможно, что резервная копия отдельной файловой системы будет создана невзирая на сообщение. Рассмотрим следующий пример:

  File = /

  File = /var

где /var – отдельная файловая система. В результате исполнения показанной выше команды вы получите сообщение, в котором будет сказано, что Bacula не перейдет из каталога / в /var. Однако стоит уточнить, что Bacula перейдет в каталог /var во втором случае использования директивы File. Предупреждения в данном случае служат для того, чтобы вы не забыли включить нужный файлы и каталоги в набор файлов. В примере выше будет создан бэкап /var. Если вы зададите набор файлов, без указания /var, тогда бэкап /var не будет создан.

honor nodump flag=yes|no

Если ваша файловая система поддерживает флаг nodump (большинство BSD-производных систем его поддерживают), Bacula выполнит настройку флага, если данной директиве присвоено значение yes. Файлы с таким флагом не будут включены в резервную копию и не будут отображаться в каталоге. Для каталогов с установленным флагом nodump отключена рекурсия, а директория будет указана в каталоге. Если директива honor nodump flag не задана, или ей присвоено значение no, любой файл и каталог смогут попасть в резервную копию.

portable=yes|no

Если данной директории присвоено значение yes (по умолчанию no), File daemon ПО Bacula создаст резервную копию файлов Win32 в портируемом формате, при этом не все атрибуты файлов Win32 будут сохранены и восстановлены. По умолчанию директиве присвоено значение no, а это значит, что в системах Win32 данные будут скопированы путем вызова Windows BackupRead API, а все атрибуты безопасности и принадлежности будут надлежащим образом скопированы (и восстановлены). Однако этот формат не переносится в другие системы — например, Unix, и старые системы Win95 / 98 / Me. При резервном копировании Unix-систем эта опция игнорируется. Если вам не нужны портируемые копии, мы рекомендуем присвоить директиве значение no, чтобы сохранить максимальную информацию о файлах Windows.

recurse=yes|no

Если данной директиве присвоено значение yes (по умолчанию), Bacula перейдет во все найденные подкаталоги, если, конечно, каталог не будет явным образом исключен с помощью функции exclude. Если директиве присвоено значение no, Bacula сохранит записи о подкаталогах, но не перейдет в них, и, таким образом, не сохранит файлы и каталоги, содержащиеся в таких подкаталогах. Как правило, используется значение (yes).

sparse=yes|no

Директива позволяет активировать специальный код, который проверяет наличие разреженных файлов, созданных, например, ndbm. По умолчанию директиве присвоено значение no, поэтому программа не выполняет проверку. Вы можете присвоить директиве значение yes даже в случае, если файлы не являются разреженными. Это не нанесет никакого ущерба файлам или процессам, просто, потребует несколько больших затрат ресурсов. Если директива найдет блок размером 32Кб состоящий из всех нулей (смотрите описание ниже), то данный блок будет считаться пропуском в файле, присутствие которого может быть нежелательным в случае, если исходный файл не является разреженными.

Ограничения: Bacula считывает файлы в буфер размером 32 Кб. Если буфер равен нулю, он будет рассматриваться как разреженный блок и не будет записан на ленту. Однако, если какая-либо часть буфера не равна нулю, весь буфер будет записан на ленту, возможно, включая некоторые равные нулю сектора на диске (как правило, 4098 байт). Как следствие, Bacula обнаруживает разреженные блоки с шагом 32Kб. Если данный факт вызывает у вас сложности, пожалуйста, отправьте нам запрос на изменение данной функции.

Если вы не знакомы с разреженными файлами, приведем пример. Представим, что у вас есть файл, в который вы записали 512 байт в адрес 0, а затем еще 512 байт в адрес 1 миллион. Операционная система выделит только два блока под данные, и не выделит блок под пустое пространство. Однако при чтении разреженного файла и адресов, в которые ничего не было записано, ОС вернет все нулевые значения, как если бы система выделила под отсутствующие данные пространство. Если вы создадите резервную копию такого файла, система потратит большой объем пространства для записи нулей в том. Когда вы начнете восстанавливать файл, все ранее пустое пространство на диске будет выделено под файл. При активной функции sparse Bacula сбудет искать пустые места в файле и не будет записывать пустые блоки в том. При этом, программе Bacula придется производить поиск каждого пустого блока в тех блоках, которые он считывает перед записью, что важно для медленных систем. Если у вас есть подозрение на наличие разреженных файлов, необходимо задать критерии для сравнения либо применять директиву sparse только к действительно разреженным файлам.

Не стоит применять данную директиву к файлам на дисках с файловой системой raw или к файлам, которые не являются действительно разреженными.

readfifo=yes|no

Если директива активна, то клиент считывает данные в процессе резервного копирования и записывает данные при восстановлении в любое устройство FIFO (канал), явно указанное в наборе файлов FileSet. В этом случае у вас должна быть запущена программа, которая записывает данные в FIFO при резервном копировании и считывает их из FIFO при восстановлении. Данную задачу можно реализовать при помощи директивы RunBeforeJob. Если директиве присвоено значение no (по умолчанию), клиент сохраняет запись каталога для FIFO.

К сожалению, если Bacula запускает скрипт RunBeforeJob, программа ждет завершения его выполнения. И если скрипт обращается к FIFO в целях записи данных, задача Bacula блокируется, а процесс зависает. Однако Владимир Ставринов в качестве решения проблемы предложил перед скриптом RunBeforeJob использовать следующую запись:

    exec> / dev / null

noatime=yes|no

Если директива активна и если ваша ОС поддерживает флаг открытия файла O_NOATIME, Bacula откроет все файлы, которые должны быть скопированы с помощью данной функции. Функция позволяет читать файл без изменения времени inode atime (а также времени inode ctime, которое обновляется, если вы пытаетесь присвоить параметру atime предыдущее значение). Функция также не допускает состояния гонок, при котором две программы считывают один и тот же файл, но лишь одна из них не хочет менять значение atime. Функция может быть полезна при использовании программ для резервного копирования и проверки целостности файлов (в этом смысле Bacula соответствует обеим критериям).

Данная функция, в частности, может быть использована в тех случаях, когда для пользователей важно время доступа к файлам в почтовом ящике. Функция заменяет собой функцию keepatime, не допуская неудобств, связанных с использованием последней (смотрите пример ниже).

Если ваша ОС не поддерживает функцию, директива будет проигнорирована Bacula.

mtimeonly=yes|no

Если директива активна, то выбор Client’ом файлов во время инкрементального или дифференциального резервного копирования должен основываться только на значениях параметра st_mtime в пакете stat(). По умолчанию директиве присвоено значение no. Это значит, что выбор файлов основывается на значениях параметров st_mtime и st_ctime. Мы не рекомендуем использовать данную директиву.

keepatime=yes|no

По умолчанию директиве присвоено значение no. Если директива отключена, Bacula сбросит значение st_atime (время доступа) в поле файла, резервную копию которого она создает, до значения, предшествовавшего бэкапу. Как правило, мы не рекомендуем использовать данную функцию, так как существует ограниченное количество программ, использующих параметр st_atime, но при этом ее задействование приводит к потреблению большего объема ресурсов, что связано с дополнительными обращениями к ОС для сброса времени. Однако в случае с файлами из почтовых ящиков, когда Bacula создает резервную копию файла, пользователь замечает, что кто-то (Bacula) обращался к такому файлу. В таком случае может пригодиться функция keepatime. (Не уверены, что она работает в Win32).

Примите во внимание, что, когда Bacula сбрасывает время доступа, время изменения (st_ctime) будет автоматически изменено системой, поэтому во время создания следующего инкрементального бэкапа,  файл будет добавлен в копию, даже если он не менялся. Как следствие, вам, возможно, потребуется использовать директиву mtimeonly = yes помимо keepatime (за подсказку благодарим Рудольфа Сежка).

checkfilechanges=yes|no

В версии 2.0.4 и выше, если используется данная директива и ей присвоено значение yes, Client проверит размер и «возраст» каждого файла после создания резервной копии, чтобы понять, были ли они изменены во время процедуры резервного копирования. Если время создания и размер файла не совпадают, появится сообщение об ошибке.

zog-fd: Client1.2007-03-31_09.46.21 Error: /tmp/test mtime changed during backup.

Мы рекомендуем использовать данную директиву.

hardlinks=yes|no

Если директиве присвоено значение yes (по умолчанию), то будет создана резервная копия жестких ссылок. Однако File daemon отслеживает файлы с жесткими ссылками и создаст резервную копию данных только один раз. Процесс отслеживания жестких ссылок может потреблять много ресурсов, в случае если таких ссылок очень много (десятки тысяч).  (В системах Unix такое возникает редко. А вот если вы использовали программу типа BackupPC, она может создавать сотни тысяч и даже миллионы жестких ссылок. В результате процесс создания резервной копии будет длиться очень долго, а File daemon будет потреблять большой объем ресурсов ЦП на проверку жестких ссылок. В таком случае, нужно присвоить директиве значение no, чтобы не создавать резервную копию жестких ссылок. Примите во внимание тот факт, что данная функция создаст резервную копию большего объема данных, а при восстановлении файловая система не будет идентична исходной.

wild=string

Директива задает строку с подстановочными символами, которые применимы к именам файлов и каталогов. Если директиве Exclude присвоено значение no, подстановочный символ выберет файлы, которые нужно включить в набор файлов. Если директиве будет присвоено значение yes, подстановочный символ выберет файлы, которые нужно исключить из набора файлов. Можно задать несколько подобных директив. Все они будут применены по очереди до первого совпадения.

До запуска процедуры резервного копирования вам, возможно, захочется протестировать выражения с помощью программы bwild. Более подробное описание вы найдете в разделе, посвященном описанию данной утилиты, в руководстве по использованию утилит Bacula Enterprise. Вы также можете протестировать полный набор файлов с помощью консольной команды estimate, описанной в руководстве по использованию консоли Bacula Enterprise.

wilddir=string

Директива задает строку с подстановочными символами, которые применимы только к именам каталогов. Данная директива не коснется имен файлов. Если директиве Exclude присвоено значение no, подстановочный символ выберет каталоги, которые нужно включить в набор файлов. Если директиве будет присвоено значение yes, подстановочный символ выберет каталоги, которые нужно исключить из набора файлов. Можно задать несколько подобных директив. Все они будут применены по очереди до первого совпадения.

Рекомендуется заключать строку в двойные кавычки.

До запуска процедуры резервного копирования вам, возможно, захочется протестировать выражения с помощью программы bwild. Более подробное описание вы найдете в разделе, посвященном описанию данной утилиты, в руководстве по использованию утилит Bacula Enterprise. Вы также можете протестировать полный набор файлов с помощью консольной команды estimate, описанной в руководстве по использованию консоли Bacula Enterprise. Ниже приведен пример того, как можно исключать каталоги на машинах Win32 с помощью директивы WildDir.

wildfile=string

Директива задает строку с подстановочными символами, которые применимы к объектам, отличным от каталогов. То есть данная директива не будет использоваться для сопоставления каталогов.  При этом будет выполняться сопоставление по полному пути и имени файла. Поэтому стоит учесть, что имени файла должен предшествовать полный путь к файлу. Если директиве Exclude присвоено значение no, подстановочный символ выберет файлы, которые необходимо исключить из набора файлов. Если директиве Exclude присвоено значение yes, подстановочный символ выберет файлы, которые необходимо включить в набор файлов. Можно задать несколько директив. Все они будут применены по очереди до первого совпадения.

Рекомендуется заключать строку в двойные кавычки.

До запуска процедуры резервного копирования вам, возможно, захочется протестировать выражения с помощью программы bwild. Более подробное описание вы найдете в разделе, посвященном описанию данной утилиты, в руководстве по использованию утилит Bacula Enterprise. Вы также можете протестировать полный набор файлов с помощью консольной команды estimate, описанной в руководстве по использованию консоли Bacula Enterprise. Ниже приведен пример того, как можно исключать каталоги на машинах Win32 с помощью директивы WildFile.

regex=string

Директива задает расширенное регулярное выражение POSIX, которое будет применено к именам файлов и каталогов, включающих полный путь. Если директиве Exclude присвоено значение no, регулярное выражение выберет файлы, которые необходимо включить. Если директиве Exclude присвоено значение yes, регулярное выражение выберет файлы, которые необходимо исключить из набора файлов. Можно задать несколько директив regex в ресурсе Options. Все они будут применены по очереди до первого совпадения.

Рекомендуется заключать строку в двойные кавычки.

Библиотеки регулярных выражений различаются в зависимости от ОС. Кроме того, регулярные выражения бывают сложными, поэтому, возможно, вам захочется протестировать ваши регулярные выражения с помощью программы bregex перед созданием резервных копий. Более подробное описание вы найдете в разделе, посвященном описанию данной утилиты, в руководстве по использованию утилит Bacula Enterprise. Вы также можете протестировать полный набор файлов с помощью консольной команды estimate, описанной в руководстве по использованию консоли Bacula Enterprise.

Использование большого количества регулярных выражений приводит к затратам ресурсов ЦП. Поэтому рекомендуем упрощать такие выражения по ере возможности. А лучше заменять из на подстановочные символы.

regexfile=string

Директива задает расширенное регулярное выражение POSIX, которое будет применено к объектам, отличным от каталогов. То есть данная директива не будет использоваться для сопоставления каталогов.  При этом будет выполняться сопоставление по полному пути и имени файла. Поэтому стоит учесть, что имени файла должен предшествовать полный путь к файлу. Если директиве Exclude присвоено значение no, регулярное выражение выберет файлы, которые необходимо включить. Если директиве Exclude присвоено значение yes, регулярное выражение выберет файлы, которые необходимо исключить из набора файлов. Можно задать несколько директив regex в ресурсе Options. Все они будут применены по очереди до первого совпадения.

Рекомендуется заключать строку в двойные кавычки.

Библиотеки регулярных выражений различаются в зависимости от ОС. Кроме того, регулярные выражения бывают сложными, поэтому, возможно, вам захочется протестировать ваши регулярные выражения с помощью программы bregex перед созданием резервных копий. Более подробное описание вы найдете в разделе, посвященном описанию данной утилиты, в руководстве по использованию утилит Bacula Enterprise.

regexdir=string

Директива задает расширенное регулярное выражение POSIX, которое будет применено только к именам каталогов. Если директиве Exclude присвоено значение no, регулярное выражение выберет файлы, которые необходимо включить. Если директиве Exclude присвоено значение yes, регулярное выражение выберет файлы, которые необходимо исключить из набора файлов. Можно задать несколько директив regex в ресурсе Options. Все они будут применены по очереди до первого совпадения.

 

Рекомендуется заключать строку в двойные кавычки.

Библиотеки регулярных выражений различаются в зависимости от ОС. Кроме того, регулярные выражения бывают сложными, поэтому, возможно, вам захочется протестировать ваши регулярные выражения с помощью программы bregex перед созданием резервных копий. Более подробное описание вы найдете в разделе, посвященном описанию данной утилиты, в руководстве по использованию утилит Bacula Enterprise.

exclude=yes|no

По умолчанию директиве присвоено значение no. Если директиве присвоено значение yes, любой файл, совпавший с параметрами в ресурсе Options, будет исключен из процесса резервного копирования.

aclsupport=yes|no

По умолчанию директиве присвоено значение no. Если директиве присвоено значение yes, и вы установили POSIX libacl в системе Linux, Bacula создаст резервную копию файла и каталога Unix Access Control Lists (ACL) как определено в стандарте IEEE Std 1003.1e проект 17 и «POSIX.1e» (отменен). Данная функция доступна в системах Unix и требует использования библиотеки  Linux ACL. Bacula автоматические компилируется с вспомогательными списками ACL, если библиотека libacl установлена в системе Linux (показано в config.out). При восстановлении файлов Bacula попытается восстановить списки ACL, в случае отсутствия вспомогательных списков ACL в системе, Bacula восстановит файлы и каталоги, но не данные ACL. Примите во внимание, если вы создаете бэкапы файловых систем EXT3 или XFS с использованием списков ACL, а затем восстановите их в разные файловые системы (возможно, reiserfs), не имеющие списков ACL, списки ACL будут проигнорированы.

Для других ОС реализована поддержка либо списков POSIX ACL, либо NFSv4 ACL.

Единый формат потока ACL не поддерживается различными ОС. Например, ACL сохраненный в Linux, не может быть восстановлен в системе Solaris.

В настоящее время поддерживаются следующие ОС:

  1. AIX (до-5.3 (POSIX) и после 5.3 (POSIX и NFSv4) ACL)
  2. Darwin
  3. FreeBSD (POSIX и NFSv4/ZFS ACL)
  4. HPUX
  5. IRIX
  6. Linux
  7. Solaris (POSIX и NFSv4/ZFS ACL)
  8. Tru64

xattrsupport=yes|no

По умолчанию директиве присвоено значение no. Если директиве присвоено значение yes, и ваша ОС поддерживает так называемые расширенные атрибуты Extended Attributes или Extensible Attributes, ПО Bacula создаст резервную копию файла и каталога XATTR данных. Эта функция доступна только в системе UNIX и зависит от поддержки специальных обращений к библиотеке в libc.

Единый формат потока XATTR не поддерживается различными ОС. Например, XATTR сохраненный в Linux, не может быть восстановлен в системе Solaris.

В некоторых ОС  ACL также хранятся в качестве расширенных атрибутов Extended Attributes (Linux, Darwin, FreeBSD). Bacula проверит, активна ли функция  aclsupport, и, если да, то не сохранит одинаковые данные при сохранении данных расширенных атрибутов. Таким образом, списки ACL будут сохранены только один раз.

В настоящее время поддерживаются следующие ОС:

  1. AIX (Extended Attributes)
  2. Darwin (Extended Attributes)
  3. FreeBSD (Extended Attributes)
  4. IRIX (Extended Attributes)
  5. Linux (Extended Attributes)
  6. NetBSD (Extended Attributes)
  7. Solaris (Extended Attributes и Extensible Attributes)
  8. Tru64 (Extended Attributes)

ignore case=yes|no

По умолчанию директиве присвоено значение no. В системах Windows данной директиве стоит присвоить значение yes. Если директиве присвоено значение yes,  в процессе сравнения с подстановочными символами и регулярными выражениями будет игнорироваться регистр символов. То есть A в верхнем регистре будет совпадать с a в нижнем регистре.

fstype=filesystem-type

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

ext2, jfs, ntfs, proc, reiserfs, xfs, usbdevfs, sysfs, smbfs, iso9660.

Вы можете задать несколько директив Fstype, что позволит сопоставлять несколько типов файловых систем в рамках одного ресурса  Options. Если тип, указанные в директиве fstype не совпадает с файловой системой для заданной директивы, каталог не будет включен в резервную копию. Эту директиву можно использовать для того, чтобы не допустить резервного копирования нелокальных файловых систем. Как правило, при использовании данной директивы, необходимо присвоить значение no директиве onefs, чтобы ПО Bacula могла перемещаться из одной файловой системы в другую.

DriveType=Windows-drive-type

Эта директива работает только на машинах Windows. Она похожа на директиву fstype для Unix/Linux , описанную выше, за исключением того, что позволяет выбирать тип дисков в Windows. По умолчанию разрешено использовать все типы дисков.

Разрешены следующие имена типов дисков:

removable, fixed, remote, cdrom, ramdisk

Вы можете задать несколько директив Driveype, что позволит сопоставлять несколько типов файловых систем в рамках одного ресурса Options. Если тип, указанные в директиве drivetype не совпадает с файловой системой для заданной директивы, каталог не будет включен в резервную копию. Эту директиву можно использовать для того, чтобы не допустить резервного копирования нелокальных файловых систем. Как правило, при использовании данной директивы, необходимо присвоить значение no директиве onefs, чтобы ПО Bacula могла перемещаться из одной файловой системы в другую.

Функция не реализована в системах Unix/Linux.

hfsplussupport=yes|no

Директива позволяет активировать поддержку для Mac OSX HFS plus.

strippath=integer

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

file-list – это список имен каталогов и/или файлов, заданный директивой File =. Чтобы включить имена, содержащие пробелы, необходимо заключить из в двойные кавычки.  Подстановочные символы не интерпретируются в списках файлов. Их можно указывать только ресурсах Options.

В списке файлов при указании каталогов и файлов используются специальные символы.:

  • Если какому-либо имени предшествует символ «собака» (@), то будет считаться, что данное имя является именем файла, который содержит список файлов, каждому из которых предшествует a запись «File =». Именнованный файл считывается только раз в процессе парсинга конфигурационного файла при запуске службы Director. Примите во внимание, что файл считывается на машине, на которой запущена служба Director, а не на машине клиента. Фактически, @filename может появится в любом месте конфигурационного файла, где может быть считан токен. А содержимое именнованного файла будет логично вставлено в место, где находится запись @filename. Содержимое файла зависит от местоположения @filename, указанного в конфигурационном файле. Например:

Include {

  Options { compression=GZIP }

  @/home/files/my-files

}

Любое имя, содержащее вертикальную черту (|), считается именем программы. Эта программа будет выполнена на машине, на которой запущена служба Director в момент запуска задачи (а не в момент, когда Director считывает конфигурационный файл). Любой результат выполнения такой программы будет считаться списком файлов или каталогов, записанных по одному в строку, которые необходимо включить в набор файлов. Перед отправкой указанной команды, Bacula выполнит подстановку символов.

Директива позволяет выполнять задачу, которая, например, включает все локальные разделы, даже если вы изменили разделы путем добавления диска. Примеры, приведенные ниже, показывают как можно выполнить данную процедуру. Однако помните о следующих двух моментах:

  1. если вы хотите включить локальные файловые системы, возможно, будет лучше воспользоваться новой директивой fstype, добавленной начиная с версии 1.36.3, и задать директиву onefs=no.
  2. синтаксис команд, использованный в примерах ниже, зависит от типа системы. Например, в последних системах Linux вам, возможно, потребуется добавлять функцию -P, в системах FreeBSD – другие функции.

Как правило, необходимо будет добавлять к команде префикс sh -c, чтобы оболочка могла вызывать эту команду. Если вы вызовите скрипт, как показано в примере 2 ниже, то вам не потребуется использовать префикс. Кроме того, стоит с осторожностью использовать подстановочный символ \ (начинать с него запись), символ оболочки, и не использовать в команде пробелы. Если вы используете одиночные кавычки (‘) и двойные кавычки («), Bacula будет обрабатывать содержимое, заключенное между одинарными кавычками, как одно поле, поэтому вы можете сохранять пробелы. Корректное использование кавычек и символа \ довольно часто вызывает проблемы. Как вариант, вы ,можете поместить все содержимое в файл и использовать имя файла в Bacula. В этом случае вам не понадобится использовать префикс sh-c, при условии что первая строка файла будет начинаться: #! / bin / sh.

Пример:

Include {

   Options { signature = SHA1 }

   File = «|sh -c ‘df -l | grep \»^/dev/hd[ab]\» | grep -v \».*/tmp\» \

      | awk \»{print \\$6}\»‘»

}

Скрипт создаст список всех локальных разделов в системе Red Hat Linux. Примите во внимание, что строки выше были разделены, хотя нужно все записывать в одну строку. Если расстановка кавычек вызывает сложности, возможно, будет гораздо проще исполнить небольшой файл с помощью следующего скрипта:

Include {

  Options {

    signature=MD5

  }

  File = «|my_partitions»

}

где my_partitions:

#!/bin/sh

df -l | grep «^/dev/hd[ab]» | grep -v «.*/tmp» \

      | awk «{print \$6}»

Если вертикальной черте (|) перед записью my_partitions предшествует обратный слэш (а именно \|), программа будет выполняться на машине клиента, а не на машине Director’а. Если имя файла задано в двойных кавычках, нужно будет использовать два символа слэша. Ниже приведен пример, предложенный Джоном Донагером, который копирует все локальные разделы UFS в удаленной системе:

FileSet {

  Name = «All local partitions»

  Include {

    Options { signature=SHA1; onefs=yes; }

    File = «\\|bash -c \»df -klF ufs | tail +2 | awk ‘{print \$6}’\»»

  }

}

Пример выше предполагает использование двух обратных слэшей после двойных кавычек (одни сохраняют другие). Если вы являетесь пользователем Linux, измените ufs на ext3 (или нужный вам тип системы), и вы получите нужный результат.

Если вы знаете, какую файловую системы смонтировали, например в Red Hat Linux чаще используются системы ext2 и ext3, вы сможете скопировать все локальные файловые системы с помощью скрипта:

Include {

   Options { signature = SHA1; onfs=no; fstype=ext2 }

   File = /

}

Если списку файлов предшествует знак «меньше» (<), то список будет рассматриваться в качестве файла. Этот файл будет считан машиной Director’а (смотрите ниже пример для машины клиента) в момент запуска задачи. Все данные будут расцениваться в качестве списка файлов или каталогов, каждый из которых будет записан в одну строку, которые необходимо включить в набор файлов. Имена должны начинаться в столбце 1 и не должны заключаться в кавычки, даже если они  содержат пробелы. Функция позволяет модифицировать внешний файл и изменить объект сохранения без остановки и перезапуска Bacula, что необходимо было бы сделать, в случае использования модификатора @. Пример:

              Include {

                Options { signature = SHA1 }

                File = «</home/files/local-filelist»

              }

Если знаку «меньше» (<) предшествует обратный слэш \, список файлов должен быть считан на машине клиента, а не на машине Director’а. Если вы берете имя файла в кавычки, нужно будет использовать двойной обратный слэш.

Include {

  Options { signature = SHA1 }

  File = «\\</home/xxx/filelist-on-client»

}

Если вы явно задали блочное устройство, например, /dev/hda1, тогда Bacula (начиная с версии 1.28) предположит, что необходимо создать резервную копию раздела в формате raw. В таком случае, настоятельно рекомендуется использовать директиву включения sparse=yes, в противном случае, вы сохраните весь раздел, но не фактические данные, которые он содержит. Например:

Include {

  Options { signature=MD5; sparse=yes }

  File = /dev/hd6

}

Скрипт создаст бэкап данных на устройстве /dev/hd6. Раздел bf /dev/hd6 должен представлять собой раздел в формате raw. Bacula не создаст копию данного раздела в качестве раздела raw, если вы укажите символьную ссылку на устройство в формате raw, которое может быть создано, скажем, утилитой  LVM Snapshot.

Людовик Страппазон заметил, что эта функция может быть использована для создания резервной копии всего диска Microsoft Windows. Просто загрузите систему с помощью диска восстановления Linux, затем загрузите статично привязанное ПО Bacula, как описано в разделе «Аварийное восстановление с использованием Bacula» данного руководства. А затем сохраните весь раздел диска. В случае аварии, вы сможете восстановить нужный раздел, снова загрузившись с диска аварийного восстановления и восстановив раздел.

Если вы явно зададите имя устройства FIFO (созданное с помощью mkfifo), и добавите директиву readfifo=yes, Bacula считает устройство FIFO и скопирует данные на нем в том. Например:

Include {

  Options {

    signature=SHA1

    readfifo=yes

  }

  File = /home/abc/fifo

}

Если /home/abc/fifo представляет собой устройство fifo, Bacula откроет устройство fifo, считает его и сохранит полученные таким образом данные в том. У вас должен быть запущен системный процесс, позволяющий производить запись в устройство fifo, или ПО Bacula зависнет, а после минуты ожидания перестанет выполнять задачу и перейдет к следующему файлу. Считываемые данные могут представлять собой любые данные, поскольку Bacula расценивает их как поток.

Эта функция помогает выполнять «горячие» бэкапы больших БД. Вы можете использовать директиву RunBeforeJob, чтобы создать устройство fifo и запустить программу, которая будет динамически считывать БД и записывать ее в устройство fifo. Bacula затем запишет ее в том. Сначала прочтите раздел, посвященный устройству  fifo. Он содержит советы о том, как избежать блокировки ПО  Bacula директивой RunBeforeJob.

Во время восстановления будет выполняться обратная процедура. После того, как Bacula создаст устройство fifo, если с помощью него хранились данные (не нужно явно его задавать или добавлять функцию), данные будут записаны обратно в fifo. Следовательно, если существует любое устройство FIFO в наборе данных для восстановления, необходимо гарантировать наличие программы считывания, или ПО Bacula будет заблокировано и через минуту оно перейдет к следующему файлу.

Список файлов может не содержать подстановочных символов. Используйте директивы в ресурсе Options, если нужно задать сопоставление с использованием подстановочных символов или регулярных выражений.

Директива ExcludeDirContaining = filename – это директива, которую можно добавить в раздел Include ресурса FileSet. Если указанное имя файла (filename-string) будет найдено на машине клиента в любом каталоге, который должен быть скопирован, будет проигнорирован весь каталог (резервная копия не будет создана). Например:

  # List of files to be backed up

  FileSet {

    Name = «MyFileSet»

    Include {

      Options {

        signature = MD5

      }

      File = /home

      Exclude Dir Containing = .excludeme

    }

  }

Но в каталоге /home может находится сотни каталогов пользователей. И, возможно, некоторые люди не захотят копировать определенные каталоги. Например в указанном выше наборе файлов, если пользователь или системный администратор создадут файл с именем .excludeme в конкретном каталоге, например:

   /home/user/www/cache/.excludeme

   /home/user/temp/.excludeme

то Bacula не создаст копии двух каталогов с именами:

   /home/user/www/cache

   /home/user/temp

Внимание: резервная копия подкаталогов создаваться не будет. То есть директива будет применена к двум каталогам, о которых идет речь, и к их «производным» каталогам и файлам.

Примеры ресурса FileSet

Ниже приведены допустимые определения ресурса FileSet. Примите во внимание, что первый список Include извлекается из содержимого файла /etc/backup.list при запуске Bacula (то есть @), и такой файл должен содержать любое имя файла, подлежащего копированию, которому предшествует File =, и которое указано в отдельной строке.

FileSet {

  Name = «Full Set»

  Include {

    Options {

      Compression=GZIP

      signature=SHA1

      Sparse = yes

    }

    @/etc/backup.list

  }

  Include {

     Options {

        wildfile = «*.o»

        wildfile = «*.exe»

        Exclude = yes

     }

     File = /root/myfile

     File = /usr/lib/another_file

  }

}

В примере выше все файлы, содержащиеся в /etc/backup.list, будут сжаты с помощью алгоритма сжатия GZIP, будет вычислена подпись SHA1 и будет применена процедура обработки разреженных файлов.

Два каталога /root/myfile и /usr/lib/another_file будут также сохранены без функций, а все файлы в этих каталогах с расширениями  .o и .exe будут исключены.

Представим, что теперь вам нужно исключить каталог /tmp. Проще всего добавить директиву exclude, список которой содержал бы каталог /tmp. Пример, показанный выше, превратиться в:

FileSet {

  Name = «Full Set»

  Include {

    Options {

      Compression=GZIP

      signature=SHA1

      Sparse = yes

    }

    @/etc/backup.list

  }

  Include {

     Options {

        wildfile = «*.o»

        wildfile = «*.exe»

        Exclude = yes

     }

     File = /root/myfile

     File = /usr/lib/another_file

  }

  Exclude {

     File = /tmp                          # не добавляйте завершающий /

  }

}

Вы можете добавить подстановочные символы в директивы File, перечисленные в каталоге  Exclude. Но нужно быть осторожным, так как если вы исключите каталог, будут исключены все файлы и подкаталоги нижнего уровня.

Давайте несколько изменим пример, приведенный выше, и предположим, что мы хотим сохранить всю файловую систему кроме каталога /tmp. Проблема заключается в том, что Bacula, как правило, не перемещается из одной файловой системы в другую. Выполнив команду df, вы получите следующий результат:

[kern@rufus k]$ df

Filesystem      1k-blocks      Used Available Use% Mounted on

/dev/hda5         5044156    439232   4348692  10% /

/dev/hda1           62193      4935     54047   9% /boot

/dev/hda9        20161172   5524660  13612372  29% /home

/dev/hda2           62217      6843     52161  12% /rescue

/dev/hda8         5044156     42548   4745376   1% /tmp

/dev/hda6         5044156   2613132   2174792  55% /usr

none               127708         0    127708   0% /dev/shm

//minimatou/c$   14099200   9895424   4203776  71% /mnt/mmatou

lmatou:/          1554264    215884   1258056  15% /mnt/matou

lmatou:/home      2478140   1589952    760072  68% /mnt/matou/home

lmatou:/usr       1981000   1199960    678628  64% /mnt/matou/usr

lpmatou:/          995116    484112    459596  52% /mnt/pmatou

lpmatou:/home    19222656   2787880  15458228  16% /mnt/pmatou/home

lpmatou:/usr      2478140   2038764    311260  87% /mnt/pmatou/usr

deuter:/          4806936     97684   4465064   3% /mnt/deuter

deuter:/home      4806904    280100   4282620   7% /mnt/deuter/home

deuter:/files    44133352  27652876  14238608  67% /mnt/deuter/files

Мы видим, что существует ряд отдельных файловых систем (/ /boot /home /rescue /tmp и /usr не говоря уже о смонтированных системах). Если в списке Include вы указали только /, Bacula сохранит только файловую систему /dev/hda5. Чтобы сохранить все файловые системы за исключением /tmp, не включая смонтированные системы Samba или NFS, и явно исключая /tmp, /proc, .journal, and .autofsck, которую вы не хотите сохранять и восстанавливать, вы можете использовать следующий скрипт:

FileSet {

  Name = Include_example

  Include {

    Options {

       wilddir = /proc

       wilddir = /tmp

       wildfile = «/.journal»

       wildfile = «/.autofsck»

       exclude = yes

    }

    File = /

    File = /boot

    File = /home

    File = /rescue

    File = /usr

  }

}

Поскольку каталог /tmp находится в собственной файловой системе и не был явно задан в списке Include, его не нужно задавать в списке exclude. Его можно задать в списке Exclude для ясности, а также на случай, если диски будут изменены так, что каталог больше не будет находиться в собственном разделе.

Теперь, давайте предположим, что мы хотим создать бэкап только .Z и .gz файлов. Это будет сделать сложнее, так как по умолчанию Bacula выбирает все файлы для создания резервной копии. Таким образом, нам необходимо исключить все файлы, кроме .Z и .gz. Если применить первый пример, приведенный выше, и внести в него некоторые изменения, мы может получить набор файлов, который будет выглядеть так:

FileSet {

  Name = «Full Set»

  Include {                    !!!!!!!!!!!!

     Options {                    This

        wildfile = «*.Z»          example

        wildfile = «*.gz»         doesn’t

                                  work

     }                          !!!!!!!!!!!!

     File = /myfile

  }

}

Файлы *.Z и *.gz будут включены в бэкап, но все другие файлы, которые не совпадут с директивами, данными в ресурсе Options, также будут включены в резервную копию (то есть используется правило по умолчанию).

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

FileSet {

  Name = «Full Set»

  Include {

     Options {

        wildfile = «*.Z»

        wildfile = «*.gz»

     }

     Options {

        Exclude = yes

        RegexFile = «.*»

     }

     File = /myfile

  }

}

Хитрость заключается в том, что мы добавили выражение RegexFile, которое соответствует всем файлам. Оно не соответствует именам каталогов, поэтому будут созданы копии каталогов в /myfile, а также все файлы *.Z и *.gz, которые содержатся в них. Если вы знаете, что конкретные каталоги не содержат файлы *.Z или *.gz и вы не хотите создавать резервную копию записей каталога, вы можете явно исключить такие каталоги из набора.

Bacula использует библиотеку системных регулярных выражений. Некоторые регулярные выражения различаются от системы к системе. Приведенный выше пример по сведениям не будет работать в системе FreeBSD. Это можно проверить с помощью команды estimate job=job-name listing в консоли, а также адаптировав выражение RegexFile. В будущих версиях Bacula мы предполагаем использовать собственный код регулярных выражений, чтобы избежать зависимости от различных ОС.

Примите во внимание, что довольно опасно позволять ПО Bacula перемещаться из файловой системы в файловую систему. Например:

FileSet {

  Name = «Bad example»

  Include {

    Options { onefs=no }

    File = /mnt/matou

  }

}

Скрипт создает резервную копию смонтированного раздела в формате NFS (/mnt/matou), а так как директиве onefs присвоено значение no, Bacula перейдет в другие файловые системы. Если /mnt/matou содержит смонтированную файловую систему текущей машины, а чаще всего бывает именно так, вы попадете в рекурсивную петлю и процесс резервного копирования никогда не завершится.

В качестве последнего примера, приведем следующий. Предположим вы хотите скопировать один или два подкаталога /home. Например, вы хотите скопировать только подкаталоги, начинающиеся с буквы а и b – то есть /home/a* and /home/b*. Сначала попытаемся выполнить следующее:

FileSet {

  Name = «Full Set»

  Include {

     Options {

        wilddir = «/home/a*»

        wilddir = «/home/b*»

     }

     File = /home

  }

}

Проблема в том, что пример выше включит все объекты из /home. Чтобы исправить положение, стоит прибегнуть к методу исключения, вместо включения. То есть, нужно просто исключить все каталоги за исключением двух нужных:

FileSet {

  Name = «Full Set»

  Include {

     Options {

        RegexDir = «^/home/[c-z]»

        exclude = yes

     }

     File = /home

  }

}

Скрипт сработает, если мы допустим, что нужные подкаталоги начинаются с букв в нижнем регистре.

Как вариант можно включить два подкаталога и исключить все остальные объекты:

объекты:

FileSet {

  Name = «Full Set»

  Include {

     Options {

        wilddir = «/home/a*»

        wilddir = «/home/b*»

     }

     Options {

        RegexDir = «.*»

        exclude = yes

     }

     File = /home

  }

}

Следующий пример покажет, как создавать резервную копию только каталога My Pictures внутри My Documents для всех пользователей в C:/Documents and Settings, то есть копии всех каталогов, соответствующих шаблону:

C:/Documents and Settings/*/My Documents/My Pictures/*

Чтобы понять, как этого можно добиться, стоит вспомнить о двух важных вещах:

Во-первых, Bacula перемещается в файловую систему, начиная с File = lines. ПО прекращает переход, если каталог исключен. Поэтому вы должны включить все каталоги верхнего уровня каждого каталога, содержащего файлы, которые должны быть включены в набор файлов.

Во-вторых, каждый каталог и файл сравниваются с условиями в ресурсе Options в том порядке, в котором они появляются в наборе файлов FileSet. При нахождении совпадения, все прочие параметры Options не будут сопоставляться, то есть каталог и или файл будут либо включены, либо исключены.  

Ниже приведено определение ресурса FileSet, согласно которому будут включены конкретные каталоги и файлы, а все прочие каталоги и файлы —  исключены.  

FileSet {

  Name = «AllPictures»

 

  Include {

 

    File  = «C:/Documents and Settings»

 

    Options {

      signature = SHA1

      verify = s1

      IgnoreCase = yes

 

      # включая все каталоги пользователей.  В отличие от

      # WildDir шаблона заканчивающегося *, выражение RegExDir совпадает только с  

      # каталогами верхнего уровня, но не с внутренними каталогами.

      RegExDir = «^C:/Documents and Settings/[^/]+$»

 

      # то же касается каталогов My Documents всех пользователей.

      WildDir = «C:/Documents and Settings/*/My Documents»

 

      # то же касается каталогов My Documents/My Pictures всех пользователей.

      WildDir = «C:/Documents and Settings/*/My Documents/My Pictures»

 

      # Включает содержимое каталогов My Documents/My Pictures и любых

      # подкаталогов.

      Wild = «C:/Documents and Settings/*/My Documents/My Pictures/*»

    }

 

    Options {

      Exclude = yes

      IgnoreCase = yes

 

      # Исключает все, в частности все файлы верхнего уровня и

      # любые иные каталоги или файлы в каталогах пользователей.

      Wild = «C:/Documents and Settings/*»

    }

  }

}

Резервное копирование разделов Raw

Следующее определение FileSet позволит создать резервную копию раздела raw:

FileSet {

  Name = «RawPartition»

  Include {

    Options { sparse=yes }

    File = /dev/hda2

  }

}

При копировании и восстановлении раздела raw необходимо убедиться в том, что никакой другой процесс, включая системный, не производит запись в такой раздел. Мы настоятельное рекомендует убедиться в том, что раздел raw не смонтирован или смонтирован только для чтения. Если необходимо, процедуру можно выполнить с помощью директивы RunBeforeJob.

Исключение файлов и каталогов

Помимо использования подстановочных символов и директивы Exclude=yes в ресурсе  Options, вы можете также включить полные имена файлов или каталогов, просто включив файлы, которые нужно исключить, в ресурсе Exclude ресурса FileSet. Ресурс позволяет использовать шаблоны с подстановочными символами, поэтому не добавляйте к названию каталога завершающего /.  Например:

FileSet {

  Name = Exclusion_example

  Include {

    Options {

      Signature = SHA1

    }

    File = /

    File = /boot

    File = /home

    File = /rescue

    File = /usr

  }

  Exclude {

    File = /proc

    File = /tmp                          # не добавляйте завершающий /

    File = .journal

    File = .autofsck

  }

}

Набор файлов Windows

Если вы вводите имена файлов Windows, пути каталога может предшествовать буква диска и двоеточие (c:). Однако разделители пути должны быть указаны в формате Unix (то есть с использованием символа прямого слэша (/)). Если вы хотите включить кавычки в название файла, то кавычкам должен предшествовать символ обратного слэша (\). Например, вы хотите использовать следующую машину Windows для копирования каталога «My Documents»:

FileSet {

  Name = «Windows Set»

  Include {

    Options {

       WildFile = «*.obj»

       WildFile = «*.exe»

       exclude = yes

     }

     File = «c:/My Documents»

  }

}

Чтобы список исключенных файлов и каталогов работал корректно в Windows, нужно соблюсти следующие правила:

  • Имена файлов чувствительны к регистру, используйте нужный регистр.
  • Чтобы исключить каталог, не нужно использовать завершающий слэш применительно к названию каталога.
  • Если имя файла содержит пробелы, нужно заключить все имя в двойные кавычки («). Использование кавычек перед пробелом принесет нужного результата.
  • Если вы используете старый синтаксис Exclude (смотрите ниже), вы можете не указывать букву диска в ресурсе exclude. В случае нового синтаксиса (смотрите выше), вы можете использовать буквы дисков.

Все вышеперечисленные пункты были сформулированы для нас Тьяго Лима. Если у вас возникают сложности с процедурой включения или исключения файлов и каталогов, вы можете попробовать использовать команду estimate job=xxx listing, описанную в разделе, посвященном команде estimate, в руководстве по использованию консоли Bacula Enterprise.

В системах Win32, если вы перемещаете подлежащие копированию каталоги или файлы, или переименовываете файл в набор файлов, и, при этом, полный бэкап уже был создан, Bacula не будет знать о существовании новых файлов для сохранения во время инкрементального или дифференциального резервного копирования (вините в этом Microsoft). Чтобы не допустить этого,  пожалуйста, копируйте любой новый каталог или файлы в область резервного копирования. Если объем диска не позволяет вам копировать файлы и каталоги, переместите их, а потом инициируйте создание полного бэкапа.

Пример набора файлов Windows

Ниже приведен пример Рассела Хоуви. Примите во внимание, что строки, начинающиеся со слов Data и Internet были свернуты, и должны быть включены в предыдущей строке с одним пробелом.

This is my Windows 2000 fileset:

FileSet {

 Name = «Windows 2000»

 Include {

  Options {

   signature = MD5

   Exclude = yes

   IgnoreCase = yes

   # Исключить файловые кэши программ на основе Mozilla

   WildDir = «[A-Z]:/Documents and Settings/*/Application

Data/*/Profiles/*/*/Cache»

   WildDir = «[A-Z]:/Documents and Settings/*/Application

Data/*/Profiles/*/*/Cache.Trash»

   WildDir = «[A-Z]:/Documents and Settings/*/Application

Data/*/Profiles/*/*/ImapMail»

 

   # Исключить пользовательские файлы реестра – они всегда используются.

   WildFile = «[A-Z]:/Documents and Settings/*/Local Settings/Application

Data/Microsoft/Windows/usrclass.*»

   WildFile = «[A-Z]:/Documents and Settings/*/ntuser.*»

 

   # Исключить каталоги, заполненные небольшими бесполезными файлами

   WildDir = «[A-Z]:/Documents and Settings/*/Cookies»

   WildDir = «[A-Z]:/Documents and Settings/*/Recent»

   WildDir = «[A-Z]:/Documents and Settings/*/Local Settings/History»

   WildDir = «[A-Z]:/Documents and Settings/*/Local Settings/Temp»

   WildDir = «[A-Z]:/Documents and Settings/*/Local Settings/Temporary

Internet Files»

 

   # Эти файлы всегда открыты и их невозможно скопировать

   WildFile = «[A-Z]:/Documents and Settings/All Users/Application

Data/Microsoft/Network/Downloader/qmgr[01].dat»

 

   # Некоторые произвольные файлы Windows, которые мы хотели бы проигнорировать

   WildFile = «[A-Z]:/WINNT/security/logs/scepol.log»

   WildDir = «[A-Z]:/WINNT/system32/config»

   WildDir = «[A-Z]:/WINNT/msdownld.tmp»

   WildDir = «[A-Z]:/WINNT/Internet Logs»

   WildDir = «[A-Z]:/WINNT/$Nt*Uninstall*»

   WildDir = «[A-Z]:/WINNT/sysvol»

   WildFile = «[A-Z]:/WINNT/cluster/CLUSDB»

   WildFile = «[A-Z]:/WINNT/cluster/CLUSDB.LOG»

   WildFile = «[A-Z]:/WINNT/NTDS/edb.log»

   WildFile = «[A-Z]:/WINNT/NTDS/ntds.dit»

   WildFile = «[A-Z]:/WINNT/NTDS/temp.edb»

   WildFile = «[A-Z]:/WINNT/ntfrs/jet/log/edb.log»

   WildFile = «[A-Z]:/WINNT/ntfrs/jet/ntfrs.jdb»

   WildFile = «[A-Z]:/WINNT/ntfrs/jet/temp/tmp.edb»

   WildFile = «[A-Z]:/WINNT/system32/CPL.CFG»

   WildFile = «[A-Z]:/WINNT/system32/dhcp/dhcp.mdb»

   WildFile = «[A-Z]:/WINNT/system32/dhcp/j50.log»

   WildFile = «[A-Z]:/WINNT/system32/dhcp/tmp.edb»

   WildFile = «[A-Z]:/WINNT/system32/LServer/edb.log»

   WildFile = «[A-Z]:/WINNT/system32/LServer/TLSLic.edb»

   WildFile = «[A-Z]:/WINNT/system32/LServer/tmp.edb»

   WildFile = «[A-Z]:/WINNT/system32/wins/j50.log»

   WildFile = «[A-Z]:/WINNT/system32/wins/wins.mdb»

   WildFile = «[A-Z]:/WINNT/system32/wins/winstmp.mdb»

 

   # Временные каталоги и файлы

   WildDir = «[A-Z]:/WINNT/Temp»

   WildDir = «[A-Z]:/temp»

   WildFile = «*.tmp»

   WildDir = «[A-Z]:/tmp»

   WildDir = «[A-Z]:/var/tmp»

 

   # Корзина

   WildDir = «[A-Z]:/RECYCLER»

 

   # Файлы подкачки

   WildFile = «[A-Z]:/pagefile.sys»

 

   # Программы. Их проще переустановить, чем восстанавливать из бэкапа

   WildDir = «[A-Z]:/cygwin»

   WildDir = «[A-Z]:/Program Files/Grisoft»

   WildDir = «[A-Z]:/Program Files/Java»

   WildDir = «[A-Z]:/Program Files/Java Web Start»

   WildDir = «[A-Z]:/Program Files/JavaSoft»

   WildDir = «[A-Z]:/Program Files/Microsoft Office»

   WildDir = «[A-Z]:/Program Files/Mozilla Firefox»

   WildDir = «[A-Z]:/Program Files/Mozilla Thunderbird»

   WildDir = «[A-Z]:/Program Files/mozilla.org»

   WildDir = «[A-Z]:/Program Files/OpenOffice*»

  }

 

  # Win2k boxen с C: и D: в качестве основных жестких дисков.

  File = «C:/»

  File = «D:/»

 }

}

Примите во внимание, что три строки перед Exclude были разбиты, чтобы соответствовать формату документа. В реальности они должны быть записаны в одну строку.

Примечания относительно названий, используемых Windows NTFS

Имена файлов в файловой системе NTFS , содержащие символы Unicode, будут поддерживаться начиная с версии 1.37.30.

Проверка набора файлов

Вы можете протестировать полный набор файлов с помощью консольной команды estimate, описанной в руководстве по использованию консоли Bacula Enterprise.

Рассмотрим тест следующего набора файлов FileSet в качестве примера:

FileSet {

  Name = Test

  Include {

    File = /home/xxx/test

    Options {

       regex = «.*\\.c$»

    }

  }

}

Вы можете добавить некоторые тестовые файлы в каталог /home/xxx/test и применить следующую команду в консоли:

estimate job=<any-job-name> listing client=<desired-client> fileset=Test

В результате вы получите список всех файлов, соответствующих требованиям. Пример выше должен отобразить только те файлы, имена которых заканчиваются на .c.

Ресурс Client

Ресурс Client задает атрибуты клиентов, обслуживаемых службой Director, то есть атрибуты машин (компьютеров), резервные копии которых необходимо создать. Для каждой машины, подлежащей резервному копированию, нужно задать один ресурс Client.

Client (или FileDaemon)

Запускает директиву Client.

Name = name

Name – это имя клиента, которое будет использовано в директиве ресурса Job или в команде, запускаемой через консоль. Это обязательная директива.

Address = address

Где address – это имя хоста, полное имя домена, или сетевой адрес, записанный четырьмя группами цифр, разделенными точками, используемый службой File server daemon ПО Bacula. Это обязательная директива.

FD Port = port-number

Где port number – это номер порта, через который можно соединить File server daemon ПО Bacula. По умолчанию используется значение 9102.

Catalog = Catalog-resource-name

Директива определяет название ресурса каталога, который будет использоваться для данного Клиента. Это обязательная директива.

Password = password

Данная директива задает пароль, который необходимо указывать при установлении соединения со службами File, поэтому конфигурационный файл клиента на машине, подлежащей резервному копированию, должен содержать тот же пароль, который задан в ресурсе Director. Это обязательная директива. Если у вас на машине используется /dev/random bc, Bacula сгенерирует произвольный пароль в процессе конфигурации; в противном случае, поле будет оставлено пустым и вам придется ввести пароль вручную.

Пароль задается простым текстом. Он генерируется как указано выше. В целях безопасности лучше использовать произвольный пароль.

File Retention = time-period-specification

Директива File Retention определяет время, в течение которого Bacula будет хранить записи о файлах в базе данных каталога после окончания времени выполнения задачи, соответствующей записи. Если время истекает и, если директиве AutoPrune присвоено значение yes, Bacula удалит (обрежет) записи старше периода, заданного директивой File Retention. Обратите внимание на то, что директива затрагивает только записи в базе данных каталога и не влияет на архивные копии.

Записи могут хранится в течении более короткого периода времени, если задать более короткий период хранения с помощью Job Retention или Volume Retention. Самый короткий период хранения, заданный одной из трех директив, обладает наибольшим приоритетом. Период хранения может быть задан в секундах, минутах, часах, днях, неделях, месяцах, кварталах или годах. Дополнительную информацию вы найдете в разделе данного руководства, посвященном определению времени.

По умолчанию период хранения равен 60 дням.

Job Retention = time-period-specification

Директива Job Retention определяет время, в течение которого Bacula будет хранить записи о выполнении задач в базе данных каталога после окончания времени выполнения задачи. Если время истекает и, если директиве AutoPrune присвоено значение yes, Bacula удалит (обрежет) записи о выполнении задач старше периода, заданного директивой File Retention. Как и в случае периодов, заданных другими директивами, данная директива затрагивает только записи в каталоге и не влияет на архивные копии.

Если запись о задаче выбрана в целях обрезки, все связанные записи File и JobMedia также будут удалены независимо от периода хранения, заданного директивой File Retention. Как следствие, необходимо задать значение периода File Retention меньше значения периода Job Retention. Значение периода Job Retention фактически может быть меньше значения, заданного данной директивой, если директиве Volume в ресурсе Pool будет присвоено меньшее значение. Это связано с тем, что директивы Job retention и Volume retention применяются независимо, поэтому преимущество будет иметь меньшее значение, заданное одной из двух директив.

Значение периода Job retention может быть задано в секундах, минутах, часах, днях, неделях, месяцах, кварталах или годах. Дополнительную информацию вы найдете в разделе данного руководства, посвященном определению времени.

По умолчанию период хранения равен 180 дням.

AutoPrune = yes|no

Если директиве AutoPrune присвоено значение yes (по умолчанию), Bacula (версии 1.20 или выше) автоматически применит значение периода, заданного директивами File retention и Job retention для клиента по завершении задачи. Если директиве AutoPrune будет присвоено значение no, программа не выполнить обрезку записей, а каталог продолжит увеличиваться в размере всякий раз при запуске задачи. Процедура обрезки записей затрагивает только информацию в каталоге и не влияет на данные хранящиеся в архивах резервных копий (в томах).

Maximum Concurrent Jobs = number

где number – это максимальное количество задач, связанных с текущим клиентом, которое может быть запущено одновременно. Примите во внимание, что директива ограничивает только задачи для клиента с именем, схожим с именем ресурса, в котором оно фигурирует. К ограничениям, указанным в данной директиве, также будут добавлены все прочие ограничения относительно максимального количества одновременно запущенных задач, заданных в ресурсах Director, Client, или Storage. По умолчанию директиве присвоено значение 1. Однако пользователь может задать большее значение.

Maximum Bandwidth Per Job = speed

Параметр speed (скорость) задает максимально допустимую пропускную способность канала, которую может использовать задача, связанная с определенным клиентом, при запуске. Параметр скорости необходимо указывать в k/s, kb/s, m/s или mb/s.

Priority = number

где number — это приоритет клиента относительно других клиентов, которые одновременно обрабатывает Director. Приоритет может варьироваться от 1 до 1000. Клиенты с меньшим значением приоритета располагаются первыми в списке (в настоящее время не реализовано).

Ниже приведен пример правильного определения ресурса Client:

Client {

  Name = Minimatou

  FDAddress = minimatou

  Catalog = MySQL

  Password = very_good

}

Ресурс Storage

Ресурс Storage определяет, какие службы Storage daemon могут быть использованы службой Director.

Storage

Запуск ресурсов Storage. Требуется по меньшей мере один ресурс Storage.

Name = name

Имя ресурса Storage. Это имя отображается в директиве Storage, указанной в ресурсе Job. Это обязательная директива

Address = address

Где address – это имя хоста, полное доменное имя или IP-адрес. Обратите внимание, что адрес, указанный в данной директиве, будет передан службе File daemon, которая затем будет использовать его для связи со службой Storage daemon. Следовательно, в качестве имени рекомендуется использовать не имя localhost, а полное имя машины или IP-адрес. Это обязательная директива.

SD Port = port

Где port – это порт, который можно использовать для связи со службой Storage daemon для получения информации и запуска задач. Этот же номер порта должен быть отображен в ресурсе Storage конфигурационного файла Storage daemon. По умолчанию используется порт 9103.

Password = password

Данная директива задает пароль, который необходимо указывать при установлении соединения со службами Storage services. Этот пароль должен совпадать с паролем, заданным в ресурсе Director конфигурационного файла Storage daemon. Это обязательная директива. Если у вас на машине используется /dev/random bc, Bacula сгенерирует произвольный пароль в процессе конфигурации; в противном случае, поле будет оставлено пустым и вам придется ввести пароль вручную.

Пароль задается простым текстом. Он генерируется как указано выше. В целях безопасности лучше использовать произвольный пароль.

Device = device-name

В этой директиве указывается имя службы Storage daemon ресурса устройства, которое будет использоваться для хранения. Если вы используете авточейнджер, имя, заданное в данной директиве, должно соответствовать имени ресурса Autochanger службы Storage daemon, а не имени отдельного устройства. Это имя является именем не физического устройства, а именем логического устройства, указанным в директиве Name, содержащейся в определении ресурса Device или Autochanger конфигурационного файла Storage daemon. Вы можете указать любое имя по желанию (даже имя устройства) длиной до 127 символов. Имя физического устройства, связанное с этим устройством, указано в конфигурационном файле Storage daemon (в виде Archive Device). Будьте осторожны, не задайте две разные директивы в ресурсе Storage для службы Director, которые бы указывали на одно и то же устройство в Storage daemon. Это может привести к тому, что служба Storage daemon будет заблокирована (или зависнет) при попытке открыть уже открытое устройство. Это обязательная директива.

Media Type = MediaType

Эта директива задает Media Type (тип носителя), который будет использован для хранения данных. Значение представляет собой произвольную строку длиной до 127 символов, которую задает пользователь. Строка может переставлять собой любой набор символов. Однако лучше, если она будет описывать носитель (например, File, DAT, «HP DLT8000», 8 mm , …). Кроме того, важно, чтобы параметры Media Type были уникальными для каждого типа носителя. Если вы используете два диска DDS-4 с несовместимыми форматами, или если вы используете диск DDS-4 и авточейнджер DDS-4, вы должны задать разные типы носителей. В ходе восстановления резервных копий, при условии, что тип носителя DDS-4 привязан к задаче, Bacula может принять решение об использовании службы Storage daemon, поддерживающей тип носителя DDS-4, на любом диске, который его поддерживает.

Если вы производите запись данных на дисковые тома, необходимо убедится в том, что каждый ресурс Device, заданный в Storage daemon (а, следовательно, и в конфигурационном файле службы Director), содержит уникальный тип носителя. В противном случае, процедура восстановления с использованием ПО Bacula версии 1.38 и выше может быть не выполнена, так как программа предположит, что вы можете смонтировать любой тип носителя с тем же именем на любом устройстве, связанном с этим типом носителя. В случае с ленточными накопителями можно просто указать уникальный тип носителя, а вот в случае с дисковыми накопителями, если вы не уверены, что можете смонтировать том в любом каталоге, задать уникальный тип можно путем создания соответствующей гибкой ссылки.

В настоящее время Bacula позволяет использовать только один тип носителя при определении хранилища и устройства в ресурсах Storage и Device соответственно. Следовательно, если вы используете дисковод, который поддерживает более одного типа носителя, вы можете присвоить уникальную строку томам с различными встроенными типами носителей (то есть при использовании типов носителей DDS-3 и DDS-4 директива будет выглядеть как Media Type = DDS-3-4 ). Однако при этом, такие тома будут смонтированы только на дисках, которые поддерживают два типа носителей (DDS-3-4).

Если вы хотите привязать ПО Bacula к одной службе Storage daemon или диску, вы должны задать уникальный тип носителя для такого диска. Очень важно понять данную рекомендацию. Обратите внимание на то, что данная рекомендация в равной степени относится к дисковым томам. Если вы зададите более одного диска в ресурсе Device в конфигурационном файле Storage daemon, тома на таких двух устройствах будут по факту несовместимы, ни один из таких томов нельзя будет смонтировать на устройстве другого тома, так как они находятся в разных каталогах. По этой причине следует использовать два разных типа носителей для двух дисковых устройств (даже если вы будете считать их носителями типа File). Дополнительную информацию вы найдете в разделе данного руководства, посвященном основам управления дисковыми томами.

Тип носителя, указанный в ресурсе Storage службы Director, должен соответствовать типу носителя, указанному в ресурсе Device в файле конфигурации Storage daemon. Это обязательная директива. Она используется службой Director и службой Storage daemon, гарантируя, что том, автоматически выбранный из пула, соответствует физическому устройству. Если служба Storage daemon обрабатывает несколько устройств (например, производит запись в различные файловые тома в разных разделах), данная директива позволяет точно указывать, какое именно устройство должна использовать служба.

Как указано выше, значение, указанное в ресурсе Storage службы Director, должно совпадать со значением, указанным в ресурсе Device в конфигурационном файле Storage daemon. Данное условие выступает в качестве проверки, которая не позволит вам записать данные, предназначенные для записи на ленту DLT, на 8 мм магнитную ленту.

Autochanger = yes|no

Если данной директиве присвоено значение yes (по умолчанию — no), при использовании команд label или add для создания нового тома Bacula также запросит номер слота авточейнджера. Директива упрощает создание записей в БД для томов в авточейнджере. Если вы забыли указать номер слота, авточейнджер не будет использоваться. Однако изменить номер слота, связанный с томом, можно в любой момент времени с помощью команд update volume или update slots в консоли программы. Если активирована функция использования авточейнджера, алгоритм, используемый Bacula для поиска доступных томов, будет изменен таким образом, чтобы программа рассматривала возможность использования только тех томов, которые точно находятся в обойме авточейнджера. Если программа не найдет в аточейнджере том, она попытается возобновить цикл поиска, обрезая список. И если том так и не будет найден, Bacula произведет поиск любого тома независимо от того, находится ли он в обойме авточейнджера или нет. Разрешение на использование томов в авточейнджере минимизирует вмешательство оператора. По умолчанию директиве присвоено значение no.

Для использования авточейнджера необходимо присвоить директиве Autochanger значение yes в ресурсе Device в конфигурационном файле Storage daemon, а также задать другие важные данные относительно конфигурации Storage daemon. Пожалуйста, ознакомьтесь с разделом данного руководства, посвященном использованию авточейнджера.

Maximum Concurrent Jobs = number

где number – это максимальное количество задач, связанных с текущим ресурсом Storage, которое может быть запущено одновременно. Примите во внимание, что директива ограничивает только задачи, которые связаны с использованием данной конкретной службы  Storage daemon. Все прочие ограничения относительно максимального количества одновременно запущенных задач, заданных в ресурсах Director, Client, или Storage, также будут добавлены к ограничениям, указанным в данной директиве. По умолчанию директиве присвоено значение 1. Однако пользователь может задать большее значение. При этом, если вы пожелаете задать количество одновременно выполняемых задач, связанных со службой Storage daemon, превышающее значение «1», мы настоятельно рекомендуем изучить все предупреждения, которые описаны для директивы Maximum Concurrent Jobs, используемой в ресурсе Director, или просто включить функцию буферизации данных, как указано в разделе данного руководства, посвященном описанию функции буферизации данных.

AllowCompression = yes|no

Это опциональная директива, и, если вы присвоите ей значение No (по умолчанию используется значение Yes), это приведет к тому, что задачи резервного копирования, запущенные с использованием данного ресурса Storage, будут выполняться без сжатия File Daemon. Данная директива позволяет заменить  функцию сжатия, заданную в ресурсе FileSets, и используемую задачами, связанными с данным ресурсом  Storage.

Heartbeat Interval = time-interval

Это опциональная директива, и, если она задана, то служба Director будет вынуждена задать интервал «keepalive» в секундах на каждом выходе, который она открывает для ресурса Client. Значение, заданное директивой, является приоритетным. Директива выполняется только в системах (Linux, …) которые позволяют использовать функцию TCP_KEEPIDL setsockopt. Значение по умолчанию равно нулю.

 

Ниже приведен пример допустимого определения ресурса Storage:

# Definition of tape storage device

Storage {

  Name = DLTDrive

  Address = lpmatou

  Password = storage_password # password for Storage daemon

  Device = «HP DLT 80»    # same as Device in Storage daemon

  Media Type = DLT8000    # same as MediaType in Storage daemon

}

Ресурс Pool

Ресурс Pool определяет массив томов (лент или файлов), которые будут использоваться Bacula для записи данных. Путем конфигурирования различных пулов можно определить, в какой массив томов (носителей) будут пересылаться скопированные данные.  Функция позволяет, например, хранить все полные бэкапы в одном массиве томов, а все инкрементальные бэкапы в другом массиве томов. Как вариант, для каждой машины, резервная копия которой должна быть сделана, можно назначить разные массивы томов. Выполнить процедуру проще всего путем назначения нескольких пулов.

Еще одной важной характеристикой пула является тот факт, что он содержит параметры, используемые по умолчанию (Maximum Jobs, Retention Period, Recycle flag, …), которые будут присвоены тому при его создании. Функция позволяет избежать массы проблем  при маркировке нового тома. Каждый из таких параметров впоследствии может быть изменен для каждого отдельного тома с помощью команды update в консоли программы. Обратите внимание на то, что необходимо явно указывать, какой пул будет использовать ПО Bacula при выполнении каждой отдельной задачи. Bacula не будет автоматически производить поиск нужного пула.

как правило, при установке ПО Bacula резервные копии всех машин (клиентов) направляются в один и тот же массив пулов. В этом случае, как правило, используется пул по умолчанию Default Pool. Если стратегия резервного копирования требует ежедневного монтирования новой ленты, вероятно, вы захотите назначить отдельный пул для каждого отдельного дня. Дополнительную информацию можно найти в разделе руководства, посвященном описанию стратегии резервного копирования.

Чтобы задать пул, нужно выполнить следующие действия.

Сначала необходимо определить пул в конфигурационном файле службы Director. Затем пул должен быть записан в базу данных каталога (БД Catalog). Director автоматически выполняет данное действие при каждом запуске.  Как вариант, можно выполнить действие с помощью команды create в консоли программы. Пул обновится, если вы измените его определение в конфигурационном файле службы Director и перезапустите ПО Bacula. Как вариант, можно  использовать команду update pool в консоли, чтобы обновить образ БД. Именно этот образ БД, а не образ ресурса службы Director, используется для атрибутов тома по умолчанию. Чтобы пул автоматически создавался или обновлялся, ресурс Job должен явно на него ссылаться.

Затем следует пометить физические носители. Маркировку можно выполнить с помощью команды label в консоли программы или с помощью программы btape. Предпочтительным является использование команды label в консоли программы.

И наконец, необходимо добавить имена томов (и их атрибуты) в пул. Томам, которые будут использоваться Bacula, необходимо присвоить тот же тип носителя, который был присвоен устройству архивирования, назначенному для выполнения конкретной задачи (т.е. если вы собираетесь выполнять резервное копирование на DLT ленты, необходимо присвоить томам пула тип DLT, поскольку тома на 8 мм магнитной ленте не могут быть смонтированы на DLT устройстве). Тип носителя имеет особое значение, если вы выполняете резервное копирование в файл. При запуске задачи необходимо явно указать, какой пул необходимо использовать. Bacula автоматически выберет следующий том для использования в пуле. Однако стоит убедиться в том, что тип носителя любого тома, выбранного из пула, соответствовать типу носителя, который требуется указать в ресурсе Storage, назначенного для конкретной задачи .

Если вы используете команду label в консоли программы для маркировки томов, тома будут автоматически добавлены в пул. Поэтому вам не придется выполнять действия, описанные в предыдущем параграфе.

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

Как было сказано выше, каждый раз при запуске Bacula сканирует все пулы, связанные с каждым каталогом, если записи базы данных еще не существует, она будет создана из определения ресурса Pool. Если вы измените определение пула, ПО Bacula должно автоматически выполнить команду update pool. ,Однако в настоящее время обновление выполняется только вручную при использовании команды update pool в консоли программы.

Ресурс Pool, заданный в конфигурационном файле ресурса Director (bacula-dir.conf), может содержать следующие директивы:

Pool

Запуск ресурса Pool. Требуется по меньшей мере один ресурс Pool.

Name = name

Имя пула. В большинстве случаев можно использовать имя по умолчанию Default. Это обязательная директива.

Maximum Volumes = number

Эта директива определяет максимальное количество томов (лент или файлов), содержащихся в пуле. Это опциональная директива, и, если она не задана или ей присвоено значение 0, будет позволено использовать любое количество томов. Как правило, эта директива используется, если используется авточейнджер с фиксированным количеством томов, или если в качестве хранилища используется файловое ЗУ и вы хотите убедиться в том, что бэкапы, записываемые в файловые диски, не будут занимать слишком много места.

Pool Type = type

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

  • Backup (Для резервного копирования)
  • *Archive (Для архивирования)
  • *Cloned (Клонированный)
  • *Migration (Для миграции)
  • *Copy (Для копирования)
  • *Save (Для сохранения)

Обратите внимание на то, что в настоящее время используется только тип Backup.

Storage = storage-resource-name

Директива Storage определяет имя хранилища, в котором вы хотите создать резервную копию набора файлов. Дополнительная информация изложена в разделе ресурс Storage. Ресурс Storage может быть также указан в ресурсе Job. При этом, значение в ресурсе Pool будет приоритетным. Это определение ресурса Storage не является обязательным ни для ресурса Job ни для ресурса Pool, однако оно должно быть задано, чтобы избежать возникновения ошибок.

Use Volume Once = yes|no

Если данной директиве присвоено значение yes, значит каждый том должен использоваться только один раз. Директива используется, если типом носителя является файлом, и вы хотите создавать новый файл для каждого созданного бэкапа.  По умолчанию директиве присвоено значение no (т.е. том будет использоваться неограниченное количество раз). Эта директива, скорее всего, будет отменена (она устарела), поэтому, вместо нее, рекомендуется использовать директиву Maximum Volume Jobs = 1.

Значение, заданное этой директивой в файле bacula-dir.conf, является значением по умолчанию, используемым при создании тома. После создания тома изменение значения в файле bacula-dir.conf не приведет к изменению хранящихся на нем данных. Чтобы изменить значение для существующего тома, необходимо в консоли использовать команду update.

Смотрите примечания к директиве Maximum Volume Jobs.

Maximum Volume Jobs = positive-integer

Эта директива определяет максимальное количество задач, которые могут быть записаны в том. Если задать значение равное 0 (по умолчанию), то количество задач не будет ограничено. Если количество задач, копируемых в том, равно положительному целому числу, том будет помечен как Used (использованный). Если том помечен как Used, он больше не может использоваться для добавления задач (подобно статусу Full). Однако том может быть использован повторно, если включена функция повторного использования. Если присвоить директиве  MaximumVolumeJobs значение 1, вы получите альтернативу директиве UseVolumeOnce = yes.

Значение, определяемое этой директивой в файле bacula-dir.conf, является значением по умолчанию, используемым при создании тома. После создания тома изменение значения в файле bacula-dir.conf не приведет к изменению хранящихся на нем данных. Чтобы изменить значение для существующего тома, необходимо в консоли использовать команду update.

Если вы запускаете несколько задач одновременно, директива может работать некорректно, потому что, когда диск зарезервирован под задачу, директива не принимается в расчет. Таким образом, несколько задач могут попытаться начать запись в том. В какой-то момент при обновлении записей носителя несколько одновременных задач перестанут выполняться, поскольку том будет переполнен и недоступен для записи.

Maximum Volume Files = positive-integer

Эта директива определяет максимальное количество файлов, которые могут быть записаны в том. Если задать значение равное 0 (по умолчанию), то количество файлов не будет ограничено. Если количество файлов, записываемых в том, равно положительному целому числу, том будет помечен как Used (использованный).

Если том помечен как Used, он больше не может использоваться для добавления задач (подобно статусу Full). Однако том может быть использован повторно, если включена функция повторного использования. Значение, присвоенное директиве, проверяется, а статус Used присваивается только по завершении задачи, которая  производит запись в определенный том.

Значение, определяемое этой директивой в файле bacula-dir.conf, является значением по умолчанию, используемым при создании тома. После создания тома изменение значения в файле bacula-dir.conf не приведет к изменению хранящихся на нем данных. Чтобы изменить значение для существующего тома, необходимо в консоли использовать команду update.

Maximum Volume Bytes = size

Эта директива определяет максимальное количество байтов, которое может быть записано в том. Если задать значение равное 0 (по умолчанию), то объем записываемых байтов будет ограничен лишь физическим размером тома. Если количество байтов, записываемых в том, равно значению size, том будет помечен как Full (полный). Если том отмечен как Full, он больше не может использоваться для добавления задач. Однако он может быть использован повторно, если включена функция повторного использования. Указанный объем проверяется непосредственно перед записью каждого блока в том. Если объем тома превысит значение, заданное директивой Maximum Volume Bytes, тому будет присвоен статус Full, а задаче потребуется следующий доступный том.

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

Значение, заданное этой директивой в файле bacula-dir.conf, является значением по умолчанию, используемым при создании тома. После создания тома изменение значения в файле bacula-dir.conf не приведет к изменению хранящихся на нем данных. Чтобы изменить значение для существующего тома, необходимо в консоли использовать команду update.

Volume Use Duration = time-period-specification

Директива Volume Use Duration определяет время, в течение которого том может быть записан, начиная с момента ввода первых данных в том. Если заданный период времени равен нолю (по умолчанию), то запись может вестись бесконечно. В противном случае, если будет запущена следующая задача, которой будут нужен доступ к этому тому, и если период времени с момента первой записи в том (первая задача) превысит заданное время, том будет помечен как Used. Если том помечен как Used, он больше не может использоваться для добавления задач. Однако том может быть использован повторно, если включена функция повторного использования. Использование команды status dir позволяет изменить статус тома. После того, как том будет очищен, он снова будет доступен для использования.

Вы можете использовать эту директиву, если у вас есть том, используемый для создания инкрементальных резервных копий, и тома, используемые для создания еженедельных полных резервных копий. Как только будет создана полная  резервная копия вы захотите использовать другой том для инкрементальных бэкапов.  Чтобы сменить том, можно присвоить директиве Volume Use Duration для тома, используемого для инкрементальных бэкапов, значение равное 6 дням. То есть том будет использоваться в течение 6 дней после создания полного бэкапа, а затем будет использоваться другой том для инкрементальных бэкапов. Будьте внимательны при настройке коротких периодов, скажем в 23 часа. У вас могут возникать проблемы с ПО Bacula, которое будет ожидать установки ленты, и сможет продолжить резервное копирование лишь в понедельник утром, когда оператор установит новую ленту.

Значение, задаваемое директивой, будет проверено, а статус Used будет присвоен только по завершении задачи, производящей запись данных в том. Это значит, что несмотря на возможное истечение срока записи, запись в каталоге не будет обновляться до тех пор, пока не будет запущена следующая задача , использующая этот том. Эта директива не предназначена для ограничения объема тома и не будет работать корректно (т.е. будет работать с ошибками), если истечет период записи при одновременном выполнении нескольких задач, записывающих данные в один том.

Значение, заданное этой директивой в файле bacula-dir.conf, является значением по умолчанию, используемым при создании тома. После создания тома изменение значения в файле bacula-dir.conf не приведет к изменению хранящихся на нем данных. Чтобы изменить значение для существующего тома, необходимо использовать команду update, как описано в соответствующем разделе руководства по устранению неисправностей при работе с Bacula Enterprise.

Catalog Files = yes|no

Эта директива позволяет задать, нужно ли помещать имена сохраненных файлов  в каталог, или нет. По умолчанию директиве присвоено значение yes. Если вы присвоите директиве Catalog Files значение No, база данных каталога будет существенно меньше. Недостатком такого подхода является то, что вы не сможете создать каталожный список файлов, резервные копии которых были сделаны, для каждой задачи (функция просмотра). Кроме того, без записей в каталоге вы не сможете использовать команду восстановления в консоли или любую другую команду, которая ссылается на записи файлов.

AutoPrune = yes|no

Если директиве AutoPrune присвоено значение yes (по умолчанию), Bacula (версии 1.20 или выше) автоматически применит значение периода, заданного директивой Volume Retention, если требуется новый том, а в пуле отсутствуют дополнительные тома. Обрезка тома приводит к удалению из каталога задач с истекшим периодом выполнения (старше периода, заданного директивой Volume Retention) и дает возможность повторного использования тома.

Volume Retention = time-period-specification

Директива Volume Retention определяет наибольшее время, в течение которого Bacula будет хранить записи, связанные с томом в базе данных каталога после окончания времени каждого задания, записываемого в том. Если время истекает, и, если директиве AutoPrune задано значение yes, Bacula может обрезать (удалить) записи о задачах старше периода, заданного директивой Volume Retention, если необходимо освободить том. Примите во внимание, что все записи  о задачах и файлах могут быть удалены до достижения периода, заданного директивой Volume Retention. В таком случае том может быть помечен как Pruned и впоследствии очищен до истечения периода, заданного директивой Volume Retention.

Очистка тома не произойдет до тех пор, пока не появится такая необходимость (т.е. другие тома для записи будут отсутствовать). Все записи о файлах, связанные с удаленными задачами, также будут удалены. Период времени, заданный директивой, может быть выражен в секундах, минутах, часах, днях, неделях, месяцах, кварталах или годах. Директива Volume Retention применяется независимо от директив Job Retention и File Retention, заданных в ресурсе Client. Это означает, что все периоды хранения применяются поочередно, и что более короткий период является приоритетным. Обратите внимание на то, что при достижении конца периода Volume Retention, если необходимо создать новый том, Bacula удалит записи о задачах и файлах. Тот же принцип действует в отношении удаленных записей о задачах и файлах. Если такие записи были удалены, то том, к которому они относились, также будет очищен и использован повторно не взирая на действие периода хранения. Том также может быть очищен во время выполнения команды dir status, поскольку команда использует аналогичные алгоритмы для поиска следующего доступного тома.

Важно понимать, что, если истекает период, заданный директивой Volume Retention, или если удаляются все записи о задачах или файлах, которые относятся к тому, Bacula не очищает том автоматически. Программа пытается хранить данные тома в целостности как можно дольше, прежде чем позволить перезаписать том.

Задав несколько пулов с разными периодами Volume Retention, вы можете использовать массив еженедельно очищаемых и повторно используемых лент. Или задать пул ежемесячно очищаемых лент и так далее. Однако следует иметь в виду, что при использовании слишком короткого периода, задаваемого директивой Volume Retention, может быть удалена последняя действительная полная резервная копия данных, следовательно. Следовательно, у вас не будет полной резервной копии до тех пор, пока вы не создадите очередной полный бэкап. Кроме того, следующий инкрементальный или дифференциальный бэкап системы будет переведен в разряд полного бэкапа. То есть, минимальный период Volume Retention должен быть в два раза больше интервала, с которым вы создаете полную резервную копию. Это означает, что, если вы выполняете полное резервное копирование один раз в месяц, минимальный период хранения должен составлять два месяца.

Период, заданный директивой  Volume retention,  по умолчанию составляет 365 дней; При создании томов по умолчанию используется либо данное значение по умолчанию, либо значение, заданное в файле bacula-dir.conf. После создания тома изменение значения в файле bacula-dir.conf не приведет к изменению хранящихся на нем данных. Чтобы изменить значение для существующего тома, необходимо использовать команду update.

Action On Purge = Truncate

Директива ActionOnPurge = Truncate требует, чтобы Bacula обрезала том, если он очищается с помощью команды volume action=truncate. Целесообразно не допускать использования дисковыми томами большого объема памяти.

Pool {

  Name = Default

  Action On Purge = Truncate

  …

}

Вы можете запланировать процедуру обрезки на конец выполнения задачи  CatalogBackup, как показано в примере ниже:

Job {

 Name = CatalogBackup

 …

 RunScript {

   RunsWhen=After

   RunsOnClient=No

   Console = «purge volume action=all allpools storage=File»

 }

}

ScratchPool = pool-resource-name

Эта директива позволяет задать временный пул. Этот пул заменит собой специальный пул под названием Scrach для выбора тома. Более подробное описание пула Scratch приведено в соответствующем разделе данного руководства. Директиву целесообразно использовать при использовании нескольких хранилищ, относящихся к одному и тому же типу носителя,  или если возникает желание выделить тома для определенного массива пулов.

RecyclePool = pool-resource-name

Эта директива определяет, к какому пулу будет добавлен том (перемещен) после очистки. Если директива не будет задана, том останется в том же пуле и после очистки. С помощью этой директивы том может быть автоматически перемещен в любой существующий пул во время очистки. Директиву целесообразно использовать для того, чтобы возвращать тома  обратно в пул Scratch. Более подробное описание пула Scratch приведено в соответствующем разделе данного руководства.

Несмотря на то, что директива называется RecyclePool, на самом деле происходит перемещение тома в указанный в директиве пул при его очистке ПО Bacula. В результате том помечается как  Purged (очищенный).

Recycle = yes|no

Директива указывает, можно или нельзя повторно использовать том, помеченный как Purged (очищенный). Если директиве присвоено значение yes (по умолчанию), а ПО Bacula нужен том, но программа не находит тома, который можно добавить, программа повторно произведет поиск тома Purged и вернет его в использование  (то есть речь идет о томе, содержащем  задачи и файлы с истекшим сроком действия, удаленные из каталога). Если том будет повторно возвращен в использование, все предыдущие данные, записанные на него, будут перезаписаны. Если директиве Recycle присвоено значение no, то том не будет использоваться повторно, а, следовательно, будет сохранять данные. Если хотите повторно использовать (перезаписать) том, а флагу Recycle присвоено значение no (0 в каталоге), можно вручную установить флаг Recycle (команда update) для повторного использования тома.

Обратите внимание на то, что значение, определяемое этой директивой в файле bacula-dir.conf, является значением по умолчанию, используемым при создании тома. После создания тома изменение значения в файле bacula-dir.conf не приведет к изменению хранящихся на нем данных. Чтобы изменить значение для существующего тома, необходимо использовать команду update.

Если, после того, как все записи о задачах и файлах, соответствующие определенному тому, были обрезаны или удалены из каталога, данный том будет помечен как Append, Full, Used, или Error, ему будет присвоена метка Purged. Только тома, отмеченные Purged будут считаться готовыми к повторному использованию, если директиве Recycle будет присвоено значение yes.

Recycle Oldest Volume = yes|no

Эта директива требует, чтобы служба Director отыскала самый старый используемый том в пуле, если Storage daemon запрашивает очередной том, но ни один из томов не доступен. Затем каталог обрезается с соблюдением периодов хранения всех файлов и задач, записанных в такой том. Если все задачи обрезаны (то есть том очищен), тогда он будет восстановлен для повторного использования и будет использоваться в качестве следующего том для записи. Эта директива учитывает любые периоды хранения, задаваемые директивами Job, File или Volume retention. Поэтому лучше использовать эту директиву, чем директиву Purge Oldest Volume.

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

Однако, если вы используете эту директиву, а пул содержит только один том, как только он заполнится, а программе Bacula потребуется другой, этот том тут же будет очищен и возвращен в использование. Пожалуйста, используйте эту директиву с осторожностью. По умолчанию директиве присвоено значение no.

Recycle Current Volume = yes|no

Если ПО Bacula нужен новый том, эта директива предписывает программе обрезать том с учетом периодов хранения задач и файлов. Если все задачи обрезаны (т.е. том очищен), то он возвращается в повторное использование в качестве следующего тома для записи. Эта директива учитывает любые периоды хранения, задаваемые директивами Job, File или Volume retention. Поэтому лучше использовать эту директиву, чем директиву Purge Oldest Volume.

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

Однако, если вы используете эту директиву, а пул содержит только один том, как только он заполнится, а программе Bacula потребуется другой, этот том тут же будет очищен и возвращен в использование. Пожалуйста, используйте эту директиву с осторожностью. По умолчанию директиве присвоено значение no.

Purge Oldest Volume = yes|no

Эта директива требует, чтобы служба Director отыскала самый старый используемый том в пуле, если Storage daemon запрашивает очередной том, но ни один из томов не доступен. Затем каталог очищается независимо от периодов хранения файлов и задач, записанных в этот том. А потом этот том возвращается в повторное использование и будет использоваться в качестве следующего тома для записи. Эта директива отменяет любые периоды хранения, заданные директивами  Job, File или Volume retention.

Эта директива может быть полезна, если вы используете фиксированное количество томов в пуле, хотите возвращать их в повторное использование, и использовать самый старый том при заполнении всех остальных томов, но при этом не собираетесь настраивать периоды хранения. Однако помните, что, используя эту опцию, вы рискуете потерять ценные данные.

Директива Purge Oldest Volume игнорирует все периоды хранения. Если вы используете только один том и активируете данную директиву, том всегда будет перезаписываться при заполнении! Перед использованием директивы убедитесь в том, что вам доступно несколько томов. Если вы хотите использовать периоды хранения, не используйте данную директиву. Чтобы указать период хранения, используйте директиву Volume Retention (см. выше).

Мы настоятельно рекомендуем не использовать эту директиву, потому что Bacula в какой-то момент времени обязательно очистит том, содержащий актуальные данные. По умолчанию директиве присвоено значение no.

File Retention = time-period-specification

Директива File Retention определяет время, в течение которого Bacula будет хранить записи о файлах в базе данных каталога после окончания времени выполнения задачи, соответствующей записи .

Эта директива имеет приоритет над директивами клиента с тем же именем. С помощью директивы вы можете принять решение об увеличении времени хранения для пула Archive или OffSite.

Обратите внимание на то, что директива влияет только на записи в базе данных каталога и не затрагивает архивные копии.

Более подробная информация изложена в разделе, посвященном времени хранения файлов.

Job Retention = time-period-specification

Директива Job Retention определяет время, в течение которого Bacula будет хранить записи о выполнении задач в базе данных каталога после окончания времени выполнения задачи. Как и в случае других директив, задающих периоды хранения, эта директива касается только записей в каталоге, а не данных в архивной копии.

Эта директива имеет приоритет над директивами клиента с тем же именем. С помощью директивы вы можете принять решение об увеличении времени хранения для пула Archive или OffSite.

Более подробная информация изложена в разделе, посвященном времени хранения задач.

Cleaning Prefix = string

Эта директива задает префиксную строку. Если эта строка совпадет с началом имени тома при маркировке тома, тому будет присвоен статус Cleaning. Таким образом, Bacula не будет пытаться использовать эту ленту. Директива прежде всего используется в случае работы с авточейнджерами,  которые используют штрих-коды. При этом ленты с условными обозначениями, начинающимися с CLN, рассматриваются в качестве чистящих лент.

Label Format = format

Эта директива определяет формат меток, содержащихся в пуле. Директива используется в качестве шаблона для создания новых имен томов во время автоматической маркировки тома.

Формат должен быть заключен в двойные кавычки и состоять из букв, цифр и специальных символов дефиса (-), подчеркивания (_), двоеточия (:) и точки (.). Эти символы являются допустимыми символами в имени тома.

Кроме того, формат может содержать несколько символов расширения параметров, которые будут расширены с помощью сложного алгоритма, позволяющего создавать имена томов различных форматов. Во всех случаях процесс расширения должен позволять использовать набор указанных выше символов, которые являются допустимыми именами томов. Как правило, такими символами расширения параметров являются символы, начинающиеся со знака доллара ($) или левой скобки ([). Если вы используете символы расширения параметров, всегда необходимо заключать формат в двойные кавычки («). Более подробная информация о расширении параметров изложена в руководстве к Bacula Enterprise.

Если в строке не найдены символы расширения, имя тома будет сформировано из строки формата, к которой добавляется уникальное увеличивающееся число. Если вы не удаляете тома из пула, это число должно быть числом тома плюс один (не гарантируется). Уникальный номер будет указан в виде четырехзначного порядковый номера с расположенными слева нулями. Например, директива вида Label Format = «File-« позволит задать следующие имена:  File-0001, File-0002, …

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

Почти во всех случаях необходимо заключать формат в двойные кавычки (часть после знака равенства). Обратите внимание на то, что эта директива устарела и заменена в версии 1.37 и выше с помощью скрипта Python для создания имен тома.

Чтобы во время задачи резервного копирования можно было использовать пул, такой пул должен содержать по крайней мере один том, связанный с этим пулом. Том для пула создается с использованием команд label или add в  консоли Bacula. Помимо добавления тома в пул (т.е. размещения имен тома в базе данных каталога), прежде чем Bacula примет том, физический том должен быть помечен действующей меткой тома ПО Bacula. Это будет сделано автоматически при использовании команды label. Bacula может автоматически маркировать тома, если это требуется, но эта функция пока еще не реализована в полном объеме.

Ниже приведен пример правильного определения ресурса Pool:

Pool {

  Name = Default

  Pool Type = Backup

}

Scratch Pool

В принципе, вы можете присваивать пулам любые имена, какие пожелаете, но есть одно важное ограничение: пул с именем Scratch, если он существует, ведет себя как временный пул. Если  ПО Bacula нужен новый том для записи данных и программа не может найти такой том, она просканирует пул Scratch, и, если найдет доступный том, то выделит его из пула Scratch и переместит в пул, который используется задачей в текущий момент времени.

Ресурс Catalog

Ресурс Catalog определяет, какой каталог необходимо использовать для текущей задачи. В настоящее время ПО Bacula может обрабатывать только один сервер БД (MySQL или PostgreSQL), который определяется при настройке Bacula. Тем не менее, вы можете задавать сколь угодно много каталогов  (баз данных). Например, каждый клиент может иметь собственную база данных каталога. Или вы можете использовать одну БД для резервного копирования, а другую для восстановления данных.

Поскольку MySQL и PostgreSQL являются сетевыми базами данных, они могут находиться либо на том же компьютере, на котором запущена служба Director, либо на другой машине в сети. Более подробная информация представлена ниже.

Catalog

Запуск ресурса Catalog. Требуется по меньшей мере один ресурс Catalog.

Name = name

Имя ресурса Catalog. Имя не обязательно должно совпадать с именем сервера БД. Это имя указывается в директиве ресурса Client, означая, что все данные каталога этого клиента  хранятся в заданном каталоге. Это обязательная директива.

password = password

Данная директива задает пароль, который необходимо указывать при входе в базу данных. Это обязательная директива.

DB Name = name

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

user = user

Директива задает имя пользователя для входа в базу данных. Это обязательная директива.

DB Socket = socket-name

Директива задает имя сокета, которое необходимо использовать  на локальном хосте для подключения к базе данных. Эта директива используется только БД MySQL. Обычно, если не заданы ни директива DB Socket, ни  DB Address, MySQL будет использовать сокет по умолчанию. Если задана директива DB Socket, сервер MySQL должен находиться на той же машине, на которой запущена служба Director.

DB Address = address

Директива задает  адрес узла сервера баз данных. Как правило, данная директива используется вместо директивы DB Socket, если сервер баз данных находится на другом компьютере. Если вы используете данную директиву, не забудьте указать директиву DB Port. Эта директива используется только БД MySQL и PostgreSQL. Это опциональная директива.

DB Port = port

Директива задает порт, который будет использоваться совместно с адресом БД для доступа к базе данных, если такая БД находится на другом компьютере. Эта директива используется только БД MySQL и PostgreSQL. Это опциональная директива.

Ниже приведен пример допустимого определения ресурса Catalog:

Ресурс Catalog

{

  Name = MySQL

  dbname = bacula;

  user = bacula;

  password = «»                       # no password = no security

}

Или для каталога на другой машине:

Ресурс Catalog

{

  Name = MySQL

  dbname = bacula

  user = bacula

  password = «»

  DB Address = remote.acme.com

  DB Port = 1234

}

Ресурс Messages

Более подробная информация о ресурсе Messages, представлена в соответствующем разделе данного руководства.

Ресурс Console

Версия Bacula 1.33 и выше позволяет использовать три различных консоли для взаимодействия со службой Director. Эти три типа консоли составляют три различных уровня безопасности.

  • Первый тип консоли – это анонимная консоль или консоль по умолчанию, которая обладает полными привилегиями. Для данного типа консоли не существует ресурса консоли, так как пароль задается в ресурсе Director и, соответственно, такие консоли не имеют имен, задаваемых директивой Name =. Это ранняя версия консоли, реализованная до версии 1.33. Как правило, она используется администраторами.
  • Второй тип консоли – это «именная» консоль , задаваемая в ресурсе Console в конфигурационных файлах Director и Console. Имена и пароли для такой консоли должны совпадать в обоих файлах.

Второй тип консоли изначально не обладает привилегиями за исключением тех, которые явно заданы в ресурсе  Console службы Director. Таким образом, вы можете использовать несколько консолей с различными именами и паролями с различными привилегиями. По умолчанию эти консоли не могут выполнять никаких действий – не исполняют команды. Пользователь задает привилегии консолей с помощью списка управления доступом в ресурсе Console службы Director. Списки управления доступом задаются директивой, за которой следует список имен. Пример показан ниже.

  • Третий тип консоли схож со вторым типом в том, что они требует задания определения ресурса Console в конфигурационных файлах Director и Console. Помимо этого, если имя консоли, заданное с помощью директивы Name =, совпадает с именем клиента Client, консоль сможет использовать команду SetIP, чтобы заменять директиву Address в ресурсе клиента службы Director на IP адрес консоли Console. Это позволяет ПК, использующим службу DHCP (динамические IP адреса) «сообщать» службе Director свои текущие IP адреса.

Ресурс Console опциональный и не требует настройки. Пользователь может использовать следующие директивы для его конфигурации.

Name = name

Имя консоли. Это имя должно совпадать с именем, указанным в конфигурации Console (так же как и с определениями клиента Client).

Password = password

Данная директива задает пароль, который необходимо указывать при использовании именнованной консоли Bacula Console для авторизации. Этот пароль должен совпадать с паролем, заданным в ресурсе Console конфигурационного файла консоли. В целях обеспечения безопасности, пароль никогда не передается по сети, вместо этого с паролем создается хэш-код ответа на запрос. Это обязательная директива. Если у вас на машине имеется /dev/random или консоль bc, Bacula сгенерирует произвольный пароль в процессе конфигурации; в противном случае, поле будет оставлено пустым.

Пароль задается простым текстом. Он генерируется как указано выше. В целях безопасности лучше использовать произвольный пароль.

JobACL = name-list

Эта директива используется для того, чтобы задать имена ресурса Job, которые могут быть доступны из консоли. Без данной директивы консоль не сможет получить доступ  на к одному ресурсу Job службы Director. Можно указать несколько имен ресурса Job, разделив их запятыми, и/или задав несколько директив JobACL. Например:

    JobACL = kernsave, «Backup client 1», «Backup client 2»

    JobACL = «RestoreFiles»

При использовании примера записи, указанного выше, консоль сможет получить доступ к ресурсам четырех задач службы Director, поименно указанных в директиве JobACL, но не  остальным ресурсам.

ClientACL = name-list

Эта директива используется для того, чтобы задать список имен ресурса Client, доступ к которым можно получить из консоли.

StorageACL = name-list

Эта директива используется для того, чтобы задать список имен ресурса Storage, доступ к которым можно получить из консоли.

ScheduleACL = name-list

Эта директива используется для того, чтобы задать список имен ресурса Schedule доступ к которым можно получить из консоли.

PoolACL = name-list

Эта директива используется для того, чтобы задать список имен ресурса Pool доступ к которым можно получить из консоли.

FileSetACL = name-list

Эта директива используется для того, чтобы задать список имен ресурса FileSet доступ к которым можно получить из консоли.

CatalogACL = name-list

Эта директива используется для того, чтобы задать список имен ресурса Catalog доступ к которым можно получить из консоли.

CommandACL = name-list

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

WhereACL = string

Эта директива позволяет задавать место, в которое консоль с ограничениями может восстанавливать файлы. Если директива не задана, позволяется использовать только разрешённые места для восстановления (как правило, /tmp/bacula-restores. Если задано ключевое слово *all*, будет использоваться любой путь, введенный пользователем, (не очень безопасно), любое другое указанное значение (может использоваться несколько директив WhereACL) запретит пользователю использовать данный путь. Например, в системах Unix, если задать «/», файл будет восстановлен в исходном месте. Директива не была протестирована.

Помимо имен ресурса Director и имен консольных команд специальное слово *all* может использоваться в любом другом списке управления доступом. Если используется данное слово, будет приниматься любое имя ресурса или команды. Пример конфигурационного файла вы найдете ниже.

Ресурс Counter

Ресурс Counter задает переменную счетчика, доступ к которой может получить расширение переменной, используемой для создания меток томов с помощью директивы LabelFormat. Более подробное описание вы найдёте в разделе, посвященном директиве LabelFormat.

Counter

Запуск ресурса Counter. Директивы счетчика опциональные.

Name = name

Имя счетчика  Counter. Имя, которое используется в расширении переменной оболочки для ссылки на значение счетчика.

Minimum = integer

Директива задает минимальное значение, которое может иметь счетчик. Это значение становится значением по умолчанию. Если значение не задано, используется ноль.

Maximum = integer

Директива задает максимальное значение, которое может иметь счетчик. Если значение не задано или равно 0, максимальное значение счетчика составит 2 147 483 648 (2 в степени 31). Если значение счетчика превысит указанное значение, то счетчик будет сброшен до минимального значения.

*WrapCounter = counter-name

Когда значение счетчика превысит максимальное значение и будет сброшен до минимума, начнет увеличиваться значение счетчика, заданного директивой  WrapCounter. (Не поддерживается в настоящий момент).

Catalog = catalog-name

Если задана данная директива, счетчик и его значение будут сохраняться в указанном каталоге. Если директива не используется, счетчик будет задаваться заново при каждом запуске Bacula.

Пример конфигурационного файла службы Director

Ниже приведен пример конфигурационного файла службы Director

#

# Default Bacula Director Configuration file

#

#  The only thing that MUST be changed is to add one or more

#   file or directory names in the Include directive of the

#   FileSet resource.

#

#  For Bacula release 1.15 (5 March 2002) — redhat

#

#  You might also want to change the default email address

#   from root to your address.  See the «mail» and «operator»

#   directives in the Messages resource.

#

Director {                           # define myself

  Name = rufus-dir

  QueryFile = «/home/kern/bacula/bin/query.sql»

  WorkingDirectory = «/home/kern/bacula/bin/working»

  PidDirectory = «/home/kern/bacula/bin/working»

  Password = «XkSfzu/Cf/wX4L8Zh4G4/yhCbpLcz3YVdmVoQvU3EyF/»

}

# Define the backup Job

Job {

  Name = «NightlySave»

  Type = Backup

  Level = Incremental                 # default

  Client=rufus-fd

  FileSet=»Full Set»

  Schedule = «WeeklyCycle»

  Storage = DLTDrive

  Messages = Standard

  Pool = Default

}

Job {

  Name = «Restore»

  Type = Restore

  Client=rufus-fd

  FileSet=»Full Set»

  Where = /tmp/bacula-restores

  Storage = DLTDrive

  Messages = Standard

  Pool = Default

}

 

# List of files to be backed up

FileSet {

  Name = «Full Set»

  Include {

    Options {signature=SHA1}

#

#  Put your list of files here, one per line or include an

#    external list with:

#

#    @file-name

#

#  Note: / backs up everything

  File = /

}

  Exclude {}

}

# When to do the backups

Schedule {

  Name = «WeeklyCycle»

  Run = level=Full sun at 2:05

  Run = level=Incremental mon-sat at 2:05

}

# Client (File Services) to backup

Client {

  Name = rufus-fd

  Address = rufus

  Catalog = MyCatalog

  Password = «MQk6lVinz4GG2hdIZk1dsKE/LxMZGo6znMHiD7t7vzF+»

  File Retention = 60d      # sixty day file retention

  Job Retention = 1y        # 1 year Job retention

  AutoPrune = yes           # Auto apply retention periods

}

# Definition of DLT tape storage device

Storage {

  Name = DLTDrive

  Address = rufus

  Password = «jMeWZvfikUHvt3kzKVVPpQ0ccmV6emPnF2cPYFdhLApQ»

  Device = «HP DLT 80»      # same as Device in Storage daemon

  Media Type = DLT8000      # same as MediaType in Storage daemon

}

# Definition for a DLT autochanger device

Storage {

  Name = Autochanger

  Address = rufus

  Password = «jMeWZvfikUHvt3kzKVVPpQ0ccmV6emPnF2cPYFdhLApQ»

  Device = «Autochanger»    # same as Device in Storage daemon

  Media Type = DLT-8000     # Different from DLTDrive

  Autochanger = yes

}

# Definition of DDS tape storage device

Storage {

  Name = SDT-10000

  Address = rufus

  Password = «jMeWZvfikUHvt3kzKVVPpQ0ccmV6emPnF2cPYFdhLApQ»

  Device = SDT-10000        # same as Device in Storage daemon

  Media Type = DDS-4        # same as MediaType in Storage daemon

}

# Definition of 8mm tape storage device

Storage {

  Name = «8mmDrive»

  Address = rufus

  Password = «jMeWZvfikUHvt3kzKVVPpQ0ccmV6emPnF2cPYFdhLApQ»

  Device = «Exabyte 8mm»

  MediaType = «8mm»

}

# Definition of file storage device

Storage {

  Name = File

  Address = rufus

  Password = «jMeWZvfikUHvt3kzKVVPpQ0ccmV6emPnF2cPYFdhLApQ»

  Device = FileStorage

  Media Type = File

}

# Generic catalog service

Catalog {

  Name = MyCatalog

  dbname = bacula; user = bacula; password = «»

}

# Reasonable message delivery — send most everything to

#   the email address and to the console

Messages {

  Name = Standard

  mail = root@localhost = all, !skipped, !terminate

  operator = root@localhost = mount

  console = all, !skipped, !saved

}

 

# Default pool definition

Pool {

  Name = Default

  Pool Type = Backup

  AutoPrune = yes

  Recycle = yes

}

#

# Restricted console used by tray-monitor to get the status of the director

#

Console {

  Name = Monitor

  Password = «GN0uRo7PTUmlMbqrJ2Gr1p0fk0HQJTxwnFyE4WSST3MWZseR»

  CommandACL = status, .status

}