Coloquei algumas observações em forma de comentário no meio das configurações. Basicamente todos os pontos importantes estão comentados. Os motivos para os pontos que não estão comentados são: a) não havia necessidade de comentar, é auto-explicativo; b) a configuração do item logo acima é igual e já esta comentado (devemos evitar redundância); c) eu realmente esqueci de comentar ;-), nesse caso me avisem para que possa corrigir.
Vamos ver as configurações:
Esse é o script que será executado antes do primeiro Job do dia para montar a fita no Bacula:#
# Configuracoes globais do servidor bacula
#Director {
# Nome do Director Daemon – Servidor Bacula que estamos configurando agora}
Name = sf1-dir
# Porta pela qual o servidor Bacula será acessado (normalmente pelo console)
DIRport = 9101
# Arquivo contendo as instruções SQL usadas para acessar o banco de dados
QueryFile = "/etc/bacula/query.sql"
# Diretório de trabalho do Director
WorkingDirectory = "/var/lib/bacula/working"
PidDirectory = "/var/run"
# Numero máximo de trabalhos ao mesmo tempo
Maximum Concurrent Jobs = 1
# Senha necessaria para acessar o servidor bacula pelo console
Password = "senha"
# Configuração de mensagens utilizadas pelo Director
Messages = Mensagens##################################################################################
## Banco de dados a ser usado para armazenar as informações dos backups
##################################################################################
Catalog {# Nome do catálogo}
Name = MyCatalog
# Nome do banco de dados, usuário e senha para ser acessado pelo Bacula
# Por padrão a senha do banco de dados esta em branco, caso você altere a senha
# no banco de dados, deve colocar a nova senha aqui
dbname = bacula; user = bacula; password = ""##################################################################################
# Seção clientes
# Configura os clientes onde estão os dados a serem armazenados em backup
##################################################################################
###################
## Servidor ServArq
###################
Client {Name = ServArq}
# Nome ou endereço IP do cliente
Address = servarq
# Porta de acesso ao cliente, configurada no arquivo de configuração do cliente
FDPort = 9102
# Catalogo a ser utilizado no banco de dados
Catalog = MyCatalog
# Senha para se acessar o cliente, configurada no arquivo de configuração do cliente
Password = "senha"
# Tempo em que o backup do cliente sera armazenado no banco de dados
# Passado esse tempo o registro desse arquivo sera excluído
# Isso não afeta o backup que esta armazenado
File Retention = 30 days
# Tempo em que os trabalhos do cliente serão armazenados no baco de dados
# Passado esse tempo o registro desse arquivo sera excluído
# Isso não afeta o backup que esta armazenado
Job Retention = 30 days
# Este comando irá apagar os registros dos arquivos e jobs,
# citados acima, automaticamente
AutoPrune = yes
# Este cliente é praticamente igual ao cliente acima, somente muda
# o tempo de retenção dos arquivos e dos jobs
# Fiz dessa forma pois os backups mensais devem ser guardados por
# um tempo muito maior que os backups diários e semanais
Client {Name = ServArqMensal}
Address = servarq
FDPort = 9102
Catalog = MyCatalog
Password = "senha"
# Estou deixando para 20 anos pois o backup mensal terá retenção de 20 anos
File Retention = 20 years
Job Retention = 20 years
AutoPrune = yes
#############################################
## ServApl – servidor de aplicações
## Basicamente é repetida a configuração do ServArq
## inclusive uma configuração distinta para o backup
## mensal
#############################################
Client {Name = ServApl}
Address = servapl
FDPort = 9102
Catalog = MyCatalog
Password = "senha"
File Retention = 30 days
Job Retention = 30 days
AutoPrune = yesClient {
Name = ServAplMensal}
Address = servapl
FDPort = 9102
Catalog = MyCatalog
Password = "senha"
File Retention = 20 years
Job Retention = 20 years
AutoPrune = yes
###############
## ServBD – servidor de banco de dados
###############
Client {Name = ServBD}
Address = servbd
FDPort = 9102
Catalog = MyCatalog
Password = "senha"
File Retention = 30 days
Job Retention = 30 days
AutoPrune = yes
Client {
Name = ServBDMensal}
Address = servbd
FDPort = 9102
Catalog = MyCatalog
Password = "senha"
File Retention = 20 years
Job Retention = 20 years
AutoPrune = yes##################################################################################
# Seção Pool
##################################################################################Pool {
# Define o Pool para o backup semanal completo}
Name = Semanal
Pool Type = Backup
# As 2 opções abaixo são utilizada para que a fita sera auto reciclada,
# ou seja, eh como se dissesse que os dados da fita podem ser apagados
# e gravados novos dados em seu lugar
Recycle = yes
AutoPrune = yes
# Define quanto tempo os dados ficarão na fita sem poderem ser apagados.
# Somente a depois desse tempo a fita sera reciclada
Volume Retention = 13 days
# Define a quantidade máxima de trabalhos que podem ser armazenados em uma fita
# sem que ela precise ser reciclada
Maximum Volume Jobs = 3
# Define o numero máximo de fitas que sera utilizada pelo Pool
Maximum Volumes = 2
Pool {
# Define o Pool para o backup diário incremental.}
# As opções abaixo são as mesmas do Pool Semanal.
Name = Diario
Pool Type = Backup
Recycle = yes
AutoPrune = yes
Volume Retention = 7 days
Maximum Volume Jobs = 12
Maximum Volumes = 1
Pool {
# Define o Pool para o backup Mensal completo.}
# As opções abaixo são as mesmas das anteriores.
# Aqui não definiremos um máximo de volumes, isso faz com que
# possa ser usado quantos volumes forem necessários.
Name = Mensal
Pool Type = Backup
Recycle = yes
AutoPrune = yes
Volume Retention = 20 years
Maximum Volume Jobs = 3
# O Pool Defaul deve ser criado pois os jobs exigem que seja
# definido o parâmetro Pool, e como não é bom utilizar um dos Pools
# acima, criamos um default. Ele nunca será usado de fato.
Pool {Name = Default}
Pool Type = Backup
Recycle = yes
AutoPrune = yes
Volume Retention = 365 days##################################################################################
# Seção Schedule
# Agenda o nível , a data e a hora do backup para os jobs
##################################################################################
# É necessário criar um agendamento para cada cliente, pois não é
# possível fazer backup de vários clientes com o mesmo trabalho de backup
##########
# ServArq
##########
Schedule {# Agenda o backup completo para a segunda, terceira, quarta e quinta (caso haja)
# segunda-feiras de cada mês, e também os backup diários incrementais.
# Se o mês não tiver 5 segunda-feiras, a quinta segunda-feira será ignorada.
# O backup sera sempre as 22:00 horas.
# Foram passados dois parâmetros Run pois um mesmo agendamento pode
# agendar datas e horários diferentes para o mesmo backup.# Nome do agendamento
Name = ServArq
# Indica o nível, o dia e a hora do backup
Run = Full 2nd-5th Monday at 10:00pm
Run = Incremental tue-sun at 10:00pm
}# Agenda o backup mensal para o servidor ServArq
Schedule {Name = ServArqMensal}
Run = Full 1st Monday at 10:00pm
############
# ServApl
############
# Agenda o backup completo e incremental para o servidor ServApl
# O backup sera sempre as 22:10 horas
Schedule {Name = ServApl}
Run = Full 2nd-5th Monday at 10:10pm
Run = Incremental tue-sun at 10:10pm
# Agenda o backup mensal para o servidor ServApl
Schedule {Name = "ServAplMensal"}
Run = Full 1st Monday at 10:10pm
############
# ServBD
############
# Agenda o backup completo e incremental para o servidor ServBD
# O backup sera sempre as 22:20 horas
Schedule {Name = ServBD}
Run = Full 2nd-5th Monday at 10:20pm
Run = Incremental tue-sun at 10:20pm
# Agenda o backup mensal para o servidor ServBD
Schedule {Name = ServBDMensal}
Run = Full 1st Monday at 10:20pm
##################################################################################
# Seção FileSet
# Determina quais arquivos devem ser feitos backup e quais ficarão fora dos backups
##################################################################################
FileSet {Name = ServArq}
# Define quais arquivos ou diretórios farão parte do backup
Include {# Define algumas opções para o backup}
Options {# Opção de segurança}
signature = MD5
# Compressão dos dados usando GZIP
# O número 9 indica o taxa de compressão, quanto mais alto
# mais compressão. Vai de 1 a 9
compression=GZIP9
# Exclui do backup os arquivos com extensão tmp
wildfile = "*.tmp"
# Diz que os arquivos indicados em wildfile não farão parte do backup
Exclude = yes
# Define quais diretórios farão parte do backup
File = /arquivos/dados
File = /etc
FileSet {
Name = "ServApl"}
Include {Options {}signature = MD5}
IgnoreCase = yes
compression=GZIP9
wildfile = "*.tmp"
Exclude = yes
# Por ser sistema de arquivos Windows é necessário indicar a letra da unidade
# A barra (/) não esta errada, por ser em Linux é essa mesmo que temos de usar
File = "F:/Aplicacoes"
FileSet {
Name = "ServBD"}
Include {Options {}signature = MD5}
IgnoreCase = yes
compression=GZIP9
File = "G:/BKPBancos"
##################################################################################
# Seção Storage
# Configura qual servidor esta com a unidade de fita, qual unidade de fita usar
##################################################################################
Storage {# Nome do dispositivo a ser usado no Director}
Name = AIT-1
# Endereço do servidor, pode ser o nome ou o endereço IP
Address = ServArq
# Porta pela qual o servidor de Storage será acessada
SDPort = 9103
# Senha com a qual o Director acessará o Storage Daemon
Password = "senha"
# Dispositivo configurado no Storage Daemos que iremos utilizar
Device = AIT-1
##################################################################################
# Seção Job
# Configura os trabalhos de backup
##################################################################################
# Para que se possa fazer um backup completo na segunda-feira e incremental
# nos demais dias da semana, é necessário que os dois tipos de backup sejam
# controlados por este mesmo job. É necessário que o Client e o FileSet também
# sejam os mesmo nos dois tipos de backup. Analisando a configuração veremos isso.
# Uma observação que deve ser feita é que, mesmo quando estiver agendado para
# executar o backup incremental, o Bacula poderá executar o backup Full. Dois motivos
# para que isso aconteça é: 1 – Nunca ter sido feito um backup full desses arquivos antes;
# 2 – ter sido feito alguma mudança no FileSet.
############
# ServArq
############
# Define o trabalho para o backup semanal e diário do ServArq
Job {# Nome do trabalho}
Name = ServArq
# Tipo do trabalho, pode ser Backup ou Restore
Type = Backup
# Cliente que foi configurado acima
Client = ServArq
# File set do servidor ServArq configurado acima
FileSet = ServArq
# O storage configurado acima
Storage = AIT-1
# O agendamento para o backup do ServArq configurado acima
Schedule = ServArq
# O Pool configurado, mas que será indicado aqui apenas por que o Bacula
# exige esse parâmetro, não será utilizado
Pool = Default
# Os dois parâmetros abaixo serão os utilizados para indicar o Pool.
# Um indica o Pool o Pool para o backup Full e o outro para o Incremental.
# O Bacula que indica qual Pool será utilizado, conforme agendamento.
Full Backup Pool = Semanal
Incremental Backup Pool = Diario
# Configuração de mensagem utilizada por este Job
Messages = Mensagens
# Script que será executado antes da execução do backup. No caso, esse script
# montará o dispositivo (caso não esteja montado) antes de ser feito o backup.
# Mostrarei esse script no final dessa parte do artigo.
RunBeforeJob = "/usr/sbin/monta_tape.sh"
# Define a prioridade do Job, quanto menor o valor, a prioridade é maior
# O padrão é 10. É uma opção importante pois, caso os backups atrasem, a execução
# será pela prioridade e não mais pelo horário.
Priority = 10
# Define o trabalho para o backup mensal do servidor ServArq
Job {Name = ServArqMensal}
Type = Backup
Client = ServArqMensal
FileSet = ServArq
Storage = AIT-1
# Neste caso informamos somente um Pool, pois o backup mensal
# será sempre completo
Pool = Mensal
Schedule = ServArqMensal
Messages = Mensagens
RunBeforeJob = "/usr/sbin/monta_tape.sh"
Priority = 10
# Define o trabalho de Restore o backup semanal do servidor ServArq
# O Job Restore é importante para restaurarmos um backup
# As opções são as mesmas dos Jobs de backup
Job {Name = RestoreServArqSemanal}
Type = Restore
Client = ServArq
FileSet = ServArq
Storage = AIT-1
Messages = Mensagens
Pool = Semanal
Where = /tmp/bacula-restores
Job {
Name = RestoreServArqDiario}
Type = Restore
Client = ServArq
FileSet = ServArq
Storage = AIT-1
Messages = Mensagens
Pool = Diario
Where = /tmp/bacula-restores
Job {
Name = RestoreServArqMensal}
Type = Restore
Client = ServArqMensal
FileSet = ServArq
Storage = AIT-1
Messages = Mensagens
Pool = Mensal
Where = /tmp/bacula-restores
###############
# ServApl
###############
Job {# Define o trabalho para o backup semanal do servidor ServApl}
Name = ServApl
Type = Backup
Client = ServApl
FileSet = ServApl
Storage = AIT-1
Schedule = ServApl
Pool = Default
Full Backup Pool = Semanal
Incremental Backup Pool = Diario
Messages = Mensagens
RunBeforeJob = "/usr/sbin/monta_tape.sh"
Priority = 11
Job {
Name = ServAplMensal}
Type = Backup
Level = Full
Client = ServAplMensal
FileSet = ServAplMensal
Storage = AIT-1
Pool = Mensal
Schedule = ServAplMensal
Messages = Mensagens
RunBeforeJob = "/usr/sbin/monta_tape.sh"
Priority = 11
Job {
Name = RestoreServAplSemanal-sapp}
Type = Restore
Client = ServApl
FileSet = ServApl
Storage = AIT-1
Messages = Mensagens
Pool = Semanal
Where = /tmp/bacula-restores
Job {
Name = RestoreServAplDiario}
Type = Restore
Client = ServApl
FileSet = ServApl
Storage = AIT-1
Messages = Mensagens
Pool = Diario
Where = /tmp/bacula-restores
Job {
Name = RestoreServAplMensal}
Type = Restore
Client = ServApl
FileSet = ServApl
Storage = AIT-1
Messages = Mensagens
Pool = Mensal
Where = /tmp/bacula-restores###############
# ServBD
###############
Job {# Define o trabalho para o backup semanal}
Name = ServBD"
Type = Backup
Client = ServBD
FileSet = ServBD
Storage = AIT-1
Schedule = ServBD
Pool = Default
Full Backup Pool = Semanal
Incremental Backup Pool = Diario
Messages = Mensagens
RunBeforeJob = "/usr/sbin/monta_tape.sh"
Priority = 12
Job {
Name = ServBDMensal}
Type = Backup
Level = Full
Client = ServBDMensal
FileSet = ServBDMensal
Storage = AIT-1
Pool = Mensal
Schedule = ServBDMensal
Messages = Mensagens
RunBeforeJob = "/usr/sbin/monta_tape.sh"
Priority = 12
Job {
Name = RestoreServBDSemanal}
Type = Restore
Client = ServBD
FileSet = ServBD
Storage = AIT-1
Messages = Mensagens
Pool = Semanal
Where = /tmp/bacula-restores
Job {
Name = RestoreServBDDiario}
Type = Restore
Client = ServBD
FileSet = ServBD
Storage = AIT-1
Messages = Mensagens
Pool = Diario
Where = /tmp/bacula-restores
Job {
Name = RestoreServBDMensal}
Type = Restore
Client = ServBD
FileSet = ServBD
Storage = AIT-1
Messages = Mensagens
Pool = Mensal
Where = /tmp/bacula-restores
##################################################################################
# Seção Mensagens
##################################################################################Messages {
Name = Mensagens}
# Envia todas as mensagens geradas pelo Bacula para o arquivo
# /var/log/messages
syslog = all, !skipped, !saved
Depois de criado o script, é só dar as permissões adequadas e estará pronto.Eu sei que esteticamente essa listagem do arquivo de configuração não ficou nada boa, mas espero que todos tenham conseguido entende-lo. Não é mesmo complexo? Mas o grande problema é que, talvez, para deixar as configurações mais simples tenha uma grande perda na flexibilidade do sistema. O ideal seria um sistema menos complexo de se configurar e com toda flexibilidade que o Bacula tem. Acho que vou fazer disso o meu projeto de TCC da faculdade ;-).
Um ponto que gostaria de comentar é sobre redundância, que falei no começo do post, que nesse arquivo de configuração é abundante (pelo menos a meu ver). Uma mesmas configuração pode ser encontrada em vários pontos diferentes da configuração. Acredito que isso seja uma coisa que gera dificuldade para a maioria das pessoas entenderem como o Bacula funciona.
Como de praxe, peço para que comentem principalmente se o artigo precisar de alguma melhoria para que fique mais fácil de entende-lo.
A próxima parte, a última (felizmente, não aguento mais escrever sobre Bacula :-\ ), trará a explicação de como operar o sistema. Será um manual básico sobre as principais funções necessárias para operação do sistema, sem se aprofundar muito. Pretendo faze-lo até a próxima semana.
Comentários
O Bacula é muito interessante, mas é realmente muito complexo para pequenas situações.
Um abraço,
Alexandre
O bacula é um software fantástico, mas muito complexo. Exige muita dedicação mas depois vem a recompensa.