Bacula — кроссплатформенное клиент-серверное программное обеспечение, позволяющее централизованно управлять резервным копированием, восстановлением, и проверкой данных по сети. Bacula также может работать на единственном сервере или, распределёно на нескольких, может записывать резервные копии на различные типы носителей, включая ленты, ленточные библиотеки, диски. Предлагает широкие возможности для управления хранилищами данных, облегчает поиск и восстановление потерянных или повреждённых файлов. Благодаря модульной структуре, Bacula легко масштабируемая система и может работать как в маленьких так и в крупных сетях. Дает возможность управления через CLI, GUI и веб-интерфейс.
Bacula разделена на несколько отдельных модулей это придает ей гибкости в работе:
Первое, что вы должны будете сделать это понять и описать кто, что и когда будет резервироваться. В нашем примере я буду использовать три сервера.
Как я сказал Bacula может быть распределена в сети и при грамотном ведении хозяйства и бюджета наша задача выглядит примерно так.
Примечание: чтобы не усложнять схему я специально убрал из неё трей-монитор, командную консоль, и БД каталога тк их можно поставить на другие машины. Пример
К слову сказать готовые ленты желательно переносить в другое здание (или помещение) тк от чрезвычайных случаев никто не застрахован. И вот еще я как и все вы живем в России обычно бюджет фирм на ИТ небольшой и приходиться выкручиваться самому так, что реальная схема часто выглядит так.
Для начала вам понадобится нарисовать простую таблицу примерно такого вида.
Так вы можете наглядно понять, что необходимо и как нужно сделать, дальше следуйте вашей схеме. В процессе схему можете дополнять и оптимизировать не забывая все документировать. Вы документируете свою работу ведь правда?
Дополнительно опишем типы резервного копирования их плюсы и минусы:
Предпочтителен Full backup но это"дорого" обходиться. Если данные не очень ценны или ресурсов мало то используйте Incremental backup. Differential backup это компромисс, но бывает что последняя копия приближается объему полного копирования так что следите за ним =). Есть еще и другие типы копирования такие как VirtualFull и Base вы можете познакомиться с ними сами.
Установка стандартна так что следуйте за белым кроликом...
# make search name=bacula-server Port: bacula-server-5.0.3 Path: /usr/ports/sysutils/bacula-server Info: The network backup solution (server) Maint: dan@langille.org B-deps: gettext-0.18.1.1 libiconv-1.13.1_1 postgresql-client-8.3.15,1 R-deps: gettext-0.18.1.1 libiconv-1.13.1_1 postgresql-client-8.3.15,1 WWW: _http://www.bacula.org/ # cd /usr/ports/sysutils/bacula-server # make config Options for bacula-server 5.0.3 [ ] SQLITE3 Use SQLite-3 database [X] MYSQL Use MySQL database [ ] POSTGRESQL Use PostgreSQL database [ ] MTX Install mtx for control of autochanger devices [X] NLS Native Language Support via gettext utilities [X] OPENSSL Enable OpenSSL for encrypted communication # make install clean You may use the following build options (or make config): WITH_CLIENT_ONLY=yes if you only want the file daemon. WITH_MTX=yes if you want to use mtx instead of chio for autochanger control. WITH_SQLITE3=yes if you want SQLite-3 as the database (not recommended). WITH_OPENSSL=yes Enable OpenSSL for encrypted communication. ~~~ ===> SECURITY REPORT: This port has installed the following files which may act as network servers and may therefore pose a remote security risk to the system. /usr/local/lib/libbac.so.5 This port has installed the following startup scripts which may cause these network services to be started at boot time. /usr/local/etc/rc.d/bacula-sd /usr/local/etc/rc.d/bacula-dir If there are vulnerabilities in these programs there may be a security risk to the system. FreeBSD makes no guarantee about the security of ports included in the Ports Collection. Please type 'make deinstall' to deinstall the port if this is a concern. For more information, and contact details about the security status of this software, see the following webpage: http://www.bacula.org/ ===> Cleaning for bacula-server-5.0.3
Для работы Bacula Director ему необходима база данных для накопления и оперирования всевозможными данными о собранных резервных копиях. Такая база называется Каталог (Catalog) и храниться она в СУРБД (MySQL, Postgres). Каталогов может быть несколько, в зависимости от потребностей. Перед запуском, необходимо подготовить хотя бы один.
Cоздадим базу данных в MYSQL, например BACULA_DB, и пользователя имеющего полные права на эту базу данных.
# mysqladmin -uADMIN_USER -pADMIN_PASS create BACULA_DB # mysql -uADMIN_USER -pADMIN_PASS -e"GRANT ALL ON BACULA_DB.* TO \ BACULA_USER@localhost IDENTIFIED BY 'BACULA_USER_PASS'" BACULA_DB
# /usr/local/share/bacula/make_mysql_tables -u BACULA_USER -pBACULA_USER_PASS Creation of Bacula MySQL tables succeeded.
Необходимо создать директорию (а лучше взять новый диск для хранения резервных копий и еще лучше это использовать ленточный накопитель) куда будем писать резервные копии, и даем доступ на запись пользователю bacula и примонтируем (в моем случае) диск для бекапов:
# mkdir /home/bacula/backup # chown bacula:bacula /home/bacula/backup # mount /dev/ad6s1d /home/bacula/backup
Добавим в fstab строчку про монтирование диска (в моем случае).
# cat /etc/fstab # Device Mountpoint FStype Options Dump Pass# /dev/mirror/gm0s1b none swap sw 0 0 /dev/mirror/gm0s1a / ufs rw 1 1 /dev/mirror/gm0s1f /home ufs rw 2 2 /dev/mirror/gm0s1d /usr ufs rw 2 2 /dev/mirror/gm0s1e /var ufs rw 2 2 /dev/ad6s1d /home/bacula/backup ufs rw 2 2 /dev/acd0 /cdrom cd9660 ro,noauto 0 0 tmpfs /tmp tmpfs rw 0 0
Необходимо создать конфигурационные файлы для DIR и SD на основе шаблонов и отредактировать их в соответствии с желаемой конфигурацией.
# cd /usr/local/etc # ll |grep bacula -r--r--r-- 1 root wheel 949B 11 май 11:56 bacula-barcodes.samples -rw-r----- 1 root bacula 8,8K 11 май 11:56 bacula-dir.conf.sample -rw-r----- 1 root wheel 5,8K 11 май 11:56 bacula-sd.conf.sample # cp bacula-dir.conf.sample bacula-dir.conf # cp bacula-sd.conf.sample bacula-sd.conf
Разберем дефолтный конфигурационный файл DIR:
# cat bacula-dir.conf # # Дефолтный файл конфигурации Bacula Director # # Единственное, что должно быть изменено, это добавить одну или # несколько имен файлов или директорий в директиве Include # набора FileSet. # # Для Bacula релиза 5.0.3 (04 августа 2010) - FreeBSD 8.2-RELEASE # # Вы также можете изменить адрес электронной почты по умолчанию # от root до вашего адреса. См. директивы "mail" и "operator" # в ресурсах сообщения. # Director { # Определим себя Name = thor.kmps.local-dir # Имя DIRport = 9101 # Порт который слушает DIR QueryFile = "/usr/local/share/bacula/query.sql" WorkingDirectory = "/var/db/bacula" # Рабочий каталог PidDirectory = "/var/run" Maximum Concurrent Jobs = 1 # Максимальное количество # параллельных заданий. Не рекомендуется # одновременно записывать # несколько заданий в один пул. Password = "SECRET" # Пароль для анонимной консоли (фулл контрол) Messages = Daemon # Набор настроек для отправки сообщений } JobDefs { # Дефолтное задание Name = "DefaultJob" # Имя задания Type = Backup # Тип (backup, restore и т.д.) Level = Incremental # Уровень бэкапа (Full, Incremental, Differential и тп) Client = thor.kmps.local-fd # Имя клиента FileSet = "Full Set" # Набора файлов для сохранения. Schedule = "WeeklyCycle" # Расписание Storage = File # Файловое хранилище Messages = Standard # Поведение уведомлений Pool = File # Пул, куда будем писать бэкапы Priority = 10 # Приоритет. Давая заданиям приоритеты # от 1 (max) до 10 (min), можно регулировать # последовательность выполнения. Write Bootstrap = "/var/db/bacula/%c.bsr" # Файл хранит информацию откуда извлекать # данные при восстановлении } # Определим основные ночные сохранения заданий резервного копирования # По умолчанию, работа резервного копирование будет на диске в /tmp Job { Name = "BackupClient1" JobDefs = "DefaultJob" } #Job { # Name = "BackupClient2" # Client = thor.kmps.local2-fd # JobDefs = "DefaultJob" #} # Резервное копирование каталога базы данных (после ночных сохранений) Job { Name = "BackupCatalog" JobDefs = "DefaultJob" Level = Full FileSet="Catalog" Schedule = "WeeklyCycleAfterBackup" # Это создает копию ASCII из каталога # Аргументы make_catalog_backup.pl являются: # make_catalog_backup.pl <catalog-name> RunBeforeJob = "/usr/local/share/bacula/make_catalog_backup.pl MyCatalog" # Это удаляет копию каталога RunAfterJob = "/usr/local/share/bacula/delete_catalog_backup" Write Bootstrap = "/var/db/bacula/%n.bsr" Priority = 11 # после основного резервного копирования } # # Стандартный шаблон восстановления, который может изменен консольной программой # Только одна такая работа необходима для всех Работа/Клиентов/Хранилищ... # [единственное я изменил путь к Where для клиента thor.kmps.local-fd # это куда Bacula будет складывать восстановленные из архивов файлы] Job { Name = "RestoreFiles" Type = Restore Client=thor.kmps.local-fd FileSet="Full Set" Storage = File Pool = Default Messages = Standard #Where = /tmp/bacula-restores Where = /home/bacula/bacula-restores } # Список файлов для резервного копирования FileSet { # Список файлов Name = "Full Set" # Имя списка файлов Include { Options { signature = MD5 # Тип сигнатур MD5\SHA1 } # # Поместить список файлов, вы можете предшествует 'File =', по одному на строку # или включить внешний список: # # File = <file-name # # Обратите внимание: "/" резервное копирование всего корневого раздела. # если у вас есть другие разделы, такие как "/usr" / или "/home" # вероятно, вы захотите, чтобы добавить их тоже. # # По умолчанию это определяется, чтобы указать для Bacula бинарный # каталог, чтобы дать набор файлов для резервного копирования на # диск во время начального тестирования. # File = /usr/local/sbin } # # Если вы сохраняете корневой каталог, следующие два исключения # файлов могут быть полезны # Exclude { # Исключения File = /var/db/bacula ##Исключаемые директории File = /tmp ## File = /proc ## File = /tmp ## File = /.journal ###Исключаемые файлы File = /.fsck ### } } # # Когда делать резервные копии, полную резервную копию в первое # воскресенье месяца, дифференциальный (т.е. дополнительные к полной) # каждые остальные воскресенья, так и инкрементный в другие дни. Schedule { # Планировщик Name = "WeeklyCycle" # Имя планировщика Run = Full 1st sun at 23:05 # Запуск полного бекапа в.. Run = Differential 2nd-5th sun at 23:05 # Запуск диф. бекапа в.. Run = Incremental mon-sat at 23:05 # Запуск инк. бекапа в.. } # Этот график для каталога. Он запускается после WeeklyCycle Schedule { Name = "WeeklyCycleAfterBackup" Run = Full sun-sat at 23:10 } # Это резервное копирование каталога Bacula [изменил из-за БД имя] FileSet { Name = "Catalog" Include { Options { signature = MD5 } #File = "/var/db/bacula/bacula.sql" File = "/var/db/bacula/BACULA_DB.sql" } } Client { Name = thor.kmps.local-fd # Имя клиента Address = thor.kmps.local # Адрес FDPort = 9102 # Порт на котором клиент сидит Catalog = MyCatalog # Каталог в MySQL Password = "SECRET" # пароль для FileDaemon File Retention = 30 days # 30 дней - период, на протяжении # которого в каталоге будет храниться # инфа о файлах этого клиента Job Retention = 6 months # 6 месяцев - тоже, но про задания AutoPrune = yes # Удаление истекших заданий/файлов } # # Второй клиент (File Services) для резервного копирования # Вы должны изменить имя, адрес и пароль, прежде чем использовать # #Client { # Name = thor.kmps.local2-fd # Address = localhost2 # FDPort = 9102 # Catalog = MyCatalog # Password = "SECRET" # пароль для FileDaemon 2 # File Retention = 30 days # 30 дней # Job Retention = 6 months # 6 месяцев # AutoPrune = yes # Удаление истекших заданий/файлов #} # Определение устройства хранения файлов Storage { Name = File # Имя. Используется в определениях job # Не используйте здесь "localhost" Address = thor.kmps.local # Здесь использовать полное имя SDPort = 9103 # Порт SD Password = "SECRET" # Пароль к SD Device = FileStorage # Устройство. Должно быть определено # в настройках секции Device сервера хранения Media Type = File # Файл, диск, лента } # Определение DDS ленточного устройство хранения данных #Storage { # Name = DDS-4 # Не используйте здесь "localhost" # Address = localhost # Здесь использовать полное имя # SDPort = 9103 # Порт SD # Password = "SECRET" # пароль для Storage daemon # Device = DDS-4 # должен быть таким же, как Device в Storage daemon # Media Type = DDS-4 # должен быть таким же, как MediaType в Storage daemon # Autochanger = yes # включить для авточейнджера устройства #} # Определение 8мм устройства хранения ленты #Storage { # Name = "8mmDrive" # Не используйте здесь "localhost" # Address = localhost # SDPort = 9103 # Password = "SECRET" # Device = "Exabyte 8mm" # MediaType = "8mm" #} # Определение DVD накопителя #Storage { # Name = "DVD" # Не используйте здесь "localhost" # Address = localhost # SDPort = 9103 # Password = "SECRET" # Device = "DVD Writer" # MediaType = "DVD" #} # Службы общего каталога Catalog { Name = MyCatalog # Раскомментируйте следующую строку, если вы хотите использовать dbi драйвера # dbdriver = "dbi:mysql"; dbaddress = 127.0.0.1; dbport = dbdriver = "dbi:mysql"; dbaddress = 127.0.0.1; dbport = 3306 dbname = "kmps_bacula"; dbuser = "kmps_bacula"; dbpassword = "PASSWORD" } # Умеренная доставки сообщения - отправить большинство сообщений на адрес # электронной почты и консоль Messages { Name = Standard # # ПРИМЕЧАНИЕ! Если вы отправляете на два почтовых адреса или более # адресов электронной почты, необходимо будет заменить %r в поле # (-f части) с одиним действительным адресом электронной почты в # обоих mailcommand, так и operatorcommand. Что это делает, он # устанавливает адрес электронной почты, сообщения электронной почты # будет отображаться в поле «ОТ», который является по умолчанию # такое же письмо, как они его передали. Однако если вы отправляете # сообщение на более чем один адрес, то вам придется вручную, # установить адреса на один адрес. Например, «no-reply@mydomain.com», # лучше так, что стремится сказать (большинству) людей, которые # его получат с автоматизированного источника рассылки сообщений. mailcommand = "/usr/local/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" / -s \"Bacula: %t %e of %c %l\" %r" operatorcommand = "/usr/local/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" / -s \"Bacula: Intervention needed for %j\" %r" mail = root@localhost = all, !skipped operator = root@localhost = mount console = all, !skipped, !saved # # ВНИМАНИЕ! Переменная указанная ниже создаст файл, который вам # нужно будет ротировать newsyslog'ом Однако, он также будет # держать все ваши сообщения, если они просматриваются # с консоли. append = "/var/db/bacula/log" = all, !skipped catalog = all } # # Доставка сообщений для демона сообщений (не работы). Messages { Name = Daemon mailcommand = "/usr/local/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" / -s \"Bacula daemon message\" %r" mail = root@localhost = all, !skipped console = all, !skipped, !saved append = "/var/db/bacula/log" = all, !skipped } # Определение пула по умолчанию # Pool - отдельное описание для каждого набора томов (лент, DVD, файлов) # используется при описании задания для указания пула из которого # должен быть взят том. В каждый пул может входить несколько томов. Pool { # Пул Name = Default # Имя пула Pool Type = Backup # Тип пула Recycle = yes # Bacula может автоматически рециркулировать тома (Volumes) AutoPrune = yes # Удалять из каталога записи о файлах и # заданиях, срок хранения которых истёк в # соответствии с Volume Retention, # при поиске доступного на запись тома. Volume Retention = 365 days # Через один год } # Определения пула файлов Pool { # Пул Name = File # Имя пула Pool Type = Backup # Тип пула Recycle = yes # Bacula может автоматически рециркулировать тома (Volumes) AutoPrune = yes # Удаление истекших томов (Volumes) Volume Retention = 365 days # через один год Maximum Volume Bytes = 50G # Ограничение размера тома Maximum Volumes = 100 # Ограничить количество томов в пуле } # Определения пула Scratch # Scratch зарезервировано для пула запасных том - при необходимости # система самостоятельно переводит том из него в требуемый пул Pool { Name = Scratch Pool Type = Backup } # # Ограниченная консоль, используемая в трей мониторе для получения # статуса директора DIR # Console { Name = thor.kmps.local-mon Password = "SECRET" CommandACL = status, .status } # Свои конфигурационные файлы #@/usr/local/etc/client_schedule.conf @/usr/local/etc/client_thor.conf @/usr/local/etc/client_srv1.conf @/usr/local/etc/client_srv2.conf
Что бы эффективно управлять системой резервного копирования, нужно как следует подумать и попрактиковаться, пока не придет понимание как эта система работает. В конфигурационном файле вы должны описать к примеру работу для одного клиента несколькими переменными такими как Job, Storage, Pool, Client, FileSet, Schedule. Каждой переменной присваивается понятное имя и далее в Job указываются необходимые имена переменных чтобы это было законченной задачей и могло работать согласно вашим указаниям. Рабочий клиент состоит из 6ти элементов:
Примечание: Все переменные вы можете использовать в различных комбинациях указав нужное имя в нужной работе к примеру Schedule с именем Weekly_1st можете использовать в разных работах которым необходимо одинаковое время и периодичность работ.
Создадим дополнительные конфигурационный файлы для трех серверов и включим их в bacula-dir.conf.
Клиент THOR
# cat client_thor.conf # Клиент Thor # Создаем задание thor_backup-job и указываем ресурсы. Job { Name = "thor_backup-job" # Имя задания Type = Backup # Тип (backup, restore и т.д.) Level = Full # Уровень бэкапа Client = thor-fd # Имя клиента FileSet = "thor-fileset" # Набора файлов для сохранения. Schedule = "Month-1hrs-sun" # Расписание Storage = backup-disk1 # Файловое хранилище Messages = Daemon # Поведение уведомлений Pool = thor-pool # Пул, куда будем писать бэкапы Priority = 10 # Приоритет. Давая заданиям приоритеты # от 1 до 10, можно регулировать # последовательность выполнения. Write Bootstrap = "/var/db/bacula/thor_backup-job.bsr" } # Определяем список резервируемых файлов FileSet { Name = "thor-fileset" # Имя списка Include { Options { signature = MD5 } File = /etc # Указываем каталоги, который будем бэкапить File = /home/Raven2000 } Exclude { # Исключим пару каталогов File = /home/Raven2000/www/tmp File = /home/Raven2000/www/log } } # Pool - описание набора устройств хранение # В каждый пул будет входить несколько томов. Регулировать, в какой конкретно # том бакула будет писать задание нельзя. Я хотел, чтобы каждое задание # у меня писалось в отдельный файл, поэтому на каждый backup job у меня # будет отдельный пул. Pool { Name = thor-pool # Имя пула Pool Type = Backup # Тип пула Recycle = yes # Автоматически менять тома. AutoPrune = yes # Автоматическое удаление из БД заданий с # истекшим сроком годности. Volume Retention = 365 days # Срок, по истечении которого тома будут # удаляться из пула. Maximum Volume Bytes = 50G # Ограничение размера тома Maximum Volumes = 100 # Ограничить количество томов в пуле Label Format = "thor-" # Шаблон для создания имени тома при # автоматическом создании метки тома # требует указания Label Media в # настройках сервера хранения. Recycle Oldest Volume = yes # Удаляем старые копии при нехватке места для новых } # Определения клиентов Client { Name = thor-fd # Имя клиента Address = thor.kmps.local # адрес FDPort = 9102 # Порт, на котором клиент нас ждет Catalog = "MyCatalog" # Каталог в MySQL Password = "SECRET" # Пароль к клиенту File Retention = 30 days # Период, на протяжении которого в каталоге # будет храниться инфа о файлах этого клиента Job Retention = 3 months # То же, только о заданиях этого клиента AutoPrune = yes # Удалять из каталога # данные о файлах и заданиях, срок хранения # которых истек. } # Определения файловых хранилищ. Storage { Name = backup-disk1 # Имя хранилища будет использоваться в # определениях job Address = thor.kmps.local # Адрес сервера хранения. Настоятельно не # рекомендуется использовать localhost SDPort = 9103 # Порт, где file storage нас ждет Password = "SECRET" # Пароль к нему Device = backup-disk1 # Устройство. Должно быть определено # в настройках секции Device сервера хранения Media Type = File # Файл, диск, лента и т.д. } # Планировщик Schedule { Name = "Month-1hrs-sun" Run = Full 1st sun at 1:00 Run = Differential 2nd-5th sun at 1:00 Run = Incremental mon-sat at 1:00 }
Клиент SRV1
# cat client_srv1.conf # Клиент SRV1 # Создаем задание srv1_backup-job и указываем ресурсы. Job { Name = "srv1_backup-job" Type = Backup Level = Full Client = srv1-fd FileSet = "srv1-fileset" Schedule = "Month-1hrs-sun-srv1" Storage = File-SRV1 Messages = Daemon Pool = srv1-pool Priority = 10 Write Bootstrap = "/var/db/bacula/srv1_backup-job.bsr" } FileSet { Name = "srv1-fileset" Enable VSS = YES # Использовать Volume Shadow Copy Service (VSS) для клиента Win32 # VSS позволяет Bacula копировать открытых файлы Include { Options { compression = GZIP # Сжатие производится на стороне клиента пофайлово в один поток signature = MD5 # Тип сигнатур MD5\SHA1 portable = no # переносимый формат сохраняет не все атрибуты NTFS noatime = yes # Позволяет читать файлы без изменения времён atime и ctime checkfilechanges = yes # Выдаётся предупреждение, если размер или время # модификации файла изменяется при резервном копировании Ignore Case = yes # Игнор-ть регистр букв при сопост-и шаблонов и рег-х выражений wildfile = "*.avi" # Шаблон wildfile = "*.wmv" # Шаблон wildfile = "*.mp3" # Шаблон wildfile = "pagefile.sys" # Шаблон wildfile = "hiberfil.sys" # Шаблон wilddir = "System Volume Information" # Шаблон wilddir = "TEMP" # Шаблон exclude = yes # Подошедшие под шаблоны файлы исключаются из списка } File = "D:/Shared_buch" # Что резервируем File = "E:/Backup/Windows" # Что резервируем } } Pool { Name = srv1-pool Pool Type = Backup Recycle = yes AutoPrune = yes Volume Retention = 365 days Maximum Volume Bytes = 50G Maximum Volumes = 100 Recycle Oldest Volume = yes # Удаляем старые копии при нехватке места для новых Label Format = "srv1-" # Шаблон для создания имени тома при # автоматическом создании метки тома # требует указания Label Media в # настройках сервера хранения. } Client { Name = srv1-fd Address = srv1.kmps.local FDPort = 9102 Catalog = MyCatalog Password = "QbTQzNv/823/spZGTu4buOxFuKT/tiBfg+ZlESr3R1lU" File Retention = 30 days Job Retention = 6 months AutoPrune = yes } Storage { Name = File-SRV1 Address = thor.kmps.local SDPort = 9103 Password = "SECRET" Device = FileStorage-srv1 Media Type = File } Schedule { Name = "Month-1hrs-sun-srv1" Run = Full 1st sun at 3:00 Run = Differential 2nd-5th sun at 3:00 Run = Incremental mon-sat at 3:00 }
Клиент SRV2
# cat client_srv2.conf # Клиент SRV2 # Создаем задание srv2_backup-job и указываем ресурсы. Job { Name = "srv2_backup-job" Type = Backup Level = Full Client = srv2-fd FileSet = "srv2-fileset" Schedule = "Month-1hrs-sun" Storage = backup-disk1 Messages = Daemon Pool = srv2-pool Priority = 10 Write Bootstrap = "/var/db/bacula/srv2_backup-job.bsr" } FileSet { Name = "srv2-fileset" Enable VSS = YES Include { Options { compression = GZIP signature = MD5 portable=no noatime = yes checkfilechanges = yes Ignore Case = yes wildfile = "*.avi" wildfile = "*.wmv" wildfile = "*.mp3" wildfile = "pagefile.sys" wildfile = "hiberfil.sys" wilddir = "System Volume Information" wilddir = "TEMP" exclude = yes } File = "D:/1SBase" File = "E:/Backup/Windows" } } Pool { Name = srv2-pool Pool Type = Backup Recycle = yes AutoPrune = yes Volume Retention = 365 days Maximum Volume Bytes = 50G Maximum Volumes = 100 Recycle Oldest Volume = yes # Удаляем старые копии при нехватке места для новых Label Format = "srv2-" # Шаблон для создания имени тома при # автоматическом создании метки тома # требует указания Label Media в # настройках сервера хранения. } Client { Name = srv2-fd Address = srv2.kmps.local FDPort = 9102 Catalog = MyCatalog Password = "MkfdcfGqds5qFoSL/W2uBG0DqIvY5bbVDWq/ZuHN39Ct" File Retention = 30 days Job Retention = 6 months AutoPrune = yes } Storage { Name = File-SRV2 Address = thor.kmps.local SDPort = 9103 Password = "SECRET" Device = FileStorage-srv2 Media Type = File } Schedule { Name = "Month-1hrs-sun-srv2" Run = Full 1st sun at 6:00 Run = Differential 2nd-5th sun at 6:00 Run = Incremental mon-sat at 6:00 }
Заметка: привыкайте делать включения в основной конфигурационный файл так будет аккуратней и проще в работе и эксплуатации.
Включим ваши конфиги в конец файла bacula-dir.conf
# cat bacula-dir.conf |grep client #@/usr/local/etc/client_schedule.conf @/usr/local/etc/client_thor.conf @/usr/local/etc/client_srv1.conf @/usr/local/etc/client_srv2.conf
Протестируем конфигурационный файл
# bacula-dir -t -d /usr/local/etc/bacula-dir.conf # bacula-dir -t -d /usr/local/etc/client_thor.conf # bacula-dir -t -d /usr/local/etc/client_srv1.conf # bacula-dir -t -d /usr/local/etc/client_srv2.conf
# vi bacula-sd.conf # # Дефолтный файл конфигурации Bacula Storage Daemon # # Для Bacula релиза 5.0.3 (04 августа 2010) — FreeBSD 8.2-RELEASE # # Может потребоваться изменить имя вашего накопителя в директиве # «Archive Device» в устройство ресурсов. Если изменить имя и/или # «Тип носителя» в ресурсе устройства, убедитесь, что bacula-dir.conf # имеет соответствующие изменения. # Storage { # Определим себя Name = thor.kmps.local-sd # Имя SDPort = 9103 # Порт, где ждать директора WorkingDirectory = "/var/db/bacula" Pid Directory = "/var/run" # Собственно PID Maximum Concurrent Jobs = 20 # Дополнительные ограничения } # # Список директоров, которым разрешается связаться с Демоном хранения (SD) # Director { Name = thor.kmps.local-dir # Имя директора Password = "SECRET" # Пароль } # # Ограниченный директор, используемые в трей мониторе # для получения статуса демона хранения # Director { Name = thor.kmps.local-mon # Имя директора Password = "SECRET" # Пароль Monitor = yes } # # Примечание, список дополнительных шаблонов устройств смотрите в # каталоге <bacula-source>/examples/devices # Или перейдите по следующей ссылке: # _http://bacula.svn.sourceforge.net/viewvc/bacula/trunk/bacula/examples/devices/ # # # Устройства записи, поддерживаемые данным Демоном хранения (SD) # это жесткий диск, ленточный накопитель, dvd. # Для подключения, устройства к директору в bacula-dir.conf # должны иметь то же Name и MediaType. # Device { Name = FileStorage # Имя Media Type = File # Укажем, что будем бекапить Archive Device = /tmp # Каталог для бекапов LabelMedia = yes; # разрешить Bacula размечать тома Random Access = Yes; AutomaticMount = yes; # когда устройство открыто, читать его RemovableMedia = no; AlwaysOpen = no; } # # Авточенджер с двумя дисками # #Autochanger { # Name = Autochanger # Device = Drive-1 # Device = Drive-2 # Changer Command = "/usr/local/share/bacula/mtx-changer %c %o %S %a %d" # Changer Device = /dev/sg0 #} #Device { # Name = Drive-1 # # Drive Index = 0 # Media Type = DLT-8000 # Archive Device = /dev/nst0 # AutomaticMount = yes; # когда устройство открыто, читать его # AlwaysOpen = yes; # RemovableMedia = yes; # RandomAccess = no; # AutoChanger = yes # # # # Включить команду Alert, только если у вас есть MTX пакет загрузки # # Обратите внимание, по-видимому, в некоторых системах, tapeinfo # # сбрасывает контроллер SCSI. Tаким образом если вы включаете это, # # убедитесь, что он не сбрасывает ваш контроллер SCSI. У меня # # никогда не было каких-либо проблем, и smartctl, по-видимому, # # не вызывают таких проблем. # # # Alert Command = "sh -c 'tapeinfo -f %c |grep TapeAlert|cat'" # Если у вас есть smartctl, то он имеет больше информации, чем tapeinfo # Alert Command = "sh -c 'smartctl -H -l error %c'" #} #Device { # Name = Drive-2 # # Drive Index = 1 # Media Type = DLT-8000 # Archive Device = /dev/nst1 # AutomaticMount = yes; # когда устройство открыто, читать его # AlwaysOpen = yes; # RemovableMedia = yes; # RandomAccess = no; # AutoChanger = yes # # Включить команду оповещения, только если у вас есть MTX пакет загрузки # Alert Command = "sh -c 'tapeinfo -f %c |grep TapeAlert|cat'" # Если у вас есть smartctl, то он имеет больше информации, чем tapeinfo # Alert Command = "sh -c 'smartctl -H -l error %c'" #} # # Linux или Solaris LTO-2 ленточный накопитель # #Device { # Name = LTO-2 # Media Type = LTO-2 # Archive Device = /dev/nrsa0 # AutomaticMount = yes; # когда устройство открыто, читать его # AlwaysOpen = yes; # RemovableMedia = yes; # RandomAccess = no; # Maximum File Size = 3GB ## Changer Command = "/usr/local/share/bacula/mtx-changer %c %o %S %a %d" ## Changer Device = /dev/sg0 ## AutoChanger = yes # # Включить команду оповещения, только если у вас есть MTX пакет загрузки ## Alert Command = "sh -c 'tapeinfo -f %c |grep TapeAlert|cat'" ## Если у вас есть smartctl, то он имеет больше информации, чем tapeinfo ## Alert Command = "sh -c 'smartctl -H -l error %c'" #} # # Linux или Solaris LTO-3 ленточный накопитель # #Device { # Name = LTO-3 # Media Type = LTO-3 # Archive Device = /dev/nrsa0 # AutomaticMount = yes; # когда устройство открыто, читать его # AlwaysOpen = yes; # RemovableMedia = yes; # RandomAccess = no; # Maximum File Size = 4GB ## Changer Command = "/usr/local/share/bacula/mtx-changer %c %o %S %a %d" ## Changer Device = /dev/sg0 ## AutoChanger = yes # # Включить команду оповещения, только если у вас есть MTX пакет загрузки ## Alert Command = "sh -c 'tapeinfo -f %c |grep TapeAlert|cat'" ## Если у вас есть smartctl, то он имеет больше информации, чем tapeinfo ## Alert Command = "sh -c 'smartctl -H -l error %c'" #} # # Linux или Solaris LTO-4 ленточный накопитель # #Device { # Name = LTO-4 # Media Type = LTO-4 # Archive Device = /dev/nrsa0 # AutomaticMount = yes; # когда устройство открыто, читать его # AlwaysOpen = yes; # RemovableMedia = yes; # RandomAccess = no; # Maximum File Size = 5GB ## Changer Command = "/usr/local/share/bacula/mtx-changer %c %o %S %a %d" ## Changer Device = /dev/sg0 ## AutoChanger = yes # # Включить команду оповещения, только если у вас есть MTX пакет загрузки ## Alert Command = "sh -c 'tapeinfo -f %c |grep TapeAlert|cat'" ## Если у вас есть smartctl, то он имеет больше информации, чем tapeinfo ## Alert Command = "sh -c 'smartctl -H -l error %c'" #} # # FreeBSD ленточный накопитель # #Device { # Name = DDS-4 # Description = "DDS-4 for FreeBSD" # Media Type = DDS-4 # Archive Device = /dev/nsa1 # AutomaticMount = yes; # когда устройство открыто, читать его # AlwaysOpen = yes # Offline On Unmount = no # Hardware End of Medium = no # BSF at EOM = yes # Backward Space Record = no # Fast Forward Space File = no # TWO EOF = yes # IIf you have smartctl, enable this, it has more info than tapeinfo # Alert Command = "sh -c 'smartctl -H -l error %c'" #} # # Передать все сообщения директора, mount сообщения # также отправляются на адрес электронной почты # Messages { # Будем отправлять все сообщения DIR Name = Standard director = thor.kmps.local-dir = all }
Теперь соберем свой конфигурационный файл:
# cat bacula-sd.conf | grep -v ^# Storage { Name = thor.kmps.local-sd SDPort = 9103 WorkingDirectory = "/var/db/bacula" Pid Directory = "/var/run" Maximum Concurrent Jobs = 20 } Director { Name = thor.kmps.local-dir Password = "SECRET" } Director { Name = thor.kmps.local-mon Password = "SECRET" Monitor = yes } Device { Name = FileStorage Media Type = File Archive Device = /home/bacula/backup #Archive Device = /tmp LabelMedia = yes; Random Access = Yes; AutomaticMount = yes; RemovableMedia = no; AlwaysOpen = no; } Device { Name = backup-disk1 Media Type = File Archive Device = /home/bacula/backup LabelMedia = yes; Random Access = Yes; AutomaticMount = yes; RemovableMedia = no; AlwaysOpen = no; } Device { Name = FileStorage-srv1 Media Type = File Archive Device = /home/bacula/SRV1 LabelMedia = yes; Random Access = Yes; AutomaticMount = yes; RemovableMedia = no; AlwaysOpen = no; } Device { Name = FileStorage-srv2 Media Type = File Archive Device = /home/bacula/SRV2 LabelMedia = yes; Random Access = Yes; AutomaticMount = yes; RemovableMedia = no; AlwaysOpen = no; } Messages { Name = Standard director = thor.kmps.local-dir = all }
Протестируем
# bacula-sd -t /usr/local/etc/bacula-sd.conf
Настроим консоль
# cd /usr/local/etc # cp bconsole.conf.sample bconsole.conf # cat bconsole.conf # # Bacula User Agent (or Console) Configuration File # Director { Name = thor.kmps.local-dir DIRport = 9101 address = localhost Password = "SECRET" }
Посмотрим, что она может и отработаем несколько операций:
# /usr/local/sbin/bconsole Connecting to Director localhost:9101 1000 OK: thor.kmps.local-dir Version: 5.0.3 (04 August 2010) Enter a period to cancel a command. *help Command Description ======= =========== add Добавить новый том к пулу в каталоге; для форматирования тома используйте команду label autodisplay Выдаётся извещение о наличии новых сообщений от директора automount Лента монтируется автоматически после форматирования командой label cancel Отменить задание create Создать запись Пула в БД из описания ресурса в файле delete Удалить из каталога информацию о задании, томе или пуле вместе со всеми зависимостями disable Запретить автоматическое планирование работы задания enable Разрешить автоматическое планирование работы задания estimate Считает приблизительный объём сохраняемых данных до сжатия, листинг дает полный список exit Прекращение сессии Bconsole gui Не интерактивный режим gui help Печать справки по определенной команде label Добавить новый том к пулу в БД и форматировать том; предварительно может потребоваться размонтировать ленту; если лента уже отформатирована, то требуется выполнить команды purge и relabel list Список объектов из каталога БД llist Полный или длинный список, как список команд messages вывести накопившиеся сообщения от директора memory Вывести текущее использование памяти DIR mount Монтировать хранилище prune Удалить из БД информацию о файлах, заданиях или томах с истёкшим сроком хранения и всё с нею связанное purge Очистка записей из каталога о файлах, заданиях или томах с истёкшим сроком хранения и всё с нею связанное python Команда управления Python quit Прекращение сессии Bconsole query Запрос каталога restore Восстановить файлы relabel Заново отформатировать старый том (должен быть в состоянии Purged или Recycle) release перемотать ленту (перед следующим использованием заново прочесть метку) reload Перечитать заново конфигурационный файл bacula-dir.conf run Запустить задание\работу status Отчет о состоянии setdebug Устанавить уровень отладки setip Установить новый адрес клиента - если рзрешено show Показать текущее значение ресурсов файла настройки sqlquery Использование SQL для запроса каталога time Показать текущее временя trace Включение / выключение трассировки в файл unmount Размонтирование хранилища umount Размонтировать - для старых Unix парней, см. unmount =) update Обновить информацию томов, пула или статистики use Использовать каталог xxx var Подстановка переменных version Показать версию DIR wait Ждать завершения задания В режиме ввода команд, введите точку что бы отменить командный режим Вам сообщение.
Добавим новый том и отформатируем его (это при условии что вы не выставили в Pool, Label Format = "ИМЯ_ТОМА" при этом том автоматически форматируется и добавляется). Для этого выберем нужный SD (backup-disk1) укажем название Тома (как он будет сохраняться на HDD) и выберем нужный Пул.
# bconsole Connecting to Director localhost:9101 1000 OK: thor.kmps.local-dir Version: 5.0.3 (04 August 2010) Enter a period to cancel a command. *label Automatically selected Catalog: MyCatalog Using Catalog "MyCatalog" The defined Storage resources are: 1: File 2: backup-disk1 3: File-SRV1 4: File-SRV2 Select Storage resource (1-4): 3 Enter new Volume name: srv1_volume Defined Pools: 1: Default 2: Scratch 3: thor-pool 4: File 5: srv2-pool 6: srv1-pool Select the Pool (1-6): 6 Connecting to Storage daemon File-SRV1 at thor.kmps.local:9103 ... Sending label command for Volume "srv1_volume" Slot 0 ... 3000 OK label. VolBytes=213 DVD=0 Volume="srv1_volume" Device="FileStorage-srv1" (/home/bacula/SRV1) Catalog record for Volume "srv1_volume", Slot 0 successfully created. Requesting to mount FileStorage-srv1 ... 3906 File device "FileStorage-srv1" (/home/bacula/SRV1) is always mounted. You have messages. *label The defined Storage resources are: 1: File 2: backup-disk1 3: File-SRV1 4: File-SRV2 Select Storage resource (1-4): 4 Enter new Volume name: srv2_volume Defined Pools: 1: Default 2: Scratch 3: thor-pool 4: File 5: srv2-pool 6: srv1-pool Select the Pool (1-6): 5 Connecting to Storage daemon File-SRV2 at thor.kmps.local:9103 ... Sending label command for Volume "srv2_volume" Slot 0 ... 3000 OK label. VolBytes=213 DVD=0 Volume="srv2_volume" Device="FileStorage-srv2" (/home/bacula/SRV2) Catalog record for Volume "srv2_volume", Slot 0 successfully created. Requesting to mount FileStorage-srv2 ... 3906 File device "FileStorage-srv2" (/home/bacula/SRV2) is always mounted. *label The defined Storage resources are: 1: File 2: backup-disk1 Select Storage resource (1-2): 2 Enter new Volume name: thor_volume Defined Pools: 1: Default 2: File 3: Scratch 4: thor-pool Select the Pool (1-4): 4 Connecting to Storage daemon backup-disk1 at thor.kmps.local:9103 ... Sending label command for Volume "thor_volume" Slot 0 ... 3000 OK label. VolBytes=213 DVD=0 Volume="thor_volume" Device="backup-disk1" (/home/bacula/backup) Catalog record for Volume "thor_vol", Slot 0 successfully created. Requesting to mount backup-disk1 ... 3906 File device "backup-disk1" (/home/bacula/backup) is always mounted.
Как видим создался Том thor_volume
# ll /home/bacula/backup/ total 8450 -rw-r----- 1 bacula bacula 8,2M 17 май 23:50 FileDefault -rw-r----- 1 bacula bacula 213B 18 май 14:59 thor_volume
Установим клиента на UNIX машине:
# cd /usr/ports/sysutils/bacula-client # make config Options for bacula-client 5.0.3 [ ] WXCONSOLE Build with wxGTK based GUI console: deprecated [ ] SFDAEMON Build with staticly compiled file daemon [X] NLS Native Language Support via gettext utilities [X] OPENSSL Enable OpenSSL for encrypted communication # make install clean ~~ ################################################################################ NOTE: Sample files are installed in /usr/local/etc: bconsole.conf.sample, bacula-barcodes.sample, bacula-fd.conf.sample Please read this file: /usr/local/share/doc/bacula/ReleaseNotes as installed by docs port for the upgrade procedure. Read the ReleaseNotes for further information. ################################################################################ ===> Running ldconfig /sbin/ldconfig -m /usr/local/lib ===> Registering installation for bacula-client-5.0.3 ===> SECURITY REPORT: This port has installed the following files which may act as network servers and may therefore pose a remote security risk to the system. /usr/local/lib/libbac.so.5 This port has installed the following startup scripts which may cause these network services to be started at boot time. /usr/local/etc/rc.d/bacula-fd If there are vulnerabilities in these programs there may be a security risk to the system. FreeBSD makes no guarantee about the security of ports included in the Ports Collection. Please type 'make deinstall' to deinstall the port if this is a concern. For more information, and contact details about the security status of this software, see the following webpage: http://www.bacula.org/ ===> Cleaning for bacula-client-5.0.3
# cp /usr/local/etc/bacula-fd.conf.sample /usr/local/etc/bacula-fd.conf
Разберемся что внутри:
#cat/usr/local/etc/bacula-fd.conf # # Дефолтный файл конфигурации Bacula File Daemon # # Для Bacula релиза 5.0.3 (04 августа 2010) — FreeBSD 8.2-RELEASE # # Тут не так много, чтобы менять здесь, за исключением, возможно, # Имени File Daemon # # #Список директоров, которым разрешено связаться с этим File Daemon # Director { Name = thor.kmps.local-dir Password = "sIad48UBgVYD2gNAh6mRWKahMFtzjwRWNjtL8p28ma3Z" } # # Ограничение директора, используемого в tray-monitor, # для получения статуса File Daemon # Director { Name = thor.kmps.local-mon Password = "GkSSv/HoUCX7Y7Pi5m62xRD0cnykZnzaYTinCqdhM8t3" Monitor = yes } # # "Глобальные" спецификации конфигурации File daemon # FileDaemon { # Определим FD Name = thor.kmps.local-fd # Имя FD FDport = 9102 # Где слушать директора WorkingDirectory = /var/db/bacula Pid Directory = /var/run Maximum Concurrent Jobs = 20 # Максимальное кол-во заданий } # Отправить все сообщения, за исключением пропущенных файлов # обратно Директору Messages { Name = Standard director = thor.kmps.local-dir = all, !skipped, !restored
Теперь соберем свой конфигурационный файл:
# cat bacula-fd.conf | grep -v ^# Director { Name = thor.kmps.local-dir Password = "SECRET" } Director { Name = thor.kmps.local-mon Password = "SECRET" Monitor = yes } FileDaemon { Name = thor.kmps.local-fd FDport = 9102 WorkingDirectory = /var/db/bacula Pid Directory = /var/run Maximum Concurrent Jobs = 20 } Messages { Name = Standard director = thor.kmps.local-dir = all, !skipped, !restored }
Проверим на наличие ошибок и добавим в rc.conf для запуска при старте ОС.
# bacula-fd -t -d /usr/local/etc/bacula-fd.conf # echo 'bacula_fd_enable="YES"' >> /etc/rc.conf # /usr/local/etc/rc.d/bacula-fd start Starting bacula_fd. # sockstat | grep bacula root bacula-fd 9295 3 tcp4 *:9102 *:* bacula bacula-sd 97221 3 tcp4 *:9103 *:* bacula bacula-dir 97212 4 tcp4 *:9101 *:*
Загружаем программу клиент Win32_64 и запускаем установку программы там указываем следующее.
Тип установки:
Instalation Type: Automatic (так же вы можете поставить только fd без консоли и доков.)
Указываем характеристики DIR:
DIR name: thor.kmps.local-dir
DIR Password: SECRET
DIR Adress: thor.kmps.local
В конце установки предложили сохранить файл C:\srv2-fd.conf такого содержания:
# Client (File Services) to backup Client { Name = srv2-fd Address = srv2.kmps.local FDPort = 9102 Catalog = MyCatalog Password = "MkfdcfGqds5qFoSL/W2uBG0DqIvY5bbVDWq/ZuHN39Ct" # password for FileDaemon File Retention = 30 days # 30 days Job Retention = 6 months # six months AutoPrune = yes # Prune expired Jobs/Files }
Для автоматического запуска DIR, SD и FD сервисов при запуске сервера необходимо добавить строчки в /etc/rc.conf:
# echo 'bacula_dir_enable="YES"' >> /etc/rc.conf # echo 'bacula_sd_enable="YES"' >> /etc/rc.conf # echo 'bacula_fd_enable="YES"' >> /etc/rc.conf
Запуск сервисов:
# /usr/local/etc/rc.d/bacula-dir.sh start # /usr/local/etc/rc.d/bacula-sd.sh start # /usr/local/etc/rc.d/bacula-fd start # ps -ax | grep bacula 2060 ?? Is 0:00,19 /usr/local/sbin/bacula-fd -u root -g wheel -v -c /usr/local/etc/bacula-fd.conf 56766 ?? Is 0:19,37 /usr/local/sbin/bacula-sd -u bacula -g bacula -v -c /usr/local/etc/bacula-sd.conf 61339 ?? Ss 0:00,14 /usr/local/sbin/bacula-dir -u bacula -g bacula -v -c /usr/local/etc/bacula-dir.conf 64965 0 S+ 0:00,00 grep bacula # sockstat | grep bacula bacula bacula-dir 61339 5 tcp4 *:9101 *:* bacula bacula-dir 61339 6 dgram -> /var/run/log bacula bacula-sd 56766 4 tcp4 *:9103 *:* root bacula-fd 2060 3 tcp4 *:9102 *:*
Автоматическое сохранение данных уже настроено и поэтому вы должны следить чтобы все работы шли без ошибок, проверять оставшееся место на HDD. Если вы выполните команду run без параметров она вам выдаст все созданные задачи и вы можете выбрать и запустить нужную. Вы можете сразу запустить нужную задачу с указанным именем задачи *run job=имя-задания.
*run A job name must be specified. The defined Job resources are: 1: BackupClient1 2: BackupCatalog 3: RestoreFiles 4: thor_backup-job 5: srv1_backup-job 6: srv2_backup-job Select Job resource (1-6): 6 Run Backup job JobName: srv2_backup-job Level: Full Client: srv2-fd FileSet: srv2-fileset Pool: srv2-pool (From Job resource) Storage: File-SRV2 (From Job resource) When: 2011-05-20 23:56:51 Priority: 10 OK to run? (yes/mod/no): yes Job queued. JobId=79
*status dir thor.kmps.local-dir Version: 5.0.3 (04 August 2010) amd64-portbld-freebsd8.2 freebsd 8.2- Daemon started 20-май-11 23:32, 5 Jobs run since started. Heap: heap=0 smbytes=102,439 max_bytes=237,812 bufs=365 max_bufs=395 ~~~~~~~~ Terminated Jobs: JobId Level Files Bytes Status Finished Name ==================================================================== 75 Full 831 717.5 M OK 20-май-11 23:34 srv1_backup-job 76 831 800.9 M OK 20-май-11 23:39 RestoreFiles 77 1 6.825 K OK 20-май-11 23:44 RestoreFiles 78 1 6.825 K OK 20-май-11 23:48 RestoreFiles 79 Full 109 29.67 M OK 20-май-11 23:57 srv2_backup-job ====
И так с имитируем следующую ситуацию потеря\удаления файла\директории. Восстановим из архива данный файл с помощью bconsole. Директория E:/SIT_v1.1 утеряна вся.
Управление при перемещении и маркировки файлов в этом режиме довольно необычны так, что привыкайте.
*restore Automatically selected Catalog: MyCatalog Using Catalog "MyCatalog" Сначала выберите один или несколько JobIds, которые содержат файлы которые должны быть восстановлены. Вам будет предложен ряд методов указания JobIds. Тогда вам будет разрешено выбрать, какие файлы из этих JobIds должны быть восстановлены. To select the JobIds, you have the following choices: 1: List last 20 Jobs run 2: List Jobs where a given File is saved 3: Enter list of comma separated JobIds to select 4: Enter SQL list command 5: Select the most recent backup for a client 6: Select backup for a client before a specified time 7: Enter a list of files to restore 8: Enter a list of files to restore before a specified time 9: Find the JobIds of the most recent backup for a client 10: Find the JobIds for a backup for a client before a specified time 11: Enter a list of directories to restore for found JobIds 12: Select full restore to a specified Job date 13: Cancel Select item: (1-13): 1 +-------+--------------------+---------------------+----------+----------+-------------+ | JobId | Client | StartTime | JobLevel | JobFiles | JobBytes | +-------+--------------------+---------------------+----------+----------+-------------+ | 79 | srv2-fd | 2011-05-20 23:56:55 | F | 109 | 29670528 | | 75 | srv1-fd | 2011-05-20 23:32:37 | F | 831 | 717551775 | | 74 | srv1-fd | 2011-05-20 23:30:46 | F | 0 | 0 | | 73 | srv2-fd | 2011-05-20 23:29:24 | F | 109 | 29670528 | | 72 | srv2-fd | 2011-05-20 23:26:51 | F | 109 | 29670528 | +-------+--------------------+---------------------+----------+----------+-------------+ Для выбора JobIds, у вас есть следующие варианты [дальше лучше без перевода]: 1: List last 20 Jobs run 2: List Jobs where a given File is saved 3: Enter list of comma separated JobIds to select 4: Enter SQL list command 5: Select the most recent backup for a client 6: Select backup for a client before a specified time 7: Enter a list of files to restore 8: Enter a list of files to restore before a specified time 9: Find the JobIds of the most recent backup for a client 10: Find the JobIds for a backup for a client before a specified time 11: Enter a list of directories to restore for found JobIds 12: Select full restore to a specified Job date 13: Cancel Select item: (1-13): 3 Enter JobId(s), comma separated, to restore: 79 You have selected the following JobId: 79 Building directory tree for JobId(s) 79 ... ++++++++++++++++++++++++++++++++ 97 files inserted into the tree. Сейчас вы работаете в режиме выбора файла, где вы добавляете (mark) и удалять (unmark) файлы, котоfрые будут восстановлены. Нет изначально добавленных файлов, вы можете использовать ключевое слов "all" в командной строке чтобы отметить всё. Введите "done ", чтобы завершить этот режим. cwd is: / $ ls E:/ $ cd E:/ cwd is: E:/ $ ls SIT_v1.1/ $ mark SIT_v1.1 109 files marked. $ done Bootstrap records written to /var/db/bacula/thor.kmps.local-dir.restore.4.bsr The job will require the following Volume(s) Storage(s) SD Device(s) =========================================================================== srv2_volume File-SRV2 FileStorage-srv2 Volumes marked with "*" are online. 109 files selected to be restored. Defined Clients: 1: srv1-fd 2: srv2-fd 3: thor-fd 4: thor.kmps.local-fd Select the Client (1-4): 2 Run Restore job JobName: RestoreFiles Bootstrap: /var/db/bacula/thor.kmps.local-dir.restore.4.bsr Where: /home/bacula/bacula-restores Replace: always FileSet: Full Set Backup Client: srv2-fd Restore Client: srv2-fd Storage: File-SRV2 When: 2011-05-21 00:01:10 Catalog: MyCatalog Priority: 10 Plugin Options: *None* OK to run? (yes/mod/no): yes Job queued. JobId=80
Посмотрим статус директора и что он сказал на эту работу:
*status dir thor.kmps.local-dir Version: 5.0.3 (04 August 2010) amd64-portbld-freebsd8.2 freebsd 8.2- Daemon started 20-май-11 23:32, 6 Jobs run since started. Heap: heap=0 smbytes=103,909 max_bytes=240,228 bufs=366 max_bufs=395 ~~~ Terminated Jobs: JobId Level Files Bytes Status Finished Name ==================================================================== ~~~ 78 1 6.825 K OK 20-май-11 23:48 RestoreFiles 79 Full 109 29.67 M OK 20-май-11 23:57 srv2_backup-job 80 109 29.67 M OK 21-май-11 00:01 RestoreFiles ====
Заходим на srv2.kmps.local и на диске C:\ появляется с восставленная директория.
C:\home\bacula\bacula-restores\E\SIT_v1.1
Восстановление файлов на Unix клиентах рассматривать не буду в виду аналогичной работы.
Я сторонник простых и надежных решений, а так же дублирующих систем. К примеру у меня как и у всех стоит RAID-1 на всех серверах и это хорошо. Идем дальше у меня до бакулы на серверах был отдельный раздел\слайс\жеский диск созданный специально для бекапов и туда резервные копии складывает утилита или скрипт. К примеру:
Бакула дополнила существующую схема:
Пул это описание для набора томов. Тома это файлы, ленты и DVD. Он используется при описании задания для указания нужного тома.
Аутентификация и авторизация доступа к директору может быть 3 типов:
Права доступа для именованной консоли по умолчанию - права отсутствуют, восстанавливать можно только в место по умолчанию.
Описание расписания запуска заданий и переопределения ресурсов Level, Pool, Storage, Messages для задания. Используется в описании задания для указания времени автоматического запуска.
Остальные переменные буду добавлять по надобности.
Воспользуемся Webacula это PHP (Zend Framework) веб-интерфейс для мониторинга и восстановление файлов.
Основные особенности программы:
Для начала скачаем Webacula и ZendFramework к ней. (следите за новыми версиями и сами корректируйте линки для fetch). Установим последнюю версию, распакуем и дадим нужные права.
# cd /usr/local/www/ # fetch _http://sourceforge.net/projects/webacula/files/webacula/5.5.0/webacula-5.5.tar.gz # fetch _http://framework.zend.com/releases/ZendFramework-1.11.6/ZendFramework-1.11.6-minimal.tar.gz # tar zxvf webacula-5.5.tar.gz # mv webacula-5.5 webacula # tar zxvf ZendFramework-1.11.6-minimal.tar.gz # cd ZendFramework-1.11.6-minimal/library/ # ls Zend # cp -R Zend/ /usr/local/www/webacula/library/Zend/ # cd /usr/local/www/ # chown -R www:www webacula/ # rm webacula-5.5.tar.gz ZendFramework-1.11.6-minimal.tar.gz
Проверим необходимые модули
# cd /usr/local/www/webacula/install/ # php-cgi check_system_requirements.php sqlite3: not found X-Powered-By: PHP/5.3.6 Content-type: text/html Webacula check System Requirements... Current MySQL version = 5.0.92 OK Current PostgreSQL version = 8.4.7 OK Current PHP version = 5.3.6 OK php pdo installed. OK php gd installed. OK php xml installed. OK php dom installed. OK php pdo_mysql installed. OK Warning. PHP extension pdo_pgsql not installed. Warning. PHP extension pdo_sqlite not installed. php-dom, php-xml installed. OK
Отредактируем конфигурационный файл webacula:
# cat /usr/local/www/webacula/application/config.ini [general] db.adapter = PDO_MYSQL db.config.host = localhost db.config.username = BACULA_USER db.config.password = BACULA_USER_PASS db.config.dbname = BACULA_DB def.timezone = "Europe/Moscow" locale = "ru" bacula.sudo = "/usr/local/bin/sudo" bacula.bconsole = "/usr/local/sbin/bconsole" bacula.bconsolecmd = "-n -c /usr/local/etc/bconsole.conf" [timeline] fontsize = 10 [webacula] email.to_admin = root@localhost email.from = webacula@localhost [feed] feed_title = "My Bacula backup server #1" feed_desc = "Description feed here" [layout] path = "default"
Отредактируем конфигурационный файл DB:
# vi /usr/local/www/webacula/install/db.conf db_name="BACULA_DB" db_user="BACULA_USER" db_pwd="BACULA_USER_PASS" # Веб аккаунт 'root', а пароль к нему укажите ниже # webacula_root_pwd="WEB_WEBACULA_PASSWORD"
В новой версии Webacula 5.5 таблицы Bacula и Webacula совмещены те располагаются в одной БД.
Теперь нам необходимо добавить нужные таблицы и заполнить ACL:
# cd /usr/local/www/webacula/install/MySql/ # sh ./10_make_tables.sh Creation of webacula MySQL tables succeeded. # sh ./20_acl_make_tables.sh Creation of Webacula ACLs MySQL tables succeeded.
Добавим права на запуск /usr/sbin/bconsole от имени www.
# visudo WWW_USER ALL=NOPASSWD: /usr/local/sbin/bconsole
Я слинковал публичный html в нужную мне директорию своего веб сервера:
# cd /home/serv/www/data/ # ll lrwxr-xr-x 1 root serv 20B 5 авг 2010 glpi -> /usr/local/www/glpi/ lrwxr-xr-x 1 root serv 26B 5 авг 2010 phpMyAdmin -> /usr/local/www/phpMyAdmin/ -rw-r--r-- 1 serv serv 21B 5 авг 2010 phpinfo.php lrwxr-xr-x 1 root serv 27B 5 авг 2010 phpldapadmin -> /usr/local/www/phpldapadmin lrwxr-xr-x 1 root serv 20B 17 авг 2010 sarg -> /usr/local/www/sarg/ drwxr-xr-x 3 serv serv 512B 12 авг 2010 sqstat lrwxr-xr-x 1 root serv 29B 27 май 09:17 webacula -> /usr/local/www/webacula/html/
Отредактировал .htaccess
# vi /usr/local/www/webacula/html/.htaccess SetEnv APPLICATION_ENV development SetEnv APPLICATION_ENV production #php_flag magic_quotes_gpc off #php_flag register_globals off RewriteEngine On # edit RewriteBase if necessary RewriteBase /webacula RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^.*$ - [NC,L] RewriteRule ^.*$ index.php [NC,L]
Запускаем:
http://webserver.local/webacula
Для мониторинга и удобной работы с бакулой есть несколько утилит доступных в Unix системах:
BAT (Bacula Admin Tool) - графический интерфейс к бакуле скриншоты
Port: bacula-bat-5.0.3 Path: /usr/ports/sysutils/bacula-bat Info: The network backup solution (GUI) Maint: dan@langille.org B-deps: expat-2.0.1_1 fixesproto-4.1.2 fontconfig-2.8.0,1 freetype2-2.4.4... R-deps: expat-2.0.1_1 fixesproto-4.1.2 fontconfig-2.8.0,1 freetype2-2.4.4... WWW: _http://www.bacula.org/
tray-monitor - это Bacula KDE/GNOME tray monitor applet. Она вам показывает статус работы сервера.
Заметка: в опциях bacula-client еще есть WXCONSOLE Build with wxGTK based GUI console: deprecated.
Web интерфейсы - их достаточное количество и на любой вкус список.
В) У меня не работают встроенные задания (к примеру BackupCatalog)
О) Проверьте разрешение на чтение пользователем bacula.
# ll bacula-dir.conf -rw-r----- 1 root bacula 9,4K 26 май 16:12 bacula-dir.conf # ll bacula-sd.conf -rw-r----- 1 root bacula 6,7K 24 май 14:05 bacula-sd.conf # ll bconsole.conf -rw-r----- 1 root bacula 279B 17 май 11:52 bconsole.conf
В) В самом начале статье было упоминание о утилите ntbackup где, для чего вы ее применяете.
О) До бакулы я сохранял образ системы с помощью этой утилиты с периодичностью раз в месяц и мне не хотелось ломать установленный порядок. Так же я настроил теневое копирование с переодичностью 1 раз в 4 часа для БД и расшаренных директорий и пользователи могут откатывать нужные файлы на нужную дату и время.
В) Что делать если сервер Windows\Unix сломался и не загружаться, но есть резервные копии диска C:\ (файл ntbackup) и\или дампы ФС.
О) Попробуем описать ход работы:
а1) Запускаете Recovery Console (Консоль Восстановления) с диска ОС в нем восстанавливаете загрузочные файлы и при удачном раскладе загружаетесь. Далее вытаскиваете из архива бакулы файл ntbackup для этого клиента и заливаете на него. Далее через “Мастер восстановления” утилиты ntbackup все разворачиваете обратно.
а2) Бывает что вариант а1 не работает никак не удается загрузить систему. Есть вариант с ASR, но требуется создание аварийной дискеты в ntbackup для этой машины. Восстановите файл ntbackup на любую машину с последующим копированием этого файла на сдохший сервер (возьмите любую LiveCD сбору WinPE\Linux) и далее запускаете CD c ОС выбирается восстановление ASR вставляете дискету и выполняете работу.
а3) Disast Recove Using Bacula (bacula rescue disk)
б1) Для Unix пытайтесь загрузиться или воспользуйтесь Unix LiveCD и подмонтируйте фс с последующим разворотом архивов\файлов в нужные слайсы.
Theme by Danetsoft and Danang Probo Sayekti inspired by Maksimer
Весьма подробно, спасибо!
Весьма подробно, спасибо!
особенно понравилась схема
особенно понравилась схема для типичных российских предприятий =)
За статью спасибо!
За статью спасибо!
Почитал с удовольствием...
...а осадочек остался.
Много слышал хорошего про бакулу. Да вот после твоей статьи стало ясно, и тут недоделанность (или доделанность за отдельные деньги?)
Если есть вэб морда для восстановления файлов, то почему нет вэбморды для настройки самого сервера и создания задач для бэкапа? Зачем делать инструментарий на половину? чтото лепим через вэбморду, а чтото - по класике, ручками в туевой куче конфигов.
У меня вопрос, есть нормальный инструментарий олл-инклюзив для баккулы? или это мои мечты ?
В webmin -е есть возможность
В webmin -е есть возможность создавать задания, добавлять клиентов, пулы и др.
RE:Почитал с удовольствием...
Вкратце все должно идти через консоль и конфиги, а веб морда так чисто для информации, запуска готовых задач, и восстановления. Чтобы все в одном через веб то на ум приходит только Zmanda платная вещь на основе Amanda так что с бакулой пролетаем. У бакулы к сожалению нет других инструментов ну можно еще BAT глянуть и всё.
Если хочешь разобраться... Так иди и разбирайся!
[ igNix.ru | Технология жизни - технологии будущего ] [ Forum.igNix.ru ]
Zmanda
Я бы поостерегся использовать продукт с таким названием, и вам не советую.
А никакой половинчатости в веб-морде bacula нет - потому что настраивается он только через конфиги, веб-морда - для мониторинга.
аманда - бакула
Я пользуюсь амандой на паре серверов, но читал статью, и подумал - нада посмотреть воочию на бакулу.
Спасибо автору!
пробовал текстовый пароль,
пробовал текстовый пароль, правда ставил на все секции один и тот же, не помогло.
RE:пробовал текстовый пароль,
Сделайте пасс 123 и попробуйте во всех секциях и в FD|SD|DIR|CONSOLE и все должно заработать, а если нет то значит ошибка в конфигах. Вы тестировали конфиг? И просьба если не получиться то в ветки форума выложите свои конфиги.
Если хочешь разобраться... Так иди и разбирайся!
[ igNix.ru | Технология жизни - технологии будущего ] [ Forum.igNix.ru ]
Для Webacula еще лучше
Для Webacula еще лучше прописать
тогда из Webacula можно будет просматривать консольные сообщения
Доброго дня! Я только
Доброго дня!
Я только установил Bacula, поэтому вопрос возможно глупый :) ногами не бейте :)
Итак, хочу сделать рез копирование, настроил Bacula согласно статьи, после запуска Job из консоли мне приходит письмо:
26-Aug 15:40 FreeBSD_IB.local-dir JobId 13: Start Backup JobId 13, Job=test_backup_job.2011-08-26_15.40.32_05
26-Aug 15:40 FreeBSD_IB.local-dir JobId 13: Using Device "File-test"
26-Aug 15:40 test-fd JobId 13: Error: /home/kern/bacula/k/bacula/src/lib/bsock.c:207
gethostbyname() for host "FreeBSD_IB.local" failed: ERR=Valid name, no data
record of resquested type.
26-Aug 15:40 test-fd JobId 13: Fatal error: Failed to connect to Storage daemon:
FreeBSD_IB.local:9103
26-Aug 15:40 FreeBSD_IB.local-dir JobId 13: Fatal error: Bad response to Storage command: wanted
2000 OK storage
, got 2902 Bad storage
Вот, команда Status клиента видит, директора тоже, а вот Storage пишет:
Device FileStorage (/usr/home/bacula/backup)is not open
Device File-test (/usr/home/bacula/backup)is not open
Куда рыть?)
RE:Доброго дня! Я только
Пожалуйста отпишитесь по своему вопросу на форуме в теме этой статьи.
Если хочешь разобраться... Так иди и разбирайся!
[ igNix.ru | Технология жизни - технологии будущего ] [ Forum.igNix.ru ]
Проблема с WEBACULA
Настроил Bacula работает нормально, но не получается Webacula завести, почему то все время выкидывает на страницу авторизации, как с этим бороться? спасибо
RE:Проблема с WEBACULA
>вопрос в форум >+лог апача
Если хочешь разобраться... Так иди и разбирайся!
[ igNix.ru | Технология жизни - технологии будущего ] [ Forum.igNix.ru ]
про инкрементальные бэкапы
Наладил работу бакулы, два пула - дисковый и ленточный, из дискового в ленточный задания копируются.
Выполняю только инкрементальные бэкапы.
Но вот беда, при наличии full в ленточном пуле и его отсутствии в дисковом не происходит создание нового full в дисковом, в случае, если у меня вариант выполнения бэкапа - инкрементальный, т.к. full существует.
Как бы так сделать, чтобы преобразование инкрементального в full происходило с проверкой только в указанном пуле?
Не совпадение параметров.
В клиенте SRV2 в секции "Job" не совпадает название параметра "Storage" с именем секции "Storage".
Компьютеризация всего мира!
У вас не совпадают имена
У вас не совпадают имена клиентов в конфиге bacula-fd.conf и в client_thor.conf.
Добрый вечер! Прочитал Вашу
Добрый вечер!
Прочитал Вашу статью, натсроил Бакулу, букапы настроил. Решил настроить Webacula.
Но столкнулся с проблемой: после выполнения всех Ваших рекомендаций, при входе на страничку вот такое сообщение.
Warning: include_once(Zend/Auth.php) [function.include-once]: failed to open stream: No such file or directory in /usr/local/www/webacula/library/Zend/Loader.php on line 146
Warning: include_once() [function.include]: Failed opening 'Zend/Auth.php' for inclusion (include_path='.:/usr/local/www/webacula/html/index.php/../library:../application/models/:../application/forms/:.:/usr/local/share/pear') in /usr/local/www/webacula/library/Zend/Loader.php on line 146
Fatal error: Uncaught exception 'Zend_Exception' with message 'File "Zend/Auth.php" does not exist or class "Zend_Auth" was not found in the file' in /usr/local/www/webacula/library/Zend/Loader.php:99 Stack trace: #0 /usr/local/www/webacula/html/index.php(45): Zend_Loader::loadClass('Zend_Auth') #1 {main} thrown in /usr/local/www/webacula/library/Zend/Loader.php on line 99
Лоооги
Всем добрый день , ооочень нужна помощь))
жила была себе бакула, работала, гоняла террабайты туда сюда, но пришел момент сменить сервак....
сервер сменили был centos 5 ? поставили centos 6 , не суть ))
так вот после переноса все заработало, все прекрасно, кроме одного mysql стал плодить логи огромнейшего размера вида mysql-bin.1234 и логи самой бакулы стали тоже безмерно расти,также таблица логов в mysql также безумных размеров, все конфиги один в один со старой системы, вообще в итоге забивает диск, промежуточными файлами бакулы и логами мускула, и вешает мускул....ну и естественно бакулу...
1. условие бинарные логи mysql нужны
2. ошибки в логе бакулы естественно нужны
почему может такое быть и где "ковырнуть" ?:)
update....в логи льются варнинги с ошибками ....например на несуществующий каталог.....странно что он постоянно это выдает, а не разово...делает это до бесконечности....
конечно можно создать каталог, но это не тру...должно работать в любых условиях...)))) в том числе если, каталог для какого-то джоба был удален и перемещен....