Bacula is een set programma’s om het back-up proces te automatiseren. Bacula werkt over het netwerk en gebruikt een eigen protocol en opslagformaat. Bacula wordt primair ontwikkeld voor bedrijfsnetwerken, maar is zeker geen overkill voor je thuisnetwerk. Door zijn flexibiliteit kan de configuratie je aanvankelijk wel overdonderen. In dit artikel laten we zien hoe je met een beperkte configuratie een volwaardig back-up systeem kunt neerzetten.

Bacula bestaat uit een aantal componenten waarvan je in afbeelding 1 een overzicht ziet:

 

·       Director: de centrale manager, die de administratie bijhoudt;

·       Storage daemon: handelt de fysieke back-up af;

·       Client: machine waarvan je een back-up wil;

·       Catalog: database met informatie over de back-ups;

·       Interface: keuze uit een console, desktop GUI of web interface.

 

De client wordt vaak ‘file daemon’ genoemd, omdat die feitelijk de bestanden ter back-up naar de storage daemon stuurt. De storage daemon schrijft vervolgens die bestanden naar een zogenaamd volume. Dat kan een tape zijn, maar ook een bestand. In dat geval kun je het volume vergelijken met een archiefbestand, zoals een tar ball. De catalog bevat gegevens, zoals start- en eindtijden, de grootte en bestandsnamen van back-ups. De desktop GUI heet Bat, d.w.z. Bacula Admin Tool.

 

Deze componenten kunnen op verschillende machines staan. Je kunt dus door middel van de GUI op je laptop via de director op machine A een back-up van machine B in gang zetten die vervolgens de bestanden naar de storage daemon op machine C stuurt. Hierdoor lijkt bij een eerste kennismaking de configuratie nodeloos ingewikkeld. Als je je beperkt tot een basisconfiguratie, valt het toch mee.

 

Installatie

We stippen dit maar kort aan. Alle grote distributies hebben Bacula in de repositories. Voor de installatie hoef je dus alleen maar de juiste pakketten te installeren met behulp van je pakketmanager.

 

Bacula ondersteunt als database MySQL, PostgreSQL en SQLite. Deze moet je apart installeren, omdat die niet automatisch meekomt met de Bacula-pakketten. Bacula maakt niet zelf databases of tabellen aan. Sommige distributies leveren pakketten om dit doen, bij andere moet je meegeleverde scripts gebruiken, zoals bij Fedora waar ze in /usr/libexec/bacula staan.

 

Configuratie

We gaan uit van de volgende situatie. Van de maildirectory op een mailserver willen we één keer per week een volledige back-up en alle overige dagen een incrementele. Bij een incrementele back-up maak je alleen een back-up van bestanden die veranderd zijn sinds de vorige back-up. Dat kan zelf ook een incrementele back-up zijn. Op de mailserver installeren we de client. De database en director staan op aparte machines. Op een laptop gebruiken we de console of GUI.

 

Alle configuratiebestanden staan in directory /etc/bacula. Achtereenvolgens komen de console en GUI, client, storage daemon en director aan bod. De web interface laten we onbesproken. In afbeelding 2 zie je voor iedere configuratie dat deel van de listing waar onderlinge waardes overeen moeten stemmen. Verdere uitleg volgt hieronder.

 

afbeelding 2: Onderlinge samenhang van de configuratiebestanden

 

Console en GUI

De configuratie van de console en GUI zijn identiek. Voor de console staat de configuratie in bconsole.conf en voor de GUI in bat.conf (zie listing 1). In Bacula-termen bestaat deze configuratie uit één resource, Director, met drie directives. De naam van een directive is niet hoofdlettergevoelig en mag zelfs spaties bevatten. De namen Password, password en pass word zijn dus gelijkwaardig. De waarde van een directive is wel hoofdlettergevoelig. De wachtwoorden director-pw en Director-PW zijn dus verschillend. Als de waarde een spatie bevat, moet je aanhalingstekens gebruiken, bijvoorbeeld “director pw”. Voor elk resource is directive Name verplicht omdat die de resource identificeert. De waarde van Name is vrij te bepalen.

 


Director {

  Name = bacula-dir

  Address = dir.domein.naam

  Password = director-pw

}

 

