Weblog entry #16 for kumanna
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:
- First, identify the directory or directories to be backed up. To keep this simple, the directory I am backing up is /home/kumar/Work.
- On the Raspberry Pi, install bup. If you want to build it from the git clone, you would need python-dev, and pandoc for the documentation.
sudo aptitude install pandoc python-dev git clone git://github.com/apenwarr/bup.git cd bup;make;sudo make install
- Initialize the backup directory on the Raspberry Pi:
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).
- On the local machine, initialize the backup directory.
bup index -uv /home/kumar/Work
- Back it up. This will take time the first time, if the Work directory has several contents within it.
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.
- Now, you have backed things up. Make changes in the Work directory. For instance, add/edit/remove/move some files.
- Rerun the index and save commands from steps 4 and 5 above. Enjoy the speedup and ability to rewind to the previous state.
- Test restoration of ONE directory of backup (just to save time) on Pi itself directly on the Pi:
bup -d /home/kumar/BACKUPS/ restore -C /tmp/ /workbackup/latest/home/kumar/Work/offset-coupling-paramsThen scp it back if you need it.
- Alternative: Use fuse. On the Pi:
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
- Once happy, write the bup index/bup save commands into a script and run it periodically to back up (check this at the end of the post). Have fun.
Next, to prepare the external hard disk, I went with the old-style autofs automounting solution:
- To automount the disk, in /etc/auto.master, add
/auto /etc/auto.misc --timeout=60
- In /etc/auto.misc add:
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.
- Initialize the backup directory:
sudo mkdir /auto/backupdrive/BACKUPS sudo chown kumar.kumar /auto/backupdrive/BACKUPS bup -d /auto/backupdrive/BACKUPS/ init
- Index and back up:
bup -d /auto/backupdrive/BACKUPS/ index -uv /home/kumar/Work bup -d /auto/backupdrive/BACKUPS/ save -n workbackup /home/kumar/Work
- Make changes in the Work directory. Add/edit/remove/move files.
- Rerun index and save commands from step 5. Enjoy the speed.
- Test restoration of ONE directory of backup from removable disk:
bup -d /auto/backupdrive/BACKUPS/ restore -C /tmp/ /workbackup/latest/home/kumar/Work/offset-coupling-params
- Once happy, write the bup index/bup save commands into a script and run it periodically to back up. Have fun.
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.
Comments on this Entry