Olá a todos, mais uma vez eu postando um tutorial por aqui, desculpem desde já se ele não ficar em um nível tão bom quanto esperam, mais espero que ajude, pois não existe nenhuma documentação em português de como implementar isso, então vamos para onde interessa.
Ambiente
* Servidor com 3 discos (em Raid 1) para armazenamento dos Backups
- /dev/md6 – 900GB
- = /dev/md7 – 1TB
- = /dev/md8 – 3TB
Lógica do Bacula
O Bacula é estruturado da seguinte forma:
- Device (disco ou partição do sistema), pode ser dividido em 1 ou mais Storages;
- Storage (local de armazenamento de arquivos backupeados) e os arquivos backupeados em si ficam em arquivos chamados Pools;
- Pools são a aglomeração de Volumes (arquivos de um mesmo tamanho para que são usados para armazenamento dos Backups)
- Volume é apenas 1 dos arquivos do Pool que são usados para facilitar a pesquisa e indexação dos dados, além de facilitar o armazenamento dos mesmos em medias como CDs, DVDs, Fitas, etc;
Problema encontrado na configuração Básica do Bacula
O Bacula trabalha da seguinte forma, cada agendamento de backup, deve ser feito em um determinado Storage e cada Storage fica limitado a apenas um Device, ou seja, como nosso ambiente é muito grande, montariamos uma partição LVM unindo os 3 Volumes RAID em epenas 1 disco virtual ou então teriamos que dar um jeito do Bacula utilizar multiplos Devices (Discos) como se fosse um único Storage e para isso é necessário fazer uso do Pool Scratch e de links simbólicos.
Instalação do Bacula
Instale o Bacula da forma que achar melhor, seja compilando os pacotes manualmente ou com eu fiz, instalando a partir dos repositórios:
# apt-get install mysql-serve mysql-client bacula-director-mysql bacula-sd-mysql bacula-fd bacula-console bacula-common-mysql
Após instalar, coloque uma senha de root no mysql e quando for requisitada a senha durante a instalação do bacula, digite-a para que o bacula crie um usuário com o nome bacula e a senha que você definir no passo seguinte.
Configuração
Inicialmente é necessário que os discos que se deseja utilizar para backup sejam montados durante o boot no servidor, para que os demais passos para a configuração do backup em múltiplos discos funcionem normalmente.
Após verificar que os discos estão montando corretamente, você deverá definir qual o tamanho que deseja que seus volumes possuam (esse valor pode variar dependendo do que deseja fazer com ele, por exemplo 4GB se desejar armazenar uma cópia em DVD, no meu caso coloquei de 10GB). Após definir esse valor, vá no seu servidor onde o Bacula está instalado e dê o comando df -h, para definir quantos Volumes você poderá manter em cada disco, no meu exemplo:
root@bacula:/home/tacio# df -h
Sist. Arq. Tam Usad Dispon. Uso% Montado em
/dev/md6 824G 25G 758G 4% /DISCK900GB
/dev/md7 917G 200M 871G 1% /DISCK1TB
/dev/md8 2,7T 203M 2,6T 1% /DISCK3TB
ou seja no meu caso no DISK900GB poderei ter até 82 Volumes de 10GB, pois 10GB * 82GB = 820GB. No DISK1TB teremos 87 Volumes e no DISK3TB teremos 260 Volumes.
Após definir a quantidade de Volumes que cada disco possui, devemos criar com o comando touch em cada disco (inicialmente vazio) essa mesma quantidade de arquivos.
Para criação deste arquivo pode-se usar um shell script mais ou menos como o seguinte:
#!/bin/bash for i in {1..82} do touch /DISK900GB/bacula0$i done for i in {1..87} do touch /DISK1TB/bacula1$i done for i in {1..260} do touch /DISK3TB/bacula3$i done |
Após criar a quantidade de volumes para cada disco, você deverá criar um diretório, /bacula (ou outro de sua preferência), e criar links simbólicos para cada um dos arquivos para o diretório /bacula.
#!/bin/bash cd /DISCK900GB for i in ls b* do ls b* do ls b* do |
Após criar todos os arquivos simbólicos corretamente, você terá um resultado parecido com o seguinte:
root@bacula:/home/tacio# ls -l /bacula/
total 0
lrwxrwxr-x 1 bacula bacula 23 Out 21 13:55 bacula00001 -> /DISCK900GB/bacula00001
lrwxrwxr-x 1 bacula bacula 23 Out 21 15:19 bacula00002 -> /DISCK900GB/bacula00002
lrwxrwxr-x 1 bacula bacula 23 Out 21 15:19 bacula00003 -> /DISCK900GB/bacula00003
lrwxrwxr-x 1 bacula bacula 23 Out 21 15:19 bacula00004 -> /DISCK900GB/bacula00004
Após os links serem criados, vamos agora para os arquivos de configuração. Primeiramente abra o arquivo /etc/bacula/bacula-sd.conf
Procure a sessão FileStorage e altere para ficar desta forma:
Device {
Name = FileStorage
Media Type = File
Archive Device = /bacula # Diretório onde você colocou os links simbólicos
LabelMedia = no; # Não criar o volume automaticamente
Random Access = Yes;
AutomaticMount = yes; # when device opened, read it
RemovableMedia = no;
AlwaysOpen = no;
Maximum Changer Wait = 1800;
}
Salve o arquivo e abra o /etc/bacula/bacula-dir.conf
No Director comente a linha DirAddress como abaixo caso queira acessar o console de recuperação ou outra ferramenta como o Bacula Administrator Tools, de outra maquina da rede:
Director { # Definição do diretor, nome que fica em TODOS os clientes
Name = bacula-dir
DIRport = 9101 # Porta padrão do diretor
QueryFile = “/etc/bacula/scripts/query.sql”
WorkingDirectory = “/var/lib/bacula”
PidDirectory = “/var/run/bacula”
Maximum Concurrent Jobs = 1
Password = “SENHA” # Senha alterada por segurança
Messages = Daemon
# DirAddress = 127.0.0.1
}
Na parte do Storage, altere para ficar mais ou menos desta forma:
Storage {
Name = File
Address = IP ou DNS do Servidor Bacula
SDPort = 9103
Password = “SENHA DO bacula-sd.conf”
Device = FileStorage # O Device onde estão os links simbolicos
Media Type = File
}
Pool {
Name = Default
Pool Type = Backup
Recycle = yes # Após acabar todos os Volumes ele apaga os antigos
AutoPrune = yes # Prune expired volumes
Volume Retention = 1 months # Tempo que os backups devem ser mantidos
Maximum Volume Bytes = 10GB # Tamanho de cada volume definido anteriormente
Maximum Volumes = 500 # Quantidade máxima de Volumes
Recycle Pool = Scratch # De quem ele irá pegar os Volumes (depois explico)
}
Pool {
Name = Scratch
Pool Type = Backup
Recycle = yes
Recycle Pool = Scratch
ActionOnPurge = Truncate
Maximum Volume Bytes = 10GB # Recomendo que coloque a mesma quantidade do Default
Maximum Volumes = 500 # Recomendo que coloque a mesma quantidade do Default
}
Agora vou explicar o porque de 2 Pools distintos. No caso o Pool Scratch do Bacula é um pool especial, ele foi criado para que outros Pools possam pegar arquivos emprestados sempre que necessários. Agora após fazermos a configuração, vamos adicionar os Volumes criados no pool Scratch com outro script:
#!/bin/bash cd /bacula for i in ls b* do |
Após rodar o script acima algo como isso aparecerá na tela:
Connecting to Director localhost:9101
1000 OK: bacula-dir Version: VERSAO
Enter a period to cancel a command.
list volumes pool=Scratch
Automatically selected Catalog: MyCatalog
Using Catalog “MyCatalog”
+———+————-+———–+———+———-+———-+————–+———+——+———–+———–+———————+
| MediaId | VolumeName | VolStatus | Enabled | VolBytes | VolFiles | VolRetention | Recycle | Slot | InChanger | MediaType | LastWritten |
+———+————-+———–+———+———-+———-+————–+———+——+———–+———–+———————+
| 1 | bacula00001 | Append | 1 | 198 | 0 | 31,536,000 | 1 | 0 | 0 | File | 0000-00-00 00:00:00 |
| 2 | bacula00002 | Append | 1 | 198 | 0 | 31,536,000 | 1 | 0 | 0 | File | 0000-00-00 00:00:00 |
| 3 | bacula00003 | Append | 1 | 198 | 0 | 31,536,000 | 1 | 0 | 0 | File | 0000-00-00 00:00:00 |
Caso apareça isso, está pronta a configuração, em TODOS os jobs que for agendar no Bacula, você deverá selecionar o Pool padrão como Default e Storage como File.
Job {
Name = BackupServidorX
Type = Backup
Level = Incremental
Client = xserver-fd
FileSet = BackupServidorX
Schedule = WeeklyCycle
Storage = File
Pool = Default
Messages = Standard
}
Agora é só adicionar os clientes, agendamentos, etc e pronto.