Skip to main content
Python Software Foundation 20th Year Anniversary Fundraiser  Donate today!

backups with `rsync` and `btrfs` snapshots

Project description


performs incremental backups with rsync onto a btrfs filesystem. finished backups are retained as read-only snapshots.



pip install snapshotbackup
pip install snapshotbackup[ci]          # install ci related dependencies
pip install snapshotbackup[dev]         # install dev dependencies
pip install snapshotbackup[journald]    # enable logging to journald with `--silent`

example config.ini

; retain_all = '1 day'
; retain_daily = '1 month'
; decay = '1 year'

source = /path/to/data1
backups = /backups/data1

source = /path/to/data2
backups = /backups/data2
ignore = /.cache
retain_all = '1 week'
; '1', 'true' or 'True' for `True`, everything else is `False`
autodecay = 1
autoprune = true
notify_remote = user@host


the setup-step can be skipped if configured backup directory already exists.

snapshotbackup setup data1
snapshotbackup backup data1
snapshotbackup list data1
snapshotbackup prune data1
snapshotbackup decay data1

retention policy

prune will preserve:

  • all backups not older than retain_all
  • daily backups not older than retain_daily
  • weekly backups forever (see decay)
  • the latest backup is always preserved

decay removes all backups older than configured decay.


when running via cron or using notify_remote you may need to add DBUS_SESSION_BUS_ADDRESS to execution environment, e.g. DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus snapshotbackup backup data1


when using advanced installation methods and cron make sure PATH is properly setup, f.e.

01 * * * * DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus snapshotbackup backup home -s

to allow non-interactive deletions configure sudo to allow your user "foo" to use some btrfs commands without password.

foo ALL=(ALL) NOPASSWD: /usr/bin/btrfs subvolume list *
foo ALL=(ALL) NOPASSWD: /usr/bin/btrfs subvolume delete *

dev env

virtualenv .env -p python3
. .env/bin/activate
pip install -r requirements.txt
pip install -e .                    # or pip install -e .[journald]


if you don't have a btrfs filesystem at hand checkout the demo folder. it creates a btrfs image file and mounts it as loopback device.

DISCLAIMER: i'm not sure if btrfs loopback files are safe in every environment. use at your own risk.

make -f makefile.demo setup
make -f makefile.demo backup
make -f makefile.demo list
make -f makefile.demo prune
make -f makefile.demo decay
make -f makefile.demo clean

please read makefile.demo and demo/config.ini to understand what's happening.


./ bdist_wheel

that's all

not enough documentation? well, erm.., intended audience are developers. that's what you get for hobby projects ;-)

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for snapshotbackup, version 0.0.16
Filename, size File type Python version Upload date Hashes
Filename, size snapshotbackup-0.0.16.tar.gz (27.9 kB) File type Source Python version None Upload date Hashes View

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring DigiCert DigiCert EV certificate Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page