Apresento o Bacula, poderosa plataforma cliente/servidor de backup. Com esse programa será possível implantar uma completa solução de cópia de dados em disco e/ou fita. Esse artigo tem caráter introdutório sobre o Bacula, servindo como referência na sua instalação e configuração. Quem busca uma ótima ferramenta de backup open source, completa em opções e de fácil configuração, Bacula é 10!
Para administrar o Bacula o padrão é seu console, mas existe
também o modo gráfico que roda no Gnome. Para acessar o
console precisamos editar o arquivo bconsole.conf,
especificando somente como se conectar ao Director:
# vi bconsole.conf
#
# Bacula User Agent (or Console) Configuration File
#
Director {
Name = server-dir
DIRport = 9101
address = localhost
Password = "senha"
}
Agora sim, para acessar o console:
# /usr/local/sbin/bconsole -c /usr/local/etc/bconsole.conf
Connecting to Director server-dir:9101
1000 OK: HeadMan Version: 1.30 (28 April 2004)
*
Estamos no prompt do console. Para obter informações sobre
todos os comandos disponíveis é só digitar "help". Agora é
escolher a opção desejada e trabalhar. Por exemplo, se quiser
obter informações sobre o status de ser servidor, digite
"stat" e selecione a opção desejada. O Bacula é muito fácil e
intuitivo de ser gerenciado.
Para realizar os trabalhos de backup nas unidades de fita, é
preciso criar uma label para cada volume. Após isso é necessário
montar o dispositivo pra ficar online, mas para agilizar a
tarefa, digite apenas "label", siga os passos e pronto. Seu
dispositivo está montado e pronto pra armazenar seu trabalho.
Caso queira realizar um trabalho de backup, execute "run" e
escolha a opção de acordo com o menu.
Para realizar a restauração de um arquivo/diretório, digitar "restore":
* restore
Using default Catalog name=MyCatalog DB=bacula
First you select one or more JobIds that contain files
to be restored. You will be presented several methods
of specifying the JobIds. Then you will be allowed to
select which files from those JobIds are to be restored.
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 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: Cancel.
Select item: (1-9): 3
Enter JobId(s), comma separated, to restore: 2
You have selected the following JobId: 2
Building directory tree for JobId 2 ...
1 Job inserted into the tree and marked for extraction.
Automatically selected Storage: File
You are now entering file selection mode where you add and
remove files to be restored. All files are initially added.
Enter "done" to leave this mode.
cwd is: /www
A maneira de se escolher os arquivos/diretórios a serem
restaurados no Bacula demonstrado acima é simples; selecione a
opção 3 e em seguida o JobID (cada trabalho executado recebe
um número identificador). Após a seleção do trabalho, você
irá navegar pela árvore de diretórios que foram backupeados.
A navegação é padrão do shell Unix. Após encontrar o arquivo
desejado, para selecioná-lo execute o comando "mark". Um *
aparecerá ao lado do arquivo. Para finalizar, execute done e
siga os passos finais.
[1] Comentário enviado por fabio em 29/12/2004 - 23:13h
Excelente artigo, parabéns! Com certeza vou testar essa ferramenta aqui em casa e em clientes, ainda mais porque ela faz parte do repositório oficial da distribuição Debian:
[2] Comentário enviado por jabuka em 30/12/2004 - 09:00h
Pessoal, gostaria de acrescentar um comando que ficou faltando no artigo. Segundo o apresentado, o backup será diário, com cada fita recebendo uma label. Porém, quando o trabalho se inicia, o dispositivo (no caso a fita) precisa estar montada; dai precisaríamos entrar no console e entrar com o comando mount.
Para automatizar esse processo, insira no bacula-dir.conf, dentro do parâmetro job (o primeiro a ser executado) a seguinte linha:
RunBeforeJob = "/usr/local/etc/monta_tape.sh"
Depois, é só criar esse script:
#!/bin/sh
/usr/local/sbin/bconsole -c /usr/local/etc/bconsole.conf <<END_OF_DATA
mount
quit
END_OF_DATA
Desculpem pela falha... espero ter ajudado :-)
Abraços
Sandro Mendes
[5] Comentário enviado por apscherbach em 27/10/2005 - 09:48h
Ótimo artigo.
Mas no caso, se eu quiser fazer o backup em um hd, eu tenho que criar um "dipositivo" para cada dia que o backup for ser executado? Na mesma estrutura das fitas usadas no artigo, só que com pastas em um hd?
É isso?
Director { # define myself
Name = slsjainfra-dir
DIRport = 9101 # where we listen for UA connections
QueryFile = "/etc/bacula/query.sql"
WorkingDirectory = "/work/bacula/working"
PidDirectory = "/var/run"
Maximum Concurrent Jobs = 1
Password = "teste" # Console password
Messages = Standard
}
# OBSERVACOES
# Pool 'PoolSeg...PoolSex' recebem os backups diarios. Tem retencao de 7 dias.
# Sequencia de definicao seguida no esquema deste arquivo de configuracao:
# 1) definicao de 'SCHEDULER'
# 2) definicao de 'JOB' e seu 'FILESET'
# 3) definicao de 'CLIENT'
# 4) definicao de 'STORAGE'
# 5) definicao de 'CATALOG'
# 6) definicao de 'MESSAGE'
# 7) definicao de 'POOL'
#Schedule salteado, podendo fazer um full na segunda e na terca e os demais dias fazer incremental nesses volumes
Schedule {
Name = "Diario"
Run = Level=Full Pool=Pool_01 Monday at 08:46am # segunda, quarta e sexta incremental no memso pool
Run = Level=Full Pool=Pool_02 Tuesday at 08:46am # terca, quinta e sabado incremental
}
## Configuracoes genericas para a maioria dos JOBS
Job {
Name = "Backup_01"
Type = Backup
Level = Full
Schedule = "Diario"
# JobDefs = "DefaultJob"
Client = slsja0402-fd #############backup para o disco local###################
Messages = Standard
FileSet = "diarioFS"
Write Bootstrap = "/work/bacula/working/backup_02.bsr"
Priority = 1 # run after main backup
Storage = armlocal
Pool =Pool_01
}
Job {
Name = "Backup_02"
Type = Backup
Level = Full
Schedule = "Diario"
# JobDefs = "DefaultJob"
Client = slsja0402-fd #############backup para o disco local###################
Messages = Standard
FileSet = "diarioFS"
Write Bootstrap = "/work/bacula/working/Backup_02.bsr"
Priority = 1 # run after main backup
Storage = armlocal
Pool = Pool_02
}
#Este tipo de configuracao de File Set e feita para backup de clientes Windows
FileSet {
Name = "diarioFS"
Include {
Options {
compression= GZIP
IgnoreCase = yes
}
File = "c:/pacotes"
}
}
#----------------------------------------------------------------------------------------
###########JOBS DE RESTORE PARA SEREM USADOS NO CONSOLE###########################
Job {
Name = "Restaurar_01"
Bootstrap = "/work/bacula/working/backup_01.bsr"
Type = Restore
Client = slsja0402-fd
FileSet = "diarioFS"
Storage = armlocal
Messages = Standard
Pool = Pool_01
Where = ""
}
Job {
Name = "Restaurar_02"
Bootstrap = "/work/bacula/working/backup_02.bsr"
Type = Restore
Client = slsja0402-fd
FileSet = "diarioFS"
Storage = armlocal
Messages = Standard
Pool = Pool_02
Where = ""
}
## DEFINICOES DOS CLIENTES FILEDAEMON ####################################################
#RESPONSAVEL PELA COMUNICACAO COM O CLIENTE
Client {
Name = slsja0402-fd
Address = 192.168.0.165
FDPort = 9102
Catalog = MyCatalog
Password = "teste" # password for FileDaemon
File Retention = 2 months
Job Retention = 2 months
AutoPrune = yes # Prune expired Jobs/Files
}
# Definiton of file storage device #######################################################
Storage {
Name = armlocal
Address = slsjainfra
SDPort = 9103
Password = "teste"
Device = dev-arquivo
Media Type = File
Autochanger = yes
}
Catalog {
Name = MyCatalog
dbname = bacula; user = bacula; password = ""
}
Messages {
Name = Standard
console = all, !skipped, !saved
append = "/work/bacula/working/log" = all, !skipped
}
#----------------------------------------------------------------------------------------
# Default pool definition
# Pool para backup na Segunda com retencao de 7 dias
Pool {
Name = Pool_01
Pool Type = Backup
Recycle = yes # Bacula can automatically recycle Volumes
AutoPrune = yes # Prune expired volumes
Volume Use Duration = 23h
LabelFormat = "Vol"
Volume Retention = 90 days #
Accept Any Volume = yes # write on any volume in the pool
}
#----------------------------------------------------------------------------------------
# Pool para backup na Terca com retencao de 7 dias
Pool {
Name = Pool_02
Pool Type = Backup
Recycle = yes # Bacula can automatically recycle Volumes
Volume Use Duration = 23h
LabelFormat = "Vol"
AutoPrune = yes # Prune expired volumes
Volume Retention = 90 days #
Accept Any Volume = yes # write on any volume in the pool
}
#---------------------------------------------------------------------------------------
################################################################
# Default Bacula Storage Daemon Configuration file #
################################################################
# For Bacula release 1.38.4 (14 January 2006) -- redhat (Stentz)
#
# You may need to change the name of your tape drive
# on the "Archive Device" directive in the Device
# resource. If you change the Name and/or the
# "Media Type" in the Device resource, please ensure
# that dird.conf has corresponding changes.
#
Storage { # definition of myself
Name = slsjainfra-sd
SDPort = 9103 # Director's port
WorkingDirectory = "/var/bacula"
Pid Directory = "/var/run"
Maximum Concurrent Jobs = 20
}
#
# List Directors who are permitted to contact Storage daemon
#
Director {
Name = slsjainfra-dir
Password = "teste"
}
# Devices supported by this Storage daemon
# To connect, the Director's bacula-dir.conf must have the
# same Name and MediaType.
#
Device {
Name = dev-arquivo
Media Type = File
Archive Device = /etc/bacula/backup
LabelMedia = yes; # lets Bacula label unlabeled media
Random Access = Yes;
AutomaticMount = yes; # when device opened, read it
RemovableMedia = no;
AlwaysOpen = no;
SpoolDirectory = /tmp/backup;
LabelMedia = yes;
}
#Posso criar outros devices de outros clientes para outros clientes,com LabelMedia=yes tambem, nos mesmos pool diarios,
#mas com nomes de volumes diferentes.
#Device {
# Name = DDS3
# Description = "DDS-3 for Fedora"
# Media Type = DDS-3
# Archive Device = /dev/st0
# AutomaticMount = yes; # when device opened, read it
# 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;
#}
Device {
Name = DDS3
Media Type = DDS-3
Archive Device = /dev/st0
AutomaticMount = yes; # when device opened, read it
Offline On Unmount = yes
AlwaysOpen = yes;
RemovableMedia = yes;
Hardware End of Medium = No
BSF at EOM = yes
}
# Send all messages to the Director,
# mount messages also are sent to the email address
Messages {
Name = Standard
director = slsjainfra-dir = all
operator = root = mount
}
#################################################################
# Default Bacula File Daemon Configuration file #
#################################################################
# For Bacula release 1.38.4 (14 January 2006) -- redhat (Stentz)
#
# There is not much to change here except perhaps the
# File daemon Name to
#
#
# List Directors who are permitted to contact this File daemon
#
Director {
Name = slsjainfra-dir
Password = "teste"
}
#
# Restricted Director, used by tray-monitor to get the
# status of the file daemon
#
Director {
Name = slsjainfra-dir
Password = "teste"
Monitor = yes
}
#
# "Global" File daemon configuration specifications
#
FileDaemon { # this is me
Name = slsjainfra-fd
FDport = 9102 # where we listen for the director
WorkingDirectory = /var/bacula
Pid Directory = /var/run
Maximum Concurrent Jobs = 20
}
# Send all messages except skipped files back to Director
Messages {
Name = Standard
director = slsjainfra-dir = all, !skipped
}
[8] Comentário enviado por tecnoplace em 10/03/2008 - 13:23h
amigos eu fiz as configuracoes ai mas o meu bacula director daemon esta como down. uso o webadmin para administrar o servidor linux. qdo eu mando reiniciar o bacula aparece a seguinte mensagem.
Failed to start Bacula : No init script found for bacula-dir
o q pode ser???
[10] Comentário enviado por anakoliveira em 11/06/2008 - 15:10h
Sandro, excelente artigo. Estou tentando configurar o Bacula aqui na empresa, porém estou encontrando algumas dificuldades.
1º Utilizo o Fedora 8;
2º Banco Postgre;
3º Configurei o banco e os arquivos da maneira como orientou, porém ao subir os serviços, ocorre o erro: "Starting bacula-dir: grep: /etc/bacula/bacula-dir.conf: Arquivo ou diretório não encontrado
11-Jun 15:01 bacula-dir: ERROR TERMINATION at parse_conf.c:819
Config error: Cannot open config file "/etc/bacula/bacula-dir.conf": Arquivo ou diretório não encontrado [FALHOU]". Este erro ocorre para os 3 serviços;
4º Outra coisa, quero configurar o meu backup para armazenar em uma unidade externa (HD), como faço?
[11] Comentário enviado por desenvolvedormg em 12/06/2008 - 14:21h
Opa, muito boa a matéria me ajudou e muito.
Porem ainda estou com algumas dificuldades.
Seguinte, tenho um script que ja cria um backups do meu banco de dados e das pastas dos scripts.
Ele funfa da seguinte forma.. A cada 1 hora crio 1 backup full do banco de dados e limito o numero de arquivos que irei guardar a 24 arquivos...
Já os scripts eu crio um backup full todo dia e limito a 7 arquivos. entao eu tenho 1 arquivo por semana..
Porem esses backups ficam muito grandes, entao queria fazer da seguinte forma... continuar com 24 arquivos para o banco de dados backpeando a cada 1 hora(No bacula eu nao consegui separar os backups, todos os backups estao indo para o mesmo volume, entao 1 acaba subistituindo o outro).... ja os scripts eu queria backupear 1 full a cada segunda feira e incremental durante a semana(Consegui fazendo 1 pool para cada dia da semana, porem quando chega na outra segunda eu perco o full da semana passada ai nao faz sentido existirem os incrementais...).
A minha duvida é a seguinte... como faço para que assim que fechar a semana eu mudar de volume e assim que chegar a um tanto de volumes eu voltar para o inicio e começar a sequencia dnovo?
[15] Comentário enviado por gordux em 19/11/2008 - 16:39h
Senhores,
Estou com um problema que é o seguinte, estou fazendo um teste com o bacula e coloquei o schedule full para rodar 1:00pm e um Incremental 1:30pm, tudo na quarta.
Ele rodou o full certinho depois ele rodou o incremental também certinho, ae para testar eu mudei a hora do full e do incremental, ae ele rodou somente o Incremental, Porque?, porque ele não rodou o full também??
[17] Comentário enviado por davirodrigues em 21/05/2009 - 11:15h
jabuka instalei um bacula aqui, só que estou com um problema, segue abaixo o mesmo, vê se vc pode me ajudar, ou alguem que tenha passado por isso:
*status
Status available for:
1: Director
2: Storage
3: Client
4: All
Select daemon type for status (1-4): 2
Automatically selected Storage: File
Connecting to Storage daemon File at 127.0.0.1:9103
cilindro-sd Version: 2.2.8 (26 January 2008) i486-pc-linux-gnu debian lenny/sid
Daemon started 21-May-09 11:02, 0 Jobs run since started.
Heap: heap=221,184 smbytes=10,833 max_bytes=76,108 bufs=59 max_bufs=62
Sizes: boffset_t=8 size_t=4 int32_t=4 int64_t=8
Running Jobs:
No Jobs running.
====
Jobs waiting to reserve a drive:
====
Terminated Jobs:
JobId Level Files Bytes Status Finished Name
===================================================================
1 Full 0 0 Error 19-May-09 14:37 Client1
8 Full 0 0 OK 21-May-09 09:36 Cpd02
10 Full 0 0 Cancel 21-May-09 09:48 Cpd02
====
Device status:
Device "storage" (/mnt/backup) is not open. <<<<<< # Esse é o problema, ele sempre fica assim, ja não sei o que fazer...
====
[18] Comentário enviado por brunonunes em 11/12/2009 - 11:38h
davirodrigues tive o mesmo problema que o seu, após execuçao de um job ele desmonta a fita, resolvi esse problema configurando a opçao automount on na console de config do bacula....
estou com um problema referente ao tamanho do meu volume de dados que é maior que o tamanho das fitas que utilizo DDS-5 72 Gb..
oq sugerem como soluçao para um backup full, utilizar um pool de fitas ou utilizar uma estrategia diferente de backup full.
[19] Comentário enviado por Jeparre em 30/12/2009 - 15:37h
Olá Pessoal.
Por favor, alguém poderia me ajudar.
Quando dou start no bacula aparece o seguinte erro: ERROR TERMINATION at dird_conf.c:1352 mediatype item is required in storage resource, but not found.
Meu bacula-sd:
Storage {
Name = server-sd
SDPort = 9103
WorkingDirectory = "/var/bacula/working"
Pid Directory = "/var/run"
Maximum Concurrent Jobs = 1
}
Director {
Name = server-dir
Password = "senha"
}
Device {
Name = HD
Device Type = File
Media Type = File
Archive Device = /media/DADOS/Backup
SpoolDirectory = /media/DADOS/Backup/tmp;
LabelMedia = yes;
Random Access = Yes;
AutomaticMount = yes;
RemovableMedia = no;
AlwaysOpen = no;
}
Messages {
Name = Standard
director = server-dir = all
}
[20] Comentário enviado por tiago.pacato em 25/03/2010 - 10:15h
Instalei o servidor bacula em uma maquina normal com hds de 250 gb, os backups estão sendo feitos normalmente, os catalagos criados, tudo ok. a dúvida é, para passar os backups que ja foram feitos nessa maquina para uma maquina nova que acabamos de adquirir, o que eu poderia fazer? para não perder o que ja foi feito no servidor bacula antigo.
[21] Comentário enviado por JJSantos em 11/03/2017 - 01:19h
[20] Comentário enviado por tiago.pacato em 25/03/2010 - 10:15h
Instalei o servidor bacula em uma maquina normal com hds de 250 gb, os backups estão sendo feitos normalmente, os catalagos criados, tudo ok. a dúvida é, para passar os backups que ja foram feitos nessa maquina para uma maquina nova que acabamos de adquirir, o que eu poderia fazer? para não perder o que ja foi feito no servidor bacula antigo.
Grato!
contato: tiago.rjonatas@gmail.com
Copiar as configuração, ou faz uma imagem do servidor.