Instalação e Configuração do Bacula Server no Debian Wheezy e Configuração de Clientes Linux e Windows

  • Disco de 100GB para os backups
  • ip do servidor: 192.168.0.80

Prepare o seu sistema com o seguinte script http://wiki.douglasqsantos.com.br/doku.php/confinicialwheezy_en para que não falte nenhum pacote ou configuração.

Vamos ajustar o hosts

vim /etc/hosts
127.0.0.1       localhost
192.168.0.80    bacula.douglasqsantos.com.br      bacula
[...]

Vamos instalar os pré-requisitos para podermos compilar o bacula

aptitude install libreadline-dev libreadline6-dev postgresql postgresql-client postgresql-common postgresql-contrib liblzo2-2 liblzo2-dev \
postgresql-doc postgresql-server-dev-all  postgresql-server-dev-9.1 libreadline6-dev libreadline6 lib32readline6 lib32readline6-dev makepasswd \
libclass-dbi-pg-perl libcompress-zlib-perl zlib-bin zlib1g-dev libio-compress-zlib-perl libghc-zlib-dev libssl-dev acl-dev libacl1-dev -y

Agora vamos ajustar o acesso ao postgresql

sed -i "s/#listen_addresses = 'localhost'/listen_addresses = '*'/g" /etc/postgresql/9.1/main/postgresql.conf

Agora precisamos reiniciar o postgresql

/etc/init.d/postgresql restart

Agora vamos criar um arquivo para importar para preparar a base para o bacula

vim /tmp/base.sql
ALTER USER postgres WITH PASSWORD 'senha';
CREATE USER bacula WITH PASSWORD 'senha';
CREATE DATABASE bacula WITH OWNER bacula ENCODING 'SQL_ASCII' TEMPLATE=template0;

Agora precisamos importar a base

su postgres -c 'psql -f /tmp/base.sql'

Agora vamos criar os diretórios para o bacula

mkdir /var/lib/bacula
mkdir /var/run/bacula
mkdir /var/log/bacula
mkdir -p /etc/bacula/scripts

Agora vamos criar o usuário bacula

useradd -s /bin/bash -d /var/lib/bacula  bacula

Agora vamos ajustar as permissões dos diretórios

chown -R bacula:bacula /var/lib/bacula /var/run/bacula /var/log/bacula /etc/bacula

Agora vamos obter o pacote do bacula

cd /usr/src
wget -c http://wiki.douglasqsantos.com.br/Downloads/bacula/bacula-5.2.13.tar.gz

Agora vamos desempacotar o bacula

tar -xzvf bacula-5.2.13.tar.gz

Agora vamos acessar a pasta do bacula

cd bacula-5.2.13/

Agora vamos preparar o pacote do bacula

CFLAGS="-g -Wall" ./configure --enable-smartalloc --with-postgresql  --with-db-name=bacula --with-db-user=bacula --with-db-password=senha \
--with-db-port=5432 --with-working-dir=/var/lib/bacula --with-pid-dir=/var/run/bacula --with-logdir=/var/log/bacula --with-readline=/usr/include/readline \
--disable-conio --with-scriptdir=/etc/bacula/scripts

Agora vamos mandar compilar o bacula

make

Agora vamos mandar instalar o bacula

make install

Agora vamos mandar instalar os binários de inicialização do bacula

make install-autostart

Agora vamos ajustar as permissões dos arquivos

chown -R bacula:bacula /etc/bacula

Agora vamos preparar o banco de dados para o bacula

su - bacula -c '/etc/bacula/scripts/make_postgresql_tables -U bacula -d bacula'

Agora vamos desabilitar o shell do bacula

usermod -s /bin/false bacula

Agora vamos fazer o backup dos arquivos de configuração do bacula

mkdir /usr/src/olds
cp -Rfa /etc/bacula /usr/src/olds

Agora vamos deixar o arquivo do director do bacula da seguinte forma

vim /etc/bacula/bacula-dir.conf
############################################
# ARQUIVO DE CONFIGURACAO PADRAO DO BACULA #
############################################

# DEFININDO O 'DIRECTOR' #

Director {
  Name = bacula-dir
  DIRport = 9101                                      # Porta de Comunicacao do Bacula
  QueryFile = "/etc/bacula/scripts/query.sql"         # Script de Query
  WorkingDirectory = "/var/lib/bacula"                # Diretório de Trabalho do Bacula
  PidDirectory = "/var/run/bacula"                    # PID do Bacula
  Maximum Concurrent Jobs = 1                         # Maximo de Backups em Execucao
  Password = "Cv70F6pf1t6pBopT4vQOnigDrR0v3L"         # Senha para ajustar no Bconsole
  Messages = Daemon                                   # Nivel de mensagens
}

# DEFINICOES DE CLIENTES E JOBS #
# ARQUIVO ONDE SERA CONFIGURADO E AJUSTADO OS CLIENTES E JOBS DO BACULA #

@/etc/bacula/bacula-dir-clients-and-jobs.conf

# DEFINICOES DE ARQUIVOS PARA BACKUP - (FILE SETS)#
# ARQUIVO ONDE SERA CONFIGURADO E AJUSTADO OS 'FILE SETS' DO BACULA #

@/etc/bacula/bacula-dir-filesets.conf


# DEFINICOES DE AGENDAMENTO DOS BACKUPS #
@/etc/bacula/bacula-dir-agendamento.conf


# DEFINICOES DE DISPOSITIVO DE ARMAZENAMENTO #
# AQUI DEFINIMOS O STORAGE A SER UTILIZADO PELO BACULA #


Storage {
  Name = File
  Address = bacula.douglasqsantos.com.br                       # Pode ser usado Nome ou IP
  SDPort = 9103                                      # Porta de Comunicação do Storage
  Password = "LE_T_-c_55qu1f777Dm52map-s3xpgR4q"     # Senha Storage Bacula
  Device = FileStorage                               # Device de Storage
  Media Type = File                                  # Tipo de Midia (Fita, DVD, HD)
  Maximum Concurrent Jobs = 10                       # Num. Maximo de Jobs executados nessa Storage.
}

# Generic catalog service
Catalog {
  Name = Catalogo            # Nome do Catalogo
  dbname = "bacula"; dbaddress = 127.0.0.1;  dbuser = "bacula"; dbpassword = "senha"  # Configuracoes do PostGreSQL
}

# Reasonable message delivery -- send most everything to email address
#  and to the console
Messages {
  Name = Standard

# ABAIXO E POSSIVEL AJUSTAR COMO O BACULA ENVIARA MENSAGENS AO ADMINISTRADOR #

  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"
  mail = root@localhost = all, !skipped
  operator = root@localhost = mount
  console = all, !skipped, !saved
  append = "/var/log/bacula/bacula.log" = all, !skipped
  catalog = all
}

# Message delivery for daemon messages (no job).
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/log/bacula/bacula.log" = all, !skipped
}

# POOL PADRAO DEFINIDO
Pool {
  Name = File                         # o Job de Backup por padrao aponta para o 'File'
  Pool Type = Backup          # O Tipo do Pool = Backup, Restore, Etc.
  Recycle = yes                       # Bacula can automatically recycle Volumes
  AutoPrune = yes                     # Prune expired volumes
  Volume Retention = 1 month          # Retencao de Volume = 1 Mes
  Volume Use Duration = 23 hours      # Duracao de um volume aberto
  Maximum Volume Bytes = 20 Gb        # Tamanho maximo de um volume
  Maximum Volumes      = 10           # Volume Bytes X Volumes <= Dispositivo de backup
  LabelFormat          = "volume"     # Nome Default do Volume
}


# Scratch pool definition
# Volumes que serao emprestado a alguma Pool temporariamente
Pool {
  Name = Scratch
  Pool Type = Backup
}

#
# Restricted console used by tray-monitor to get the status of the director
#
Console {
  Name = bacula-mon
  Password = "aNy+nof5uHWBvO3tv8YRy5OJo3YVDsuAuET06WRmDcuw"
  CommandACL = status, .status
}

Agora vamos criar o arquivo que controla os agendamentos do bacula

vim /etc/bacula/bacula-dir-agendamento.conf
#################################################################
## ARQUIVO DE CONFIGURACAO DE AGENDAMENTO DE TAREFAS DO BACULA ##
#################################################################
# DEFINICOES DE AGENDAMENTO DOS BACKUPS #

# AGENDAMENTO PADRAO DO BACULA - CICLO SEMANAL DE BACKUP #
Schedule {
  Name = "WeeklyCycle"                          # Ciclo Semanal de Backup
  Run = Level=Full 1st sun at 23:05                   # Backup Full no Primeiro Domingo do Mes as 23:05 hrs
  Run = Level=Differential 2nd-5th sun at 16:50       # Backup Diferencial de Seg. a Sabado as 23:05 hrs
  Run = Level=Incremental mon-sat at 10:30            # Backup Incremental de Seg. a Sabado as 23:05 hrs
}

# AGENDAMENTO PARA SERVIDOR LINUX - CICLO SEMANAL DE BACKUP #
Schedule {
  Name = "CicloBackupProxy"
  Run = Level=Full 1st sun at 23:00
  Run = Level=Full mon-sat at 10:00
}

