Bacula - "buraco" do esquema GFS de backup de disco

Bacula - "buraco" do esquema GFS de backup de disco

Tenho uma dúvida sobre a implementação do esquema GFS com bacula em um disco rígido (os deamons já funcionam bem).

O que eu quero realizar:

A cada semestre eu quero um backup completo que deve estar acessível por pelo menos 12 meses -> preciso manter os backups um pouco mais de 12 meses para que o segundo backup completo não substitua o primeiro. Isso significa que haverá pelo menos 3 backups completos (escolhi 18 meses). Continua assim por dias, meses e assim por diante. Esquema GFS simples.

Schedule{
  Name = "GGFSCycle"
  Enabled = yes

  # DailyCycle - the volume is kept for 14 days
  Run = Level=Incremental Pool=DailyPool FullPool=HalfAnnualPool Priority=10 tuesday-sunday at 03:00

  # WeeklyCycle - the volume is kept for 5 weeks
  Run = Level=Incremental Pool=WeeklyPool FullPool=HalfAnnualPool Priority=11 monday at 03:00
  
  # MonthlyCycle - the volume is kept for 7 months
  Run = Level=Differential Pool=MonthlyPool FullPool=HalfAnnualPool Priority=12 february-june 1 at 03:00
  Run = Level=Differential Pool=MonthlyPool FullPool=HalfAnnualPool Priority=12 august-december 1 at 03:00

  # HalfAnnualCycle - the data is kept for 18 months
  Run = Level=Full Pool=HalfAnnualPool Priority=13 january 1 at 03:00
  Run = Level=Full Pool=HalfAnnualPool Priority=13 july 1 at 03:00

}

Pool {    
  Name = DailyPool
  Pool Type = Backup
  Storage = backup-server-sd
  Label Format = "DailyVol_"
  Volume Use Duration = 23 hours
  Recycle = yes                       # Bacula can automatically recycle Volumes
  AutoPrune = yes                     # Prune expired volumes
  Volume Retention = 14 days         
  Maximum Volume Bytes = 50M          # Limit Volume size to something reasonable
  Maximum Volumes = 1000              # Limit number of Volumes in Pool
  # -> max 50G
}

Pool {
  Name = WeeklyPool
  Pool Type = Backup
  Storage = backup-server-sd
  Label Format = "WeeklyVol_"
  Volume Use Duration = 23 hours
  Recycle = yes
  AutoPrune = yes
  Volume Retention = 5 weeks
  Maximum Volume Bytes = 500M 
  Maximum Volumes = 80
  # -> max 70G
}

Pool {
  Name = MonthlyPool
  Pool Type = Backup
  Storage = backup-server-sd
  Label Format = "MonthlyVol_"
  Volume Use Duration = 2 days
  Recycle = yes
  AutoPrune = yes
  Volume Retention = 7 months
  Maximum Volume Bytes = 5G
  Maximum Volumes = 80
  # -> max 170G
}
 
Pool {
  Name = HalfAnnualPool
  Pool Type = Backup
  Label Format = "HalfannualVol_"
  Storage = backup-server-sd
  Volume Use Duration = 3 days
  Recycle = yes
  AutoPrune = yes
  Volume Retention = 18 months #1,5 years
  Maximum Volume Bytes = 35G
  Maximum Volumes = 20
  # -> max 700G
}

O problema que vejo:

é que um backup incremental sempre faz referência ao último backup incremental, diferencial ou completo e salva apenas os arquivos que foram alterados desde então. No meu esquema eu tenho dois backups incrementais "diferentes", o diário e o semanal. O semanal sempre faz referência ao diário, que veio no dia anterior, né? Quando mantenho o semanal por mais de 4 semanas (escolhi 5 semanas) e o diário apenas por mais de 10 dias (escolhi 14 dias), os arquivos diários serão excluídos após 14 dias, mas o mensal ainda faz referência a eles . Então haverá um "buraco"?

