#!/bin/bash
#
# Script rotiert Backup-Verzeichnisse
# http://www.heinlein-partner.de
#
# Aufruf: backup-rotate <fqdn-servername>
#

# ### Aufrufparameter des Scripts ist ein FQDN-Hostname
if [ -n "$1" ] ; then
	SERVER="$1"
else
	echo "Error: Usage $0 <fqdn-hostname>"
	exit
fi

# ### Konfiguration
# Sollen wir pruefen, ob noch ein gewisser Prozentsatz
# an Plattenplatz und Inodes frei ist?
CHECK_HDMINFREE=true
HDMINFREE=90

# Soll die Daten-Partition readonly gemountet werden, 
# wenn wir sie nicht mehr brauchen?
MOUNT_RO=false
MOUNT_DEVICE=/dev/hdc1

# Unter welchem Pfad wird gesichert?
DATA_PATH=/DATA

# ### Let`s Rock`n`Roll....

# Pruefe auf freien Plattenplatz
GETPERCENTAGE='s/.* \([0-9]\{1,3\}\)%.*/\1/'
if $CHECK_HDMINFREE ; then
	KBISFREE=`df /$DATA_PATH | tail -n1 | sed -e "$GETPERCENTAGE"`
	INODEISFREE=`df -i /$DATA_PATH | tail -n1 | sed -e "$GETPERCENTAGE"`
	if [ $KBISFREE -ge $HDMINFREE -o $INODEISFREE -ge $HDMINFREE ] ; then
		echo "Fatal: Not enough space left for rotating backups!"
		logger "Fatal: Not enough space left for rotating backups!"
		exit
	fi
fi

# Festplatte rw remounten falls gewünscht!
if $MOUNT_RO ; then
        if `mount -o remount,rw $MOUNT_DEVICE $DATA_PATH` ; then
                echo "Error: Could not remount $MOUNT_DEV readwrite"
                logger "Error: Could not remount $MOUNT_DEV readwrite"
                exit
        fi
fi

# Ggf. Verzeichnis anlegen
if ! [ -d $SNAPSHOT_RW/$SERVER/daily.0 ] ; then
        mkdir -p $SNAPSHOT_RW/$SERVER/daily.0
fi

echo "Rotating snapshots of $SERVER..."
logger "Rotating snapshots of $SERVER..."

# Das hoechste Snapshot abloeschen
if [ -d $SNAPSHOT_RW/$SERVER/daily.7 ] ; then
        rm -rf $SNAPSHOT_RW/$SERVER/daily.7
fi

# Alle anderen Snapshots eine Nummer nach oben verschieben
for OLD in 6 5 4 3 2 1  ; do
        if [ -d $DATA_PATH/$SERVER/daily.$OLD ] ; then
	        NEW=$[ $OLD + 1 ]
		# Datum sichern
		touch $DATA_PATH/.timestamp -r $DATA_PATH/$SERVER/daily.$OLD
                mv $DATA_PATH/$SERVER/daily.$OLD $DATA_PATH/$SERVER/daily.$NEW
		# Datum zurueckspielen
		touch $DATA_PATH/$SERVER/daily.$NEW -r $DATA_PATH/.timestamp
        fi
done

# Snapshot von Level-0 per hardlink-Kopie nach Level-1 kopieren
if [ -d $DATA_PATH/$SERVER/daily.0 ] ; then
        cp -al $DATA_PATH/$SERVER/daily.0 $DATA_PATH/$SERVER/daily.1
fi

# Festplatte ro remounten falls gewünscht!
if $MOUNT_RO ; then
        if `mount -o remount,ro $MOUNT_DEVICE $DATA_PATH` ; then
                echo "Error: Could not remount $MOUNT_DEV readonly"
                logger "Error: Could not remount $MOUNT_DEV readonly"
                exit
        fi
fi

