Bup repositories and Git
$ bup -d /var/bup init Initialized empty Git repository in /var/bup/
One of the nice things about this is you can use Git commands directly on the Bup repo. There are a few caveats to this, if you want to learn more I would recommend having a read of the Bup design readme.
To list the name of available backups, you would normally run
$ bup -d /var/bup ls etc-backup
Internally each name is a branch in the repository, consequently you can also use git branch to get the same output:
$ git --git-dir=/var/bup branch etc-backup
Each named backup will have one or more points in time which can be displayed
$ bup -d /var/bup ls etc-backup 2018-08-03-180408@ 2018-08-03-182654@ 2018-08-03-182852@ latest@
Each point in time is stored as a commit, therefore git log can also be used to list them:
$ git --git-dir=/var/bup log etc-backup --format='%h: %ci' 84f04f8: 2018-08-03 17:28:52 +0000 7ddec50: 2018-08-03 17:26:54 +0000 0e9d160: 2018-08-03 17:04:08 +0000
Once you can list the commit hashes for each backup, git diff can be used two compare two backups:
$ git --git-dir /var/bup diff --stat 84f04f8 7ddec50 etc/.bupm | Bin 4005 -> 3955 bytes etc/example | 1 - 2 files changed, 1 deletion(-)
Restoring files with Git
git show can be used to copy an individual file from a Bup repository:
$ git --git-dir=/var/bup show etc-backup:etc/hostname > /tmp/hostname $ cat /tmp/hostname bup.example.com
Note: restoring a file using
git show will not restore any of the
metadata associated with the file!
As well as restoring individual files, it's also possible to use git clone to restore an entire backup:
$ git clone --branch etc-backup /var/bup /tmp/bup-etc-backup Cloning into '/tmp/bup-etc-backup'... done.
The command above will create a working directory in
etc-backup branch into the working directory. Like using
git show, restoring files by cloning a Bup repo will not restore file
metadata, however you will probably notice the
.bupm metadata files in the
$ find /tmp/bup-etc-backup/etc/X11/ /tmp/bup-etc-backup/etc/X11/ /tmp/bup-etc-backup/etc/X11/.bupm /tmp/bup-etc-backup/etc/X11/xkb /tmp/bup-etc-backup/etc/X11/xkb/.bupm
It's also worth noting that cloning a Bup repo is not very space efficient. This shouldn't be a problem for small repos, however it's worth keeping in mind if you're working with large Bup repos:
$ du -sh /var/bup/ 1016K /var/bup/ $ du -sh /tmp/bup-etc-backup/ 5.1M /tmp/bup-etc-backup/
Pushing to a remote repository
It's also possible to push backups to a remote Bup repository:
$ ssh remotehost bup -d /var/bup-remote init Initialized empty Git repository in /var/bup-remote/ $ git --git-dir=/var/bup remote add bup-remote ssh://remotehost/var/bup-remote $ git --git-dir=/var/bup push bup-remote --all Counting objects: 1175, done. Compressing objects: 100% (854/854), done. Writing objects: 100% (1175/1175), 554.28 KiB | 0 bytes/s, done. Total 1175 (delta 3), reused 1172 (delta 0) To ssh://remotehost/var/bup-remote * [new branch] etc-backup -> etc-backup
This is great if you want to copy backups via SSH to a remote host.