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
cron
andbup-cron
.
Installing Bup
The bup
package is already available on Debian, so it can be
easily installed using apt-get
:
sudo apt-get update
sudo apt-get install bup
Once you've installed Bup you should be able to run bup --version
:
$ 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
using bup init
. By default the repository will be saved to ~/.bup/
, however
the -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:
root@ein:/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).
Note: the --name
option is used to specify the backup name:
Restoring files
To restore files from Bup, you first need to work out which backups are
available. 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 bup restore
:
$ 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