Vamos continuar a série de Posts sobre Backup com Bacula, que muita gente ainda tem dúvida, criada por nosso amigo Rodrigo Ramos.
Conforme prometido, vamos conhecer os diversos modulos do Bacula, para que servem e como configurá-los.
È importante entendemos como o papel de cada um desses módulos e suas funções, irei detalhar a medida que fomos explorando as opções, contudo um bom resumo pode ser
visto nessa figura:
Chega de papo e mãos a obra, vamos aprender agora…..
Vamos começar pelo principal arquivo de configuração do Bacula o bacula-dir.conf ou o Bacula Director, ele é o verdadeiro Maestro de todo o conjunto, é o arquivo que mais
vamos trabalhar, 99% do trabalho vai estar aqui.
Um detalhe importante é que a partir da versão 5.x a ordem dos recursos não importa.
#### Director ####
Director {
Name = cooperati-dir
# Nome do seu Director, pode dar um nome qualquer, lembrando que será o mesmo a chamar no fd e no sd.
DIRport = 9101
# Porta padrão do Director.
QueryFile = “/etc/bacula/query.sql”
# Arquivo com comandos personalizados de pesquisa SQL.
WorkingDirectory = “/var/bacula/working”
# Pasta de trabalho do Bacula (essa foi fácil!!!).
PidDirectory = “/var/run”
# Diretório de Processos do Bacula.
Maximum Concurrent Jobs = 10
# Numero máximo de jobs concorrentes que podem ser executadas simultaneamente.
Password = “minha_senha”
# Senha que deve ser configurada no bconsole.conf, as senhas que vem no Bacula são enormes e 90% dos erros que eu tive foi aqui, então
aconselho a sempre colocar uma senha única como no exemplo.
Messages = Daemon
# Para onde mensagens genéricas do Bacula são enviadas.
DirAddress = 192.168.1.1
# IP de onde esta o Director
}
###### JobDefs #####
# Esse recurso é muito útil quando se tem varias jobs bem parecidas e com isso nao precisamos ficar repetindo todas as opçõs
dentro da configuração da job, basta setar o jobdef. Cabe ressaltar que a opção dentro da job sobrepõe a da jobdef. Voce também pode criar mais de uma jobdef de acordo com sua necessidade.
JobDefs {
Name = “padrao”
# nome que daremos a jobdef para definirmos dentro da job.
Type = Backup
# Os tipos podem ser backup, restore, verify e admin.
Level = Incremental
# Nivel de Backup pode ser Full, Incremental, Differential; para restore nao precisa de Level
FileSet = “completo”
# Um fileset tambem configurado nesse arquivo mais abaixo, ele diz o que vai ser backpeado.
Schedule = “GFS”
# Como o fileset o schedule também será configurado abaixo, trata-se da agenda usada para iniciar os backups em dias e horas programadas,
veremos mais a baixo.
Storage = File
# Vamos configurar mais abaixo o Storage com esse mesmo nome “File”.
Messages = Standard
# Para onde são direcionadas as mensagens referentes a jobs
Pool = diaria
# O nome da pool que utilizaremos por padrão nas jobs, configuraremos mais tarde.
Priority = 10
# Prioridade de execução de uma job para jobs concorrentes. Aqui podemos dizer qual job tem mais prioridade que outra, dependendo
da sua necessidade.
Write Bootstrap = “/var/bacula/working/%c.bsr”
# Essa opção de job/jobdef é opcional, nele contem uma lista de fitas e arquivos armazenados durante o backup e é usado somente por uma job de
restore, apesar de opcional, acho muito importante.
}
Job {
Name = “BackupCatalog”
# Essa job é uma padrão para backup do banco de dados utilizado pelo Bacula, e ja vem configurada na instalação.
JobDefs = “padrao”
Level = Full
FileSet=”Catalog”
Schedule = “GFS”
RunBeforeJob = “/etc/bacula/make_catalog_backup.pl MyCatalog”
RunAfterJob = “/etc/bacula/delete_catalog_backup”
# Scripts que podem ser executados antes ou depois de uma job.
Write Bootstrap = “/var/bacula/working/%n.bsr”
Priority = 99
# È conveniente definir como ultimo na lista de prioridades, para que faça um backup do catalogo depois de ter terminado todos os
backups do dia.
}
Job {
Name = “BKP_Server1-job”
# nome da job, para facilitar vamos padronizar toda job com sulfixo “- job”.
Client = “cooperati-fd”
JobDefs = “padrao”
# Notem que informando a opção jobdefs padrão não preciso repetir a configuração acima, pois tudo que
preciso esta escrito la, caso tivesse outros servidores eu poderia usar a mesma configuração somente mudando o nome da job.
Enable = yes
# Ta ai algo pratico, ativa ou desativa uma job
}
######### FileSets ##################
# Aqui vamos definir “o que” backupear e o que ignorar. Toda modificação no fileset o bacula faz o próximo backup full automaticamente.
FileSet {
Name = “completo”
# Mesmo nome que usamos no job ou jobset. O mesmo fileset pode ser usado para mais de uma job ou jobdef.
Include {
Options {
compression = GZIP6
# tipo de compactação, pode varias de 1 a 9, todavia o ganho acima de 6 é muito pequeno e não justifica devido ao processamento.
signature = MD5
# Metodo de verificação dos aquivos, pode ser SHA1.
onefs=no
# Isso indica que o fileset pode ser lido recursivamente, mesmo em outo sistema de arquivo.
Ignore case = yes
# Ignora case em nome e extensão de arquivo.
Exclude = yes
# Indica que ira excluir do backup arquivos e pastas pouco uteis conforme configuramos abaixo.
wildfile = “*.iso”
wildfile = “*.mp3”
wildfile = “*.avi”
wildfile = “*.wmv”
wild = “/proc”
wild = “/mnt”
wild = “/temp”
wild = “/sys”
wild = “/misc”
}
# aqui definimos as pastas que vamos fazer o backup.
File = /etc
File = /home
File = /var
File = /root
}
}
FileSet {
# Fileset exclusivo do catalogo do Bacula, já vem configurado.
Name = “Catalog”
Include {
Options {
signature = MD5
}
File = “/var/lib/bacula/bacula.sql”
}
}
######## Storage ###########
# Podemos configurar quantos stogares quisermos, para fitas, hds, pastas de rede, onde quer que seja.
Storage {
Name = File
# O nome aqui pode ser qualquer um, porem tem que ser o mesmo no bacula-sd.conf. No nosso caso vamos configurar um disco, o diretório destinado
aos dados estará configurado no bacula-sd.conf.
Address = 192.168.1.1
# Endereço do Storage Daemon (SD), lembem que podemos ter mais de um e em locais diferentes.
SDPort = 9103
# Porta padrão do SD.
Password = “minha_senha”
# Senha para o SD, vale a mesma orientação para a senha do Director
Device = FileStorage
# Aqui vale qualquer nome, contanto que seja o mesmo no bacula-sd.conf, é apenas um nome representativo do device.
Media Type = File
# Como no Device pode ser um nome qualquer, porem backups gravados com Media Type x não podem ser lidos por Device que estejam com Media
Type y; serve para separar o diferente tipos de midas para o Bacula.
}
###### Pool ########
# Essa é a mais importante opção, é aqui que iremos planejar nosso backup, as pools são responsáveis por quanto tempo iremos armazenar os backups bem como a reciclagem
dos volumes.
Pool {
Name = diaria
Pool Type = Backup
# Na versão atual só existe Backup, outros tipos estao sendo implementados no futuro.
Recycle = yes
# Permite que o Bacula recicle os volumes automaticamente.
Volume Use Duration = 23 hours
# Período de tempo que o volume poderá ser gravado, após esse tempo o volume é encerrado.
Volume Retention = 6 days
# Tempo que o volume é retido, após esse período ele é reciclado
Maximum Volume Bytes = 500G
# Para backup em discos devemos estabelecer um limite para o tamanho máximo do volume.
LabelFormat = “Diaria_”
# “Pulo do gato” etiquetagem automática dos volumes. Esse parâmetro opcional irá dar um nome para os novos volumes de forma
automática (Diaria_001, Diaria_002, etc)
}
Pool {
Name = semanal
Pool Type = Backup
Recycle = yes
Volume Use Duration = 70 hours
Volume Retention = 26 days
# Uma pool idêntica a de cima, mudamos o tempo de retenção por se tratar de uma pool semanal para aproximadamente 1 mês,
após esse período ela será reciclada.
Maximum Volume Bytes = 500G
LabelFormat = “Semanal_”
}
Pool {
Name = mensal
Pool Type = Backup
Recycle = yes
Volume Use Duration = 70 hours
Volume
Retention = 363 days
Maximum Volume Bytes = 500G
LabelFormat = “Mensal_”
}
#### Clients #####
# Clients são as maquinas que o Bacula ira fazer o backup, aqui podemos configurar quantos clients quisermos e de Diferentes S.Os.
Client {
Name = “cooperati-fd”
# O mesmo nome que utilizamos na Job, podemos ter mais de uma job para o mesmo client.
Address = 192.168.1.25
# Endereço IP do servidor.
FDPort = 9102
# Porta padrão usado para comunicação com client
Catalog = MyCatalog
Password = “minha_senha”
# já repararam na quantidade de senhas que tem que ser configurada?? por isso eu uso uma única para tudo diminuindo a chance de erro.
File Retention = 99 years
# Aqui limitamos o crescimento do catalogo, quando chegar ao limite os dados são apagados somente do catalogo não sendo possível
restaurar um único arquivo de uma job, somente a job completa, eu particularmente não vejo motivo para apagar do antes do período de retenção do arquivo configurado na Pool, por isso deixo
um valor absurdo.
Job Retention = 99 years
# aqui vale o mesmo, porem trata-se da job toda, ao fim to período é como se a job não existisse, contido o volume ainda continua
gravado, somente é apagado as informações do catalogo. Podemos reinseri-las com o utilitário bscan que vem como o Bacula, mais uma vez não vejo sentido de apagar do catalogo ante do período
de retenção do volume.
AutoPrune = yes
# Indica que após o período de retenção as informações serão removidas do catalogo automaticamente.
}
#### Catalog #####
#Informações do Catalogo. Vem configurado quando instalamos o Bacula, caso necessário mude a senha do Banco.
Catalog {
Name = MyCatalog
# O nome tem que ser igual em todos as configurações que solicitem catalogo.
DB Address = “localhost”
DB Port = 3306
dbname = “bacula”
dbuser = “bacula”
dbpassword = “senha_do_banco”
}
###### Menssages #####
# Onde definimos como são tratadas as mensagens e como o Bacula as envia.
Messages {
Name = Standard
# Um nome qualquer, no nosso exemplo destinamos “Standard” para as mensagens referentes a jobs
mailcommand = “/sbin/bsmtp -h localhost -f \”\(Bacula\) \<%r\>\” -s \”Bacula: %t %e of %c %l\” %r”
operatorcommand = “/sbin/bsmtp -h localhost -f \”\(Bacula\)
\<%r\>\” -s \”Bacula: Intervention needed for %j\” %r”
# Essas configurações são padrão, mas podem ser modificadas para gerar as informações que desejar.
# Para maiores detalhes sobre parametros do Messages podemos consultar o link: http://www.bacula.org/5.0.x-manuals/en/main/main/Messages_Resource.html
mail = root@localhost = all, !skipped
operator = root@localhost = mount
console = all, !skipped, !saved
append = “/var/bacula/working/log” = all, !skipped
catalog = all
}
Messages {
Name = Daemon
mailcommand = “/sbin/bsmtp -h localhost -f \”\(Bacula\) \<%r\>\” -s \”Bacula daemon message\” %r”
mail = root@localhost
= all, !skipped
console = all, !skipped, !saved
append = “/var/bacula/working/log” = all, !skipped
}
#### Schedule #########
# Agora que vamos realmente por as jobs para funcionar automaticamente.
#Podemos configurar mais de uma agenda, dependendo da necessidade, você pode ter uma agenda para cada storage por exemplo. As opções
dentro da Schedule (agenda) sobrepõe as da Job.
Schedule {
Name = “GFS”
# nome da nossa agenda
Run = Level=Differential Pool=diaria mon-fri at 23:00
# Definimos que é um backup diferencial rodando na pool diaria de segunda a sexta-feira as 23:00h
Run = Level=Differential Pool=semanal 2nd-5th sun at 22:00
# Outra diferencial que executará um backup diferencial na pool semanal na segunda a quinta segunda de um mês as 22:00h
Run = Level=Full Pool=mensal 1st sun at 22:00
# Uma Full que executa toda primeira segunda-feira as 22:00h
Console {
# Console é uma opção para uso do tray_icon, uma interface gráfica bem limitada do Bacula.
Name = cooperati-mon
Password = “minha_senha”
CommandACL = status, .status
}
Com isso fechamos as opções básicas para funcionamento do nosso bacula-dir.conf, que corresponde a 99% do trabalho pesado do Bacula.
Outros parâmetros podemos consultas no link: http://www.bacula.org/5.0.x-manuals/en/main/main/Configuring_Director.html
No próximo post veremos a configuração do bacula-fd.conf, bacula-sd.conf e bconsole.conf. Bem como as suas funções
Bio: Analista de Suporte, curioso e apaixonado pela profissão. Estou descobrindo o universo livre e cada dia ficando mais envolvido. Nas horas vagas fico brincando de levantar VMs para testar novos programas sempre em CentOS.
Não esqueçam de assinar nosso Portal e divulgar para que possamos crescer cada vez mais.