Server-Konfiguration
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Dieser Artikel ist mit keiner aktuell unterstützten Ubuntu-Version getestet! Bitte teste diesen Artikel für eine Ubuntu-Version, welche aktuell unterstützt wird. Dazu sind die Hinweise zum Testen von Artikeln zu beachten.
Artikel für fortgeschrittene Anwender
Dieser Artikel erfordert mehr Erfahrung im Umgang mit Linux und ist daher nur für fortgeschrittene Benutzer gedacht.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
Dieser Abschnitt behandelt die Konfiguration des Bacula-Servers, der regelmäßig Backups von verschiedenen Clients erstellen und beispielsweise unter dem Verzeichnis /mnt/backup abspeichern soll.
Hinweis:
Die nachfolgende Konfiguration bezieht sich auf Bacula Version 9.0.6. Bionic hat diese Version in den Paketquellen.
Der Server besteht aus dem Director- und dem Storage-Daemon:
/etc/bacula/bacula-dir.conf: Konfiguration des Director
/etc/bacula/bacula-sd.conf: Konfiguration des Storage-Daemon
Dabei kann der Storage-Daemon jederzeit auf einen zweiten Server ausgelagert werden, muss aber nicht.
Hinweis:
Die Authentifikation zwischen den Modulen erfolgt mit Passwörtern. Diese generiert Ubuntu bei der Installation automatisch. Überall, wo in den Beispielen "<PASSWORD-...>" steht, sollte dann das konkrete Kennwort stehen. Einzusehen sind diese in "/etc/bacula/common_default_passwords". Für die File-Daemons müssen neue ausgedacht oder (besser) generiert werden.
/etc/bacula/bacula-dir.conf¶
Die Konfiguration des Directors ist am aufwendigsten, da dieser alle anderen Dienste steuert und somit wissen muss, wann und wie Backups gemacht werden. Untergliedert ist /etc/bacula/bacula-dir.conf in folgende Abschnitte:
"Director" - Definition des Dienst selber
"JobDefs" - Eine Default-Job-Definition von der Jobs abgeleitet werden können
"Job" - Ein Backup-Auftrag, der von Bacula verarbeitet wird (enthält Verweise auf FileSet, Schedule und Client)
"FileSet" - Definiert, wie und welche Dateien gesichert werden sollen
"Schedule" - Wann und welche Art von Sicherung ausgeführt werden soll
"Client" - Informationen zum File-Daemon auf den jeweiligen Client
"Storage" - Informationen zum Storage-Daemon auf dem Server
"Catalog" - Datenbank-Benutzer und Passwort
"Messages" - Bestimmte Aktionen ausführen (z.B. Senden einer Email bei Fertigstellung des Backups)
"Pool" - Einteilungen von verschiedenen Storage-Volumes (Tapes, Dateien) in Gruppen
Director¶
Die Konfiguration des Directors sollte selbsterklärend sein.
Director {
Name = server-1-dir
DIRport = 9101
QueryFile = "/etc/bacula/scripts/query.sql"
WorkingDirectory = "/var/lib/bacula"
PidDirectory = "/var/run/bacula"
Maximum Concurrent Jobs = 1
Password = "<PASSWORD-dir>"
Messages = Daemon
DirAddress = 127.0.0.1
}JobDefs¶
In "JobsDefs" werden die Standard-Optionen für die Jobs festgelegt, die bei allen anderen Jobs identisch sind.
JobDefs {
Name = "DefaultJob"
Type = Backup
Level = Incremental
Messages = Standard
Storage = server-1-storage
Priority = 10
Maximum Concurrent Jobs = 10
}Jobs¶
In der Standard-Installation sind schon mehrere Jobs definiert: ein Beispiel-Job sowie welche, um den Katalog zu sichern und um Dateien im Problemfall wiederherzustellen. Es wird hier schon auf verschiedene Konfigurationen verwiesen, die noch folgen (Client, Schedule, Storage, Pool, FileSet). Der erste wird folgendermaßen angepasst:
Job {
Name = "server-1-job"
Jobdefs = "DefaultJob"
Client = server-1-fd
Schedule = "server-schedule"
FileSet = "server-files"
Pool = "server-pool"
Messages = Standard
Write Bootstrap = "/var/lib/bacula/server-1.bsr"
}
Job {
Name = "server-2-job"
Jobdefs = "DefaultJob"
Client = server-2-fd
Schedule = "server-schedule"
FileSet = "server-files"
Pool = "server-pool"
Messages = Standard
Write Bootstrap = "/var/lib/bacula/server-2.bsr"
}
Job {
Name = "Home"
Jobdefs = "DefaultJob"
Client = server-2-fd
Schedule = "home-schedule"
FileSet = "home-files"
Pool = "server-pool"
Messages = Standard
Write Bootstrap = "/var/lib/bacula/home.bsr"
}Der BackupCatalog-Job bleibt unverändert, aber der Restore-Job muss noch angepasst werden, indem man den Server ("Client") und den Pfad ("Where") definiert, wo die Backups wiederhergestellt werden sollen:
Job {
Name = "BackupCatalog"
JobDefs = "DefaultJob"
Level = Full
FileSet="Catalog"
Schedule = "WeeklyCycleAfterBackup"
RunBeforeJob = "/etc/bacula/scripts/make_catalog_backup.pl MyCatalog"
RunAfterJob = "/etc/bacula/scripts/delete_catalog_backup"
Write Bootstrap = "/var/lib/bacula/%n.bsr"
Priority = 11
Messages = Standard
}
#Restore
Job {
Name = "RestoreFiles"
Type = Restore
Client=server-1-fd
FileSet="server-files"
Storage = server-1-storage
# The FileSet and Pool directives are not used by Restore Jobs
# but must not be removed
Pool = Default
Messages = Standard
Where = /tmp
}FileSet¶
In FileSet kann man angeben, welche Dateien gesichert und welche Dateien in Ruhe gelassen werden sollen. In diesem Szenario werden drei verschiedene Arten von Sicherungen definiert, einmal von dem normalen Server, dem Home-Verzeichniss und den Katalog. Mit "signature = MD5" kann Bacula die Backups signieren sowie überprüfen und mit "compression=gzip" werden alle Backups komprimiert angelegt:
FileSet {
Name = "server-files"
Include {
File = /
File = /var
Options {
signature = MD5
compression = gzip
}
}
Exclude {
File = /proc
File = /tmp
File = /home
File = /dev
File = /sys
File = /var/tmp
File = /mnt
File = /media
File = /var/ftp
File = /var/lib/amavis/virusmails
File = /var/lib/mysql/bacula/
File = /var/cache/apt
File = /var/account
File = /var/cache/squid
File = /var/tmp
}
}
FileSet {
Name = "home-files"
Include {
File = /home
Options {
signature = MD5
compression=gzip
}
}
Exclude {
}
}
FileSet {
Name = "Catalog"
Include {
Options {
signature = MD5
}
File = /var/lib/bacula/bacula.sql
}
}Schedule¶
Hier definiert man, zu welchem Zeitpunkt ein Backup gemacht wird:
Schedule {
Name = "server-schedule"
Run = Incremental Pool=server-pool mon-sat at 1:00
Run = Differential Pool=server-pool 2nd-5th sun at 1:00
Run = Full Pool=server-pool 1st sun at 1:00
}
Schedule {
Name = "home-schedule"
Run = Full Pool=server-pool jan apr jul oct 1st sun at 1:00
Run = Incremental Pool=server-pool sun-sat at 1:00
}
Schedule {
Name = "WeeklyCycleAfterBackup"
Run = Full sun-sat at 4:00
}"WeeklyCycleAfterBackup" ist für das Sichern des Katalogs zuständig.
Client¶
Dieser Abschnitt enthält Informationen über den File-Daemon auf den Clients. Für jeden der Zwei sollte man sich ein eigenes Kennwort ausdenken oder generieren lassen, welches nachher auch in die Konfiguration der Clients eingetragen werden muss. "Address" steht für den jeweiligen Hostnamen oder IP-Adresse, "File Retention" sagt aus, wie lange eine Datei zurückgehalten werden soll bis sie aus dem Catalog (Datenbank) gelöscht wird, analog dazu "Job Retention", welches die Verfallszeit von Jobs angibt:
Client {
Name = server-1-fd
Address = localhost
FDPort = 9102
Catalog = MyCatalog
Password = "<PASSWORD-server-1>"
File Retention = 30 days
Job Retention = 6 months
AutoPrune = yes
Maximum Concurrent Jobs = 10
}
Client {
Name = server-2-fd
Address = server-2
FDPort = 9102
Catalog = MyCatalog
Password = "<PASSWORD-server-2>"
File Retention = 30 days
Job Retention = 6 months
AutoPrune = yes
Maximum Concurrent Jobs = 10
}Storage¶
Hier gibt man dem Director die Informationen, die er braucht, um sich mit dem Storage-Daemon zu verbinden:
Hinweis:
In älteren Bacula-Versionen heißt dieser Abschnitt Storage, in neueren wird Autochanger verwendet, der dann auf den Eintrag im Storage-Daemon zeigt.
Autochanger {
Name = server-1-storage
# Do not use "localhost" here
Address = localhost # N.B. Use a fully qualified name here
SDPort = 9103
Password = "<PASSWORD-storage>"
Device = FileStorage
Media Type = File
Maximum Concurrent Jobs = 10
Autochanger = server-1-storage # point to ourself
}Catalog¶
Hier muss man nichts verändern, weil der Account und das Passwort beim Installieren schon festgelegt und eingerichtet wurden:
# Generic catalog service (i.e. MySQL)
Catalog {
Name = MyCatalog
dbname = bacula
DB Address = ""
user = bacula
password = "GEHEIM"
DB Port == 3306
}Messages¶
Um Benachrichtigungen bei einem erfolgreichen/fehlgeschlagenden Backup kümmert sich dieser Abschnitt. Die Standardkonfiguration sieht vor, eine E-Mail an localhost zu senden. Man kann das localhost durch eine interne IP-Adresse ersetzten.
Pools¶
Hier kann man die Volumes (Tapes, Dateien) nochmal unterteilen und die Größe festlegen, wann das Backup recycelt wird. Außerdem noch ein Label davor setzen, damit man die erstellen Backup-Dateien unterscheiden kann:
Pool {
Name = Default
Pool Type = Backup
Recycle = yes
AutoPrune = yes
Volume Retention = 31 days
Maximum Volume Bytes = 1g
Maximum Volume Jobs = 50
Label Format = "catalog-"
}
Pool {
Name = server-pool
Pool Type = Backup
Recycle = yes
AutoPrune = yes
Volume Retention = 31 days
Maximum Volume Bytes = 2g
Maximum Volume Jobs = 400
Maximum Volumes = 400
Label Format = "server-"
}
# Scratch pool definition
Pool {
Name = Scratch
Pool Type = Backup
}In diesem Fall ist die Festplatte 900 GiB groß (2x 400 GiB für die Server + 1x 50 GiB für den Katalog). Der "Scratch Pool" ist der Standard-Pool, aus dem leere Volumes entnommen werden können wenn diese in anderen Pools fehlen (nicht verändern).
Monitor¶
Console {
Name = server-1-mon
Password = "<PASSWORD-mon>"
CommandACL = status, .status
}Neustarten¶
Nach Änderungen an der Konfiguration muss der Director neu gestartet werden:
sudo systemctl restart bacula-director
/etc/bacula/bacula-sd.conf¶
Die Konfiguration des Storage-Daemon verläuft ähnlich. Erstmal definiert man selbigen:
Storage {
Name = server-1-sd
SDPort = 9103
WorkingDirectory = "/var/lib/bacula"
Pid Directory = "/var/run/bacula"
Maximum Concurrent Jobs = 50
}Director¶
Nachdem man den Storage-Daemon definiert hat, muss man noch regeln, welcher Director-Daemon sich mit ihm verbinden darf. Dabei muss natürlich das Passwort mit denjenigen im Director übereinstimmen:
Director {
Name = server-1-dir
Password = "<PASSWORD-storage>"
}Autochanger¶
Autochanger {
Name = FileStorage
Device = File1
Changer Command = ""
Changer Device = /dev/null
}Device¶
Unter dem Eintrag "Device" kann man definieren, unter welchem Verzeichnis man Backups sichern will:
Device {
Name = FileStorage
Media Type = File1
Archive Device = /mnt/backup
LabelMedia = yes;
Random Access = Yes;
AutomaticMount = yes;
RemovableMedia = no;
AlwaysOpen = no;
}Sollte wieder selbsterklärend sein. Um die Datensicherheit nochmal zu steigern, könnten die in /mnt/backup eingehängten "Datenträger" ein Software-RAID besitzen.
Messages¶
Damit alle Fehlermeldungen vom Storage auch am Director einsehbar sind, werden hier die Logs zurückgeschickt:
Messages {
Name = Standard
director = server-1-dir = all
}Neustarten¶
Nach Änderungen an der Konfiguration muss der Storage-Daemon neu gestartet werden:
sudo systemctl restart bacula-sd
Erstellen der Volumina¶
Nachdem man den Director und Storage funktionstüchtig eingerichtet hat, müssen noch die benötigten Volumina erstellt werden, in denen Backups gesichert werden. Dazu muss ein Shell-Skript (z.B. create-volumes.sh) mit folgendem Inhalt erstellt werden:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #!/bin/bash echo -e "\t(1) Print Only\n\t(2) Execute" read -p 'Choice: ' choice echo -e "\tNumber:" read num if [ $choice -eq 2 ]; then pipe=bconsole else pipe=cat fi for i in $(seq 2 $num) do cat <<-_ label server-$(printf "%04d" $i) 3 _ done | $pipe |
Nun macht man das Skript ausführbar und startet es mit Root-Rechten:
chmod +x ./create-volumes.sh sudo ./create-volumes.sh
Nun hat man die Möglichkeit, zwischen "Print only" und "Execute" zu wählen. Bei "Print only" wird angezeigt, welche Befehle der bconsole übergeben werden, bei "Execute" werden diese ausgeführt. Außerdem ist die Anzahl der Volumina, die man unter dem Server-Pool angegeben hat, wichtig.
Links¶
http://blog.bacula.org/documentation/documentation 🇬🇧 - offizielle Dokumentation
Bacula - Hauptartikel