# AGENDAMENTO PARA SERVIDOR WINDOWS SERVER - CICLO SEMANAL DE BACKUP #
Schedule {
  Name = "CicloBackupWindows"                          # Ciclo Semanal de Backup
  Run = Level=Full 1st sun at 23:00                          # Backup Full no Primeiro Domingo do Mes as 23:05 hrs
  Run = Level=Differential 2nd-5th sun at 14:10              # Backup Diferencial de Seg. a Sabado as 11:40 hrs
  Run = Level=Full mon-sat at 10:00                          # Backup Incremental de Seg. a Sabado as 11:25
}

# DEFINICOES DE AGENDAMENTO DO BACKUP DOS CATALOGOS #
#        FEITO SEMPRE DEPOIS DOS BACKUPS            #
Schedule {
  Name = "WeeklyCycleAfterBackup"
  Run = Level=Full sun-sat at 09:15
}

Agora vamos criar o arquivo de controle dos clientes do bacula e jobs do bacula

vim /etc/bacula/bacula-dir-clients-and-jobs.conf
###################################################
## ARQUIVO DE CONFIGURACAO PARA CLIENTES E JOBS  ##
###################################################

# JOB PADRAO PARA O BACULA SERVER #
JobDefs {
        Name = "DefaultJobs"                            # Nome do Job Padrao
        Type = Backup                                   # Tipo de Job (Backup, Restore, Verificacao)
        Level = Incremental                             # Nivel do Job (Full, Incremental, Diferencial)
        Client = bacula-fd                              # Nome do Cliente FD
        FileSet = "Full Set"                            # File Set Definido para Esse Job
        Schedule = "WeeklyCycle"                        # Agendamento Definido para Esse Job
        Storage = File                                  # Define Storage
        Messages = Standard                             # Nivel de mensagens
        Pool = File                                     # Define a Pool
        Priority = 10                                   # Qual o nivel de Prioridade
        Write Bootstrap = "/var/lib/bacula/%c.bsr"      # Arquivo gerado pelo Bacula para armazenar informacoes de backups feitos em seus clientes.
# AS OPCOES ABAIXO EVITAM QUE SEJAM DUPLICADO JOBS NO SERVIDOR, CASO TENHA UM JOB DUPLICADO O MESMO E CANCELADO
        Allow Duplicate Jobs = no                       # Permite Jobs Duplicados
        Cancel Lower Level Duplicates = yes             # Cancela niveis inferiores duplicados
}

# JOB DE BACKUP PARA OS SERVIDORES WINDOWS SERVER #
JobDefs {
        Name = "DefaultWindows"                         # Nome do Job Para Servidores Windows
        Type = Backup                                   # Tipo de Job (Backup, Restore, Verificacao)
        Level = Incremental                             # Nivel do Job (Full, Incremental, Diferencial)
        Client = bacula-fd                              # Nome do Cliente FD
        FileSet = "WindowsFS"                           # File Set Definido para Esse Job
        Schedule = "CicloBackupWindows"                 # Agendamento Definido para Esse Job
        Storage = File                                  # Define Storage
        Messages = Standard                             # Nivel de mensagens
        Pool = File                                     # Define a Pool
        Priority = 10                                   # Qual o nivel de Prioridade
        Write Bootstrap = "/var/lib/bacula/%c.bsr"      # Arquivo gerado pelo Bacula para armazenar informacoes de backups feitos em seus clientes.
# AS OPCOES ABAIXO EVITAM QUE SEJAM DUPLICADO JOBS NO SERVIDOR, CASO TENHA UM JOB DUPLICADO O MESMO E CANCELADO
        Allow Duplicate Jobs = no                       # Permite Jobs Duplicados
        Cancel Lower Level Duplicates = yes             # Cancela niveis inferiores duplicados
}

# JOB DE BACKUP DO CATALOGO #
Job {
        Name = "BackupCatalogo"                                                    # Nome do Job Para Backup do Catalogo
        JobDefs = "DefaultJobs"                                                    # JobDefs usado para operacao
        Level = Full                                                               # Nivel do Job (Full, Incremental, Diferencial)
        FileSet = "Catalogo"                                                       # File Set Definido para Esse Job
        Schedule = "WeeklyCycleAfterBackup"                                        # Agendamento Definido para Esse Job
        RunBeforeJob = "/etc/bacula/scripts/make_catalog_backup.pl Catalogo"       # Acao executada antes da operacao
        Write Bootstrap = "/var/lib/bacula/%c.bsr"                                 # Arquivo gerado pelo Bacula para armazenar informacoes de backups feitos em seus clientes.
        Priority = 11                                                              # Executar depois do Backup - ajustar prioridade
}

# JOB DE RESTAURACAO - (RESTORE) - SO E PRECISO ESSE JOBS PARA RESTAURACAO DE BACKUP #
Job {
        Name = "RestoreFiles"                                                 # Nome do Job Para Restore
        Type = Restore                                                        # Tipo de Job (Backup, Restore, Verificacao)
        Client = bacula-fd                                                    # Nome do Cliente FD
        FileSet = "Full Set"                                                  # File Set Definido para Esse Job
        Storage = File                                                        # Agendamento Definido para Esse Job
        Pool = File                                                           # Define a Pool
        Messages = Standard                                                   # Nivel de mensagens
        Where = /tmp/bacula-restores                                          # Diretorio onde o bacula ira restaurar os arquivos nos clientes
}

#######################################################################
## AQUI VAMOS DEFINIR OS CLIENTES E JOBS PARA CADA CLIENTE ADICIONADO #
#######################################################################

## ------------------------------------------------------------------- ##
# JOB DE BACKUP PARA O DIRECTOR DO BACULA
# HOSTNAME: bacula.douglasqsantos.com.br
# IP: 192.168.0.80

Job {
        Name = "BackupDirector"                           # Nome do Job para Backup do Director (Proprio Servidor Bacula)
        JobDefs = "DefaultJobs"                           # JObDefs Definido
        Client = bacula-fd                                # Cliente fd
}

Client {
  Name = bacula-fd                                        # Cliente fd
  Address = bacula.douglasqsantos.com.br                            # Ajustado no /etc/hosts
  Password = "ExgYbEinJWMf7lsWPBcpffZaNMmiGcbgp"          # Senha do Director do Bacula
  @/etc/bacula/clientes/basic-client  # Arquivo onde contem informacoes sobre o cliente.
}
## -------------------------------------------------------------------- ##

Agora vamos criar o arquivo que define o que vamos copiar dos clientes

vim /etc/bacula/bacula-dir-filesets.conf
###################################################
## ARQUIVO DE CONFIGURACAO PARA CLIENTES E JOBS  ##
###################################################

# LISTA DOS ARQUIVOS QUE SERAO COPIADOS

FileSet {
        Name = "Full Set"                                       # Nome do FileSets
# Arquivos que serao incluidos para serem copiados ao backup
        Include {
                Options {
                        signature = SHA1
                        compression = GZIP
                        verify = pin1
                        onefs = no
                }
                File = /etc
                File = /root
                File = /var/log
                File = /var/www
                File = /home
                File = /usr/sbin
                File = /etc/bacula/
                }
# Arquivos que serao ignorados ao backup
        Exclude {
                File = /var/lib/bacula
                File = /proc
                File = /tmp
                File = /.journal
                File = /.fsck
                }
}

# LISTA DOS ARQUIVOS QUE SERAO COPIADOS - CATALOGO #

FileSet {
        Name = "Catalogo"
# Arquivos que serao incluidos para serem copiados ao backup
        Include {
                Options {
                        signature = SHA1
                }
                File = "/var/lib/bacula/bacula.sql"
                }
}

# LISTA DOS ARQUIVOS QUE SERAO COPIADOS - SISTEMA WINDOWS SERVER #

FileSet {
        Name = "WindowsFS"
        #Habilita o Volume shadow copy service
        Enable VSS = yes
# Arquivos que serao incluidos para serem copiados ao backup
        Include {
#               Plugin = "alldrivers"
                        Options {
                                signature = SHA1
                                Compression = GZIP
                                OneFS = no
                                }
                        File = "C:/"
                        File = "F:/"
                }
}

Agora vamos configurar o bacula como cliente tambem

vim /etc/bacula/bacula-fd.conf
##############################################################
# ARQUIVO DE CONFIGURACAO DO FILE DAEMON DO BACULA           #
##############################################################

#
# List Directors who are permitted to contact this File daemon
#
Director {
  Name = bacula-dir                                  # Nome do Director
  Password = "ExgYbEinJWMf7lsWPBcpffZaNMmiGcbgp"     # ESTA SENHA ESTA DEFINIDA NO ARQUIVO DE CLIENTE EM /ETC/BACULA/BACULA-DIR-CLIENTS-AND-JOBS.CONF
}

#
# Restricted Director, used by tray-monitor to get the
#   status of the file daemon
#
Director {
  Name = bacula-mon
  Password = "z27BNYXA9dx1SZWk1vp-kSZ8azwz2HMS8"    # ESTA SENHA E UTILIZADO PELO BACULA-MONITOR
  Monitor = yes
}

