O Bacula é um software de criação e gerenciamento de backups. Nesse tutorial serão mostrados os passos para instalação e configuração do mesmo, juntamente com a interface web de gerenciamento (Bweb) e recuperação (Brestore) de backups.
A instalação do Bacula através do gerenciador de pacotes é bastante simples, basta executar o comando abaixo que serão instaladas todas as dependências, inclusive o MySQL, que é o banco de dados padrão do programa. Também há suporte ao banco de dados Postgres, porém devem ser especificados os pacotes, mas não será abordado nesse tutorial.
Será instalado o bacula director, file daemon e storaged daemon. Para a instalação parcial deverão ser instalados o bacula-director-common, bacula-fd e bacula-sd respectivamente.
Configuração do Bacula
O Bacula é um sistema distribuído, sendo formado por 3 daemons: director, storage daemon e file daemon. Cada daemon "executa" independentemente, podendo estar localizado em máquinas separadas. O file daemon deve estar instalado em todas as máquinas clientes.
No ambiente analisado, todos os daemons estão instalados na mesma máquina.
Bacula Director (bacula-dir.conf):
Gerenciador; Núcleo do programa; é responsável por supervisionar todas as operações de backup, restauração, controle e verificação de arquivos.
Bacula Storage:
Responsável pelo armazenamento, leitura e escrita em fita, disco ou outros dispositivos. Deve ser instalado onde os arquivos serão armazenados, podendo ser instalado em mais de uma máquina.
Bacula File Daemon:
Este é o cliente do Bacula. Deve ser instalado em todas as máquinas onde serão realizados os backups.
Configuração do director
Altere as configurações de acordo com a necessidade/ambiente.
Director { #definições do gerenciador/director
Name = ubuntuu-dir #nome do gerenciador/director
DIRport = 9101 #porta de comunicação do director
QueryFile = "/etc/bacula/scripts/query.sql"
WorkingDirectory = "/var/lib/bacula"
PidDirectory = "/var/run/bacula"
Maximum Concurrent Jobs = 10 #máximo de conexões simultâneas
Password = "yveAet993vzsWug3KoZUKjVbdZy0nrSqIqQCFH80rIVS" #senha cliente terminal/console
Messages = Daemon #tipo de mensagens a serem geradas no log
}
JobDefs { #definições de padrão de tarefa
Name = "DefaultJob"#nome do padrão
Type = Backup #tipo de tarefa (backup/restore)
Level = Incremental #tipo de backup (incremental/diferencial/full)
Client = ubuntuu-fd #cliente
FileSet = "Full Set" #nome do conjunto de arquivos
Schedule = "Diario" #tipo de agendamento
Storage = File #tipo de armazenamento (file/tape)
Messages = Standard #padrão de mensagens geradas (log)
Pool = File #tipo de pool utilizado
Priority = 10 #prioridade
Write Bootstrap = "/var/lib/bacula/%c.bsr"
}
Job { #definição de tarefa
Name = "BackupClient1" #nome da tarefa
JobDefs = "DefaultJob" #padrão de tarefa
}
Job { #definição da tarefa
Name = "RestoreFiles" #nome da tarefa
Type = Restore #tipo de tarefa (backup/restore)
Client=ubuntuu-fd #cliente
FileSet="Full Set" #nome do conjunto de arquivos
Storage = File #tipo de armazenamento (file/tape)
Pool = Default #tipo de pool utilizado
Messages = Standard #padrão de mensagens geradas (log)
Where = /mnt/bacula-restores #onde será restaurado o backup
}
FileSet { #conjunto de arquivos e diretórios
Name = "Home Set" #nome do conjunto
Include {
Options {
signature = MD5 #hash para verificação de integridade
}
File = /home #arquivos selecionados
}
Exclude {
File = /home/backup #arquivos excluídos
}
}
Schedule { #agendamento
Name = "Diario" #nome do agendamento
Run = Full sun-sat at 23:10 #definição do agendamento (Full de domingo (sunday) a sabado (saturday) as 23:10)
}
Client { #definições do cliente
Name = ubuntuu-fd #nome do cliente
Address = 10.113.254.246 #ip do cliente (File Daemon)
FDPort = 9102 #porta de comunicação com o cliente
Catalog = MyCatalog #catálogo de arquivos
Password = "zWfAKqdbZb1PjYL9Ud-HForFnoUzkJBSM" #senha cliente (File Daemon)
File Retention = 30 days #retenção dos arquivos (30 dias)
Job Retention = 6 months #retenção da tarefa (6 meses)
AutoPrune = yes #limpeza/supressão automática do catálogo após expirado o tempo de retenção (não afeta os dados do volume)
}
Storage { #definição do dispositivo de armazenamento
Name = File #nome do dispositivo
Address = 10.113.254.246 #ip do dispositivo de armazenamento (Storaged Daemon)
SDPort = 9103 #porta de comunicação com a storaged
Password = "jKNZOR8Kl8nSuHFWi6H9txhEyTqODE3gW" #senha dispositivo (Storaged Daemon)
Device = FileStorage #dispositivo (Storaged Daemon)
Media Type = File #tipo de armazenamento
}
Pool { #definição do tipo de volume/partição a ser montado
Name = Default #nome do volume
Pool Type = Backup #tipo de pool Backup/Archive/Cloned/Migration/Copy/Save (atualmente apenas backup implementado)
Recycle = yes #bacula automaticamente recicla os volumes (caso não possa ser adicionado mais volumes será rescrito sobre os expirados)
AutoPrune = yes #limpeza/supressão automática do catálogo após expirado o tempo de retenção (não afeta os dados do volume)
Volume Retention = 365 days #tempo de retenção de 365 dias
}
Altere as configurações de acordo com a necessidade/ambiente.
FileDaemon { #definições file daemon
Name = ubuntuu-fd #nome (mesmo do bacula-dir.conf)
FDport = 9102 #porta de comunicacao com o director
WorkingDirectory = /var/lib/bacula
Pid Directory = /var/run/bacula
Maximum Concurrent Jobs = 20 #maximo de tarefas simultâneas
}
Director { #dados para comunicação com o director
Name = ubuntuu-dir #nome (mesmo do bacula-dir.conf)
Password = "zWfAKqdbZb1PjYL9Ud-HForFnoUzkJBSM" #senha (mesmo do bacula-dir.conf)
}
Messages { #definição do tipo de mensagem a ser logada
Name = Standard #nome do padrão
director = ubuntuu-dir = all, !skipped, !restored #parametros a serem logados, no caso todos(all), exceto saída (skipped) e restauração (restore)
}
Configuração do dispositivo de armazenamento (storaged daemon)
As configurações devem ser alteradas de acordo com a necessidade/ambiente.
Storage { #definições storaged
Name = ubuntuu-sd #nome
SDPort = 9103 #porta de comunicação com o director
WorkingDirectory = "/var/lib/bacula"
Pid Directory = "/var/run/bacula"
Maximum Concurrent Jobs = 20 #maximo de tarefas simultâneas # SDAddress = 0.0.0.0 #ip da máquina
}
Director { #definição do director que terá acesso ao "daemon" de armazenamento
Name = ubuntuu-dir #nome
Password = "jKNZOR8Kl8nSuHFWi6H9txhEyTqODE3gW" #senha
}
Device { #definições do dispositivo de armazenamento
Name = FileStorage #nome (mesmo a ser usado no director)
Media Type = File #tipo de media/dispositivo - File/Tape
Archive Device = /mnt/backup #ponto de montagem do volume
LabelMedia = yes; #bacula permitir media sem rótulo/nomeação
Random Access = Yes;
AutomaticMount = yes; #quando o dispositivo abrir, lê-lo.
RemovableMedia = no;
AlwaysOpen = no;
}
Messages { #definição do tipo de mensagem a ser logada
Name = Standard #nome do padrão
director = ubuntuu-dir = all #parametros a serem logados, no caso todos(all)
}
Após configuração dos daemons, os mesmos devem ser reinicializados.
[6] Comentário enviado por feliperossi em 25/07/2010 - 21:45h
Exelente artigo, com uma definicao clara sobre o funcionamento do bacula.
mas ainda tenho algumas duvidas em relacao ao bacula backup.
em um dos meu clientes tenho uma tape library IBM TS-2900 LTO 4 com 9 fitas.
gostaria de saber com o bacula gerencia as tape library, tenho ele configurado
com tapes comuns de apenas uma fita lto 1, 2 e 3, funciona maravilhosamente bem.
mas nesse modelo TS-2900 estou tendo alguns problemas para configuralo, devido
armazenamento e recuperacao dos arquivos. procurei em diversos foruns e sites
sobre o gerenciamento do bacula em tapes library, encontrei muito pouca documentacao
e nada claro a respeito.
fico grato caso alguem do VOL tenho algum case de sucesso ou implementacao
do bacula em tapes library.
[7] Comentário enviado por fabriciorodrigo em 27/07/2010 - 10:19h
Vlw pela dica moser! .. instalei o webmin mas acho que o bweb tem mais 'cara' de aplicativo ... acho que os menus estão melhores dispostos e de melhor acesso. Acho que ainda falta algumas coisas pra ambos, mas é mais uma opção, e diga-se de passagem, de bem mais fácil instalação.
[10] Comentário enviado por fabriciorodrigo em 27/12/2010 - 15:34h
nando.polla,
O Bweb faz o controle através do htpasswd do apache ...
Adicione no httpd.conf ou no arquivo respectivo de sua distribuição ...
Alias /bweb /var/www/bweb
<Directory /var/www/bweb/html>
Options FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
Para habilitar vc tbm deve ir até a opção "Configuration" do menu do Bweb e habilitar a opção "security" ou ainda inserir o parametro ('enable_security' => 'on') no arquivo de configuração do bweb (/etc/bacula/bweb.conf)
Assim que for habilitado a opção 'security' será adicionado a opção 'Manage Users' no menu 'Configuration' do Bweb. Nesse menu vc poderá fazer restrições para os usuários, mas não esqueça de primeiramente cadastrá-los no arquivo htpasswd do apache.
[12] Comentário enviado por LinuxTec em 15/02/2011 - 13:09h
Amigo, vou seguir seu tutorial para montar um servidor de backp do zero aqui na empresa, qualquer duvidas peça a himelde ajuda de todos começarei amanhã.
[13] Comentário enviado por LinuxTec em 22/02/2011 - 11:45h
Cara estou seguindo seu artigo e deu um erro bobo aqui pode me ajudar
backup:/home/claudio/download/bacula-gui-5.0.2/bweb# perl Makefile.PL
1..8
ok 1 - require DBI;
ok 2 - require GD::Graph;
ok 3 - require GD;
ok 4 - require HTML::Template;
ok 5 - require CGI;
ok 6 - require Expect;
ok 7 - require Time::ParseDate;
ok 8 - require Date::Calc;
Writing Makefile for Bweb
backup:/home/claudio/download/bacula-gui-5.0.2/bweb# make install
-bash: make: command not found
[15] Comentário enviado por Tiago_RC2Network em 29/07/2011 - 20:52h
Fabricio,
Primeiramente queria lhe agradecer por essa imansa ajuda na configuração do Bacula. A instalação padrão e a interface Web deu certo, mas infelizmente parei no brestore.
[16] Comentário enviado por fabriciorodrigo em 12/08/2011 - 09:25h
Tiago,
Desculpa a demora para responder.
Aparentemente pasta descompactado não está nessa pasta ou não está com o nome que vc está tentando move-la. Verifica onde está sendo descompactado a pasta e com qual nome ela foi descompactada. Dá um ls pra ver se a pasta está mesmo no diretório atual e com que nome, pra depois vc tentar move-la.
[17] Comentário enviado por Tiago_RC2Network em 16/08/2011 - 10:33h
Fabricio, bom dia.
Obrigado mais uma vez pelas dúvidas sanadas. Deu tudo ok a instalação do Bacula Web e o Brestore. Porém, quando tento restaurar algum arquivo no brestore aparece p seguinte erro:
An error has occurred:
Can't start your job:
Obs: Seleciono o client (srv_arq), seleciono o Job, arrasto o arquivo a ser restaurado para o campo RESTORE SELECTION, no campo a direita FILE VERSION, aparece INchanger (circulo vermelho), volume (arquivos1), Jobid (756),size, data e checksun. Quando clico em run restore aparece as seguintes opções:
restore options
cliente: ser_arq ----------------------------no meu bacula-dir.conf o nome que dei ao job de restore é o restore_srv_arquivos
where: /tmp/bacula-restore--------------- no meu dir.conf essa opção está assim: /bacula-recuperados (quando restauro com o .bat ele sempre salva em c:/
replace:awalys/never----------------------- sempre coloco always
Já restartei todos os seviços e nada.
Poderia me ajudar mais uma vez? já tentei que cansei, instalei o debian 5, ubuntu e nada. Falta só fazer o restore pra fechar com chave de ouro.
[18] Comentário enviado por vhugojr em 17/09/2012 - 17:55h
Olá Fabrício, estou com um probleminha seguindo o seu tutorial. Na hora de reiniciar o bacula, após a configuração dos arquivos, aparece a seguinte mensagem:
bacula-dir: ERROR TERMINATION at parse_conf.c: 479 Erro de configuração: Não foi possível encontrar a configuração do Recurso Daemon referenciado na linha 9: Messages = Daemon
: linha 9, coluna 21 do arquivo /etc/bacula/bacula-dir.conf Messages = Daemon.
Será q foi erro de digitação, eu copiei e colei como esta no post.
[19] Comentário enviado por LinuxTec em 28/09/2012 - 09:13h
Bom dia existe algum comando que eu consiga ver os próximos
agendamentos de backups que tem para executar no meu bacula ?
Estou com um probleminha muito estranho, meu bacula só está fazendo
backups Full, ele faz um acaba faz outro e está enchendo meu disco,
minhas Pools estão redondas, mais ele não para de efetuar backups Full,
acabou um agora mesmo e já tenho outros executando vejam.
Terminated Jobs:
JobId Level Files Bytes Status Finished Name
===================================================================
14 Full 458,501 292.0 G OK 23-Set-12 19:26 Grfad01
15 Full 60,949 19.94 G OK 23-Set-12 21:16 grfnexus01
16 Full 22,698 1.349 G OK 23-Set-12 21:23 grflinuxtec01
17 Full 795,276 330.4 G OK 25-Set-12 09:54 backup
18 Incr 23,189 3.857 G OK 25-Set-12 10:24 firewall
19 Full 3,344 127.0 M OK 25-Set-12 10:24 zabbix
20 Incr 220 333.5 M OK 25-Set-12 10:26 bacula
21 Incr 14,615 39.24 G OK 25-Set-12 13:14 Grfad01
22 Full 61,394 19.84 G OK 25-Set-12 15:02 grfnexus01
23 Full 22,716 1.349 G OK 25-Set-12 15:08 grflinuxtec01
Poll do Backup
# Configuration file to Bacula Server
#
JobDefs {
Name = "backup"
Type = Backup
Client = backup-fd
FileSet = "backup"
Schedule = "backup"
Storage = File
Messages = Standard
Pool = Default
Full Backup Pool = backup-Full-Pool
Incremental Backup Pool = backup-Inc-Pool
Differential Backup Pool = backup-Diff-Pool
Priority = 10
#RunBeforeJob = "/etc/bacula/scripts/mysql_backup"
Write Bootstrap = "/var/bacula/working/%c.bsr"
}
Schedule {
Name = "backup"
Run = Full 1st sun at 4:30
Run = Differential 2nd-5th sun at 4:30
Run = Incremental mon-sat at 4:30
}
Client {
Name = backup-fd
Address = backup.grifetiquetas.local
FDPort = 9102
Catalog = MyCatalog
Password = "retK5PoeMp8mP1-QUtTaP5LnzIe_IC0ID"
File Retention = 30 days
Job Retention = 1 months
AutoPrune = yes
}
Pool {
Name = backup-Full-Pool
Pool Type = Backup
Recycle = yes
Recycle Oldest Volume = yes
AutoPrune = yes
Volume Retention = 1 months
Maximum Volume Jobs = 1
Maximum Volumes = 7
Label Format = "Backup-Full-Vol-"
}
Pool {
Name = backup-Inc-Pool
Pool Type = Backup
Recycle = yes
Recycle Oldest Volume = yes
AutoPrune = yes
Volume Retention = 30 days
Maximum Volume Jobs = 6
Maximum Volumes = 7
Label Format = "Backup-Inc-Vol-"
}
Pool {
Name = backup-Diff-Pool
Pool Type = Backup
Recycle = yes
Recycle Oldest Volume = yes
AutoPrune = yes
Volume Retention = 30 days
Maximum Volume Jobs = 1
Maximum Volumes = 10
Label Format = "Backup-Diff-Vol-"
}
[22] Comentário enviado por fabriciorodrigo em 28/02/2013 - 15:24h
armandomxj,
Há duas possibilidades, ou vc colocou a senha errada no arquivo de conf (/etc/bacula/bweb.conf) ou o banco está recusando sua conexão, acho a rimeira bem mais viável.
executa o seguinte comando no prompt:
#mysql -u root -p
será pedida a senha de root, se vc conseguir logar a senha está correta .. coloque-a no arquivo bweb.conf, na variável "'password' => 'senhamysql'" onde, 'senhamysql' é a senha do banco.