Bacula Virtual/Synthetic Full and Forever Incremental Backups

Bacula Virtual/Synthetic Full and Forever Incremental Backups

The Bacula’s Virtual Full backup level is often called Synthetic Backup or Consolidation in other backup systems. It permits you to consolidate the previous Full backup plus the most recent Differential backup and any subsequent Incremental backups into a new Full backup. This new Full backup will then be considered as the most recent Full for any future Incremental or Differential backups.

The Virtual Full backup is accomplished without contacting the client by reading the previous backup data. It reads the volume used to the last Full and Incrmental/Differential backups and write on a volume in the same or different pool, informed by the NextPool Directive. In some respects the VirtualFull resembles a Migration Job, but it has many more specific features

Configuring the VirtualFull to be written into a different Pool from where your prior backups are saved always guarantees that you will not get a deadlock situation attempting to read and write to the same volume in the Storage daemon. But in general, you can set your Next Pool to point to the same Original backup Pool. In any case, once a VirtualFull has been created, and a restore is done involving the most current Full, it will read the Volume or Volumes by the VirtualFull regardless in which Pool the Volume is found.

The VirtualFull execution can be done manually, changing the Job level in the run command, or systematically, in the Job Schedule.

A typical Job resource definition might look like the following:

Job {
Name = "Backup_Job"
Type = Backup
...
Schedule = virtual_schedule
Pool = Syntetic_Fulls
NextPool= Synthetic_Fulls
}

Alternatively, the NextPool can be set in the Pool resource. The same thing for the Storages, if they are different (from original and destination Pools), such as follows:

# 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
}

To run a manual VirtualFull backup, use such following command in the bconsole:

run job=Backup_Job level=VirtualFull

In order to program regular VirtualFull, define a Bacula Schedule resource such as follows:

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
}

If the Virtual Full is run, and there are no prior Jobs, the Virtual Full will fail with an error.

The Progressive Virtual Full

In Bacula version 9.0.0, there was added a new Directive named Backups To Keep that permits you to implement Progressive Virtual Fulls within Bacula. Sometimes this feature is known as Incremental Forever with Consolidation.

The Incremental Forever backup is the most economic from the storage point of view, since it will only occupy the storage space required by one VirtualFull and subsequent Incrementals, but the administrator might find it harder to deploy it with more complex corporate backup policies, such as based on the grandfather-father-son rotation scheme. Also, is very important all pieces of the backups can be restore, since one missing data can impact the unique version of the backup data if only one consolidation is kept at a time.

To implement the Progressive Virtual Full feature, simply add the BackupsToKeep directive to your Virtual Full backup Job resource. The value specified on the directive indicates the number of backup jobs that should not be merged into the Virtual Full (i.e. the number of backup jobs that should remain after the Virtual Full has completed). The default is zero, which reverts to a standard Virtual Full than consolidates all the backup jobs that it finds.

The new BackupsToKeep directive is specified in the Job Resource and has the form:

Job {
  Name = "ForeverIncremental"
  Type = Backup
  Level = VirtualFull
  ...
  Accurate = Yes
  Backups To Keep = 30
  DeleteConsolidatedJobs = yes
}

The 30 value in the prior example is the number of backups to retain. When this directive is present during a Virtual Full (it is ignored for other Job types), it will look for the most recent Full backup that has more subsequent backups than the value specified. In the above example the Job will simply terminate without action, unless there is a Full back followed by at least 31 backups of either level Differential or Incremental.

Assuming that the last Full backup is followed by 32 Incremental backups, a Virtual Full will be run that consolidates the Full with the first two Incrementals that were run after the Full. The result is that you will end up with a Full followed by 30 Incremental backups.

The new directive DeleteConsolidatedJobs (Job Resource) expects a yes or no value that if set to yes will cause any old Job that is consolidated during a Virtual Full to be deleted. In the example above we saw that a Full plus one other job (either an Incremental or Differential) were consolidated into a new Full backup. The original Full plus the other Job consolidated will be deleted. The default value is no.

References:

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>

 

Leave a Reply

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

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>

 

Leave a Reply

Full  Virtual/Sintético y Backups Incrementales para Siempre de Bacula

Full Virtual/Sintético y Backups Incrementales para Siempre de Bacula

El nivel de respaldo completo virtual de Bacula a menudo se denomina respaldo sintético o consolidación en otros sistemas de respaldo. Le permite consolidar la copia de seguridad completa anterior más la copia de seguridad diferencial más reciente y cualquier copia de seguridad incremental posterior en una nueva copia de seguridad completa. Esta nueva copia de seguridad completa se considerará la más reciente para cualquier copia de seguridad incremental o diferencial futura.