#
# "Global" File daemon configuration specifications
#
FileDaemon {
  Name = bacula-fd                                  # Nome do Bacula-fd
  FDport = 9102                                     # Porta de Comunicacao do bacula-fd
  WorkingDirectory = /var/lib/bacula                # Diretorio de trabalho
  Pid Directory = /var/run/bacula                   # Diretorio de Pid
  Maximum Concurrent Jobs = 20                      # Numero maximo de jobs executados no bacula
  FDAddress = 0.0.0.0                     # COMENTAR OU REMOVER ESSA LINHA PARA QUE ELE POSSA 'OUVIR' CONEXOES EM TODAS AS INTERFACES
}

# Send all messages except skipped files back to Director
Messages {
  Name = Standard
  director = bacula-dir = all, !skipped, !restored        # AS MENSAGEM SAO ENCAMINHADAS PARA O 'BACULA-DIR' DEFINIDO NESSA LINHA
}

Agora vamos ajustar o arquivo de controle do armazenamento do backup

vim /etc/bacula/bacula-sd.conf
##############################################################
# ARQUIVO PADRAO DE CONFIGURACAO DE STORAGE DO BACULA      #
##############################################################

Storage {
  Name = bacula-sd                                # Nome do Storage
  SDPort = 9103                                   # Porta do Director
  WorkingDirectory = "/var/lib/bacula"            # Diretorio de Trabalho
  Pid Directory = "/var/run/bacula"               # Pid do Bacula
  Maximum Concurrent Jobs = 20                    # Maximo de Backups em Execucao
  SDAddress = 0.0.0.0                   # Comentar ou remover essa Linha para nao fazer loopback
}

#
# List Directors who are permitted to contact Storage daemon
#
Director {
  Name = bacula-dir
  Password = "LE_T_-c_55qu1f777Dm52map-s3xpgR4q"
}

#
# Restricted Director, used by tray-monitor to get the
#   status of the storage daemon
# Usado pelo tray-monitor do bacula para obter status do servidor
Director {
  Name = bacula-mon
  Password = "kNuOgEZUq2pqP6hRqPHMHm7UyxCOG1LBf"
  Monitor = yes
}


# ABAIXO DEFINIMOS O NOME, TIPO, E O DIRETÓRIO DE ARQUIVOS DO BACULA

Device {
  Name = FileStorage                      # Nome do Device
  Media Type = File                       # Tipo de Midia (DVD, CD, HD, FITA)
  Archive Device = /srv/backup            # Diretorio onde serao salvos os volumes de backup
  LabelMedia = yes;                       # Midias de Etiquetamento do Bacula
  Random Access = Yes;                    #
  AutomaticMount = yes;                   # Montar Automaticamente
  RemovableMedia = no;                    # Midia Removivel
  AlwaysOpen = no;                        # Manter Sempre Aberto
}

#
# Send all messages to the Director,
# mount messages also are sent to the email address
#
Messages {
  Name = Standard
  director = bacula-dir = all
}

Agora vamos ajustar o arquivo do bconsole que é como vamos conectar no bacula para fazer backup pela linha de comando

vim /etc/bacula/bconsole.conf
#
# Bacula User Agent (or Console) Configuration File
#

Director {
  Name = bacula-dir
  DIRport = 9101
  address = bacula
  Password = "Cv70F6pf1t6pBopT4vQOnigDrR0v3L"
}

Agora vamos criar o diretório para armazenar os clientes

mkdir -p /etc/bacula/clientes

Agora vamos criar o arquivo de controle básico para os clientes

vim /etc/bacula/clientes/basic-client
##########################################################
## ARQUIVO PARA CONFIGURACAO DE CLIENTE LINUX NO BACULA ##
##########################################################
        Catalog = Catalogo        # Nome do Catalogo definido
        File Retention = 30 days                        # Tempo de Retencao do Backup
        Job Retention = 6 months                        # Tempo de Retencao do Job
        AutoPrune = yes                                 # Prune de Jobs/Arquivos Expirados

Agora vamos criar o diretório para armazenar os backups

mkdir -p /srv/backup

Agora vamos ajustar as permissões

chown bacula:tape /srv/backup
chown -R bacula:bacula /etc/bacula

Agora vamos reiniciar os serviços do bacula

/etc/init.d/bacula-dir restart
/etc/init.d/bacula-sd restart
/etc/init.d/bacula-fd restart

Agora vamos ver se o bacula está escutando

netstat -natu | egrep 910*
tcp        0      0 0.0.0.0:9101            0.0.0.0:*               OUÇA      
tcp        0      0 0.0.0.0:9102            0.0.0.0:*               OUÇA      
tcp        0      0 0.0.0.0:9103            0.0.0.0:*               OUÇA 

Agora vamos testar o bacula, vamos verificar se ele está respondendo e se ele está reconhecendo o ele como cliente

Vamos se conectar no bconsole

bconsole
Connecting to Director bacula:9101
1000 OK: bacula-dir Version: 5.2.13 (19 February 2013)
Enter a period to cancel a command.
*

Ele está respondendo, agora vamos testar o cliente bacula ainda no bconsole

*status client=bacula-fd 
Connecting to Client bacula-fd at bacula.douglasqsantos.com.br:9102

bacula-fd Version: 5.2.13 (19 February 2013)  x86_64-unknown-linux-gnu debian 7.9
Daemon started 12-Abr-13 13:23. Jobs: run=0 running=0.
 Heap: heap=270,336 smbytes=23,497 max_bytes=23,644 bufs=53 max_bufs=54
 Sizeof: boffset_t=8 size_t=8 debug=0 trace=0 
Running Jobs:
Director connected at: 12-Abr-13 13:25
No Jobs running.
====

Terminated Jobs:
====
*

O nosso bacula está sendo reconhecido como cliente.

Vamos efetuar um backup do catalogo que é o banco de dados de controle do bacula

*run
Automatically selected Catalog: Catalogo
Using Catalog "Catalogo"
A job name must be specified.
The defined Job resources are:
     1: BackupCatalogo
     2: RestoreFiles
     3: BackupDirector
Select Job resource (1-3): 1
Run Backup job
JobName:  BackupCatalogo
Level:    Full
Client:   bacula-fd
FileSet:  Catalogo
Pool:     File (From Job resource)
Storage:  File (From Job resource)
When:     2014-04-12 13:27:02
Priority: 11
OK to run? (yes/mod/no): yes
Job queued. JobId=1

Aqui o primeiro comando é run que chama a execução do backup, depois precisamos selecionar a opção como eu quero backup do catalogo tive que escolher a opção 1 e por fim precisei confirmar com um yes.

Agora vamos consultar o job de backup ainda no bconsole

list jobs
+-------+----------------+---------------------+------+-------+----------+----------+-----------+
| jobid | name           | starttime           | type | level | jobfiles | jobbytes | jobstatus |
+-------+----------------+---------------------+------+-------+----------+----------+-----------+
|     1 | BackupCatalogo | 2014-04-12 13:27:05 | B    | F     |        1 |   43,545 | T         |
+-------+----------------+---------------------+------+-------+----------+----------+-----------+

Agora se eu consultar o status do cliente novamente no bconsole vamos ter a seguinte mensagem

status client=bacula-fd 
Connecting to Client bacula-fd at bacula.douglasqsantos.com.br:9102

bacula-fd Version: 5.2.13 (19 February 2013)  x86_64-unknown-linux-gnu debian 7.9
Daemon started 12-Abr-13 13:23. Jobs: run=1 running=0.
 Heap: heap=675,840 smbytes=99,492 max_bytes=169,308 bufs=60 max_bufs=79
 Sizeof: boffset_t=8 size_t=8 debug=0 trace=0 
Running Jobs:
Director connected at: 12-Abr-13 13:28
No Jobs running.
====

Terminated Jobs:
 JobId  Level    Files      Bytes   Status   Finished        Name 
======================================================================
     1  Full          1    43.54 K  OK       12-Abr-13 13:27 BackupCatalogo

Como podemos notar temos um backup do tipo full efetuado as 13:27 com sucesso.

Agora vamos fazer backup dos arquivos do servidor

*run 
A job name must be specified.
The defined Job resources are:
     1: BackupCatalogo
     2: RestoreFiles
     3: BackupDirector
Select Job resource (1-3): 3
Run Backup job
JobName:  BackupDirector
Level:    Incremental
Client:   bacula-fd
FileSet:  Full Set
Pool:     File (From Job resource)
Storage:  File (From Job resource)
When:     2014-04-12 13:29:50
Priority: 10
OK to run? (yes/mod/no): yes
Job queued. JobId=2

Aqui o primeiro comando é run que chama a execução do backup, depois precisamos selecionar a opção como eu quero backup dos arquivos do servidor tive que escolher a opção 3 e por fim precisei confirmar com um yes.

Agora vamos consultar o job do nosso backup no bconsole

