La sauvegarde : Bacula
Bacula
Introduction
Bacula est un ensemble de programmes qui vous permet de gérer vos sauvegardes, restaurations ou vérifications de données d'un ordinateur sur un réseau hétérogène.
En termes techniques, il s'agit d'un programme de sauvegarde client/serveur.
Bacula est relativement facile d'utilisation et efficace, tout en offant de nombreuses fonctions avancées de gestion de stockage qui facilitent la recherche et la restauration de fichiers perdus ou endommagés.
La plupart du code source de Bacula a été publiée sous une version quelque peu modifiée de la license GPL version 2. Pour toute information complémentaire sur la license, merci de suivre le lien du menu.
Son nom est une référence au mot "Backup" (sauvegarde) et à Dracula. Le slogan dit : "Il arrive la nuit et absorbe l’essence vitale de vos ordinateurs".
Il est utilisé pour sauvegarder via la réseau un ensemble de postes clients et de serveurs. Son originalité réside, en partie, dans le fait qu'il utilise un SGBD libre (MySQL, PostgreSQL...) pour gérer le catalogue des sauvegardes.
Architecture

- Le ‘Directeur’ (un seul par architecture de sauvegarde) est installé sur une machine linux, c’est le cœur du système de sauvegarde. Il « commande » et unit les différents éléments. C’est lui que l’on configure pour planifier les sauvegardes et les restaurations de fichiers.
- Le ‘Storage Daemon’ est chargé de l’écriture et de la lecture sur le support de sauvegarde (Disques durs, lecteur de bandes…). Il peut y avoir plusieurs serveurs de stockage par architecture de sauvegarde.
- Le ‘Filer Daemon’ est la partie cliente de Bacula. Il sera installé sur la machine où se trouvent les données à sauvegarder. Ce programme est exécuté en tant que service. Il fonctionne sur toutes les versions actuelles de Windows (95, 98, Me, NT, 2000, XP, 2003) et sous forme d’une installation standard (.exe).
- La ’Console’ permet à l’administrateur de communiquer avec le directeur, pour lancer une sauvegarde ou une restauration manuellement, de lister les différents paramètres ou sauvegardes du directeur mais aussi des clients bacula et serveurs de stockage. Elle peut être exécutée depuis n’importe quelle machine qui peut accéder au directeur.
- Le ‘Catalogue’ contient toutes les configurations et toutes les informations concernant les volumes, pools, jobs et fichiers sauvegardés de bacula. Il utilise les Bases de Données. Bacula supporte actuellement trois bases de données différentes, MySQL, PostgreSQL, et SQLite. SQLite est fourni avec l’installation de Bacula. Le catalogue peut être sauvegardé ou encore reconstruit à partir des fichiers sauvegardés.
Il faut savoir que tous ces composants peuvent être installés sur des machines dédiées mais bien sûr ce n’est pas obligatoire.
Comme dans l’exemple ci-dessous, on peut avoir d’autres types d’architecture pour faire de la sauvegarde à distance.

