I've been utilizing Bacula for backups. I implemented the system and it works great! However, one of the things I did was just have everything fall under one volume. I decided that I wanted to complicate it just a little bit so that Incrementals would only be kept for a week and then it would purge and rewrite those in that volume, thus making sure space doesn't become an issue because we keep 30 days worth of Incrementals.

So what I tried to do was have a Volume called DAILY, a volume called WEEKLY, and a volume called MONTHLY. The Daily is incremental, the weekly is differential, and the monthly is a full. We would keep daily for 7 days, monthly for 30 days, and full for a year (because we need to!).

Now, I know this can be done with tapes. The problem is I use disks... and if I try to do the above it either a) crashes (if the Full/Incremental Jobs are under the same Schedule) or b) doesn't work (it creates a full backup on the daily volume, etc).

Has anyone attempted this? Or can give me an idea on how they have theirs set up? I'm just not sure why it's having issues with this...

Bacula Example;

The Pools

Pool {
   Name = Daily
   Pool Type = Backup
   Volume Retention = 3 days
   Recycle = yes
   AutoPrune = yes
   LabelFormat = DAILY
   Maximum Volume Bytes = 50G

Pool {
   Name = Weekly
   Pool Type = Backup
   Volume Retention = 30 days
   Recycle = yes
   AutoPrune = yes
   LabelFormat = WEEKLY  
   Maximum Volume Bytes = 100G

Pool {
   Name = Monthly
   Pool Type = Backup
   Volume Retention = 365 days
   Recycle = yes
   AutoPrune = yes
   LabelFormat = MONTHLY

The Job/Client/Schedule

Client {
   Name = centos13
   Address = centos13
   FDPort = 9102
   Catalog = MyCatalog
   File Retention = 30 days
   Job Retention = 6 months

FileSet {
   Name = centos13
   Include {
     File = /etc/bacula/bacula-fd.conf
     Options {}

Schedule {
   Name = centos13
   Run = Level=Full Pool=Monthly 1st sat at 00:05
   Run = Level=Differential Pool=Weekly sat at 00:05
   Run = Level=Incremental Pool=Daily mon-fri at 00:05

Job {
   Name = centos13
   Type = Backup
   Client = centos13
   FileSet = centos13
   Schedule = centos13
   Storage = File
   Messages = Standard
   Full Backup Pool = Monthly
   Incremental Backup Pool = Daily
   Differential Backup Pool = Weekly

In order to get Bacula to do what you want you need more than just volumes - you need to put those volumes into separate pools and let your jobs know that you want to use different pools for different backup levels.

The magic syntax is:

Job {
        Name = "Test"
        Type = Backup
        Client = backup-fd 
        FileSet = "FileSetTest"
        Storage = SomeStorage
        Schedule = "ScheduleTest"
        Pool = Default
        Full Backup Pool = FullTest 
        Incremental Backup Pool = IncrTest
        Differential Backup Pool = DiffTest

(shamelessly thieved from http://wiki.bacula.org/doku.php?id=sample_configs -- Check the bacula docs as I think there are probably other places you can specify the per-level pools, like JobDefs & possibly Client)

You would then set retention periods on the pool (or constituent volumes) to meet the requirements you outlined earlier.

On the subject of disk space, I've found it's better with disk backups to treat them like they're tapes.
I suggest you define a "reasonable" `Maximum Volume Bytes in your Pool resource (and update any existing volumes to reflect it), and then create a bunch of volumes that Bacula will cycle through on its own as it "fills" each volume, and recycle in accordance with whatever retention policies you've set up.
In my case I have 200G of space for backups, broken out as 100 2GB files.

This has a few advantages:

  • The backup volumes fit on a DVD
    (so if I need to archive them forever I can just chuck them onto a disc)

  • Off-Site sync only needs to push the files that changed
    (smaller than one 200G volume)

  • Faster disaster recovery
    (If I ever need to recover a server using my remote archive I only need to download its bootstrap (.bsr) and the volumes I need to restore it.)

  • If my hard drive dies I have some hope that it will only kill some of the files.

| improve this answer | |
  • Well, the problem is I've tried this... and it failed and took down the director with it who didn't want to come back up unless I deleted the job, schedule, and client... who I then had to re-add later. That's why I was hoping to see a working example with disks. Bah! Silly Bacula... – Ethabelle Jul 27 '12 at 15:24
  • @Ethabelle hmmm.... I assume you're running a reasonably recent Bacula release, can you post the redacted Pool & Job resources? I might have time to spin up a test lab and see what's upsetting it – voretaq7 Jul 27 '12 at 15:26
  • I updated the original topic with the director shiz. Albeit, I did get a "27-Jul 10:30 bacula-dir ERROR TERMINATION "pool" directive in Job "centos13" resource is required, but not found." error when I set this all back up. – Ethabelle Jul 27 '12 at 15:47
  • @Ethabelle Yup that's the only thing I can see wrong with your configs at a glance -- the Pool directive needs to be present even if you include all the level-specific pools (I guess in case the Bacula folks ever add another level or something) – voretaq7 Jul 27 '12 at 16:12

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.