Client to Server Backups
Saturday, 15 March 2008
I have intentions to look into Bacula as a disk-to-disk backup solution, however until then I am using the following script for Kubuntu Dapper -> Debian Etch backups, and a modified one for Windows XP Home -> Debian Etch.
It all uses rsync, and requires password-less key based ssh connections. I am using rsync, OpenSSH, and for Windows XP a little Cygwin magic (including modifying this script to make it Windows friendly).
client-to-server-rsync-backup.sh
#!/usr/bin/env bash #ver 1.0.3 BACKUPSERVERUSER=limitedUserOnServer BACKUPSERVER=serverHostName BACKUPCLIENT=`echo $(hostname -s) | tr '[:upper:]' '[:lower:]'` BACKUPS=( #localFolder,backupDestinationParentFolder #/home,/media/md2/backups/clientname #/var/www,/media/md2/backups/clientname/var ) if [ "$1" != "--incremental" ] && [ "$1" != "--sync" ] && [ "$1" != "--help" ]; then echo $0: missing operand echo Try '$0 --help' for more information. elif [ "$1" = "--help" ]; then echo " Usage: $0 [OPTION]... [PASSTHROUGH OPTIONS]"; echo ""; echo " Mandatory arguments:"; echo " [OPTION]"; echo " --incremental add to the existing backups"; echo " --sync sync the live data with the existing backup"; echo ""; echo " Optional arguments:"; echo " [PASSTHROUGH OPTIONS]"; echo " Passthrough options are sent to rsync in this form from this script:"; echo ""; echo " for incremental:"; echo ' sudo rsync -avz [PASSTHROUGH OPTIONS] $SOURCE $BKUPSRVUSER@'; echo " $BKUPSRV:$DEST"; echo ""; echo " and for sync:"; echo ' sudo rsync -avz [PASSTHROUGH OPTIONS] --delete $SOURCE '; echo " $BKUPSRVUSER@$BKUPSRV:$DEST"; echo ""; echo " * This makes it easy to do something like this:"; echo " * $0 --incremental "--partial --progress""; echo " *"; echo " * Thus sending "--partial --progress" to rsync,"; echo " * making this script a little more interactive..."; echo " * read more via `man rsync'."; else if [ "$1" = "--incremental" ]; then incremental_or_sync=""; elif [ "$1" = "--sync" ]; then incremental_or_sync="--delete"; fi for BACKUPS in ${BACKUPS[@]}; do SOURCE=`echo $BACKUPS | cut -d',' -f1` DESTINATION=`echo $BACKUPS | cut -d',' -f2` echo echo "# starting backup" echo "# from: $BACKUPCLIENT:$SOURCE" echo "# to: $BKUPSRV:$DEST" echo echo sudo rsync -avz $2 $inc_or_sync $SOURCE $BKUPSRVUSER@$BKUPSRV:$DEST sudo rsync -avz $2 $inc_or_sync $SOURCE $BKUPSRVUSER@$BKUPSRV:$DEST echo done fi