Full Virtual/Sintético e Backups Incrementais para Sempre de Bacula

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: pt-brPortuguêsenEnglish (Inglês)esEspañol (Espanhol)

Deixe uma resposta