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