====== Setup ======
You have a client with data on it you would like to make a backup of. You could make a local backup, however the client is mobile so moving the data of it is the best solution.
To get this working you need a server with rsync and a ssh server installed. And of course diskspace to keep the data on.
The client just need rsync capabilities. In my world that is not a problem but if you're running Windows you will need some tweaking through cygwin (not covered).
====== The script ======
rsync -avzgr --stats --protocol=29 /home/tdd /boot /etc \
--exclude=".macromedia" \
--exclude="vmware/" \
--exclude=".Trash" \
--exclude=".Trash-1000" \
--exclude="No-rsync-stuff" \
--exclude=".VirtualBox/" \
--exclude="enc-data*" \
--exclude="dataspace" \
--exclude="pagefile" \
--exclude="samba" \
--exclude="smb" \
--exclude=".ICAClient/cache" \
--exclude=".adobe/Flash_Player/AssetCache" \
--exclude=".cache" \
--exclude=".mozilla/firefox/*/Cache" \
--exclude=".nx" \
--exclude=".thumbnails" \
--exclude=".gvfs" \
--exclude=".local/share/Trash" \
--exclude=".evolution" \
tdd@192.168.1.1:/media/disk/backup > /home/tdd/backup.log
if [ $? != 0 ]
then
rsync -avzgr --stats /home/tdd /boot /etc \
--exclude=".macromedia" \
--exclude="vmware/" \
--exclude=".Trash" \
--exclude=".Trash-1000" \
--exclude="No-rsync-stuff" \
--exclude=".VirtualBox/" \
--exclude="enc-data*" \
--exclude="dataspace" \
--exclude="pagefile" \
--exclude="samba" \
--exclude="smb" \
--exclude=".ICAClient/cache" \
--exclude=".adobe/Flash_Player/AssetCache" \
--exclude=".cache" \
--exclude=".mozilla/firefox/*/Cache" \
--exclude=".nx" \
--exclude=".thumbnails" \
--exclude=".gvfs" \
--exclude=".local/share/Trash" \
--exclude=".evolution" \
/root/backup
fi
Set the script to run every hour (or what timeframe you like) by editing /etc/crontab and inserting this line:
@hourly root /home/tdd/backup.sh
The script will test if the online backup has succeeded and if it fails make a local backup.
The script has a special parameter appended %%(--protocol=29)%%. This is to make rsync (version < 3.0.4) work with rssh.
====== rssh ======
rssh is a cool feature that makes it possible to use rsync but not opening up a full shell to the user. As we only want to copy files the user shouldn't be allowed to logon to the system with ssh.
Install rssh:
sudo apt-get install rssh
Edit the file /etc/rssh.conf and make sure the following is uncommented:
allowscp
allowsftp
allowrsync
This allows file transfer with scp, sftp and rsync. You could restrict it even further by only allowing rsync.
Now edit the users shell in /etc/passwd:
tdd:x:1021:1021::/home/tdd:/usr/bin/rssh
====== libnotify ======
With a Ubuntu client you can use its notification framework to tell how the backup went.
Look at the following script:
#!/bin/bash
BACKUPLOG="/home/tdd/backup.log"
su tdd -c "/usr/bin/notify-send 'Backup Start...'" 2>&1 > $BACKUPLOG
rsync -avzgr --stats /home/tdd /boot /etc \
--exclude="vmware/" \
--exclude=".Trash" \
--exclude=".Trash-1000" \
--exclude="No-rsync-stuff" \
--exclude=".VirtualBox/" \
--exclude="enc-data*" \
--exclude="dataspace" \
--exclude="pagefile" \
--exclude="samba" \
--exclude="smb" \
--exclude=".ICAClient/cache" \
--exclude=".adobe/Flash_Player/AssetCache" \
--exclude=".cache" \
--exclude=".mozilla/firefox/*/Cache" \
--exclude=".nx" \
--exclude=".thumbnails" \
--exclude=".gvfs" \
--exclude="Downloads" \
--exclude=".local/share/Trash" \
--exclude=".evolution" \
--exclude="tdd/Music" \
tdd@172.21.1.1:/media/disk/backup 2>&1 > $BACKUPLOG
echo $?
if [ $? -eq 0 ]
then
NUMBEROFFILES=`grep "Number of files transferred" $BACKUPLOG |awk -F ':' '{print $2}'`
su tdd -c "DISPLAY=:0.0 /usr/bin/notify-send 'Backup Succesful Completed - $NUMBEROFFILES tranferred'"
else
su tdd -c "DISPLAY=:0.0 /usr/bin/notify-send 'Backup Failed...'"
fi
After running this script a notification is display on the screen telling either how many files were backup'ed or that it failed.