La copia de seguridad completa virtual se logra sin contactar al cliente leyendo los datos de la copia de seguridad anterior. Lee el volumen utilizado para las últimas copias de seguridad completas e individuales / diferenciales y escribe en un volumen en el mismo Pool o en uno diferente, informado por la Directiva NextPool. En algunos aspectos, VirtualFull se parece a un Job de migración, pero tiene muchas más características específicas.

Configurar VirtualFull para que se escriba en un Pool diferente al que se guardan sus copias de seguridad anteriores siempre garantiza que no obtendrá una situación de punto muerto al intentar leer y escribir en el mismo volumen en el Storage Daemon. Pero, en general, puede configurar su siguiente Pool para que apunte al mismo Pool de respaldo original. En cualquier caso, una vez que se ha creado un VirtualFull, y se realiza una restauración que involucra al Full más actual, leerá el Volumen o los Volúmenes por VirtualFull independientemente en qué Pool se encuentre el Volumen.

La ejecución de VirtualFull se puede realizar manualmente, cambiando el nivel de Trabajo en el comando de ejecución, o de forma sistemática, en el Programa de Trabajo.

Una definición de recurso de trabajo típica podría tener el siguiente aspecto:

Job {
  Name = "Backup_Job"
  Type = Backup
  ...
  Schedule = virtual_schedule
  Pool = Syntetic_Fulls
  NextPool= Synthetic_Fulls
}

Alternativamente, el NextPool se puede configurar en el recurso Pool. Lo mismo para los Storages, si son diferentes (de los Pools originales y de destino), como sigue:

# 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 ejecutar un Job VirtualFull manual, utilice lo comando siguiente en bconsole:

run job=Backup_Job level=VirtualFull

Para programar VirtualFull regular, defina un recurso de Schedule de Bacula como se indica a continuación:

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
}

Si se ejecuta Virtual Full y no hay trabajos anteriores, Virtual Full fallará con un error.

El Virtual Full Progresivo

En Bacula versión 9.0.0, hemos agregado una nueva directiva llamada Backups To Keep que le permite implementar Progressive Virtual Fulls dentro de Bacula. A veces, esta función se conoce como Incremental Forever with Consolidation.

La copia de seguridad incremental de Forever es la más económica desde el punto de vista del almacenamiento, ya que solo ocupará el espacio de almacenamiento requerido por un VirtualFull y los Incrementales posteriores, pero el administrador podría tener más dificultades para implementarla con políticas de copia de seguridad corporativas más complejas, como basado en el esquema de rotación grandfather-father-son. Además, es muy importante que se puedan restaurar todas las partes de las copias de seguridad, ya que un dato faltante puede afectar la única versión de los datos de la copia de seguridad si solo se mantiene una consolidación a la vez.

Para implementar la función Progressive Virtual Full, simplemente agregue la directiva BackupsToKeep a su recurso de trabajo de copia de seguridad virtual completa. El valor especificado en la directiva indica la cantidad de trabajos de respaldo que no deben fusionarse en Virtual Full (es decir, el número de trabajos de respaldo que deben permanecer después de que se complete el Virtual Full). El valor predeterminado es cero, que vuelve a un Virtual Full estándar que consolida todos los trabajos de copia de seguridad que encuentra.

La nueva directiva BackupsToKeep se especifica en el recurso de trabajo y tiene la forma:

Job {
  Name = "IncrementalForever"
  Type = Backup
  Level = VirtualFull
  ...
  Accurate = Yes
  Backups To Keep = 30
  DeleteConsolidatedJobs = yes
}

El valor 30 en el ejemplo anterior es el número de copias de seguridad que se deben retener. Cuando esta directiva está presente durante un Virtual Full (se ignora para otros tipos de trabajo), buscará la copia de seguridad completa más reciente que tenga más copias de seguridad posteriores que el valor especificado. En el ejemplo anterior, el trabajo simplemente terminará sin acción a menos que haya un respaldo completo seguido de al menos 31 copias de seguridad de nivel diferencial o incremental.

Suponiendo que a la última copia de seguridad completa le siguen 32 copias de seguridad incrementales, se ejecutará una completa virtual que consolida la completa con los dos primeros incrementales que se ejecutaron después de la completa. El resultado es que terminará con un completo seguido de 30 copias de seguridad incrementales.

La nueva directiva DeleteConsolidatedJobs (Job Resource) espera un valor de sí o no que, si se establece en sí, hará que se elimine cualquier trabajo antiguo que se consolide durante un Virtual Full. En el ejemplo anterior, vimos que un trabajo completo más otro trabajo (incremental o diferencial) se consolidaron en una nueva copia de seguridad completa. Se eliminará el Completo original más el otro Trabajo consolidado. El valor predeterminado es no.

Referencias:

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>

 

Leave a Reply