Finally I’ve made some progress in one of my miniprojects! At least an initial version of the hammer-backup script has been pushed to the master branch upstream in the DragonFly BSD repository, see commitdiff here.
For those who don’t know, DragonFly BSD is a fork of FreeBSD 4.x. Its leader, Matthew Dillon, implemented a log structured filesystem from scratch called HAMMER. It’s divided into independent “sub filesystems” called PFS (pseudo-filesystem).
DragonFly BSD standard installation on a HAMMER filesystem provides a PFS for every typical UNIX system directory (/usr, /var), see below:
koprulu# df -h
Filesystem Size Used Avail Capacity Mounted on
ROOT 926G 14G 912G 2% /
devfs 1.0K 1.0K 0B 100% /dev
/dev/part-by-uuid/cb4561e2-8aaf-11e3-9867-535400123456 1.2G 303M 784M 28% /boot
/pfs/@@-1:00001 926G 14G 912G 2% /var
/pfs/@@-1:00002 926G 14G 912G 2% /tmp
/pfs/@@-1:00003 926G 14G 912G 2% /usr
/pfs/@@-1:00004 926G 14G 912G 2% /home
/pfs/@@-1:00005 926G 14G 912G 2% /usr/obj
/pfs/@@-1:00006 926G 14G 912G 2% /var/crash
/pfs/@@-1:00007 926G 14G 912G 2% /var/tmp
procfs 4.0K 4.0K 0B 100% /proc
HAMMER is a copy-on-write filesystem that records history of every change on it. It’s also transactional and every transaction has a transaction ID associated (TID). Here’s where things get really interesting, HAMMER provides a tool to operate the filesystem itself called ‘hammer’.
It can dump the contents of every PFS to stdout and that’s what the hammer-script uses.
You can see how the script itself works here