Met resource Director bepaal je welke director je wil benaderen. Hoewel het handig is, hoeft Name niet identiek te zijn aan de naam in de configuratie van de director. Daarom is de pijl in afbeelding 2 onderbroken. Met Address specificeer je het IP-adres of de hostnaam van de machine waarop de director staat. Zoals je in afbeelding 2 ziet, bepaalt de director de waarde “director-pw” voor Password.

 

Client

De configuratie van de client staat in bacula-fd.conf (zie listing 2). De letters “fd” staan voor file daemon, zoals hierboven gemeld. Met resource FileDaemon bepaal je eigenschappen van de client. Deze client heet “bacula-fd”. De verplichte directives Working Directory en Pid Directory zijn nodig voor een technisch correcte werking van Bacula. Je ziet hier de standaard waarden voor Fedora.

 


FileDaemon {

  Name = bacula-fd

  Working Directory = /var/spool/bacula

  Pid Directory = /var/run

}

 

Director {

  Name = bacula-dir

  Password = client-pw

}

 

Messages {

  Name = standard

  Director = bacula-dir = all

}

 

Resource Director bepaalt hier welke director een back-up van deze client mag maken. In afbeelding 2 zie je dat we de naam “bacula-dir” uit diens configuratie hebben overgenomen. Op zijn beurt moet de director het wachtwoord “client-pw” in zijn configuratie opnemen. Resource Messages is ook verplicht. In dit voorbeeld stuurt de client alle meldingen naar director “bacula-dir”.

 

Storage daemon

De configuratie in bacula-sd.conf lijkt sterk op die van de client (zie listing 3). Er is één extra resource, Device, waarmee je de fysieke opslag van back-ups beschrijft.

 


Storage {

  Name = bacula-sd

  Working Directory = /var/spool/bacula

  Pid Directory = /var/run

}

 

Director {

  Name = bacula-dir

  Password = storage-pw

}

 

Messages {

  Name = standard

  Director = bacula-dir = all

}

 

Device {

  Name = my-storage

  Media Type = file

  Archive Device = /dpool/my-storage

  LabelMedia = yes

}

 

Media Type is verplicht, maar de waarde mag je helemaal zelf bepalen. Hier gebruiken we “file” omdat de back-up volumes bestanden zijn. In afbeelding 2 zie je Media Type samen met Name weer terug in de configuratie van de director. Media Type lijkt overbodig, maar wordt gebruikt in systemen met meerdere storage daemons. Met Archive Device geven we hier directory “/dpool/my-storage” op als plek voor de volumes. Die directory moet je zelf aanmaken. Bacula labelt de volumes. Voor back-up naar een harde schijf is het label tevens de bestandsnaam van het volume. Standaard zal de storage daemon bij een back-up wachten totdat je een label opgeeft via de console of GUI. Door LabelMedia op “yes” te zetten labelt de storage daemon automatisch. Let op, in de configuratie van de director hieronder is ook een setting nodig.

 

Director

Het configuratiebestand bacula-dir.conf hebben we in twee stukken gehakt. Listing 4 toont alles met betrekking tot de daemon en listing 5 alles wat de back-up job betreft.

 

In Listing 4 bepaalt resource Director de eigenschappen van de director. Het Password is bij de console en GUI al ter sprake gekomen. QueryFile is verplicht, maar mag leeg zijn zoals hier. Als je op de console rechtstreeks SQL-query’s op de catalogue wil uitvoeren, moet je hier een bestand met dergelijke query’s specificeren.

 

Director {

  Name = bacula-dir

  Working Directory = /var/spool/bacula

  Pid Directory = /var/run

  Password = director-pw

  QueryFile = “”

  Messages = standard

}

 

Messages {

  Name = standard

  Append = /var/log/bacula/bacula.log = all, !skipped

}

 

Client {

  Name = my-client

  Address = mail.domein.naam

  Password = client-pw

  Catalog = my-catalog

  }

 

Storage {

  Name = my-sd

  Address = nas.domein.naam

  Password = storage-pw

  Device = my-storage

  Media Type = file

}

 