Eu descobri, se seria possível ter vários "níveis" de backups incrementais, como eu poderia dizer que o backup incremental semanal faz referência apenas aos backups semanais (nível 0) e os backups incrementais diários apenas aos diários (nível 1 ) o problema desapareceria. O mesmo problema ocorreria quando eu mantivesse o backup completo por um curto período. Por exemplo, se o backup completo substituir o único existente, não restará nenhum backup completo que o backup diferencial possa fazer referência e eu perderei todos os backups que fiz até aquele ponto.

O que eu encontrei:

Procurei na internet e encontrei umcapítulo na documentação do bacula: Afirma: "Agora, como cada um desses diferentes tipos de salvamento precisa permanecer válido por períodos diferentes, a maneira mais simples de fazer isso (e possivelmente a única) é ter um pool separado para cada tipo de backup.".

Minhas perguntas:

  1. Isso basicamente significa que não há outra solução além dos pools completos, diferentes e inkr no capítulo da documentação do bacula. Isso está correto?
  2. Se estiver incorreto, como posso atingir meu objetivo com dois pools incrementais diferentes?

Também li sobre jobs básicos na documentação do bacula, não é a coisa certa, mas vai na direção certa.

Muito obrigado pelo seu tempo e ajuda na leitura até aqui.

Ps: Não sou falante nativo de inglês e peço desculpas se cometo erros. Se há algo que realmente te irrita, eu gostaria de ouvir de você para melhorar meu inglês.

Obrigado.

Responder1

Eu já resolvi isso com a ajuda da lista de discussão do usuário bacula. Não é possível ter efetivamente vários pools incrementais para um único trabalho. Eu mudei minhas configurações para isso:

Schedule{
  Name = "GFSCycle"
  Enabled = yes

  # DailyCycle - the volumes are kept for 40days
  Run = Level=Incremental Pool=DailyPool FullPool=HalfAnnualPool Priority=10 daily at 03:00
  
  # MonthlyCycle - the volumes are kept for 7months
  Run = Level=Differential Pool=MonthlyPool FullPool=HalfAnnualPool Priority=11 february-june 1 at 03:00
  Run = Level=Differential Pool=MonthlyPool FullPool=HalfAnnualPool Priority=11 august-december 1 at 03:00

  # HalfAnnualCycle - the volumes are kept 12months
  Run = Level=Full Pool=HalfAnnualPool Priority=12 january 1 at 03:00
  Run = Level=Full Pool=HalfAnnualPool Priority=12 july 1 at 03:00


Pool {    
  Name = DailyPool
  Pool Type = Backup
  Storage = backup-server-sd
  Label Format = "DailyVol_"
  Volume Use Duration = 23 hours
  Recycle = yes                       # Bacula can automatically recycle Volumes
  AutoPrune = yes                     # Prune expired volumes
  Volume Retention = 40 days
  Maximum Volume Bytes = 50M          # Limit Volume size to something reasonable
  Maximum Volumes = 3000              # Limit number of Volumes in Pool
  # -> max 150G
}

Pool {
  Name = MonthlyPool
  Pool Type = Backup
  Storage = backup-server-sd
  Label Format = "MonthlyVol_"
  Volume Use Duration = 2 days
  Recycle = yes
  AutoPrune = yes
  Volume Retention = 7 months
  Maximum Volume Bytes = 5G
  Maximum Volumes = 80
  # -> max 170G
}
 
Pool {
  Name = HalfAnnualPool
  Pool Type = Backup
  Label Format = "HalfannualVol_"
  Storage = backup-server-sd
  Volume Use Duration = 3 days
  Recycle = yes
  AutoPrune = yes
  Volume Retention = 12 months
  Maximum Volume Bytes = 35G
  Maximum Volumes = 20
  # -> max 700G 
}

a retenção de arquivos e trabalhos para esse único cliente é definida como a retenção máxima de volume.

-> Retenção de arquivos = 12 meses, Retenção de empregos = 12 meses

Existem também backups completos virtuais que podem ser úteis e são explicados com mais detalhes em: https://www.baculasystems.com/incremental-backup-software/

Mais uma vez, muito obrigado a todos da lista de discussão do bacula-user que me ajudaram a descobrir isso.

informação relacionada