It's important to back things up. You should also make your life easier by using some good software. I use obnam for some backups, but I wanted to try out bup for a new backup workflow I needed. I will describe the workflow here.
The situation: I have a laptop with things to be backed up. I also have a Raspberry Pi which I use as a network attached storage (it has a 1 TB external drive attached to it) and runs Raspbian Wheezy on it. Naturally, you can do this on any NAS running some GNU/Linux variant. In addition, I also have an external portable USB hard disk where another backup copy will be stored. How do I automate this?
Here is how I went about this process. First, for the Raspberry Pi:
sudo aptitude install pandoc python-dev git clone git://github.com/apenwarr/bup.git cd bup;make;sudo make install
BUP_DIR=/home/kumar/BACKUPS bup initBACKUPS is the place where bup is asked to store the backups (much like it's analogue of .git). You can store all your backups within this directory, and you can still classify backup sets within this directory with different names (much like git branches).
bup index -uv /home/kumar/Work
bup save -r kumar@<raspberry_pi_ip_address>:BACKUPS -n workbackup /home/kumar/Workworkbackup is the name of the backup set. This can be paperbackup or databackup or notesbackup so that several classes can be backed up within the BACKUPS directory.
bup -d /home/kumar/BACKUPS/ restore -C /tmp/ /workbackup/latest/home/kumar/Work/offset-coupling-paramsThen scp it back if you need it.
sudo aptitude install python-fuse sudo adduser kumar fuse mkdir Mount bup -d /home/kumar/BACKUPS fuse Mount Then cd into Mount and cp/scp the correct files wherever. fusermount -u Mount
Next, to prepare the external hard disk, I went with the old-style autofs automounting solution:
/auto /etc/auto.misc --timeout=60
backupdrive -fstype=btrfs :UUID="7927a7ab-8c3f-4198-bd73-d3cc519a9ac3"fstype may need changing for your file system, and UUID can be found using blkid on the exact partition of the hard disk you wish to back up to.
sudo mkdir /auto/backupdrive/BACKUPS sudo chown kumar.kumar /auto/backupdrive/BACKUPS bup -d /auto/backupdrive/BACKUPS/ init
bup -d /auto/backupdrive/BACKUPS/ index -uv /home/kumar/Work bup -d /auto/backupdrive/BACKUPS/ save -n workbackup /home/kumar/Work
bup -d /auto/backupdrive/BACKUPS/ restore -C /tmp/ /workbackup/latest/home/kumar/Work/offset-coupling-params
Finally, a quick script to automate all of the above.
#!/bin/sh bup index -u /home/kumar/Work bup save -r kumar@<raspberry_pi_ip_address>:BACKUPS -n workbackup /home/kumar/Work if ls /auto/backupdrive/ 2> /dev/null;then echo Backing up to the removable disk... bup -d /auto/backupdrive/BACKUPS/ index -u /home/kumar/Work bup -d /auto/backupdrive/BACKUPS/ save -n workbackup /home/kumar/Work echo Backed up to the removable disk! Yay! else echo WARNING: Not backing up to the removable disk fi
What this script does it, it backs up to the NAS, and then checks if the external disk is connected. If the disk is mounted, then it backs up to that disk as well. It might be a good idea to cron or anacron this script, or have someone remind you to run this periodically. The only limitation I have is that you can't use bup restore to restore from a remote repository yet, but that isn't a huge issue for me now. In addition, metadata is not stored by the bup save/restore commands. You would have to use split and join with tar to get that. However, bup is fast moving, so I'd expect these features soon. Till then, this workflow works all right for data only backups.
Although this is just a mental dump of the procedure I made for myself, suggestions for improvement are welcome. Thanks.