Catalog {

  Name = my-catalog

  DB Address = db.domein.naam

  DB Name = bacula

  DB User = bacula

  DB Password = bacula

}

 

In resource Messages definiëren we het logbestand “/var/log/bacula/bacula.log” als bestemming van alle meldingen, inclusief die van de client en storage daemon. We loggen alles behalve “skipped” meldingen om te voorkomen dat de incrementele back-up de namen van alle overgeslagen bestanden logt. Resources Client en Storage leggen de relatie met de client en storage daemon. In Client leg je ook de te gebruiken catalog vast. In resource Catalog geef je aan op welke machine de database staat, hoe die heet en wat de gebruikersnaam en het wachtwoord zijn. Deze waarden liggen vast door je database-installatie, zoals ook aangegeven in afbeelding 2.

 

In listing 5 definieert resource Schedule het back-up schema. Hier maken we elke zondag een volledige back-up en alle overige dagen een incrementele. In resource FileSet bepaal je waarvan je een back-up wil. In dit voorbeeld is dat maildirectory “/var/spool/imap”. Alle daaronder liggende bestanden en subdirectories gaan automatisch mee. De optie “Compression” gebruik je vrijwel altijd. De client comprimeert daardoor ieder bestand voordat het naar de storage daemon wordt gestuurd.

 

Schedule {

  Name = my-cycle

  Run = Full sun at 03:35

  Run = Incremental mon-sat at 03:35

}

 

FileSet {

  Name = my-files

  Include {

    Options {

      Compression = GZIP

    }

    File = /var/spool/imap

 

  }

}

 

Pool {

  Name = my-pool

  Pool Type = Backup

  Volume Retention = 1 month

  Maximum Volume Jobs = 1

  Label Format = “vol-“

}

 

Job {

  Name = my-first-job

  Type = Backup

  Client = my-client

  Storage = my-sd

  Schedule = my-cycle

  Pool = my-pool

  FileSet = my-files

  Messages = standard

}

 

Resource Pool bepaalt eigenschappen van de back-up volumes. Pool Type is verplicht en is “Backup” voor back-up jobs. Volume Retention bepaalt hoe lang een volume bewaard wordt voordat de storage daemon het hergebruikt. De standaardwaarde van 365 dagen is erg lang voor dit voorbeeld. Om de hoeveelheid benodigde schijfruimte te beperken, kiezen we hier één maand. Max Volume Jobs specificeert hoeveel jobs gebruik mogen maken van een volume. Als een job namelijk klaar is, kan een volgende back-up job bestanden toevoegen aan een bestaand volume. Standaard is dat “0” wat onbeperkt betekent. Voor back-up naar schijf is “1” gebruikelijk, dat wil zeggen dat iedere volume door slechts één back-up job wordt gebruikt. Met Label Format bepaal je hoe de storage daemon de volumes automatisch moet labelen. Om te voorkomen dat de storage daemon ondanks LabelMedia=“yes” in zijn configuratie hierboven alsnog wacht totdat je een label opgeeft, moet je hier een formaat specificeren. In dit voorbeeld krijgt elk volume als bestandsnaam de prefix “vol-” en Bacula voegt daar een viercijferig getal aan toe. Nu maakt de storage daemon automatisch volumes met als bestandsnaam “vol-0001”, “vol-0002”, enz.

 

In resource Job komt alles bij elkaar. Type is verplicht en is “Backup” voor back-up jobs. Bacula maakt nu volgens een wekelijks schema back-ups van directory “/var/spool/imap” op de mailserver “mail.domein.naam”. De back-up volumes staan in directory “/dpool/my-storage” op machine “nas.domein.naam” als bestanden “vol-0001”, vol-0002”, enz. Ze worden één maand bewaard waarna Bacula ze hergebruikt.

 

Tot slot

In dit artikel hebben we ons alleen gericht op een werkende basisconfiguratie. Voer zelf zeker de eerste keer een handmatige back-up uit, vervolgens een restore en vergelijk die bestanden met de oorspronkelijke bestanden. Een back-up heeft namelijk pas waarde als je hem geverifieerd hebt. Doe hetzelfde ook voor de eerste automatisch gemaakte back-ups.

 

Links

http://www.bacula.org/