*list jobs
+-------+----------------+---------------------+------+-------+----------+------------+-----------+
| jobid | name           | starttime           | type | level | jobfiles | jobbytes   | jobstatus |
+-------+----------------+---------------------+------+-------+----------+------------+-----------+
|     1 | BackupCatalogo | 2014-04-12 13:27:05 | B    | F     |        1 |     43,545 | T         |
|     2 | BackupDirector | 2014-04-12 13:29:53 | B    | F     |    1,889 | 22,790,302 | T         |
+-------+----------------+---------------------+------+-------+----------+------------+-----------+

Como pode ser notado temos o backup ok to tipo full com um total de 1.889 arquivos, agora vamos consultar o status do nosso cliente no bconsole

status client=bacula-fd 
Connecting to Client bacula-fd at bacula.douglasqsantos.com.br:9102

bacula-fd Version: 5.2.13 (19 February 2013)  x86_64-unknown-linux-gnu debian 7.9
Daemon started 12-Abr-13 13:23. Jobs: run=2 running=0.
 Heap: heap=819,200 smbytes=101,017 max_bytes=186,312 bufs=65 max_bufs=118
 Sizeof: boffset_t=8 size_t=8 debug=0 trace=0 
Running Jobs:
Director connected at: 12-Abr-13 13:31
No Jobs running.
====

Terminated Jobs:
 JobId  Level    Files      Bytes   Status   Finished        Name 
======================================================================
     1  Full          1    43.54 K  OK       12-Abr-13 13:27 BackupCatalogo
     2  Full      1,889    22.79 M  OK       12-Abr-13 13:29 BackupDirector

Temos agora as informações que o backup ocorreu com sucesso :D.

Agora se eu precisar restaurar por exemplo o /etc/network do backup podemos fazer da seguinte forma no bconsole

*restore

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 comma separated 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: Find the JobIds of the most recent backup for a client
    10: Find the JobIds for a backup for a client before a specified time
    11: Enter a list of directories to restore for found JobIds
    12: Select full restore to a specified Job date
    13: Cancel
Select item:  (1-13): 5
Automatically selected Client: bacula-fd
The defined FileSet resources are:
     1: Catalogo
     2: Full Set
Select FileSet resource (1-2): 2
+-------+-------+----------+------------+---------------------+------------+
| jobid | level | jobfiles | jobbytes   | starttime           | volumename |
+-------+-------+----------+------------+---------------------+------------+
|     2 | F     |    1,889 | 22,790,302 | 2014-04-12 13:29:53 | volume0001 |
+-------+-------+----------+------------+---------------------+------------+
You have selected the following JobId: 2

Building directory tree for JobId(s) 2 ...  +++++++++++++++++++++++++++++++++++++++++++++
1,711 files inserted into the tree.

You are now entering file selection mode where you add (mark) and
remove (unmark) files to be restored. No files are initially added, unless
you used the "all" keyword on the command line.
Enter "done" to leave this mode.

cwd is: /
$ ls
etc/
home/
root/
usr/
var/
$ cd etc/ 
cwd is: /etc/
$ ls
.pwd.lock
Muttrc
Muttrc.d/
X11/
acpi/
adduser.conf
[...]
modules
motd
motd.tail
mtab
nanorc
network/
networks
nsswitch.conf
[...]
vim/
w3m/
wgetrc
xml/
zsh/
$ mark network
13 files marked.
$ done
Bootstrap records written to /var/lib/bacula/bacula-dir.restore.1.bsr

The job will require the following
   Volume(s)                 Storage(s)                SD Device(s)
===========================================================================
   
    volume0001                File                      FileStorage              

Volumes marked with "*" are online.


14 files selected to be restored.

Run Restore job
JobName:         RestoreFiles
Bootstrap:       /var/lib/bacula/bacula-dir.restore.1.bsr
Where:           /tmp/bacula-restores
Replace:         always
FileSet:         Full Set
Backup Client:   bacula-fd
Restore Client:  bacula-fd
Storage:         File
When:            2014-04-12 13:33:41
Catalog:         Catalogo
Priority:        10
Plugin Options:  *None*
OK to run? (yes/mod/no): yes
Job queued. JobId=3

Aqui o procedimento é o seguinte:

  • restore para chamar o processo de restore
  • 5 para selecionar o backup mais recente do cliente
  • 2 por exemplo para restaurar o backup dos arquivos
  • Depois podemos digitar um ls para listar os nosso arquivos
  • Depois um cd caso precise selecionar um diretório
  • Depois podemos marcar o que queremos restaurar com o comando mark
  • Depois precisamos digitar done para informar ao bacula que já selecionamos o que precisamos
  • E por fim precisamos informar yes para confirmar o restore

Agora vamos listar os jobs no bconsole

*list jobs
+-------+----------------+---------------------+------+-------+----------+------------+-----------+
| jobid | name           | starttime           | type | level | jobfiles | jobbytes   | jobstatus |
+-------+----------------+---------------------+------+-------+----------+------------+-----------+
|     1 | BackupCatalogo | 2014-04-12 13:27:05 | B    | F     |        1 |     43,545 | T         |
|     2 | BackupDirector | 2014-04-12 13:29:53 | B    | F     |    1,889 | 22,790,302 | T         |
|     3 | RestoreFiles   | 2014-04-12 13:33:45 | R    | F     |       14 |      8,975 | T         |
+-------+----------------+---------------------+------+-------+----------+------------+-----------+

Pelas informações restauramos 14 arquivos com sucesso.

Agora vamos consultar o status do nosso cliente

*status client=bacula-fd 
Connecting to Client bacula-fd at bacula.douglasqsantos.com.br:9102

bacula-fd Version: 5.2.13 (19 February 2013)  x86_64-unknown-linux-gnu debian 7.9
Daemon started 12-Abr-13 13:23. Jobs: run=3 running=0.
 Heap: heap=819,200 smbytes=101,258 max_bytes=186,312 bufs=66 max_bufs=118
 Sizeof: boffset_t=8 size_t=8 debug=0 trace=0 
Running Jobs:
Director connected at: 12-Abr-13 13:38
No Jobs running.
====

Terminated Jobs:
 JobId  Level    Files      Bytes   Status   Finished        Name 
======================================================================
     1  Full          1    43.54 K  OK       12-Abr-13 13:27 BackupCatalogo
     2  Full      1,889    22.79 M  OK       12-Abr-13 13:29 BackupDirector
     3               14    8.975 K  OK       12-Abr-13 13:33 RestoreFiles

Como podemos notar agora temos a informação que temos todas as opções até o momento ok.

Como mandamos restaurar o bacula mandou para o caminho default que seria /tmp/bacula-restore vamos listar esse diretório

ls -lR /tmp/bacula-restores
/tmp/bacula-restores:
total 1
drwxr-xr-x 3 root root 1024 Abr 12 13:25 etc/

/tmp/bacula-restores/etc:
total 1
drwxr-xr-x 7 root root 1024 Abr 11 10:33 network/

/tmp/bacula-restores/etc/network:
total 6
drwxr-xr-x 2 root root 1024 Abr 11 11:00 if-down.d/
drwxr-xr-x 2 root root 1024 Mar  3  2010 if-post-down.d/
drwxr-xr-x 2 root root 1024 Mar  3  2010 if-pre-up.d/
drwxr-xr-x 2 root root 1024 Abr 11 11:01 if-up.d/
-rw-r--r-- 1 root root  517 Abr 11 10:33 interfaces
drwxr-xr-x 2 root root 1024 Abr 12 11:56 run/

/tmp/bacula-restores/etc/network/if-down.d:
total 1
-rwxr-xr-x 1 root root 803 Mai  4  2011 postfix*

/tmp/bacula-restores/etc/network/if-post-down.d:
total 0

/tmp/bacula-restores/etc/network/if-pre-up.d:
total 0

/tmp/bacula-restores/etc/network/if-up.d:
total 10
-rwxr-xr-x 1 root root 4581 Mar 24  2012 mountnfs*
-rwxr-xr-x 1 root root 1089 Set 15  2008 ntpdate*
-rwxr-xr-x 1 root root  849 Dez 21  2009 openssh-server*
-rwxr-xr-x 1 root root 1120 Mai  4  2011 postfix*

/tmp/bacula-restores/etc/network/run:
total 1
-rw-r--r-- 1 root root 16 Abr 12 11:56 ifstate

Temos o nosso backup restaurado com sucesso :D

Configuração do Cliente Windows 2008 R2

Agora vamos instalar um cliente Windows eu vou utilizar um Windows Server 2008 R2 Enterprise

Podemos obter o cliente em http://wiki.douglasqsantos.com.br/Downloads/bacula/bacula-win64-5.2.10.exe

Agora vamos instalar ele

  • Mande executar o bacula-win64-5.2.10.exe com direito administrativos
  • Agora selecione Next
  • Agora selecione I Agree
  • Agora selecione Automatic
  • Agora selecione Next
  • Agora vamos informar os dados do bacula-dir:
    • Em DIR Name informe: bacula-dir
    • Em DIR Password informe: Cv70F6pf1t6pBopT4vQOnigDrR0v3L que é a senha do bacula-dir
    • Em DIR Address informe: bacula.douglasqsantos.com.br
  • Agora selecione Install
  • Agora selecione Next
  • Agora selecione Finish