Configuration
Il y a 4 fichiers de configuration différents :
- bacula-dir.conf : Pour configurer le directeur. Un seul fichier car il n’y a qu’un seul directeur par architecture de sauvegarde.
- bacula-fd.conf : Configuration du client (Filer Daemon). On le retrouve sur les clients. Il peut y avoir plusieurs clients sur une même architecture. Donc un fichier de ce type par client.
- bacula-sd.conf : Configuration du serveur de stockage (Storage Daemon). On le retrouve sur les serveurs de stockage. Il peut y en avoir plusieurs sur une même architecture. Donc un fichier de ce type par serveur de stockage.
- bconsole.conf : Configuration de la console bacula. On retrouve ce fichier sur chaque ordinateur possédant la console Bacula.
Tous les fichiers de configuration sont basés sur le même principe, les différents paramètres se présentent sous forme de fonctions, un peu comme un langage de programmation. Ce système permet une grande modularité.
Directeur
- Director : Cette fonction touche à la configuration du directeur lui-même. On donne le nom du directeur ainsi que le mot de passe.
- Client : On déclare grâce à cette fonction les différents clients (Filer Daemon) qui pourront être utilisés par ce directeur. On indique pour chaque client divers paramètres comme son nom, son adresse IP, mot de passe …
- Schedule : Les fonctions ‘Schedule’ définissent chacune un modèle de planification. On indique le type de la sauvegarde ainsi que la date et l’heure à laquelle elle sera lancée. Pour chaque fonction, il peut y avoir plusieurs dates et heures.
- Storage : On déclare grâce à cette fonction tous les serveurs de stockage (Storage Daemon), donc l’endroit où les données seront sauvegardées. Bien entendu, la machine désignée doit avoir un ‘Storage Daemon’ installé et lancé.
- FileSet : C’est cet objet qui définit les fichiers qui seront sauvegardés ou restaurés. On peut inclure ou exclure des fichiers ou des dossiers et utiliser la compression et la signature.
- Pool : Les fonctions ‘Pools’ définissent un ensemble de volumes de stockage pour sauvegarder les données. Avec plusieurs pools configurés, on peut définir quel ensemble recevra les sauvegardes. Par exemple, on peut stocker toutes les sauvegardes complètes sur un ensemble de volumes et les sauvegardes différentielles sur un autre ensemble de volumes. Ou encore de sauvegarder les différentes machines sur différents ensembles. Cela permet de séparer les sauvegardes.
- Catalogue : Cet objet permet de définir différents catalogues, qui pourront être utilisés par les Jobs.
- Messages : C’est ici que l’on redirige tous les messages des différents clients ou serveurs de stockage. On peut utiliser plusieurs fonctions pour envoyer différents types de message sur différents emails.
- Job : Permet de définir une tâche de sauvegarde, de restauration ou de vérification.

La configuration du directeur est le gros du travail car c’est le centre du système. On y trouve une multitude de fonctions différentes.
Voici un exemple de fichier de configuration pour le directeur :
Director {
Name = rufus-dir
QueryFile = "/home/kern/bacula/bin/query.sql"
WorkingDirectory = "/home/kern/bacula/bin/working"
PidDirectory = "/home/kern/bacula/bin/working"
Password = "XkSfzu/Cf/wX4L8Zh4G4/yhCbpLcz3YVdmVoQvU3EyF/"
}
# Define the backup Job
Job {
Name = "NightlySave"
Type = Backup
Level = Incremental
Client=rufus-fd
FileSet="Full Set"
Schedule = "WeeklyCycle"
Storage = DLTDrive
Messages = Standard
Pool = Default
}
Job {
Name = "Restore"
Type = Restore
Client=rufus-fd
FileSet="Full Set"
Where = /tmp/bacula-restores
Storage = DLTDrive
Messages = Standard
Pool = Default
}
# List of files to be backed up
FileSet {
Name = "Full Set"
Include {
Options { signature=SHA1 }
File = /
}
Exclude { }
}
# When to do the backups
Schedule {
Name = "WeeklyCycle"
Run = Full sun at 1:05
Run = Incremental mon-sat at 1:05
}
# Client (File Services) to backup
Client {
Name = rufus-fd
Address = rufus
Catalog = MyCatalog
Password = "MQk6lVinz4GG2hdIZk1dsKE/LxMZGo6znMHiD7t7vzF+"
File Retention = 60d # sixty day file retention
Job Retention = 1y # 1 year Job retention
AutoPrune = yes # Auto apply retention periods
}
# Definition of file storage device
Storage {
Name = File
Address = rufus
Password = "jMeWZvfikUHvt3kzKVVPpQ0ccmV6emPnF2cPYFdhLApQ"
Device = FileStorage
Media Type = File
}
# Generic catalog service
Catalog {
Name = MyCatalog
dbname = bacula; user = bacula; password = ""
}
# Reasonable message delivery -- send most everything to
# the email address and to the console
Messages {
Name = Standard
mail = root@localhost = all, !skipped, !terminate
operator = root@localhost = mount
console = all, !skipped, !saved
}
# Default pool definition
Pool {
Name = Default
Pool Type = Backup
AutoPrune = yes
Recycle = yes
}
#
# Restricted console used by tray-monitor to get the status of the director
#
Console {
Name = Monitor
Password = "GN0uRo7PTUmlMbqrJ2Gr1p0fk0HQJTxwnFyE4WSST3MWZseR"
CommandACL = status, .status
}
Storage Daemon

