Olá a todos, venho aqui contribuir com a comunidade, postando a configuração usada aqui no trabalho ( com cortes de alguns campos ).
Tive dificuldade em encontrar exemplos reais de configuração, até mesmo na documentação, daí espero que possa ajudar alguem que esteja almejando implementar o Virtual full em sua política de backup.
Schedule {
Name = DailyAt1900Schedule
Run = daily at 19:00
Run = Level=VirtualFull Priority=12 1st sat at 7:00
}
Client {
Name = c1
File Retention = 30 days
Job Retention = 30 days
Auto Prune = yes
Maximum Concurrent Jobs = 10
}
Device {
Name = d1
Archive Device = /mnt/disk1/archive1
Media Type = d_mt1
Maximum Concurrent Jobs = 5
Always Open = no
Removable Media = no
Random Access = yes
Label Media = yes
Automatic Mount = yes
}
Device {
Name = d1Full
Archive Device = /mnt/disk1/archive2
Media Type = d_mt1
Maximum Concurrent Jobs = 5
Always Open = no
Removable Media = no
Random Access = yes
Label Media = yes
Automatic Mount = yes
}
Storage {
Name = s1
Device = d1
}
Storage {
Name = s1Full
Device = d1Full
}
Pool {
Name = p1
Maximum Volumes = 50
Pool Type = Backup
Storage = s1
Maximum Volume Jobs = 1
Maximum Volume Bytes = 100G
Auto Prune = yes
Volume Retention = 40 days
Action On Purge = Truncate
Recycle = yes
Label Format = p1-Vol-
Next Pool =p1Full
}
Pool {
Name = p1Full
Maximum Volumes = 50
Pool Type = Backup
Storage = s1Full
Maximum Volume Jobs = 1
Maximum Volume Bytes = 100G
Auto Prune = yes
Volume Retention = 40 days
Action On Purge = Truncate
Recycle = yes
Label Format = p1Full-Vol-
}
Job {
Name = AdminPruningJob
Type = Admin
Client = c1
Fileset = EmptyFileset
Messages = Standard
Pool = DummyPool
Schedule = DailyMaintenance
Storage = s1
Run Script {
Runs On Client = no
Runs When = Before
Fail Job On Error = no
Console = "prune volume expired yes"
}
Run Script {
Runs On Client = no
Runs When = After
Fail Job On Error = no
Console = "purge volume action=truncate allpools storage=s1"
}
Run Script {
Runs On Client = no
Runs When = After
Fail Job On Error = no
Console = "purge volume action=truncate allpools storage=s1Full"
}
}
Job Defs {
Name =JobDefaults
Type = Backup
Level = Incremental
Accurate = yes
Write Bootstrap = /opt/bacula/working/%n.bsr
Messages = Standard
Delete Consolidated Jobs = no
Spool Attributes = yes
Maximum Concurrent Jobs = 4
Reschedule On Error = yes
Reschedule Interval = 6 hours
Reschedule Times = 2
Allow Duplicate Jobs = yes
Cancel Lower Level Duplicates = no
Cancel Queued Duplicates = no
Cancel Running Duplicates = no
Priority = 11
}
Job {
Name =j1Job
Enabled = yes
Job Defs = IncrementalJobDefaults
Client = c1
Fileset = f1
Pool = p1
Schedule = DailyAt1900Schedule
Run Before Job = "/opt/bacula/scripts/pre_job.sh "
Run After Job = "/opt/bacula/scripts/pos_job.sh"
Run After Failed Job = "/opt/bacula/scripts/pos_job.sh"
}
OBS:
- versão do bacula: 9.6
- No script pre_job.sh realizo uma cópia dos volumes do último Virtual full do pool "p1full"para o pool "p1", pois o bacula até a versão usada pede que os volumes do último VF + volumes incrementais subsequentes estejam disponíveis em um pool e a escrita dos novos volumes VF esteja em outro pool - não permite ainda que leitura e escrita seja no mesmo pool. O que descobri é que a cópia dos volumes do último job VirtualFull pode ser apenas usando criação de um link simbólico, otimizando tanto espaço temporário necessário para o job, quanto tempo de execução.
- No script pos_job.sh removo os links simbólicos criados.
- Não usei a diretiva Delete Consolidated Jobs, pois decidi contar com as diretivas de Retention e configuração de truncar os volumes.
Atenciosamente,
Duílio Nobre