Bacula - Festplattensicherung GFS-Schema "Loch"

Bacula - Festplattensicherung GFS-Schema "Loch"

Ich habe eine Frage zur Implementierung des GFS-Schemas mit Bacula auf einer Festplatte (die Daemons funktionieren bereits einwandfrei).

Was ich erreichen möchte:

Jedes halbe Jahr möchte ich ein Voll-Backup, das mindestens 12 Monate lang verfügbar sein soll -> ich muss die Backups etwas länger als 12 Monate aufbewahren, damit das zweite Voll-Backup das erste nicht überschreibt. Das bedeutet, dass mindestens 3 Voll-Backups vorhanden sein werden (ich habe 18 Monate gewählt). So geht es dann weiter für Tage, Monate usw. Einfaches GFS-Schema.

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
}

Das Problem, das ich sehe:

ist, dass ein inkrementelles Backup immer auf das letzte inkrementelle, differentielle oder vollständige Backup verweist und nur die Dateien speichert, die sich seitdem geändert haben. In meinem Schema habe ich zwei „unterschiedliche“ inkrementelle Backups, das tägliche und das wöchentliche. Das wöchentliche Backup verweist immer auf das tägliche Backup vom Vortag, richtig? Wenn ich das wöchentliche Backup länger als 4 Wochen (ich habe 5 Wochen gewählt) und das tägliche Backup nur länger als 10 Tage (ich habe 14 Tage gewählt) behalte, werden die täglichen Dateien nach 14 Tagen gelöscht, aber das monatliche Backup verweist immer noch auf sie. Es entsteht also ein „Loch“?

Ich habe herausgefunden, dass das Problem behoben wäre, wenn es möglich wäre, mehrere „Ebenen“ inkrementeller Backups zu haben, z. B. wenn ich sagen könnte, dass das wöchentliche inkrementelle Backup nur auf die wöchentlichen Backups (Ebene 0) verweist und die täglichen inkrementellen Backups nur auf die täglichen (Ebene 1). Das gleiche Problem würde auftreten, wenn ich das Voll-Backup zu kurz aufbewahre. Wenn beispielsweise das Voll-Backup das einzige vorhandene überschreibt, bleibt kein Voll-Backup übrig, auf das das differenzielle Backup verweisen könnte, und ich verliere alle Backups, die ich bis zu diesem Zeitpunkt erstellt habe.

Was ich fand:

Ich habe im Internet gesucht und fand eineKapitel in der Bacula-Dokumentation: Dort heißt es: „Da nun jede dieser unterschiedlichen Arten von Sicherungen für unterschiedliche Zeiträume gültig bleiben muss, besteht die einfachste (und möglicherweise einzige) Möglichkeit hierfür darin, für jede Sicherungsart einen separaten Pool zu haben.“

Meine Fragen:

  1. Das bedeutet im Wesentlichen, dass es keine andere Lösung gibt als die einzelnen Full-, Diff- und Inkr-Pools im Kapitel der Bacula-Dokumentation. Ist das richtig?
  2. Wenn es falsch ist, wie kann ich mein Ziel mit zwei verschiedenen inkrementellen Pools erreichen?

In der Bacula-Dokumentation habe ich auch schon von Basisjobs gelesen, das ist zwar nicht das Richtige, geht aber in die richtige Richtung.

Vielen Dank für Ihre Zeit und Hilfe, die Sie beim Lesen bis hierher verbracht haben.

Ps: Ich bin kein englischer Muttersprachler und es tut mir leid, wenn ich Fehler mache. Wenn es etwas gibt, das Sie wirklich ärgert, würde ich gerne von Ihnen hören, um mein Englisch zu verbessern.

Danke schön.

Antwort1

Ich habe es inzwischen mithilfe der Bacula-User-Mailingliste geklärt. Es ist nicht möglich, mehrere inkrementelle Pools für einen einzigen Job effektiv zu haben. Ich habe meine Einstellungen folgendermaßen geändert:

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 
}

Die Datei- und Auftragsaufbewahrung für diesen einzelnen Client wird auf die maximale Volumenaufbewahrung eingestellt.

-> Dateiaufbewahrung = 12 Monate, Jobaufbewahrung = 12 Monate

Es gibt auch virtuelle Voll-Backups, die nützlich sein können und hier ausführlicher erklärt werden: https://www.baculasystems.com/incremental-backup-software/

Nochmals vielen Dank an alle auf der Bacula-Benutzer-Mailingliste, die mir dabei geholfen haben, es herauszufinden.

verwandte Informationen