Agora vamos ajustar o c:\Windows\System32\Drivers\etc\hosts

notepad c:\Windows\System32\Drivers\etc\hosts
[...]
#No final do arquivo insira a seguinte linha
192.168.0.80 bacula.douglasqsantos.com.br

Agora vamos deixar o backup-fd.conf da seguinte forma

notepad "c:\Windows\Arquivos de Programas\Bacula\bacula-fd.conf"
# Default  Bacula File Daemon Configuration file
#
#  For Bacula release 5.2.6 (02/21/12) -- Windows MinGW32
#
# There is not much to change here except perhaps the
# File daemon Name
#
 
#
# "Global" File daemon configuration specifications
#
FileDaemon {                            
  Name = win2008-fd                                                        # Nome do cliente-fd
  FDport = 9102                                                        # Porta de Comunicacao
  WorkingDirectory = "C:\\Program Files\\Bacula\\working"              # Diretorio de Trabalho
  Pid Directory = "C:\\Program Files\\Bacula\\working"                 # Diretorio de PID
# Plugin Directory = "C:\\Program Files\\Bacula\\plugins"              # Diretorio de Plugins
  Maximum Concurrent Jobs = 10                                         # Numero Maximo de Jobs em execucao
}
 
#
# List Directors who are permitted to contact this File daemon
#
Director {
  Name = bacula-dir         # ALTERAR PARA O NOME DO 'DIRECTOR' DO BACULA
  Password = "a0wDKVckyaTacqItfkCxddJxyBLwAXFn7"  # SENHA PARA COMUNICACAO COM ARQUIVO CLIENTS-AND-JOBS.CONF
}
 
#
# Restricted Director, used by tray-monitor to get the
#   status of the file daemon
# UTILIZADO PELO BACULA MONITOR
Director {
  Name = bacula-mon
  Password = "yQevDJfJg7fBgp8PfOxWTKqTqhUUTvAMn"
  Monitor = yes
}
 
# Send all messages except skipped files back to Director
Messages {
  Name = Standard
  director = bacula-dir = all, !skipped, !restored
}

Agora para podermos efetuar backup do c: do Windows precisamos importar a seguinte chave do resgistro

notepad bacula.reg
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\wbengine]

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\wbengine\SystemStateBackup]
"ALlowSSBToAny"=dword:00000001

Agora precisamos mandar iniciar o serviço do bacula e o serviço Detecção de Serviços Interativos (Interactive Services Detection)

Agora para o bacula conseguir chegar no cliente precisamos liberar a porta 9102 no servidor Windows(Liberar a porta 9102 no Firewall).

Agora no servidor bacula vamos criar um novo cliente

vim /etc/bacula/bacula-dir-clients-and-jobs.conf
[...]
#Inserir no final do arquivo
Job {
        Name = "BackupWin2008"                           # Nome do Job para Backup do Director (Proprio Servidor Bacula)
        JobDefs = "DefaultWindows"                           # JObDefs Definido
        Client = win2008-fd                                # Cliente fd
}

Client {
  Name = win2008-fd                                        # Cliente fd
  Address = win2008.douglasqsantos.com.br                            # Ajustado no /etc/hosts
  Password = "a0wDKVckyaTacqItfkCxddJxyBLwAXFn7"          # Senha do Director do Bacula que foi definida no cliente
  @/etc/bacula/clientes/basic-client  # Arquivo onde contem informacoes sobre o cliente.
}

Aqui nos definimos o job de backup do windows e depois a sua configuração.

Agora vamos inserir no /etc/hosts a entrada para o win2008

vim /etc/hosts
127.0.0.1       localhost
192.168.0.80    bacula.douglasqsantos.com.br      bacula
192.168.0.92    win2008.douglasqsantos.com.br     win2008
[...]

Agora vamos mandar reiniciar o serviço do bacula

/etc/init.d/bacula-dir restart
/etc/init.d/bacula-sd restart
/etc/init.d/bacula-fd restart

Agora vamos chamar o bconsole para testarmos a conexão com o cliente

bconsole
Connecting to Director bacula:9101
1000 OK: bacula-dir Version: 5.2.13 (19 February 2013)
Enter a period to cancel a command.
*status client=win2008-fd 
Connecting to Client win2008-fd at win2008.douglasqsantos.com.br:9102

win2008-fd Version: 5.2.10 (28 June 2012)  VSS Linux Cross-compile Win64
Daemon started 12-Apr-13 15:19. Jobs: run=0 running=0.
Microsoft Windows Server 2008 R2 Enterprise Edition Service Pack 1 (build 7601), 64-bit
 Heap: heap=0 smbytes=16,962 max_bytes=17,109 bufs=53 max_bufs=54
 Sizeof: boffset_t=8 size_t=8 debug=0 trace=1 
Running Jobs:
Director connected at: 12-Apr-13 15:23
No Jobs running.
====

Terminated Jobs:
====
*

Como pode ser notado estamos chegando no cliente com sucesso.

Agora vamos mandar efetuar um backup do cliente

*run
Automatically selected Catalog: Catalogo
Using Catalog "Catalogo"
A job name must be specified.
The defined Job resources are:
     1: BackupCatalogo
     2: RestoreFiles
     3: BackupDirector
     4: BackupWin2008
Select Job resource (1-4): 4
Run Backup job
JobName:  BackupWin2008
Level:    Incremental
Client:   win2008-fd
FileSet:  WindowsFS
Pool:     File (From Job resource)
Storage:  File (From Job resource)
When:     2014-04-12 15:29:11
Priority: 10
OK to run? (yes/mod/no): yes
Job queued. JobId=3
*

A mesma história, run para rodar o backup, depois selecionamos a opção de backup no caso 4 para o win2008 e depois um yes para confirmar.

As vezes podemos ter uma mensagem, podemos visualizar ela da seguinte forma no bconsole

*mes
12-Abr 14:15 bacula-dir JobId 5: No prior Full backup Job record found.
12-Abr 14:15 bacula-dir JobId 5: No prior or suitable Full backup found in catalog. Doing FULL backup.
12-Abr 14:15 bacula-dir JobId 5: Start Backup JobId 5, Job=BackupWin2012.2014-04-12_14.15.10_03
12-Abr 14:15 bacula-dir JobId 5: Using Device "FileStorage" to write.
12-Abr 14:15 bacula-sd JobId 5: Volume "volume0001" previously written, moving to end of data.
12-Abr 14:15 bacula-sd JobId 5: Ready to append to end of Volume "volume0001" size=23120574
12-Abr 14:15 Win2012-fd JobId 5: Generate VSS snapshots. Driver="Win64 VSS", Drive(s)="CF"

Agora vamos consultar os jobs

*list jobs
+-------+----------------+---------------------+------+-------+----------+-----------+-----------+
| jobid | name           | starttime           | type | level | jobfiles | jobbytes  | jobstatus |
+-------+----------------+---------------------+------+-------+----------+-----------+-----------+
|     1 | BackupCatalogo | 2014-04-12 15:13:50 | B    | F     |        1 |    43,545 | T         |
|     2 | BackupDirector | 2014-04-12 15:14:03 | B    | F     |    1,891 | 8,068,884 | T         |
|     3 | BackupWin2008  | 2014-04-12 15:29:26 | B    | F     |        0 |         0 | R         |
+-------+----------------+---------------------+------+-------+----------+-----------+-----------+
*

Ainda está executando, agora vamos verificar o status do cliente windows 2008

*status client=win2008-fd 
Connecting to Client win2008-fd at win2008.douglasqsantos.com.br:9102

win2008-fd Version: 5.2.10 (28 June 2012)  VSS Linux Cross-compile Win64
Daemon started 12-Apr-13 15:19. Jobs: run=0 running=0.
Microsoft Windows Server 2008 R2 Enterprise Edition Service Pack 1 (build 7601), 64-bit
 Heap: heap=0 smbytes=195,578 max_bytes=212,575 bufs=136 max_bufs=158
 Sizeof: boffset_t=8 size_t=8 debug=0 trace=1 
Running Jobs:
JobId 3 Job BackupWin2008.2014-04-12_15.29.13_03 is running.
    VSS Full Backup Job started: 12-Apr-13 15:28
    Files=721 Bytes=111,094,103 Bytes/sec=2,267,226 Errors=0
    Files Examined=721
    Processing file: C:/Recovery/4446b7b6-a39a-11e2-90f5-f46d8e8454b4/Winre.wim
    SDReadSeqNo=5 fd=700
Director connected at: 12-Apr-13 15:29
====

Terminated Jobs:
====
*

Como podemos ver em Processing file: é o que o bacula está copiando no momento, aqui temos que esperar ele terminar o backup.

Configuração do cliente Windows 2012

Agora vamos instalar um cliente Windows eu vou utilizar um Windows Server 2012 Stardard

Podemos obter o cliente em http://wiki.douglasqsantos.com.br/Downloads/bacula/bacula-win64-5.2.10.exe

