Skip to content

Unix & Linux

Beastie und Penguin. Ein Weblog für FreeBSD und Linux.

Menu
  • Impressum
  • Meine 5 Unix-Regeln für das Leben!
Menu

Was braucht man wirklich für ein Backup eines FreeBSD-System

Posted on 3. December 20183. December 2018 by Robert Friemer

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.

  1. Wie wird nun gesichert?
  2. 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:

  1. REQUIRE: FILESYSTEM
    Da wir die Daten sichern wollen, müssen beim herunterfahren noch alle Dateisysteme eingehängt sein.
  2. 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.
  3. systembackup_start():
    In dieser Funktion wird das eigentlich Sicherungs-Shell-Skript ausgeführt (siehe unten).
  4. 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:

  1. Man führt eine Neuinstallation des Grundsystems durch
  2. Man hängt den /home-Ordner wieder ein.
  3. 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.
    1. /boot/loader.conf
    2. /etc/rc.conf
    3. /etc/X11-Ordner
    4. /usr/loca/etc-Ordner
    5. /usr/local/share/PolicyKit/policy-Ordner
  4. Nach einem Reboot sollte das Grundsystem wieder hochfahren. Dienste, die noch nicht installiert wurden haben keine Folgen.
  5. Nun werden die restlichen Ports bzw.Packages nach installiert.
  6. 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.

Robert Friemer

Ich arbeite seit Windows for Workgroups 3.11, mit Linux seit Version 2.0 und mit FreeBSD seit Version 3.8. In der IT habe ich schon so einige Irrungen und Wirrungen kommen und gehen gesehen. Und ist seit einigen Jahren arbeite ich (fast) Windows-los. Der kleine Daemon ist für mich mittlerweile ein treuer und zuverlässiger Begleiter in der IT geworden.

More Posts - Website

Kategorien

  • Allgemein (20)
  • Anwendungen (15)
  • Befehle (23)
  • bhyve (7)
  • Firewall (10)
    • Ports (7)
  • FreeBSD (35)
  • Jails (3)
  • Linux (4)
  • Plasma (2)
  • Projekte (6)
  • Python (1)
  • Shell (15)
  • Sicherheit (10)
  • Web (8)
  • Windows (8)

Archiv

  • January 2025 (1)
  • December 2024 (4)
  • November 2024 (1)
  • October 2024 (3)
  • September 2024 (1)
  • May 2024 (1)
  • April 2024 (1)
  • March 2024 (2)
  • January 2023 (1)
  • May 2022 (1)
  • April 2022 (1)
  • March 2022 (2)
  • May 2021 (2)
  • November 2020 (1)
  • October 2020 (1)
  • July 2020 (1)
  • June 2020 (5)
  • April 2020 (1)
  • December 2018 (1)
  • September 2018 (1)
  • November 2017 (1)
  • August 2017 (1)
  • June 2017 (1)
  • December 2016 (1)
  • May 2016 (3)
  • March 2016 (1)
  • February 2016 (1)
  • January 2016 (1)
  • December 2015 (1)
  • October 2015 (2)
  • September 2015 (1)
  • June 2015 (3)
  • May 2015 (2)

Suche

Robert Friemer

Tags

.pkgsave 22 25 53 80 110 123 143 443 465 576 993 995 1194 Falsches Keyboard-Layout Fehler Firewall FreeBSD FreeBSD 10 FreeBSD Backup grundsätzliche Ports keine Eingabe Keyboard Layout Login Mail NTP openVPN Plasma Plasma5 Port Ports Secure Shell Sicherheit SSH System wieder herstellen Tastatur Tastatur kaputt TCP UDP Unsichere Router USB-Audio Webserver absichern Webserver Sicherheit Zeit-Server
©2025 Unix & Linux | Built using WordPress and Responsive Blogily theme by Superb