You are on page 1of 17

Montando um completo servidor de backup usando Bacula [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?

codigo=1910

Montando um completo servidor de backup usando Bacula

Autor: Sandro Mendes <sandro at jaboticabal.sp.gov.br>


Data: 29/12/2004

Introdução

Bacula: completa plataforma cliente/servidor de Backup

Sandro R. Mendes
sandro@jaboticabal.sp.gov.br

Muito se questiona sobre a preocupação com a segurança da informação nas empresas, normas, padrões e
soluções disponíveis para (tentar) garantir uma infra-estrutura que suporte todos os negócios de uma empresa.

Mas desde os primórdios da informática, quando o assunto é segurança, logo vem em mente o conceito de
backup. Antes de qualquer adoção de políticas de segurança e normas que regem boas práticas em segurança da
informação, o bom administrador de sistemas que se preze deve ter um trabalho de backup assegurando o mínimo
de segurança.

Seguindo essa linha e buscando sempre soluções que atendam as necessidades das empresas, o Bacula
apresenta-se como uma plataforma cliente/servidor completa de Backup, suportando múltiplas plataformas
(inclusive clientes Windows), uso de discos e/ou fitas para o armazenamento dos dados, diferentes agendamentos
para um mesmo trabalho de backup, uso de uma mesma fita para vários backups, e muitas outras opções. E o
melhor de tudo é que o Bacula é open source! Em resumo, Bacula é uma completa solução para criação de
trabalhos de backup em rede, com poderosos recursos, múltiplas funções e de fácil configuração.

A seguir apresentarei minha experiência com o Bacula, desde a instalação num sistema FreeBSD até sua
configuração e agendamento de trabalhos, lógico de acordo com cada necessidade.

1 de 17 24/8/2007 15:24
Montando um completo servidor de backup usando Bacula [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1910

Instalação

Apesar de a instalação ter sido realizada no FreeBSD via ports, acredito que não haverá problemas na instalação
em distribuições Linux; a única mudança será no momento da instalação e nos caminhos onde foram instalados os
arquivos do Bacula.

O Bacula armazena toda sua informação em base de dados MySQL, SQLite e até PostgreSQL, ou seja, antes de
qualquer coisa você deverá ter instalado em seu servidor um desses programas.

Chega de papo e mãos à obra:


Como dito acima, instalei o Bacula no sistema via ports no FreeBSD. A versão utilizada do Bacula foi a 1.34.6.

# cd /usr/ports/sysutils/bacula
# make -DWITH_POSTGRESQL7
# make install

Minha instalação foi simples, quase que padrão. Somente especifiquei o suporte ao banco PostgreSQL versão 7.
Dependendo de seu caso, deverá configurar seu Bacula com suporte ao banco que escolher. Para maiores
informações sobre as opções de instalação do Bacula, consulte o manual on-line ou baixe no formato PDF no site;
até sua documentação é excelente, completa até com exemplos.

Agora é hora de criar o banco de dados Bacula em seu SGBD. Nesse exemplo utilizei o PostgreSQL:

# cd /usr/ports/sysutils/bacula/work/bacula-1.34.6/src/cats
# ./create_postgresql_database
# ./make_postgresql_tables
# ./grant_postgresql_privileges

Segurança

2 de 17 24/8/2007 15:24
Montando um completo servidor de backup usando Bacula [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1910

Os daemons utilizados pelo Bacula deverão rodar com usuário "bacula". Na instalação via ports o usuário/grupo
foram criados automaticamente. No arquivo /etc/passwd podemos encontrar a seguinte linha:

bacula:*:1002:1002::0:0:Bacul Daemon:/var/db/bacula:/sbin/nologin

Em seguida, devemos definir as permissões para o diretório onde se encontra o BD Bacula:

# chown -R bacula:bacula /var/db/bacula/

Configuração do Bacula

Como deu pra perceber, a instalação do Bacula é simples e sem complicações. Por padrão os arquivos de
configurações ficam em /usr/local/etc. Agora é a hora da configuração do servidor e, para isso, deve-se entender
sua estrutura organizacional. Divide-se em 3 partes:

o Director (bacula-dir.conf) é a parte mais complexa do sistema, afinal é a principal onde figura-se toda a
configuração dos trabalhos de backup (job), agendamentos, pools, seleção do que fazer backup (FileSet),
definição do tipo de armazenamento, etc. Enfim, é onde se configura os clientes e arquivos que irão fazer
parte do backup, além de se comunicarem com os clientes e dispositivos de armazenamento.
File Daemon (bacula-fd.conf) representa uma espécie de agente, rodando em cada máquina que for
participar de um trabalho de backup. Em resumo, todo cliente deverá ter rodando esse daemon,
estabelecendo uma comunicação com o Director, que por sua vez gerencia todas essas comunicações.
Storage Daemon (bacula-sd.conf) é o arquivo de configuração do Bacula onde se insere os dispositivos de
armazenamento, como fitas e discos. Esse daemon é responsável por estabelecer a comunicação com esses
dispositivos.

Em resumo, a boa divisão das funções que compõem um serviço de backup do Bacula permite sua fácil
configuração e administração. Para a configuração geral de um dado backup, edite o arquivo bacula-dir.conf; para
configurar um cliente, é só editar o file daemon (bacula-fd.conf) na máquina que irá se comunicar com o servidor
(onde se encontra a unidade de armazenamento); e para configurar o tipo de dispositivo que irá armazenar os
trabalhos, é só editar o bacula-sd.conf.

3 de 17 24/8/2007 15:24
Montando um completo servidor de backup usando Bacula [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1910

Antes de iniciar a configuração desses 3 arquivos, deve-se ter em mente o sistema de backup que você irá adotar
para sua empresa. Ele irá variar de acordo com a necessidade de negócio. Nesse artigo o exemplo de configuração
será baseado no seguinte sistema:

Backup do próprio servidor, realizando a cópia completa de todos os sites hospedados, no período de
Segunda à Sexta. Como deu pra perceber, configurei o Bacula no mesmo servidor Web, onde se encontra a
unidade de dispositivo (fita DAT Sony SDT-9000).
Backup do servidor de e-mail, realizando a cópia de todas as pastas das contas existentes, também no
mesmo período que o servidor Web. Esse é o cliente, rodando FreeBSD.

De acordo com os trabalhos definidos, agora é chegada a hora de configurar o Bacula para atender esses backups.
Abaixo seguem os exemplos dos arquivos de configurações do servidor (onde se encontra a fita DAT). Não irei
explicar todos os parâmetros de configuração, até porque são muitos. Como sempre, é só consultar o manual do
Bacula para obter todas as informações sobre os recursos disponíveis.

Primeiro irei configurar o arquivo bacula-sd.conf, inserindo as principais diretivas sobre o dispositivo de
armazenamento:

# vi /usr/local/etc/bacula-sd.conf

Storage {
Name = "server-dir"
# por padrão o bacula já utiliza o nome do servidor em que foi instalado,
# nesse caso o director será identificado como server-dir

SDPort = 9103
# porta de conexão com o daemon

WorkingDirectory = "/var/db/bacula"
PidDirectory = "/var/run"
SubSysDirectory = "/var/db/bacula"
# diretórios utilizados pelo Bacula, também padrão
}

4 de 17 24/8/2007 15:24
Montando um completo servidor de backup usando Bacula [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1910

#
# List Directors who are permitted to contact Storage daemon
#
Director {
Name = server-dir
Password = "senha"
}

#
# Devices supported by this Storage daemon
# To connect, the Director must have the same Name and MediaType,
# which are sent to the File daemon
#
Device {
Name = "DDS-3"
Media Type = DDS-3
Archive Device = /dev/sa0
# nesse caso, o dispositivo configurado é uma fita DAT Sony SDT-9000,
# DDS-3. O caminho para acesso no FreeBSD é o /dev/sa0, portanto muita
# atenção para a configuração de acordo com seu sistema

AutomaticMount = yes; # when device opened, read it


Offline On Unmount = yes
AlwaysOpen = yes;
RemovableMedia = yes;
Hardware End of Medium = No
BSF at EOM = yes
}

Messages {
Name = Standard
director = server-dir = all
operator = root = mount
}

5 de 17 24/8/2007 15:24
Montando um completo servidor de backup usando Bacula [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1910

# mensagens também padrão

Agora é hora de configurar o bacula-fd.conf de nosso servidor, afinal ele também será backupeado. Em resumo, o
único parâmetro alterado foi a conexão com o Director, onde você deve inserir a mesma senha cadastrada no

bacula-dir.conf

. Obviamente elas devem coincidir para que sejam estabelecidas as conexões entre o Director, seu cliente, e o
dispositivo.

#
# Default Bacula File Daemon Configuration file
#
# 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 = server-dir
Password = "senha"
}

#
# "Global" File daemon configuration specifications
#
FileDaemon {
Name = ns2-fd
FDport = 9102
WorkingDirectory = /var/db/bacula
Pid Directory = /var/run
# arquivos de conexão com o daemon, também padrão
}

6 de 17 24/8/2007 15:24
Montando um completo servidor de backup usando Bacula [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1910

# Send all messages except skipped files back to Director


Messages {
Name = Standard
director = server-dir = all, !skipped
}

Como teremos 2 clientes, o próprio servidor e outra máquina, tendo seus dados backupeados é preciso configurar
somente o file daemon (bacula-fd.conf) da máquina conectada em rede. Antes disso, é preciso instalar o Bacula
com a opção -enable-only-client. Após essa etapa, é só editar o arquivo com as mesmas configurações acima.
Depois é só startar seu daemon. Para ter certeza de que tudo está em ordem com esse cliente, certifique-se de que
o daemon esteja rodando:

# ps awux | grep bacula


bacula 25934 0.0 0.7 3104 1892 ?? Ss Mon03PM 0:23.72 /sbin/bacula-fd -v -c
/usr/local/etc/bacula-fd.conf

Beleza, está funcionando. A porta 9102 está aberta, pronta pra estabelecer conexão com o servidor quando esse
efetuar o backup.

Agora é chegada a hora de configurar o arquivo principal do Bacula, o Director. Nele iremos inserir os jobs,
agendamentos, clientes e os arquivos a serem backupeados:

#
# Kerns Production Bacula Director Daemon Configuration file
#

Director {
Name = server-dir
DIRport = 9101 # where we listen for UA connections
QueryFile = "/usr/local/etc/query.sql"
WorkingDirectory = "/var/db/bacula"
PidDirectory = "/var/run"
SubSysDirectory = "/var/db/bacula"
Maximum Concurrent Jobs = 2

7 de 17 24/8/2007 15:24
Montando um completo servidor de backup usando Bacula [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1910

# como teremos 2 jobs sendo executados num mesmo agendamento, a #parâmetro foi alterado. O padrão é 1.
Password = senha
}

Schedule {
Name = "Diario"
Run = Level=Full Pool=SegundaPool Monday at 10:00pm
Run = Level=Full Pool=TercaPool Tuesday at 10:00pm
Run = Level=Full Pool=QuartaPool Wednesday at 10:00pm
Run = Level=Full Pool=QuintaPool Thursday at 10:00pm
Run = Level=Full Pool=SextaPool Friday at 10:00pm
# no agendamento, o backup será realizado
# de segunda à sexta, sempre às 22 horas. Criei um pool dos
# volumes para cada dia, afinal cada fita terá sua label
# para cada dia.
}

Job {
# essa é a configuração do trabalho do cliente, a maquina remota.
Name = "Servidor NS1"
Type = Backup
Level = Full #backup do tipo full
Client=ns1-fd #esse parâmetro será configurado logo abaixo
FileSet="Server-NS1" #seleção do que será backupeado, também logo #abaixo
Messages = Standard
Storage = DDS-3 #dispositivo onde será armazenado o job
Pool = Default
Schedule = "Diario"
Write Bootstrap = "/var/db/bacula/Client1.bsr"
Priority = 10
}

Job {
Name = "Servidor NS2-local"

8 de 17 24/8/2007 15:24
Montando um completo servidor de backup usando Bacula [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1910

Type = Backup
Level = Full
Client=ns2-local
FileSet="Server-NS2"
Messages = Standard
Storage = DDS-3
Pool = Default
Schedule = "Diario"
RunAfterJob = "/usr/local/etc/ejeta_tape.sh" # esse parâmetro especifica a
# execução de um comando após o término do job. Esse script faz com que a
# mídia seja desmontada e ejetada. O script está disponível no término desse
# arquivo.
Write Bootstrap = "/var/db/bacula/Client1.bsr"
Priority = 10
}

# Standard Restore template, to be changed by Console program


Job {
Name = "RestoreFiles"
Type = Restore
Client= ns2-local
FileSet="Full Set"
Storage = DDS-3
Messages = Standard
Pool = Default
Where = /tmp/bacula-restores
}

FileSet {
# insira os arquivos/diretórios que deverão ser copiados
Name = "Server-NS2"
Include = signature=MD5 {
/www
}
Exclude = {

9 de 17 24/8/2007 15:24
Montando um completo servidor de backup usando Bacula [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1910

# caso queira excluir algum diretório


/www/data
/tmp/* }
}

FileSet {
Name = "Server-NS1"
Include = signature=MD5 {
/var/mail
}
Exclude = {
/tmp/* }
}

FileSet {
Name = "Full Set"
Include = signature=MD5 {
# @/etc/backup.list
}
Exclude = { }
}

# Definição do dispositivo de armazenamento


Storage {
Name = DDS-3
Address = 172.16.0.3 #atenção, coloque sempre o IP e não localhost
SDPort = 9103
Password = senha
Device = "DDS-3" # deve ser o mesmo do que o especificado no
# bacula-sd.conf
Media Type = DDS-3
}

10 de 17 24/8/2007 15:24
Montando um completo servidor de backup usando Bacula [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1910

# máquina local
Client {
Name = ns2-local
Address = localhost
FDPort = 9102
Catalog = BackupDB
Password = senha
File Retention = 30d # 80 days
Job Retention = 1y # one year
AutoPrune = yes # Prune expired Jobs/Files
}

# máquina remota
Client {
Name = ns1-fd
Address = 172.16.0.2
FDPort = 9102
Catalog = BackupDB
Password = senha
File Retention = 30d # 80 days
Job Retention = 1y # one year
AutoPrune = yes # Prune expired Jobs/Files
}

Catalog {
Name = BackupDB
dbname = bacula; user = bacula; password = ""
}

# o Bacula oferece o recurso de enviar os relatórios (logs)


# por e-mail. Para isso insira o seu servidor smtp e
# seu e-mail
Messages {
Name = Standard
mailcommand = "/home/bacula/bin/smtp -h servidor.smtp -f \"\(Bacula\) %r\" -s \"Bacula: %t %e of %c %l\" %r"

11 de 17 24/8/2007 15:24
Montando um completo servidor de backup usando Bacula [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1910

operatorcommand = "/home/bacula/bin/smtp -h servidor.smtp -f \"\(Bacula\) %r\" -s \"Bacula: Intervention


needed for %j\" %r"
MailOnError = usuario@mail.com = all
append = "/home/bacula/bin/log" = all
operator = YOUR-EMAIL@YOU.com = mount
console = all
}

Pool {
Name = Default
Pool Type = Backup
Recycle = yes # Bacula can automatically recycle Volumes
AutoPrune = yes # Prune expired volumes
Volume Retention = 1d # one year
}

Pool {
Name = SegundaPool
Pool Type = Backup
Recycle = yes
AutoPrune = yes
Volume Retention = 6d # o volume poderá ser utilizado novamente
# para backup após 6 dias
Accept Any Volume = yes
}
Pool {
Name = TercaPool
Pool Type = Backup
Recycle = yes
AutoPrune = yes
Volume Retention = 6d
Accept Any Volume = yes
}

12 de 17 24/8/2007 15:24
Montando um completo servidor de backup usando Bacula [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1910

Pool {
Name = QuartaPool
Pool Type = Backup
Recycle = yes
AutoPrune = yes
Volume Retention = 6d
Accept Any Volume = yes
}

Pool {
Name = QuintaPool
Pool Type = Backup
Recycle = yes
AutoPrune = yes
Volume Retention = 6d
Accept Any Volume = yes
}

Pool {
Name = SextaPool
Pool Type = Backup
Recycle = yes
AutoPrune = yes
Volume Retention = 6d
Accept Any Volume = yes
}

Agora crie um script ejeta_tape.sh e salve em /usr/local/etc/. Não esqueça de definir permissão sobre esse arquivo
para que o Bacula possa executá-lo.

#!/bin/sh

/usr/local/sbin/bconsole -c /usr/local/etc/bconsole.conf <<END_OF_DATA


unmount
quit

13 de 17 24/8/2007 15:24
Montando um completo servidor de backup usando Bacula [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1910

END_OF_DATA

Após a configuração desses 3 arquivos no servidor, o serviço Bacula deverá ser iniciado. No meu caso, a
instalação criou o daemon que controla os serviços em /usr/local/etc/rc.d.

# bacula.sh start

Caso não haja erro de configuração, o Bacula será iniciado e pronto pra executar os trabalhos de backup. Para
confirmar sua execução:

# ps awux | grep bacula


bacula 50839 0.0 0.4 3068 1864 ?? Ss 4:20PM 0:09.66 /usr/local/sbin/bacula-sd -u bacula -g operator -v -c
/usr/local/etc/
root 50841 0.0 0.4 3024 1844 ?? Ss 4:20PM 0:20.00 /usr/local/sbin/bacula-fd -u root -g wheel -v -c
/usr/local/etc/bacul
bacula 50845 0.0 0.5 5800 2564 ?? Ss 4:20PM 0:10.23 /usr/local/sbin/bacula-dir -u bacula -g bacula -v -c
/usr/local/etc/b
root 53861 0.0 0.2 1448 848 p0 S+ 11:40AM 0:00.00 grep bacula

Administrando o Bacula

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

14 de 17 24/8/2007 15:24
Montando um completo servidor de backup usando Bacula [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1910

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.

15 de 17 24/8/2007 15:24
Montando um completo servidor de backup usando Bacula [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1910

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.

Considerações finais

Minha idéia principal nesse artigo é divulgar essa excelente e poderosa ferramenta de Backup, transmitindo um
conteúdo introdutório do Bacula e todas as opções que ele nos oferece. Existem hoje muitas opções de backup,
mas essa ferramenta foi a mais completa e de fácil configuração encontrada, qualquer administrador com
conhecimentos básicos não irá encontrar problemas.

Para obter maiores informações sobre os parâmetros de configuração, consulte o manual, rico em informações.
Ah, e também os fóruns de discussão sobre o Bacula, e o canal IRC (#bacula). O pessoal ajuda mesmo.

Espero ter ajudado a quem procura uma ótima solução em segurança dos dados e agora é com vocês :-)

Abraços
Sandro Ricardo Mendes

16 de 17 24/8/2007 15:24
Montando um completo servidor de backup usando Bacula [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1910

http://www.vivaolinux.com.br/artigos/verArtigo.php?codigo=1910

Voltar para o site

17 de 17 24/8/2007 15:24

You might also like