Aufgabe: Automatisches Backup: fullbackup_install

Gesucht ist ein Mechanismus, um erstens gelegentlich ein Vollsicherung bestimmter Verzeichnisse zu machen (volles Backup, bei mir /home, /usr/local, /etc, /var/spool/mail, /root). Weil das eine ziemliche Menge ist (bei mir ca. 3 GB zur Zeit), und sich von dem vielen Zeug anteilig nicht viel täglich ändert, will ich dann zweitens noch eine tägliche (oder besser: nächtliche) Sicherung aller Dateien, die sich im laufenden Betrieb seit der letzten Sicherung geändert haben, oder die seither dazukamen (inkrementelles Backup).

Das volle Backup will ich nach eigenem Ermessen starten können; das inkrementelle soll jede Nacht zu einem bestimmten Zeitpunkt automatisch starten. Dazu lege ich nach dem vollen Backup eine leere Kassette ins Laufwerk (bei mir /dev/tape beziehungsweise /dev/ntape), und wünsche mir jeden morgen eine email, anhand derer ich sehe, ob die automatische inkrementelle Sicherung geklappt hat, während ich mich meinem wohlverdienten Schlaf hingegeben hatte. Die inkrementellen Sicherungen werden hintereinander auf das Band geschrieben. Wenn das Band voll ist, sehe ich das an der email, und lege entweder ein neues Band für die nächsten inkrementellen Sicherungen ein, oder mache gleich mal wieder ein volles Backup.

So habe ich alle Dateien regelmäßig gesichert, ohne jeden Tag ein Band verschwenden zu müssen (eine SLR-5-Kassette für 4 GB kostet knapp 100 DM).

Neben dem vollen und dem inkrementellen Backup kamen dann noch folgende Wünsche auf:

Insgesamt sind das jetzt vier Funktionen (volles Backup, inkrementelles Backup, Ermitteln der Größe, Zurückladen eines gesamten Bandes mit möglicherweise mehreren Sicherungen), die sich teilweise überschneiden, und ein paar gleiche Informationen brauchen.

Als fauler Mensch hatte ich keine Lust, vier ähnliche Skripte zu bauen, die irgendwie auf gleiche Parameter zugreifen müßten (welches Device ist das Bandlaufwerk? Welche Verzeichnisse sollen gesichert werden?). Bei irgendwelchen Änderungen müßten dann ja alle Skripte geändert werden.

Deshalb habe ich folgende Krücke genommen: Es gibt in /etc/backup ein Skript namens fullbackup. Weiterhin gibt es dort noch drei symbolische Links incrbackup, du, und incrrestore.

Man kann also mit vier verschiedenen Namen ein und dasselbe Skript aufrufen. Dieses Skript entscheidet dann anhand seines nullten Parameters $0, was es zu tun hat.

Bei einem Aufruf des vollen Backups muß irgendwie hinterlegt werden, wann die letzte Sicherung begonnen hatte (damit folgende inkrementelle Sicherungen alle neueren Dateien erkennen können), ebenso bei einem inkrementellen Backup. Bei einem Abbruch, beispielsweise wegen eines vollen Bandes, darf der Zeitpunkt der letzten korrekten Sicherung nicht überschrieben worden sein! Einfach beim erfolgreichen Ende der Sicherung Datum und Uhrzeit hinterlegen ist aber auch nicht der Weisheit letzter Schluß, weil dann bei der nächsten Sicherung alle Dateien vergessen werden, die während der letzten erfolgreichen Sicherung geändert wurden, und vielleicht in ihrer neuen Version nicht auf dem Band sind. Also: am Ende einer erfolgreichen Sicherung muß Datum und Uhrzeit des Beginns hinterlegt werden, wenn alles geklappt hat.

/etc/backup/fullbackup wird bei Bedarf von Hand gestartet.
/etc/backup/incrbackup wird durch den cron-Dämon angeworfen (siehe man cron und man 5 crontab).

Musterlösung siehe Lösung: Automatisches Backup: fullbackup_install.

AnyWare@Wachtler.de