Tout d'abord pour la configuration du director, fichier /etc/bacula/bacula-dir.conf:
Director {
Name = bacula-dir
DIRport = 9101
QueryFile = "/etc/bacula/query.sql"
WorkingDirectory = "/var/spool/bacula"
PidDirectory = "/var/run"
Maximum Concurrent Jobs = 1
Password = "MotDePasseSecret" # Console password
Messages = Daemon
}
On y ajoute les planning de sauvegarde (schedule), j'ai gardé le truc par défaut (à savoir une full le 1er dimanche du mois, puis des differentielles les autres dimanches, et des sauvegardes incrementales la semaine):
Schedule {
Name = "WeeklyCycle"
Run = Full 1st sun at 23:05
Run = Differential 2nd-5th sun at 23:05
Run = Incremental mon-sat at 23:05
}
Schedule {
Name = "WeeklyCycleAfterBackup"
Run = Full sun-sat at 23:10
}
Ainsi que la définition du catalogue (= dans quelle archive se trouve tel fichier), j'ai opté pour un stockage en mysql:
Catalog {
Name = MyCatalog
dbname = "bacula"; dbuser = "bacula"; dbpassword = "MotDePasseSecretPourBaculaMySQL"
}
Enfin, j'y ajoute des "includes" pour que ça soit plus lisible, afin de stocker les fichiers de conf dans des sous repertoires par catégorie (clients, jobs, storage, etc):
# Liste des jobs
@|"sh -c 'find /etc/bacula/jobs.d/ -name \"*.conf\" -exec echo @{} \\;'"
# Liste des filesets
@|"sh -c 'find /etc/bacula/filesets.d/ -name \"*.conf\" -exec echo @{} \\;'"
# Clients
@|"sh -c 'find /etc/bacula/clients.d/ -name \"*.conf\" -exec echo @{} \\;'"
# Storage
@|"sh -c 'find /etc/bacula/storages.d/ -name \"*.conf\" -exec echo @{} \\;'"
# Pool
@|"sh -c 'find /etc/bacula/pools.d -name \"*.conf\" -exec echo @{} \\;'"
Exemple de fichier /etc/bacula/jobs.d/jobs_web01.conf:
Job {
Name = "Backup_web01"
JobDefs = "DefaultJob"
Client = "web01-fd"
FileSet = "Web Server Set"
Pool = "on_disk"
Storage = "stockage-sd"
}
Ce qui definit un job "Backup_web01" utilisant le template DefaultJob, sur le client web01-fd (definit plus bas), avec un fileset (fichiers à sauvegarder) "Web Server Set" (créé plus bas aussi), à archiver dans le pool "on_disk" sur le serveur de stockage (SD) stockage-sd.
Exemple de fichier /etc/bacula/filesets.d/default.conf:
FileSet {
Name = "Web Server Set"
Include {
Options {
signature = MD5
}
File = /srv/http/
}
}
Ce fileset indique d'utiliser une signature MD5 pour savoir si les fichiers ont été modifié, et la cible à sauvegarder est le repertoire /srv/http.
Exemple de fichier /etc/bacula/clients.d/client_web01.conf:
Client {
Name = web01-fd
Address = 192.168.99.254
FDPort = 9102
Catalog = MyCatalog
Password = "MotDePasseBaculaFD"
File Retention = 40 days
Job Retention = 80 days
AutoPrune = yes
}
L'important ici est d'indiquer l'ip du client, et le mot de passe configuré dans son bacula-fd.conf.
Exemple de fichier /etc/bacula/storages.d/stockage-sd.conf:
Storage {
Name = stockage-sd
Address = 192.168.2.111
SDPort = 9103
Password = "MotDePasseSD"
Device = raid1
Media Type = File
}
On précise l'ip du serveur de stockage, le mot de passe configuré dans son bacula-sd.conf, et sur quel device on va stocker nos archives (ici raid1 défini plus bas).
Exemple de fichier /etc/bacula/pools.d/on_disk.conf:
Pool {
Name = on_disk
Pool Type = Backup
Recycle = yes
AutoPrune = yes
Volume Retention = 1 month
Maximum Volume Bytes = 4.5G
Maximum Volumes = 50
Label Format = file-
}
Là on indique vouloir garder les archives 1 mois, dans des fichiers (volume) de 4.5G max, et on en veut pas plus de 50 (donc la volumetrie max pour les archives ici est de 50x4,5G). Les fichiers seront nommés automatiquement par bacula-sd en file-001, file-002, etc
Ensuite il faut configurer le serveur de stockage, dans l'exemple de conf ci-dessus appelé stockage-sd. C'est sur ce serveur que les sauvegardes seront conservées. Ce peut être sur disque, ou sur robot etc. Dans mon exemple c'est sur disque, avec des fichier de 4.5G max (pour pouvoir les graver sur dvd si besoin).
Donc sur le serveur de stockage-sd (SD), qui peut être sur la même machine que le director, voici son fichier /etc/bacula/bacula-sd.conf:
Storage {
Name = stockage-sd
SDPort = 9103
WorkingDirectory = "/var/spool/bacula"
Pid Directory = "/var/run"
Maximum Concurrent Jobs = 20
}
On y ajoute l'autorisation d'accès de notre director:
Director {
Name = bacula-dir
Password = "MotDePasseSD"
}
Et enfin un include vers la conf des périphériques de stockage:
@|"sh -c 'find /etc/bacula/storage_devices.d/ -name \"*.conf\" -exec echo @{} \\;'"
Dont voici un exemple, /etc/bacula/storage_devices.d/raid1.conf:
Device {
Name = raid1
Media Type = File
Archive Device = /srv/stockage/backups/bacula/
LabelMedia = yes; # nommage automatique des fichiers
Random Access = Yes;
AutomaticMount = yes;
RemovableMedia = no;
AlwaysOpen = yes;
}
Il ne manque plus que l'exemple de la configuration sur le client web01-fd, pour le service bacula-fd, dans /etc/bacula/bacula-fd.conf:
FileDaemon {
Name = dns01-fd
FDport = 9102
WorkingDirectory = /var/spool/bacula
Pid Directory = /var/run
Maximum Concurrent Jobs = 20
}
Et on y ajoute l'autorisation d'accès du director:
Director {
Name = bacula-dir
Password = "MotDePasseBaculaFD"
}
Je pense que j'ai fait le tour. On a donc avec cette exemple, un bacula-dir qui déclenche des sauvegardes dont le job Backup_web01, sur un client web01-fd, archivé sur stockage-sd. C'est un peu long tout ça, mais au final c'est pas si compliqué.