On passe maintenant au fichier de configuration du SD (serveur de stockage).
Heureusement, avec les dispositifs de stockage modernes, les défauts sont suffisants, et très peu de directives sont réellement nécessaires.
Ce fichier de configuration est composé de quatre éléments.
- Storage : Cette fonction définit les propriétés globales du serveur de stockage. On y indique son nom et le port sur lequel il écoute, etc…
- Director : Permet de définir les directeurs qui seront autorisés à utiliser les services de ce serveur de stockage. Il peut y avoir plusieurs directeurs.
- Device : Cette fonction spécifie le matériel de stockage ainsi que l’emplacement des sauvegardes dans celui-ci. Cela permet de répartir plusieurs sauvegardes sur le même disque dur ou sur plusieurs disques durs.
- Messages : Sert à paramétrer l’envoi de différents messages au directeur, comme les erreurs de sauvegardes.
Voici un exemple de fichier de configuration pour le directeur :
Storage { # definition of myself
Name = rufus-sd
Address = rufus
WorkingDirectory = "$HOME/bacula/bin/working"
Pid Directory = "$HOME/bacula/bin/working"
Maximum Concurrent Jobs = 20
}
# List Directors who are permitted to contact Storage daemon
Director {
Name = rufus-dir
Password = "ZF9Ctf5PQoWCPkmR3s4atCB0usUPg+vWWyIo2VS5ti6k"
}
# Restricted Director, used by tray-monitor to get the
# status of the storage daemon
Director {
Name = rufus-mon
Password = "9usxgc307dMbe7jbD16v0PXlhD64UVasIDD0DH2WAujcDsc6"
Monitor = yes
}
Device {
Name = FileStorage
Media Type = File
Archive Device = /tmp
LabelMedia = yes; # lets Bacula label unlabeled media
Random Access = Yes;
AutomaticMount = yes; # when device opened, read it
RemovableMedia = no;
AlwaysOpen = no;
}
Messages {
Name = Standard
director = rufus-dir = all
operator = root = mount
}
Filer Daemon (client)

La configuration du client est assez simple et se fait grâce à un seul fichier.
Ce fichier de configuration est composé de trois éléments :
- Director : Cette fonction permet d’autoriser un directeur à se connecter au client. Il peut y en avoir plusieurs.
- Client : Le client ou Filer Daemon permet de configurer le client de l’ordinateur qui contient les fichiers à sauvegarder. Il y a donc un seul ‘client’ par ordinateur. On y trouve différents paramètres comme son nom ou encore le port sur lequel il écoute.
- Messages : Sert à paramétrer l’envoi de différents messages au directeur comme l’échec ou la réussite d’une sauvegarde.
Voici un exemple de fichier de configuration pour le directeur :
Director {
Name = rufus-dir
Password = "/LqPRkX++saVyQE7w7mmiFg/qxYc1kufww6FEyY/47jU"
}
# Restricted Director, used by tray-monitor to get the
# status of the file daemon
Director {
Name = rufus-mon
Password = "FYpq4yyI1y562EMS35bA0J0QC0M2L3t5cZObxT3XQxgxppTn"
Monitor = yes
}
# "Global" File daemon configuration specifications
FileDaemon { # this is me
Name = rufus-fd
WorkingDirectory = $HOME/bacula/bin/working
Pid Directory = $HOME/bacula/bin/working
}
# Send all messages except skipped files back to Director
Messages {
Name = Standard
director = rufus-dir = all, !skipped
}
GUI
Il existe principalement à ce jour deux add-ons d'interface graphique web pour Bacula :
- bweb : Bweb est une interface web qui fournit un outil pour les opérations basique et le reporting.
- brestore : Brestore est un outil graphique de restauration, disponible sur les systèmes supportant Perl/GTK/Glade.
