Tägliches inkrementelles Backup unter Linux
Wer selbst einen Server betreibt weiß warum Backups wichtig sind. Wie sie einigermaßen platzsparend und mit recht geringem Aufwand über die Bühne zu bringen sind, habe ich jetzt auch mal selbst ausprobiert.
Ich habe mich hauptsächlich an die Anleitung von Maximilian Kalus gehalten. Um sein Skript umzusetzen sind cron und tar nötig, die aber eh auf den meisten Linux-Systemen installiert sind. Damit man es ein Bischen dynamischer nutzen kann habe ich seinen Code um Kommandozeilenparameter erweitert. Das Ganze sieht nun so aus:
#!/bin/bash
BACKUPDIR=/var/backup
LASTMONTHDIR=lastmonth
if [ -d "$1" ]; then # Is $1 a directory?
DIR=$1
if [ -n "$2" ]; then # Is $2 not empty?
BACKUPNAME=$2
TSNAME="$BACKUPNAME.timestamp.snar"
if [ "$3" == "complete" ]; then
# Complete backup.
MYDATE=complete
# Delete old timestamps.
rm -f "$BACKUPDIR/$TSNAME"
# Remove old backus.
rm -rf "$BACKUPDIR/$LASTMONTHDIR.$BACKUPNAME.d"
mkdir "$BACKUPDIR/$LASTMONTHDIR.$BACKUPNAME.d"
# Check if any files of last month exist. And copy them to lastmonth dir.
files=$(ls "$BACKUPDIR/$BACKUPNAME".*.tgz 2> /dev/null | wc -l)
if [ "$files" != "0" ]; then
mv -f "$BACKUPDIR/$BACKUPNAME".*.tgz "$BACKUPDIR/$LASTMONTHDIR.$BACKUPNAME.d"
fi
else
# Incremental backup.
MYDATE=$(date +%y%m%d)
fi
# Create tarball.
tar czf "$BACKUPDIR"/"$BACKUPNAME".$MYDATE.tgz -g "$BACKUPDIR/$TSNAME" "$DIR" 2> /dev/null
else
echo "Please provide a backup name!"
fi
else
echo "Please provide a directory!"
fi
Ausgeführt wird es dann so:
backup.sh /path/that/should/be/backed/up backup_name complete













