Ja, auch ich mache Backups. Regelmäßig. Die Gefahr meine Daten zu verlieren ist einfach zu groß. Jeder kennt aber auch die Problematiken, daß ein Backup dazu führen kann, daß die Maschine nicht mehr ordentlich arbeitet und/oder die Netzwerk-Anbindung in den Keller geht.
Also habe ich mich gefragt, was brauche ich wirklich um ein FreeBSD-System zu sichern. Es geht nur um das System, nicht den /home-Ordner in dem die persönlichen Daten und Einstellungen sein sollten.
Auch der /root-Ordner soll hier ausgenommen werden. Ich speichere alle wichtigen Daten im /home-Ordner und verlinke bin oder andere Ordner in den /root-Ordner bei Bedarf. Auch im /home-Ordner kann man mit Rechten sehr gute ACLs erstellen.
Also, es geht um ein FreeBSD System. Wo genau werden Daten verändert und welche sind wirklich nötig. Die meisten Konfigurationen für Programme, die KDE/Plasma-Oberfläche liegen auch im /home-Ordner. Die einzigen Konfigurationen, die hier in Frage kommen, sind eigentlich die Konfiguration des Kernels, Hardware-Konfigurationen und die Dienste. Dazu zählen prominente Dienste, wie z.B.:
- ssh
- unbound
- xorg
- sddm / kdm4
- hald
- dbus
- PolicyKit
- …
Bei der Hardware-Konfiguration fällt mir der FQDN, die Sprache und Netzwerkkarten ein. daneben kommt noch Linux-Layer, Hardware-Controller, Audio-Devices etc.
Diese Einstellungen möchte ich, einmal konfiguriert, gerne weiter nutzen und ich habe diese nicht immer im Kopf parat.
Die Frage ist nun, wie soll was gesichert werden?
Folgende Ordner sind unbedingt relevant in der minimalen System-Sicherung:
- /boot-Ordner (hier liegt der kernel und die Datei loader.conf, in der eigene Kernel-Module vorgeladen werden).
- /etc (in diesem Ordner liegen die .conf-Dateien der wichtigsten System-Dienste, wie auch die rc.conf-Datei mit der eigenen Start-Konfiguration).
- /usr/local/etc (in diesem Ordner befindet sich Konfigurationen aus dem Userland, Gimp, Inkscape, Ardour etc).
- /var/log (Wenn man verfolgen möchte was alles auf der Maschine bis zur Sicherung gelaufen ist, dann sollte man die .log-Dateien mit sichern).
Ja, das sind wirklich die einzigen Daten, die für eine minimale Sicherung nötig sind. Optional kann man noch folgende Daten sichern:
- /usr/local/share/PolicyKit/policy (Dieser Ordner ist wichtig, da ich dort die Automount-Funktion unter Plasma 5 konfiguriert habe.
- die installierten Pakete (Ja, manchmal weiß man nicht mehr was alles installiert war. Mit der Liste geht es einfacher das alte System komplett zu installieren, aber manchmal ist es auch hilfreich ein paar Dinge weg zu lassen).
Jetzt kommen wahrscheinlich beim aufmerksamen Leser 2 Fragen auf.
- Wie wird nun gesichert?
- Wie sollten die Daten wieder hergestellt werden?
Zur Frage 1:
Es handelt sich bei meinem Rechner um meine Workstation. Diese wird unregelmäßig hochgefahren. Ein cronjob wäre hier also nicht hilfreich. Ein Start-Skript unter Plasma würde die Sicherung am Anfang machen. Änderungen, die während der Sitzung durch geführt werden, würden also erst beim nächsten Hochfahren gesichert werden. Dies ist auch nicht optimal. Außerdem würde die Sicherung entweder nur durchgeführt werden, wenn ich mich anmelde oder ich müsste bei jedem Benutzer das Start-Skript eintragen. Dies ist auch nicht hilfreich.
Die Programme die zuverlässig gestartet und heruntergefahren werden sind die Dienste. Für die gibt es eine Start- und eine Stop-Funktion. warum also nicht diese für die Sicherung nutzen? Man muss nur die Funktion umdrehen.
Wenn der Rechner hochfährt, passiert nichts und wenn er herunter gefahren wird, wird die Sicherung durchgeführt. Ich habe die Standard-Vorlage für rc-Skript hergenommen und folgendermaßen angepasst:
#!/bin/sh - # PROVIDE: systembackup # REQUIRE: FILESYSTEMS # KEYWORD: nojail shutdown . /etc/rc.subr name="systembackup" rcvar="systembackup_enable" stop_cmd="systembackup_start" start_cmd="systembackup_stop" systembackup_start() { logger systembackup-start /home/freebsd/bin/blackbeastie-backup.sh } systembackup_stop() { logger systembackup-init } load_rc_config $name run_rc_command "$1"
Dieser Code kommt in ein Skript in den Ordner /usr/local/etc/rc.d mit dem Namen systembackup (man kann auch einen anderen Namen verwenden, dafür sollten man aber systembackup im gesamten Code ändern).
Wichtig ist:
- REQUIRE: FILESYSTEM
Da wir die Daten sichern wollen, müssen beim herunterfahren noch alle Dateisysteme eingehängt sein. - stop_cmd=“systembackup_start“
start_cmd=“systembackup_stop“
Hä, warum sind die verdreht? Genau das ist der Clou. Das start_cmd wird beim Booten des System ausgeführt. In unserem Fall soll hier nichts passieren.
Das stop_cmd wird ausgeführt, wenn das System ein Neustart macht oder herunter gefahren wird. - systembackup_start():
In dieser Funktion wird das eigentlich Sicherungs-Shell-Skript ausgeführt (siehe unten). - systembackup_stop():
Hier wird nichts getan.
Das Sicherungs-Skript sieht folgendermaßen aus:
#!/bin/bash # Sicherung von FreeBSD # # Dieses Script sichert die wichtigsten Konfigurationsdateien von FreeBSD. # Die Ordner sind: # # /boot # /etc # /usr/local/etc # # Zusätzlich wird eine Liste der installierten Pakete mit gesichert. # # Es werden immer 30 Datensätze erhalten. datum=`date "+%Y-%m-%d"` release=`uname -r` loeschdatum=+30 backup_pfad="/Pfad/zum/Sicherungs/Ordner" #------------------------------------------------------------------# # Sicherung der wichtigsten Daten pkg info > $backup_pfad/packages_$release_$datum.txt tar -cf $backup_pfad/backup_$release_$datum.tar $backup_pfad/packages_$release_$datum.txt rm $backup_pfad/packages_$release_$datum.txt # Sicherung des /boot-Ordners echo Sicherung des /boot-Ordners tar --exclude="boot/kernel.old*" -rf $backup_pfad/backup_$release_$datum.tar /boot # Sicherung des /etc-Ordners echo Sicherung des /etc-Ordners tar -rf $backup_pfad/backup_$release_$datum.tar /etc # Sicherung des /usr/local/etc-Ordners echo Sicherung des /usr/local/etc-Ordners tar -rf $backup_pfad/backup_$release_$datum.tar /usr/local/etc # Sicherung von PoliciKit echo Sicherung von der PolicyKit-Konfiguration tar -rf $backup_pfad/backup_$release_$datum.tar /usr/local/share/PolicyKit/policy # Sicherung von /var/log echo Sicherung des /var/log-Ordners tar -rf $backup_pfad/backup_$release_$datum.tar /var/log if [ -f $backup_pfad/backup_$release_$datum.tar.gz ]; then echo Alte .tar.gz-Datei wird geloescht rm $backup_pfad/backup_$release_$datum.tar.gz fi gzip $backup_pfad/backup_$release_$datum.tar #------------------------------------------------------------------# # Backups aufraeumen echo Sicherungen bereinigen find $backup_pfad -atime $loeschdatum -delete echo Backup-Ordner wurde bereinigt. #------------------------------------------------------------------# echo Fertig...
Ja, es ist sehr einfach geschrieben und man kann es noch optimieren, aber es soll die Schritte erklären.
Es wird ein .tar-Archiv mit dem Sicherungsdatum erstellt und mit den Ordner und der Package-Liste befüllt. Anschließend wird in dem Sicherung-Pfad überprüft, ob bereits ein .tar.gz-Archiv besteht. Falls ja, wird diese gelöscht und das .tar-Archiv über gzip in ein .tar.gz-Archiv komprimiert. Man kann hier auch andere Komprimierungs-Programme verwenden, wie man möchte.
Im letzten Schritt werden .tar.gz-Archive gelöscht, die älter als 30 Tage sind (Ja, das ist extrem lang. man kann hier auch eine Tägliche, wöchentliche und monatliche Sicherung integrieren). Es sollte einfach und simple sein, deshalb nur täglich.
Was kann man hier noch anpassen?
Zum Beispiel könnte man das .tar.gz-Archiv auf die NAS übertragen. So ist man sicher, da? bei einem Ausfall die Daten auf einem anderen System zur Verfügung stehen.
Andere Ordner können noch hinzu gefügt werden.
Wie wird dieser Dienst nun aktiviert?
Folgende Zeile muss in die Datei /etc/rc.conf
systembackup_enable="yes"
Mit diesem Shell Befehl kann man den Dienst starten:
service systembackup start
Mit einem Restart des Dienstes kann man testen, ob das Skript fehlerfrei läuft.
service systembackup restart
Nun werden die Sicherungen erstellt. Wenn diese in den /home-Ordner gespeichert werden, so braucht man nur diesen Ordner später in das Backup laden. Das System wird mit gesichert.
In meine Fall sind die .tar.gz-Archive um die 60MB groß und nehmen somit nicht viel Platz ein.
Bei herunterfahren kann man nun sehen, dass die Archive erstellt werden.
Zu Frage 2:
Die Frage, die man sich immer stellt, wenn man ein Backup einrichtet ist: „Funktioniert das Backup auch?“
Wenn nun das System einmal nicht mehr bootbar sein sollte oder wenn man einmal das System neu aufsetzen möchte, und man hat die .tar.gz-Archive, dann kann man nun folgendermaßen das System wieder herstellen:
- Man führt eine Neuinstallation des Grundsystems durch
- Man hängt den /home-Ordner wieder ein.
- Wenn man nun die Ordner wieder herstellt und die Dateien wieder in die Ordner kopiert, hat man alles wieder an seinem Platz. Ich nehme nur die Dateien die wirklich wichtig sind, z.B.
- /boot/loader.conf
- /etc/rc.conf
- /etc/X11-Ordner
- /usr/loca/etc-Ordner
- /usr/local/share/PolicyKit/policy-Ordner
- Nach einem Reboot sollte das Grundsystem wieder hochfahren. Dienste, die noch nicht installiert wurden haben keine Folgen.
- Nun werden die restlichen Ports bzw.Packages nach installiert.
- Am Ende bootet man in sein altes System
Diese Art der System-Sicherung bietet viele Vorteile. Sie ist flexibel, schnell und benötigt nicht viel Platz. Nachteile sind die Neuinstallation des Systems und der Programme.
Auf jeden Fall sollte man die Skript genau für sich prüfen, anpassen, damit am Ende nicht doch wichtige System-Daten verloren gehen. Noch einmal der Hinweis, es handelt sich hierbei um die Sicherung des Betriebssystem, nicht um die eigenen Daten.