Jede Festplatte wird früher oder später das Ende Ihrer Tage erreichen. Ist dieser Fall eingetreten kann, je nach Schaden, der Zugriff auf die darauf gespeicherten Daten nichtmehr mit normalen Mitteln ermöglicht werden. Es gibt noch andere Szenerien die dafür sorgen können, dass die Daten auf der Festplatte verloren gehen (z.B. Absturz des Rechners, Blitzeinschlag, versehentliches Löschen, etc.). Aus diesem Grund muss man immer damit rechnen, dass die gespeicherten Daten verloren gehen können.
Um dieser Problematik entgegen zu treten werden Backups, also Sicherungskopien, der Daten angelegt. Sinnvollerweise sollten die Backups nicht auf dem selben Datenträger gespeichert werden wie die Originaldaten. Des weiteren wäre es empfehlenswert die Backups nicht fest im selben Rechner angeschlossen zu haben, denn eine Überspannung könnte somit alle Festplatten zugleich schädigen.
Das folgende Vorgehen verwendet das Programm dump zum Erzeugen der Backups. Dieses führt jedoch unter FreeBSD 9.0 zu Systemabstürzen wenn es in Kombination mit Journaling Softupdates verwendet wird. Anwender von Journaling Softupdates sollten daher hier Vorsicht walten lassen. Wird kein Journal verwendet (also nur die normalen Softupdates) treten diese Probleme nicht auf.
Backups können die Daten des Rechners nur vor Verlust schützen wenn sie korrekt erstellt und korrekt wieder eingespielt werden!
Es ist zu empfehlen die Erstellung von Backups per Script durchzuführen um Tippfehler zu umgehen. Nach Veränderung des Erstellprozesses sollten die Backups exemplarisch getestet werden um sicher zu sein, dass sie im Notfall funktionieren. Sowohl das falsche Sichern als auch das falsche Zurückspielen der Daten kann zum kompletten Datenverlust führen!!
Es wird erneut darauf hingewiesen, dass keine Garantie für die Korrektheit der hier angegebenen Informationen übernommen werden kann!
Folgend wird der Vorgang beschrieben wie manuell Backups des Systems erstellt werden. Um sinnvoll und regelmässig zu sichern ist eine automatisierte Sicherung zu empfehlen! Dieser Absatz kratzt nur sehr flach an der Oberfläche von Datensicherungen. Es ist dringend empfohlen sich tiefer, auch über andere Quellen, diesbezüglich zu informieren. Die Befassung mit den entsprechenden Manpages wird vorrausgesetzt.
Zum Sichern von Partitionen wird das Programm dump verwendet. Das Backup muss mit root-Rechten erstellt werden.
# dump -0 -Lauf /backup/root-ad0s1a /dev/ad0s1a
Hier wird angenommen, dass die Partition ad0s1a (welche in diesem Beispiel / ist) in die Datei root-ad0s1a im Verzeichnis /backup gesichert wird. Es handelt sich hierbei um ein Level-0-Dump (alle Daten werden gesichert). Natürlich sollte zuvor in das Verzeichnis /backup ein Datenträger gemoutet werden (gerade beim Sichern von / läge sonst das Backup in sich selbst).
Um die gesicherten Daten wieder herzustellen muss sich das System im selben Zustand befinden wie zum Zeitpunkt als die Daten gesichert wurden. Das soll heissen, dass die Partitionen an den selben Stellen liegen müssen wie zuvor (daher wurde in die Namen der Backups auch der Devicename übernommen). Um ein zerstörtes System wieder herzustellen sollte über die CD ein Basis-System mit selben Einstellungen wie im alten System installiert werden. Hier geht es nur darum, dass die Slices und Partitionen richtig angelegt werden. Da die Daten aus dem Backup aufgespielt werden muss kein System installiert werden!
Die Zielpartitionen der Backups müssen in das System eingebunden werden. Als Beispiel:
# mount /dev/ad0s1a /mnt
Das Backup wird über Restore im aktuellen Verzeichnis eingespielt! Daher ist vor dem Absetzen des Restore-Kommandos dies nochmals zu prüfen:
# cd /mnt # pwd
Um das Backup, welches angenommen wieder unter /backup eingebunden wurde, zurückzuspielen wird folgend vorgegangen:
# restore -rf /backup/root-ad0s1a
Sind mehrere Level-Dumps vorhanden so müssen sie aufsteigend installiert werden (0, 1, 2,…) bis zum aktuellsten dump.
Automatische Backups sollten per Cron (oder bei Desktoprechnern mit Anacron) durchgeführt werden. Dies erfolgt über entsprechende Backupscripte.
Die folgenden Angaben beziehen sich auf die hier dargestellte Partitionsaufteilung und ist ggf anzupassen:
/dev/ad4s1a on / (ufs, local) /dev/ad4s1e on /tmp (ufs, local, soft-updates) /dev/ad4s1f on /usr (ufs, local, soft-updates) /dev/ad4s1d on /var (ufs, local, soft-updates) /dev/ad8s1d on /data (ufs, local, soft-updates)
Im weiteren Ablauf werden die drei Partitionen ad4s1a (auf / eingebunden), ad4s1d (auf /var eingebunden) und ad4s1f (auf /usr eingebunden) auf die Festplatte ad8s1d gesichert welche unter /data eingebunden ist.
Die Partition ad4s1e wird explizit nicht gesichert da es sich hierbei um die /tmp-Partition handelt welche nur temporäre Dateien enthält.
Die Partition /dev/ad8s1d muss unter /data eingebunden werden und in ihr muss das Verzeichnis backup vorhanden sein. Falls dies nicht der Fall ist wird dieses mit folgendem Aufruf angelegt:
# mkdir /data/backup
Das Verzeichnis sollte nur für root zugänglich sein. Dies wird wie folgt erreicht:
# chmod 700 /data/backup
Die Scripte zur Erzeugung der Backups werden in den entsprechenden /etc/periodic-Verzeichnissen angelegt.
#!/bin/sh #Datum in richtiger Reihenfolge setzen DATUM=$(date +%Y%m%d) LEVEL=0 # /usr/ports soll nicht gesichert werden da es wieder vollständig herstellbar ist. /bin/chflags -R nodump /usr/ports # Es folgen die Dumps (nach Wunsch kann '-h 0' hinzugefügt werden um bei Level0 Dumps die 'nodump' Dateien nicht mitzusichern: /sbin/dump -$LEVEL -Lauf /data/backup/root-ad4s1a_$DATUM-L$LEVEL /dev/ad4s1a /sbin/dump -$LEVEL -Lauf /data/backup/var-ad4s1d_$DATUM-L$LEVEL /dev/ad4s1d /sbin/dump -$LEVEL -Lauf /data/backup/usr-ad4s1f_$DATUM-L$LEVEL /dev/ad4s1f
Mit Hilfe dieses Scriptes werden Level0-Dumps erzeugt. Sie bilden die Basis aller folgenden inkrementellen Backups. Regelmäßig sollte ein neues Level0-Dump erzeugt werden worauf die neuen inkrementellen Backups erzeugt werden.
#!/bin/sh #Datum in richtiger Reihenfolge setzen DATUM=$(date +%Y%m%d) LEVEL=1 # /usr/ports soll nicht gesichert werden da es wieder vollständig herstellbar ist. /bin/chflags -R nodump /usr/ports # Es folgen die Dumps (nach Wunsch kann '-h 0' hinzugefügt werden um bei Level0 Dumps die 'nodump' Dateien nicht mitzusichern: /sbin/dump -$LEVEL -Lauf /data/backup/root-ad4s1a_$DATUM-L$LEVEL /dev/ad4s1a /sbin/dump -$LEVEL -Lauf /data/backup/var-ad4s1d_$DATUM-L$LEVEL /dev/ad4s1d /sbin/dump -$LEVEL -Lauf /data/backup/usr-ad4s1f_$DATUM-L$LEVEL /dev/ad4s1f
Dieses Script erzeugt Level1-Dumps. Also inkrementelle Backus im Bezug zum letzten Level0-Dump.
#!/bin/sh #Datum in richtiger Reihenfolge setzen DATUM=$(date +%Y%m%d) LEVEL=2 # /usr/ports soll nicht gesichert werden da es wieder vollständig herstellbar ist. /bin/chflags -R nodump /usr/ports # Es folgen die Dumps (nach Wunsch kann '-h 0' hinzugefügt werden um bei Level0 Dumps die 'nodump' Dateien nicht mitzusichern: /sbin/dump -$LEVEL -Lauf /data/backup/root-ad4s1a_$DATUM-L$LEVEL /dev/ad4s1a /sbin/dump -$LEVEL -Lauf /data/backup/var-ad4s1d_$DATUM-L$LEVEL /dev/ad4s1d /sbin/dump -$LEVEL -Lauf /data/backup/usr-ad4s1f_$DATUM-L$LEVEL /dev/ad4s1f
Es sind Dump-Levels bis 9 möglich.
Die Scripte müssen nach Erstellung noch ausführbar gemacht werden. Dies geschieht mit den Aufrufen:
# chmod 744 /etc/periodic/monthly/970.backup-L0 # chmod 744 /etc/periodic/weekly/971.backup-L1 # chmod 744 /etc/periodic/daily/972.backup-L2
Nun sammeln sich in dem Ordner /data/backups eine ganze Reihe Dumps an. Nach einem Monat sollte ein neuer Level0-Dump erzeugt werden womit alle älteren Dumps gelöscht werden können. Neu erzeugte Dumps >0 beziehen sich immer auf den zuletzt erzeugten Dump mit nächst kleinerem Dumplevel.
Um einzelne Dateien aus einem Dump wiederherzustellen wir der dump per restore mit der Option -i gestartet.
restore -i -f dumpfile
In der sich nun öffnenden Restorekonsole kann man sich mit cd durch den Dump bewegen. Die Befehle pwd und ls werden ebenfalls unterstützt. Somit mwird an die Stelle navigiert an welcher die zu rettende Datei liegt. Die Datei wird dann in die Wiederherstellungsliste übernommen. Auf diesem Weg können auch mehrere Dateien in die Liste aufgenommen werden.
restore > add dateiname
Anschließend wird die Liste exportiert
restore > extract
Mit quit wird die Konsole verlassen.
restore > quit
Die gerettete Datei liegt nun im Verzeichnisbaum an ihren ursprünglichen Ort (relativ zum aktuellen Pfad).
Es wurden nun drei ausführbare Scripte erstellt die Dumps der zu sichernden Dateisysteme anlegen. Es werden monatlich Level0-Dumps durchgeführt. Jede Woche wird hierauf ein Level1-Dump erzeugt. Täglich wird ein Level2-Dump erzeugt. Die Dumps werden unter /data/backup angelegt. Hier sammeln sich nun eine Vielzahl von Dateien nicht unerheblicher Größe. Die Dateien sind durch das Datum und das Dumplevel in ihrem Namen gekennzeichnet. Dumps auf die sich keine höheren Dumplevels mehr beziehen können gelöscht werden, wenn kein Anspruch auf eine Historie besteht.