#!/bin/sh # Kleines Backup Script # Autor: Thorsten Gunkel # 1. Parameter: Typ # 2. Parameter: Haltedauer typ=$1 hdauer=$2 config_file="/etc/tg-backup/tg-backup.conf" beende() { # Ausgabe wieder herstellen exec 1>&3 exec 2>&4 if [ -s "$backup_err" ]; then cat "$backup_err" >&2 fi } beende_mit_fehler() { beende exit 1 } # Konfiguration einlesen . "$config_file" if [ "X$file_perm" = "X" ]; then file_perm="0400"; fi if [ "X$file_owner" = "X" ]; then file_owner="root"; fi if [ "X$file_group" = "X" ]; then file_group="root"; fi # Die erzeugten Backups und Logdaten muessen geschuetzt werden umask 377 # Die Standardein- Ausgabe retten exec 3>&1 exec 4>&2 # Typ if [ "$typ" ]; then echo -n "Das gewuenschte Backupprofil ist: "; echo -n $typ; echo "." else echo "Dieses Script unterstuetzt mehrere Backupprofile. Damit diese" >&2 echo "unterschieden werden koennen muß als erster Parameter ein Name" >&2 echo "fuer das gewuenschte Profil genannt werden. Sinnvolle Name sind" >&2 echo "vielleicht: komplett, teilweise, home, etc, ...." >&2 echo >&2 beende_mit_fehler fi # Haltedauer if [ "$hdauer" ]; then if [ $hdauer -gt 0 ]; then echo -n "Es bleiben "; echo -n $hdauer; echo " Version(en) erhalten."; else echo "Es muß mindestens eine Version erhalten bleiben." >&2 echo >&2 beende_mit_fehler fi; else echo "Als zweiter Parameter wird eine positive Ganzzahl erwartet die" >&2 echo "angibt wieviel Versionen des Backups verfuegbar sein sollen." >&2 echo >&2 beende_mit_fehler fi # Datum datum=`date +%Y-%m-%d` # Hier wird der Vorgang geloggt backup_inf="/var/log/tg-backup/backup_"$typ".inf.log" backup_err="/var/log/tg-backup/backup_"$typ".err.log" # Die Ausgabe in die Logdateien umlenken exec 1>>$backup_inf exec 2>>$backup_err # Hier werden die eigentlichen Backups abgelegt daten_dir="/var/backups/tg-backup/" # So fangen/hoeren die Backups an/auf daten_file_pre=$daten_dir"backup_"$typ"." daten_file_end=".tar" zip_file_end=".bz2" # Diese Backups werden angelegt. daten_file="$daten_file_pre$datum$daten_file_end" zip_file="$daten_file""$zip_file_end" # Eigentlich nur zum taeglichen Einsatz geplannt if [ -e "$zip_file" ]; then echo "Die Backupdatei existiert bereits." >&2 echo "Eigentlich sollte das Programm nur einmal am Tag ausgefuehrt werden." >&2 echo "FIXME?" >&2 beende_mit_fehler fi echo Backup echo ------ echo Loesche alte Backups echo ---------------------------- rm -vf "$daten_file_pre"*"$daten_file_end""$zip_file_end"".tmp" >&2 # Soviel Backups gibt es im Moment old_list_counter=`ls "$daten_file_pre"*"$daten_file_end""$zip_file_end" | wc -l` # Sobald $old_list_counter unter Null faellt wird nichts mehr geloescht # $hdauer Dateien werden auf jeden Fall gerettet old_list_counter=`expr $old_list_counter - $hdauer + 1` for old_list in "$daten_file_pre"*"$daten_file_end""$zip_file_end" do # Solange $old_list_counter nicht Eins ist loeschen if [ 1 -le $old_list_counter ]; then echo Loesche $old_list rm $old_list fi # Ein Schritt naeher an die rettende Eins old_list_counter="`expr $old_list_counter - 1`" done; # Die Liste der (nicht) zu sichernden Dateien include_list="/etc/tg-backup/tg-backup_"$typ".list" execlude_list="/etc/tg-backup/tg-backup_"$typ".excl" if ! [ -r "$include_list" ]; then echo "Alle Dateien und Pfade die fuer dieses Profil gesichert werden sollen" >&2 echo -n "in der Datei: " >&2 echo "$include_list" >&2 echo "auffuehren." >&2 echo >&2 beende_mit_fehler else echo Backup der folgenden Verzeichnisse wird erstellt: cat $include_list echo fi if ! [ -r "$execlude_list" ]; then echo "Alle Dateien und Pfade die fuer dieses Profil von der Sicherung" >&2 echo -n "ausgeschlossen werden sollen in der Datei: " >&2 echo "$include_list" >&2 echo "auffuehren." >&2 echo >&2 beende_mit_fehler else echo Folgende Dateien werden ausgeschlossen cat $execlude_list echo fi nice -n 5 tar -f "$zip_file"".tmp" -p -P -v --bzip2 -c -T $include_list -X $execlude_list --exclude="$backup_inf" --exclude="$backup_err" --exclude=/var/backups/tg-backup mv "$zip_file"".tmp" "$zip_file" # Dateirechte wie gewuenscht aendern chmod "$file_perm" "$zip_file" chown "$file_owner"".""$file_group" "$zip_file" echo echo Backup beendet! beende