O nível de backup Virtual Full do Bacula é freqüentemente chamado de backup sintético ou consolidação em outros sistemas de backup. Ele permite que você consolide o backup completo anterior mais o backup diferencial mais recente e quaisquer backups incrementais subsequentes em um novo backup completo. Esse novo backup completo será então considerado o mais recente completo para quaisquer backups incrementais ou diferenciais futuros.
O backup completo virtual é realizado sem entrar em contato com o cliente, lendo os dados de backup anteriores. Lê o volume utilizado para os últimos backups Completo e Incremental/Diferencial e grava em um volume do mesmo Pool ou diferente, informado pela Diretiva NextPool. Em alguns aspectos, o VirtualFull se assemelha a uma tarefa de migração, mas possui muitos recursos mais específicos.
Configurar o VirtualFull para ser gravado em um pool diferente de onde seus backups anteriores são salvos sempre garante que você não terá uma situação de conflito ao tentar ler e gravar no mesmo volume no Storage Daemon. Mas, em geral, você pode definir seu Próximo Pool para apontar para o mesmo Pool de backup original. Em qualquer caso, uma vez que um VirtualFull tenha sido criado, e uma restauração seja feita envolvendo o Full mais atual, ele lerá o Volume ou Volumes pelo VirtualFull independentemente em qual Pool o Volume se encontra.
A execução do VirtualFull pode ser feita manualmente, alterando o Job level no comando run, ou sistematicamente, no Schedule do Job.
Uma definição típica de recurso de Job pode ter a seguinte aparência:
Job { Name = "Backup_Job" Type = Backup ... Schedule = virtual_schedule Pool = Syntetic_Fulls NextPool= Synthetic_Fulls }
Como alternativa, o NextPool pode ser definido no recurso Pool. O mesmo para os Storages, se forem diferentes (dos Pools originais e de destino), da seguinte forma:
# Orignal Pool Pool { Name = Daily_Inc Pool Type = Backup Recycle = yes # Automatically recycle Volumes AutoPrune = yes # Prune expired volumes Volume Retention = 7d # one year NextPool = Weekly_VFull Storage = File1 } # Destination Pool Pool { Name = Weekly_VFull Pool Type = Backup Recycle = yes # Automatically recycle Volumes AutoPrune = yes # Prune expired volumes Volume Retention = 30 days Storage = File2 }
Para executar um backup VirtualFull manual, use o comando seguinte no bconsole:
run job=Backup_Job level=VirtualFull
Para programar o VirtualFull regular, defina um recurso Bacula Schedule, como segue:
Schedule { Name = virtual_schedule Run=Differential Pool=Daily Mon-Thu at 19:00 Run=VirtualFull Pool=Weekly 2nd-5th Friday at 19:00 Run=VirtualFull Pool=Monthly 1st Friday at 19:00 }
Se o Virtual Full for executado e não houver trabalhos anteriores, o Virtual Full falhará com um erro.
O Virtual Full Progressivo
No Bacula versão 9.0.0, adicionamos uma nova diretiva chamada Backups To Keep que permite a você implementar Progressive Virtual Fulls dentro do Bacula. Às vezes, esse recurso é conhecido como Incremental Forever with Consolidation.
O backup Incremental Forever é o mais econômico do ponto de vista de armazenamento, uma vez que ocupará apenas o espaço de armazenamento exigido por um VirtualFull e incrementais subsequentes, mas o administrador pode achar mais difícil implantá-lo com políticas de backup corporativas mais complexas, como baseado no esquema de rotação grandfather-father-son. Além disso, é muito importante que todas as partes dos backups possam ser restauradas, uma vez que um dado ausente pode afetar a única versão dos dados de backup se apenas uma consolidação for mantida por vez.
Para implementar o recurso Progressive Virtual Full, basta adicionar a diretiva BackupsToKeep ao recurso de backup Virtual Full Job. O valor especificado na diretiva indica o número de tarefas de backup que não devem ser mescladas no Virtual Full (ou seja, o número de tarefas de backup que devem permanecer após a conclusão do Virtual Full). O padrão é zero, que reverte para um Virtual Full padrão do que consolida todas as tarefas de backup que encontrar.
A nova diretiva BackupsToKeep é especificada no Recurso Job e tem o formato:
Job { Name = "IncrementalForever" Type = VirtualFull Level = Backup ... Accurate = Yes Backups To Keep = 30 DeleteConsolidatedJobs = yes }
O valor 30 no exemplo anterior é o número de backups a serem retidos. Quando esta diretiva está presente durante um Virtual Full (ela é ignorada para outros tipos de trabalho), ele irá procurar o backup completo mais recente que possui mais backups subsequentes do que o valor especificado. No exemplo acima, o trabalho simplesmente terminará sem ação, a menos que haja um backup full seguido por pelo menos 31 backups de nível diferencial ou incremental.
Supondo que o último backup completo seja seguido por 32 backups incrementais, será executado um completo virtual que consolida o completo com os dois primeiros incrementais que foram executados após o completo. O resultado é que você terá um backup completo seguido por 30 backups incrementais.
A nova diretiva DeleteConsolidatedJobs (Job Resource) espera um valor sim ou não que, se definido como yes, fará com que qualquer Job antigo consolidado durante um Virtual Full seja excluído. No exemplo acima, vimos que um trabalho completo mais um outro trabalho (incremental ou diferencial) foram consolidados em um novo backup completo. O original completo mais o outro trabalho consolidado serão excluídos. O valor padrão é não.
Referências:
Bacula 5.0 Manual, New Features in 3.0.0 <https://www.bacula.org/5.0.x-manuals/en/main/main/New_Features_in_3_0_0.html>
Bacula 9.0 Manual, New Features in 9.0.0 <https://www.bacula.org/9.0.x-manuals/en/main/New_Features_in_9_0_0.html#SECTION00304000000000000000>
Disponível em: PortuguêsEnglish (Inglês)Español (Espanhol)