Agora vamos instalar ele

  • Mande executar o bacula-win64-5.2.10.exe com direito administrativos
  • Agora selecione Next
  • Agora selecione I Agree
  • Agora selecione Automatic
  • Agora selecione Next
  • Agora vamos informar os dados do bacula-dir:
    • Em DIR Name informe: bacula-dir
    • Em DIR Password informe: Cv70F6pf1t6pBopT4vQOnigDrR0v3L que é a senha do bacula-dir
    • Em DIR Address informe: bacula.douglasqsantos.com.br
  • Agora selecione Install
  • Agora selecione Next
  • Agora selecione Finish

Agora vamos ajustar o c:\Windows\System32\Drivers\etc\hosts

notepad c:\Windows\System32\Drivers\etc\hosts
[...]
#No final do arquivo insira a seguinte linha
192.168.0.80 bacula.douglasqsantos.com.br

Agora vamos deixar o backup-fd.conf da seguinte forma

notepad "c:\Windows\Arquivos de Programas\Bacula\bacula-fd.conf"
# Default  Bacula File Daemon Configuration file
#
#  For Bacula release 5.2.6 (02/21/12) -- Windows MinGW32
#
# There is not much to change here except perhaps the
# File daemon Name
#
 
#
# "Global" File daemon configuration specifications
#
FileDaemon {                            
  Name = Win2012-fd                                                        # Nome do cliente-fd
  FDport = 9102                                                        # Porta de Comunicacao
  WorkingDirectory = "C:\\Program Files\\Bacula\\working"              # Diretorio de Trabalho
  Pid Directory = "C:\\Program Files\\Bacula\\working"                 # Diretorio de PID
# Plugin Directory = "C:\\Program Files\\Bacula\\plugins"              # Diretorio de Plugins
  Maximum Concurrent Jobs = 10                                         # Numero Maximo de Jobs em execucao
}
 
#
# List Directors who are permitted to contact this File daemon
#
Director {
  Name = bacula-dir         # ALTERAR PARA O NOME DO 'DIRECTOR' DO BACULA
  Password = "a0wDKVckyaTacqItfkCxddJxyBLwAXFn7"  # SENHA PARA COMUNICACAO COM ARQUIVO CLIENTS-AND-JOBS.CONF
}
 
#
# Restricted Director, used by tray-monitor to get the
#   status of the file daemon
# UTILIZADO PELO BACULA MONITOR
Director {
  Name = bacula-mon
  Password = "yQevDJfJg7fBgp8PfOxWTKqTqhUUTvAMn"
  Monitor = yes
}
 
# Send all messages except skipped files back to Director
Messages {
  Name = Standard
  director = bacula-dir = all, !skipped, !restored
}

Agora para podermos efetuar backup do c: do Windows precisamos importar a seguinte chave do resgistro

notepad bacula.reg
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\wbengine]

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\wbengine\SystemStateBackup]
"ALlowSSBToAny"=dword:00000001

Como estamos utilizando o Windows 2012 como cliente precisamos habilitar a descoberta de serviços interativos no registro do Windows:

  • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Windows\NoInteractiveServices

Precisamos mudar essa chave para o valor 0.

Agora precisamos mandar iniciar o serviço do bacula e o serviço Detecção de Serviços Interativos.

Agora para o bacula conseguir chegar no cliente precisamos liberar a porta 9102 no servidor Windows.

Agora no servidor bacula vamos criar um novo cliente

vim /etc/bacula/bacula-dir-clients-and-jobs.conf
[...]
#Inserir no final do arquivo
Job {
        Name = "BackupWin2012"                           # Nome do Job para Backup do Director (Proprio Servidor Bacula)
        JobDefs = "DefaultWindows"                           # JObDefs Definido
        Client = win2012-fd                                # Cliente fd
}

Client {
  Name = win2012-fd                                        # Cliente fd
  Address = win2012.douglasqsantos.com.br                            # Ajustado no /etc/hosts
  Password = "a0wDKVckyaTacqItfkCxddJxyBLwAXFn7"          # Senha do Director do Bacula que foi definida no cliente
  @/etc/bacula/clientes/basic-client  # Arquivo onde contem informacoes sobre o cliente.
}

Aqui nos definimos o job de backup do windows e depois a sua configuração.

Agora vamos inserir no /etc/hosts a entrada para o win2012

vim /etc/hosts
127.0.0.1       localhost
192.168.0.80    bacula.douglasqsantos.com.br      bacula
192.168.0.85    win2012.douglasqsantos.com.br     win2012
[...]

Agora vamos pingar no win2012 para verificarmos a conectividade

ping win2012.douglasqsantos.com.br -c 2
PING win2012.douglasqsantos.com.br (192.168.0.85) 56(84) bytes of data.
64 bytes from win2012.douglasqsantos.com.br (192.168.0.85): icmp_req=1 ttl=128 time=0.438 ms
64 bytes from win2012.douglasqsantos.com.br (192.168.0.85): icmp_req=2 ttl=128 time=0.610 ms

--- win2012.douglasqsantos.com.br ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.438/0.524/0.610/0.086 ms

Agora vamos mandar reiniciar o serviço do bacula

/etc/init.d/bacula-dir restart
/etc/init.d/bacula-sd restart
/etc/init.d/bacula-fd restart

Agora vamos chamar o bconsole para testarmos a conexão com o cliente

bconsole
Connecting to Director bacula:9101
1000 OK: bacula-dir Version: 5.2.13 (19 February 2013)
Enter a period to cancel a command.
*status client=win2012-fd 
Connecting to Client win2012-fd at win2012.douglasqsantos.com.br:9102

Win2012-fd Version: 5.2.10 (28 June 2012)  VSS Linux Cross-compile Win64
Daemon started 12-Apr-13 14:06. Jobs: run=0 running=0.
Microsoft Standard Edition (build 9200), 64-bit
 Heap: heap=0 smbytes=18,754 max_bytes=18,901 bufs=53 max_bufs=54
 Sizeof: boffset_t=8 size_t=8 debug=0 trace=1 
Running Jobs:
Director connected at: 12-Apr-13 14:08
No Jobs running.
====

Terminated Jobs:
====
*

Como pode ser notado estamos chegando no cliente com sucesso.

Agora vamos mandar efetuar um backup do cliente

*run
Automatically selected Catalog: Catalogo
Using Catalog "Catalogo"
A job name must be specified.
The defined Job resources are:
     1: BackupCatalogo
     2: RestoreFiles
     3: BackupDirector
     4: BackupWin2012
Select Job resource (1-4): 4
Run Backup job
JobName:  BackupWin2012
Level:    Incremental
Client:   win2012-fd
FileSet:  WindowsFS
Pool:     File (From Job resource)
Storage:  File (From Job resource)
When:     2014-04-12 14:15:08
Priority: 10
OK to run? (yes/mod/no): yes
Job queued. JobId=5
You have messages.

A mesma história, run para rodar o backup, depois selecionamos a opção de backup no caso 4 para o win2012 e depois um yes para confirmar.

Note que agora temos uma mensagem, podemos visualizar ela da seguinte forma no bconsole

*mes
12-Abr 14:15 bacula-dir JobId 5: No prior Full backup Job record found.
12-Abr 14:15 bacula-dir JobId 5: No prior or suitable Full backup found in catalog. Doing FULL backup.
12-Abr 14:15 bacula-dir JobId 5: Start Backup JobId 5, Job=BackupWin2012.2014-04-12_14.15.10_03
12-Abr 14:15 bacula-dir JobId 5: Using Device "FileStorage" to write.
12-Abr 14:15 bacula-sd JobId 5: Volume "volume0001" previously written, moving to end of data.
12-Abr 14:15 bacula-sd JobId 5: Ready to append to end of Volume "volume0001" size=23120574
12-Abr 14:15 Win2012-fd JobId 5: Generate VSS snapshots. Driver="Win64 VSS", Drive(s)="CF"

Agora vamos consultar os jobs

*list jobs
+-------+----------------+---------------------+------+-------+----------+------------+-----------+
| jobid | name           | starttime           | type | level | jobfiles | jobbytes   | jobstatus |
+-------+----------------+---------------------+------+-------+----------+------------+-----------+
|     1 | BackupCatalogo | 2014-04-12 13:27:05 | B    | F     |        1 |     43,545 | T         |
|     2 | BackupDirector | 2014-04-12 13:29:53 | B    | F     |    1,889 | 22,790,302 | T         |
|     3 | RestoreFiles   | 2014-04-12 13:33:45 | R    | F     |       14 |      8,975 | T         |
|     4 | BackupWin2012  | 2014-04-12 14:15:22 | B    | F     |        0 |          0 | R         |
+-------+----------------+---------------------+------+-------+----------+------------+-----------+
*

Ainda está executando, agora vamos verificar o status do cliente windows 2012

*status client=win2012-fd 
Connecting to Client win2012-fd at win2012.douglasqsantos.com.br:9102

Win2012-fd Version: 5.2.10 (28 June 2012)  VSS Linux Cross-compile Win64
Daemon started 12-Apr-13 14:06. Jobs: run=1 running=0.
Microsoft Standard Edition (build 9200), 64-bit
 Heap: heap=0 smbytes=183,408 max_bytes=189,680 bufs=120 max_bufs=127
 Sizeof: boffset_t=8 size_t=8 debug=0 trace=1 
