#!/bin/bash # # Script rotiert Backup-Verzeichnisse # http://www.heinlein-partner.de # # Aufruf: backup-rotate # # ### Aufrufparameter des Scripts ist ein FQDN-Hostname if [ -n "$1" ] ; then SERVER="$1" else echo "Error: Usage $0 " 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