Linux
Jag är Linuxanvändare sedan 1999 och hade tänkt
fortsätta med det.
Backup
Jag kör backup till en Linksys NSLU2, kopplad till
en Seagate 1TB USBdisk, se diagramet.
NSLU2 har en begränsad processorkapacitet, så för
filöverföringar blir prestandan lidande om man inte anpassar
krypteringen med hjälp av blowfish.
Jag kör ett script som kopierar data till backupdisken, inget
konstigt med det. Det smarta med mitt backupscript är att jag
sparar 7 versoner av varje fil, i en 1 dag gammal version, en 2 dagars,
en 4 dagars, en 8, en 16, en 32 och en 64 dagar gammal. Det riktigt
kluriga är att det tar minimalt med plats på min backupdisk
då endast skillnader från den äldsta filen sparas.
Dessutom skickas bara förändrade data mellan server och
backup, så det går snabbt. Det smarta med
versionshanteringen är hårda länkar, "cp -al" som
skapar kopior som inte tar någon plats, och rsynk som hanterar
vad som ska skickas mellan server och backup.
#!/bin/bash
# Backup utility using rsync and ssh
#Lars Karlander 2008
DATE=`date '+%Y-%m-%d'`
LOG=/tmp/rs-backup.log
#client is the one with the orig. data
BACKUP_CLIENT=localhost
CLIENT_DIRS="/home/ /etc/ /var/www/ /var/log/"
EXCLUDE_DIRS="/home/lars/.mozilla"
BACKUP_SERVER=192.168.1.16
#NO TAILING / in BACKUP_HOME
BACKUP_HOME=/home/backup
BUSER=root
RSYNC_OPTIONS="-aRv --delete"
##################### MAIN PROGRAM #######################
log()
{
time=`gettime`
echo "$DATE $time : $*"|tee -a $LOG
}
gettime()
{
time=`date '+%H:%M:%S'`
echo $time
}
# Make sure we are running as root
if [ `id -u` != 0 ] ; then
log "Error: Sorry, must be root. Exiting..."
exit 1
fi
rotate2()
{
rm -f /tmp/brot.txt
ssh -c blowfish $BUSER@$BACKUP_SERVER "ls -1rt $BACKUP_HOME"
>/tmp/brot.txt
#nu ska namnen klippas, bara bokstaverna ska vara kvar
SISTA1=`cat /tmp/brot.txt|tail -1|cut -b 1`
SISTA2=`cat /tmp/brot.txt|tail -2| head -1|cut -b 1`
SISTA3=`cat /tmp/brot.txt|tail -3| head -1|cut -b 1`
SISTA4=`cat /tmp/brot.txt|tail -4| head -1|cut -b 1`
SISTA5=`cat /tmp/brot.txt|tail -5| head -1|cut -b 1`
SISTA6=`cat /tmp/brot.txt|tail -6| head -1|cut -b 1`
cat /tmp/brot.txt
if [ "$SISTA1" != "A" ] ; then
BACKUPTARGET="A"
else
if [ "$SISTA2" != "B" ] ; then
BACKUPTARGET="B"
else
if [ "$SISTA3" != "C" ] ; then
BACKUPTARGET="C"
else
if [ "$SISTA4" != "D" ] ; then
BACKUPTARGET="D"
else
if [ "$SISTA5" != "E" ] ; then
BACKUPTARGET="E"
else
if [ "$SISTA6" != "F" ] ; then
BACKUPTARGET="F"
else
BACKUPTARGET="G"
fi
fi
fi
fi
fi
fi
echo "Backuptarget=$BACKUPTARGET"
#target valt, dax att radera target..
ssh -c blowfish $BUSER@$BACKUP_SERVER "rm -rf
$BACKUP_HOME/$BACKUPTARGET-20??-??-??"
log "Tog bort $BACKUPTARGET"
#och kopiera till en ny mapp med cp -al... THIS IS WHERE THE MAGIC
HAPPENS...
ssh -c blowfish $BUSER@$BACKUP_SERVER "cp -al $BACKUP_HOME/$SISTA1-*
$BACKUP_HOME/$BACKUPTARGET-$DATE"
ssh -c blowfish $BUSER@$BACKUP_SERVER "touch
$BACKUP_HOME/$BACKUPTARGET-$DATE"
log "Kopierade till $BACKUP_HOME från $SISTA1"
}
# File system backups
rotate2
for DIR in $CLIENT_DIRS ; do
EXCLUDE_LIST=""
for EX in $EXCLUDE_DIRS ; do
log "Examining exclude list..."
DIR_LEN=`echo $DIR | wc -m`
DIR_LEN=`expr $DIR_LEN - 1`
EXD=`echo $EX | cut -c 1-$DIR_LEN`
#echo " $DIR = $EXD"
if [ "$DIR" = "$EXD" ] ; then
EXCLUDE_LIST="$EXCLUDE_LIST $EX "
log "Adding $EX to exclude list for this backup."
fi
done
if [ ! -z $EXCLUDE_LIST ] ; then
log "Excluding the following directories from this backup:
$EXCLUDE_LIST "
fi
if [ ! -z $EXCLUDE_LIST ] ; then
RSYNC_OPTIONS="$RSYNC_OPTIONS --exclude $EXCLUDE_LIST"
fi
log "Starting backup of $DIR"
if rsync $RSYNC_OPTIONS -e "ssh -c blowfish" $DIR
$BUSER@$BACKUP_SERVER:$BACKUP_HOME/$BACKUPTARGET-$DATE/ >> $LOG
2>&1 ; then
log "Completed backup of $DIR"
else
log "Warning: Backup of $DIR on $BACKUP_CLIENT could not be completed"
error_status=6
fi
done
exit $error_status