Running Jobs:
JobId 5 Job BackupWin2012.2014-04-12_14.15.10_03 is running.
    VSS Full Backup Job started: 12-Apr-13 14:15
    Files=132 Bytes=1,690,775,038 Bytes/sec=20,370,783 Errors=0
    Files Examined=132
    Processing file: C:/pagefile.sys
    SDReadSeqNo=5 fd=1084
Director connected at: 12-Apr-13 14:16
====

Terminated Jobs:
 JobId  Level    Files      Bytes   Status   Finished        Name 
======================================================================

Como podemos ver em Processing file: é o que o bacula está copiando no momento, aqui temos que esperar ele terminar o backup.

Configuração de um Cliente Debian Squeeze/Wheezy/Jessie

Prepare o seu sistema com o seguinte script http://wiki.douglasqsantos.com.br/doku.php/confinicialsqueeze_en para que não falte nenhum pacote ou configuração.

Prepare o seu sistema com o seguinte script http://wiki.douglasqsantos.com.br/doku.php/confinicialwheezy_en para que não falte nenhum pacote ou configuração.

Prepare o seu sistema com o seguinte script http://wiki.douglasqsantos.com.br/doku.php/confinicialjessie_en para que não falte nenhum pacote ou configuração.

Vamos instalar os pré-requisitos para podermos compilar o bacula

aptitude install libreadline-dev libreadline6-dev libreadline6-dev libreadline6 libreadline6 \
libreadline6-dev zlib1g-dev libcurl4-openssl-dev build-essential libssl-dev -y

Agora vamos criar os diretórios para o bacula

mkdir /var/lib/bacula
mkdir /var/run/bacula
mkdir /var/log/bacula
mkdir -p /etc/bacula/scripts

Agora vamos criar o usuário bacula

useradd -s /bin/false -d /var/lib/bacula  bacula

Agora vamos ajustar as permissões dos diretórios

chown -R bacula:bacula /var/lib/bacula /var/run/bacula /var/log/bacula /etc/bacula

Agora vamos obter o pacote do bacula

cd /usr/src
wget -c http://wiki.douglasqsantos.com.br/Downloads/bacula/bacula-5.2.13.tar.gz

Agora vamos desempacotar o bacula

tar -xzvf bacula-5.2.13.tar.gz

Agora vamos acessar a pasta do bacula

cd bacula-5.2.13/

Agora vamos preparar o pacote do bacula

CFLAGS="-g -Wall" ./configure --enable-client-only --enable-smartalloc --with-working-dir=/var/lib/bacula --with-pid-dir=/var/run/bacula \
--with-logdir=/var/log/bacula  --with-scriptdir=/etc/bacula/scripts --with-readline=/usr/include/readline  --disable-conio

Agora vamos mandar compilar o bacula

make

Agora vamos mandar instalar o bacula

make install

Agora vamos mandar instalar os binários de inicialização do bacula

make install-autostart

Agora vamos ajustar as permissões dos arquivos

chown -R bacula:bacula /etc/bacula

Agora vamos ajustar o /etc/hosts do cliente

vim /etc/hosts
127.0.0.1       localhost
192.168.0.81    debian.douglasqsantos.com.br      debian
192.168.0.80    bacula.douglasqsantos.com.br      bacula
[...]

Vamos remover dois scripts que não são necessários

rm -rf /etc/init.d/bacula-sd
rm -rf /etc/init.d/bacula-dir

Agora vamos fazer o backup dos arquivos de configuração do bacula

mkdir /usr/src/olds
cp -Rfa /etc/bacula /usr/src/olds

Agora vamos configurar o cliente

vim /etc/bacula/bacula-fd.conf
##############################################################
# ARQUIVO DE CONFIGURACAO DO FILE DAEMON DO BACULA           #
##############################################################

#
# List Directors who are permitted to contact this File daemon
#
Director {
  Name = bacula-dir                                  # Nome do Director
  Password = "a5GGjJ4D7tRnm3C1TSLzU4glxdflLJ56OG77hjtT9zUF"     # ESTA SENHA ESTA DEFINIDA NO ARQUIVO DE CLIENTE EM /ETC/BACULA/BACULA-DIR-CLIENTS-AND-JOBS.CONF
}

#
# Restricted Director, used by tray-monitor to get the
#   status of the file daemon
#
Director {
  Name = bacula-mon
  Password = "dBYlH/Q+inv85CGu7TCHpYTW2EtpUwwqHuEmjoRgl/l/"    # ESTA SENHA E UTILIZADO PELO BACULA-MONITOR
  Monitor = yes
}

#
# "Global" File daemon configuration specifications
#
FileDaemon {
  Name = debian-fd                                  # Nome do Bacula-fd
  FDport = 9102                                     # Porta de Comunicacao do bacula-fd
  WorkingDirectory = /var/lib/bacula                # Diretorio de trabalho
  Pid Directory = /var/run/bacula                   # Diretorio de Pid
  Maximum Concurrent Jobs = 20                      # Numero maximo de jobs executados no bacula
  FDAddress = 0.0.0.0                     # COMENTAR OU REMOVER ESSA LINHA PARA QUE ELE POSSA 'OUVIR' CONEXOES EM TODAS AS INTERFACES
}

# Send all messages except skipped files back to Director
Messages {
  Name = Standard
  director = bacula-dir = all, !skipped, !restored        # AS MENSAGEM SAO ENCAMINHADAS PARA O 'BACULA-DIR' DEFINIDO NESSA LINHA
}

Agora vamos ajustar o arquivo do bconsole que é como vamos conectar no bacula para fazer backup pela linha de comando

vim /etc/bacula/bconsole.conf
#
# Bacula User Agent (or Console) Configuration File
#

Director {
  Name = bacula-dir
  DIRport = 9101
  address = bacula.douglasqsantos.com.br
  Password = "Cv70F6pf1t6pBopT4vQOnigDrR0v3L"
}

Agora vamos reiniciar o serviço do bacula-fd

/etc/init.d/bacula-fd restart

Agora vamos listar verificar se o bacula está escutando

netstat -natu | egrep 9102
tcp        0      0 0.0.0.0:9102            0.0.0.0:*               OUÇA 

Agora no servidor bacula vamos ajustar a configuração do novo cliente

vim /etc/bacula/bacula-dir-clients-and-jobs.conf
[...]
#Inserir no final do arquivo
Job {
        Name = "BackupDebian"                           # Nome do Job para Backup do Director (Proprio Servidor Bacula)
        JobDefs = "DefaultJobs"                           # JObDefs Definido
        Client = debian-fd                                # Cliente fd
}

Client {
  Name = debian-fd                                        # Cliente fd
  Address = debian.douglasqsantos.com.br                            # Ajustado no /etc/hosts
  Password = "a5GGjJ4D7tRnm3C1TSLzU4glxdflLJ56OG77hjtT9zUF"          # Senha do Director do Bacula
  @/etc/bacula/clientes/basic-client  # Arquivo onde contem informacoes sobre o cliente.
}

Agora vamos ajustar o /etc/hosts

vim /etc/hosts
127.0.0.1       localhost
192.168.0.80    bacula.douglasqsantos.com.br      bacula
192.168.0.92    win2008.douglasqsantos.com.br     win2008
192.168.0.85    win2012.douglasqsantos.com.br     win2012
192.168.0.81    debian.douglasqsantos.com.br      debian

Agora vamos reiniciar o bacula

/etc/init.d/bacula-dir restart
/etc/init.d/bacula-sd restart
/etc/init.d/bacula-fd restart

Agora vamos consultar o novo cliente no bconsole

bconsole
Connecting to Director bacula:9101
1000 OK: bacula-dir Version: 5.2.13 (19 February 2013)
Enter a period to cancel a command.
*status client=debian-fd 
Connecting to Client debian-fd at debian.douglasqsantos.com.br:9102

debian-fd Version: 5.2.13 (19 February 2013)  x86_64-unknown-linux-gnu debian 7.9
Daemon started 12-Abr-13 15:50. Jobs: run=0 running=0.
 Heap: heap=135,168 smbytes=21,896 max_bytes=22,043 bufs=52 max_bufs=53
 Sizeof: boffset_t=8 size_t=8 debug=0 trace=0 
Running Jobs:
Director connected at: 12-Abr-13 15:51
No Jobs running.
====

Terminated Jobs:
====
*

Vamos fazer um backup dele para teste

*run
Automatically selected Catalog: Catalogo
Using Catalog "Catalogo"
A job name must be specified.
The defined Job resources are:
     1: BackupCatalogo
     2: RestoreFiles
     3: BackupDirector
     4: BackupWin2008
     5: BackupDebian
Select Job resource (1-5): 5
Run Backup job
JobName:  BackupDebian
Level:    Incremental
Client:   debian-fd
FileSet:  Full Set
Pool:     File (From Job resource)
Storage:  File (From Job resource)
When:     2014-04-12 15:51:52
Priority: 10
OK to run? (yes/mod/no): yes
Job queued. JobId=4

Mesma historia run para fazer o backup 5 para selecionar o meu cliente debian e yes para confirmar

