Getting started with Bup
As a general rule of thumb you can never have to many backups. While this isn't always true, most people will have stories about how they lost data and didn't have a backup. Very few people will tell you about the time they had too many backups...
With the above in mind, this post is going to look at using Bup to manage backups. Before going any further, it's worth pointing out that Bup is still relatively new software, and has a few features that need to be ironed out. If that puts you off I would recommend having a look at rsync, which can be used to implement a relatively simple backup strategy.
What is Bub?
Bup is backup software which shares a few similarities with Git (it uses the same packfile format). However unlike Git, Bup has been designed to handle large files effectively. Some of Bups features include:
Large files are split into chunks so incremental changes to very large files can be backed up without having to store duplicate files.
Remote backups can easily be run over SSH.
Backups can be mounted as a FUSER filesystem.
Automatic backups can be set up with
bup package is already available on Debian, so it can be
easily installed using
sudo apt-get update sudo apt-get install bup
Once you've installed Bup you should be able to run
$ bup --version bup-debian/0.29-3
Alternatively Bup has also been packaged for several other distributions, or can be installed from source.
Creating a backup
Once you've installed Bup, the next thing to do is create a Bup repository
bup init. By default the repository will be saved to
-d option can be used to override this:
$ bup -d /var/bup init Initialized empty Git repository in /var/bup/
If you're familiar with Git repositories, the repository layout should look very familiar:
$ find /var/bup/ /var/bup/ /var/bup/refs /var/bup/refs/tags /var/bup/refs/heads /var/bup/objects /var/bup/objects/info /var/bup/objects/pack /var/bup/branches /var/bup/config /var/bup/description /var/bup/hooks /var/bup/hooks/pre-rebase.sample /var/bup/hooks/prepare-commit-msg.sample /var/bup/hooks/pre-receive.sample /var/bup/hooks/commit-msg.sample /var/bup/hooks/pre-push.sample /var/bup/hooks/post-update.sample /var/bup/hooks/update.sample /var/bup/hooks/applypatch-msg.sample /var/bup/hooks/pre-applypatch.sample /var/bup/hooks/pre-commit.sample /var/bup/info /var/bup/info/exclude /var/bup/HEAD
Creating a backup is split into two steps. The first thing to do is create an index of the files you want to backup:
$ bup -d /var/bup index /etc/ Indexing: 1100, done (5089 paths/s).
After the index has been created file contents can be backed up using the
bup save command:
[email protected]:/var# bup -d /var/bup save --name etc-backup /etc/ Reading index: 1100, done. Saving: 100.00% (1869/1869k, 1100/1100 files), done. bloom: creating from 1 file (1160 objects).
--name option is used to specify the backup name:
To restore files from Bup, you first need to work out which backups are
bup ls can be used to list backup names:
$ bup -d /var/bup ls etc-backup
You can then list the contents of a named backup:
$ bup -d /var/bup ls etc-backup 2018-07-27-233535 latest
Once you've worked out which backup you want to restore files from, you can
restore the backup files to a directory using
$ mkdir /tmp/bup_restore $ bup -d /var/bup restore -C /tmp/bup_restore/ etc-backup/2018-07-27-233535/etc/ Restoring: 1100, done. $ cat /tmp/bup_restore/hostname foobar.example.com
Alternatively you can mount the Bup repository to access individual files:
$ mkdir /tmp/bup_mount $ bup -d /var/bup fuse /tmp/bup_mount/ $ ls /tmp/bup_mount/ cat bup_mount/etc-backup/2018-07-27-233535/etc/hostname foobar.example.com