====Guten Tag====
====Project V: RSYNC and Unison, the personal cloud strikes back.====
So with all this talk of redundant, synchronous, and autonomous backup/cloud services like Dropbox and more recently Google Drive have got me thinking; Why sacrifice both space and privacy for cloud storage? Why not setup my own autonomous, synchronous cloud-like backup solution?
====How would one accomplish such a task?====
So, call me crazy, I think it may be possible to not rely on a third party service for internet based data storage!?! Nuts right? after arguing on some forums with folks @ http://www.theverge.com I've decided to prove to them that I can serve up a DIY alternative to Google Drive or Dropbox. Ideally, I'm looking to setup a backup using both rsync and unison that is triggered with a bash script, then the data would be accesable from the server via a LAMP setup. Ambitious, I know, but worth it.
Let's begin...
====Materials====
- My PogoPlug with Arch Linux will serve my purpose well here.
- A script that will make an autonomes, bidirectional, and recursive backup of a folder.
- Devices to sync with; Laptop, Smartphone, Work-PC.
====The Script====
So here is a script I've modified to fit my needs:
#!/bin/sh
set -u
set -x
HOST=andrew@67.241.242.136
SRC=/Users/asow123/Cloud
DST=/Users/asow123/Cloud
if ssh "$HOST" test -d "$DST"/backup.0; then
ssh "$HOST" rm -rf "$DST"/backup.3
ssh "$HOST" mv "$DST"/backup.2 "$DST"/backup.3
ssh "$HOST" mv "$DST"/backup.1 "$DST"/backup.2
ssh "$HOST" mv "$DST"/backup.0 "$DST"/backup.1
fi
rsync --progress --archive --delete -F --rsh=ssh --link-dest=../backup.1 \
"$SRC" "$HOST":"$DST"/backup.pre &&
ssh "$HOST" mv "$DST"/backup.pre "$DST"/backup.0
The script will make backups of the /Developer/cloud and place them into a backup file made by the script. the script will make a series of 3 backups in order. Once that limit is reached the oldest file is deleted and the newest replaces it.
====The new script====
So After careful consideration, I've come to the conclusion that bidirectional synchronization is the way to go. Unison is a great program that does just that with minimal configuration.
Here is the script that synchronizes my two folders:
#!/bin/bash
_paths="/home/andrew/Cloud"
_unison=/usr/local/Cellar/unison/2.40.63/bin/unison
_rserver="67.241.242.136"
for r in ${_rserver}
do
for p in ${_paths}
do
${_unison} -batch /Users/asow123/Cloud "ssh://${r}/${p}"
done
done
Running this script every time I want to backup would be inconvenient, what I've done is schedule this script in a cron tab. in order for the cron tab to connect automatically I've added a freshly generated id_dsa.pub ssh key and added it to authorized_keys on the server side in the ~./ssh folder