Agora vamos consultar os jobs do cliente

*list jobs
+-------+----------------+---------------------+------+-------+----------+---------------+-----------+
| jobid | name           | starttime           | type | level | jobfiles | jobbytes      | jobstatus |
+-------+----------------+---------------------+------+-------+----------+---------------+-----------+
|     1 | BackupCatalogo | 2014-04-12 15:13:50 | B    | F     |        1 |        43,545 | T         |
|     2 | BackupDirector | 2014-04-12 15:14:03 | B    | F     |    1,891 |     8,068,884 | T         |
|     3 | BackupWin2008  | 2014-04-12 15:29:26 | B    | F     |   72,791 | 4,444,285,065 | T         |
|     4 | BackupDebian   | 2014-04-12 15:54:20 | B    | F     |    1,655 |    22,404,559 | T         |
+-------+----------------+---------------------+------+-------+----------+---------------+-----------+
*

Configuração de um Cliente CentOS 6/7

Prepare o seu sistema com o seguinte script http://wiki.douglasqsantos.com.br/doku.php/confinicialcentos6_en para que não falte nenhum pacote ou configuração.

Prepare o seu sistema com o seguinte script http://wiki.douglasqsantos.com.br/doku.php/confinicialcentos7_en para que não falte nenhum pacote ou configuração.

Vamos instalar os pré-requisitos para podermos compilar o bacula

yum install readline-devel readline-static readline zlib zlib-devel \
 zlib-static libmcrypt-devel openssl-devel xz -y

Agora vamos criar os diretórios para o bacula

mkdir /var/lib/bacula
mkdir /var/run/bacula
mkdir /var/log/bacula
mkdir -p /etc/bacula/scripts
mkdir -p /etc/bacula/keys

Agora vamos criar o usuário bacula

useradd -s /bin/false -d /var/lib/bacula  bacula

Agora vamos ajustar as permissões dos diretórios

chown -R bacula:bacula /var/lib/bacula /var/run/bacula /var/log/bacula /etc/bacula

Agora vamos obter o pacote do bacula

cd /usr/src
wget -c http://wiki.douglasqsantos.com.br/Downloads/bacula/bacula-5.2.13.tar.gz

Agora vamos desempacotar o bacula

tar -xzvf bacula-5.2.13.tar.gz

Agora vamos acessar a pasta do bacula

cd bacula-5.2.13/

Agora vamos preparar o pacote do bacula

CFLAGS="-g -Wall" ./configure --enable-client-only --enable-smartalloc --with-working-dir=/var/lib/bacula --with-pid-dir=/var/run/bacula \
--with-logdir=/var/log/bacula  --with-scriptdir=/etc/bacula/scripts --with-readline=/usr/include/readline  --disable-conio

Agora vamos mandar compilar o bacula e instalar o bacula client

make && make install && make install-autostart

Agora vamos ajustar as permissões dos arquivos

chown -R bacula:bacula /etc/bacula

Agora vamos ajustar o /etc/hosts do cliente

vim /etc/hosts
127.0.0.1       localhost
192.168.0.81    centos.douglasqsantos.com.br      centos
192.168.0.80    bacula.douglasqsantos.com.br      bacula
[...]

Vamos remover dois scripts que não são necessários

rm -rf /etc/init.d/bacula-sd
rm -rf /etc/init.d/bacula-dir

Agora vamos fazer o backup dos arquivos de configuração do bacula

mkdir /usr/src/olds
cp -Rfa /etc/bacula /usr/src/olds

Agora vamos configurar o cliente

vim /etc/bacula/bacula-fd.conf
##############################################################
# ARQUIVO DE CONFIGURACAO DO FILE DAEMON DO BACULA           #
##############################################################
 
#
# List Directors who are permitted to contact this File daemon
#
Director {
  Name = bacula-dir #Mudar essa linha para bacula-dir
  Password = "Mvgs2vnIjGHG7aL2U+bLbdi3k2pl6mKofPXVShaj5Z2V"
}

#
# Restricted Director, used by tray-monitor to get the
#   status of the file daemon
#
Director {
  Name = bacula-mon #Mudar essa linha para bacula-mon
  Password = "9n0G0z0u4+cPhxuBaYfAtsIIln0HPEi7CXoTG7u9jNy8"
  Monitor = yes
}

#
# "Global" File daemon configuration specifications
#
FileDaemon {                          # this is me
  Name = centos-fd
  FDport = 9102                  # where we listen for the director
  WorkingDirectory = /var/lib/bacula
  Pid Directory = /var/run/bacula
  Maximum Concurrent Jobs = 20
  FDAddress = 0.0.0.0
}

# Send all messages except skipped files back to Director
Messages {
  Name = Standard
  director = bacula-dir = all, !skipped, !restored
}

Agora vamos ajustar o arquivo do bconsole que é como vamos conectar no bacula para fazer backup pela linha de comando

vim /etc/bacula/bconsole.conf
#
# Bacula User Agent (or Console) Configuration File
#

Director {
  Name = bacula-dir
  DIRport = 9101
  address = bacula.douglasqsantos.com.br
  Password = "Cv70F6pf1t6pBopT4vQOnigDrR0v3L" #Senha do bacula director
}

Agora vamos iniciar o serviço do bacula-fd

/etc/init.d/bacula-fd restart

Agora vamos listar verificar se o bacula está escutando

netstat -natu | egrep 9102
tcp        0      0 0.0.0.0:9102            0.0.0.0:*               OUÇA 

Agora no servidor bacula vamos ajustar a configuração do novo cliente

vim /etc/bacula/bacula-dir-clients-and-jobs.conf
[...]
#Inserir no final do arquivo
Job {
        Name = "BackupCentOS"                           # Nome do Job para Backup do Director (Proprio Servidor Bacula)
        JobDefs = "DefaultJobs"                           # JObDefs Definido
        Client = centos-fd                                # Cliente fd
}

Client {
  Name = centos-fd                                        # Cliente fd
  Address = centos.douglasqsantos.com.br                            # Ajustado no /etc/hosts
  Password = "Mvgs2vnIjGHG7aL2U+bLbdi3k2pl6mKofPXVShaj5Z2V"     # Senha do Director do Bacula que foi configurado no cliente na primeira sessão Director
  @/etc/bacula/clientes/basic-client  # Arquivo onde contem informacoes sobre o cliente.
}

Aqui não esquecer de deixar a senha Password da sessão Client a mesma que esta na primeira sessão Director no bacula-fd.conf do cliente.

Agora vamos recarregar o bacula

bconsole
Connecting to Director bacula:9101
1000 OK: bacula-dir Version: 5.2.13 (19 February 2013)
Enter a period to cancel a command.
*reload

Agora vamos consultar o nosso novo cliente no bconsole

*status client=centos-fd 
Connecting to Client centos-fd at centos.douglasqsantos.com.br:9102

centos-fd Version: 5.2.13 (19 February 2013)  x86_64-unknown-linux-gnu redhat 
Daemon started 11-Mai-13 19:10. Jobs: run=0 running=0.
 Heap: heap=135,168 smbytes=24,561 max_bytes=24,708 bufs=65 max_bufs=66
 Sizeof: boffset_t=8 size_t=8 debug=0 trace=0 
Running Jobs:
Director connected at: 11-Mai-13 19:13
No Jobs running.
====

Terminated Jobs:
====
*

Agora vamos fazer um backup do nosso cliente

*run
Automatically selected Catalog: Catalogo
Using Catalog "Catalogo"
A job name must be specified.
The defined Job resources are:
     1: BackupCatalogo
     2: RestoreFiles
     3: BackupDirector
     4: BackupCentOS
Select Job resource (1-4): 4
Run Backup job
JobName:  BackupCentOS
Level:    Incremental
Client:   centos-fd
FileSet:  Full Set
Pool:     File (From Job resource)
Storage:  File (From Job resource)
When:     2014-05-11 19:14:22
Priority: 10
OK to run? (yes/mod/no): yes
Job queued. JobId=6
You have messages.

Agora vamos listar os nosso jobs

*list jobs
+-------+----------------+---------------------+------+-------+----------+-----------+-----------+
| jobid | name           | starttime           | type | level | jobfiles | jobbytes  | jobstatus |
+-------+----------------+---------------------+------+-------+----------+-----------+-----------+
|     1 | BackupCatalogo | 2014-05-11 17:53:14 | B    | F     |        1 |    43,545 | T         |
|     2 | BackupCatalogo | 2014-05-11 17:55:09 | B    | F     |        1 |     6,949 | T         |
|     3 | BackupDirector | 2014-05-11 17:59:24 | B    | F     |    1,249 | 8,040,840 | T         |
|     4 | BackupCatalogo | 2014-05-11 18:12:02 | B    | F     |        1 |    61,008 | T         |
|     5 | BackupDirector | 2014-05-11 18:16:43 | B    | F     |    1,259 | 8,617,936 | T         |
|     6 | BackupCentOS   | 2014-05-11 19:14:25 | B    | F     |    1,189 | 8,546,112 | T         |
+-------+----------------+---------------------+------+-------+----------+-----------+-----------+

Referências