bup
Create efficient, deduplicated backups
TLDR
Initialize a backup repository in a given local directory
Prepare a given directory before taking a backup
Backup a directory to the repository specifying its name
Show the backup snapshots currently stored in the repository
Restore a specific backup snapshot to a target directory
SYNOPSIS
bup [global-options...] <subcommand> [<subcommand-args>...]
PARAMETERS
-d, --bup-dir=DIR
Use specified bup repository directory (default: ~/.bup)
-v, --verbose
Increase verbosity (repeatable for more output)
-q, --quiet
Decrease verbosity (repeatable for less output)
--no-progress
Disable progress bar display
-F, --force
Force overwrite or dangerous operations
--git-attribute=ATTR:VAL
Set Git attribute for repo
--max-pack-size=BYTES
Limit generated packfile size
DESCRIPTION
Bup is an efficient backup system that leverages Git's packfile format for high-performance, content-addressable storage. It splits files into variable-sized blocks (typically around 64KB), computes SHA-1 hashes, and stores only unique chunks, enabling massive deduplication across backups and filesystems.
This approach excels for incremental backups of large datasets like home directories, VMs, or repositories, where only changed data is stored. Backups are lightning-fast due to Git's optimized packing and indexing, often outperforming tools like rsync or tar for repeated runs.
Key workflow: bup init creates a repo; bup save backs up paths with progress tracking; bup restore extracts files. Repos consist of index files (fast lookups) and packfiles (compressed data). Users can browse history via git or bup's ls. Written in Python with C extensions for speed, it's ideal for servers or desktops needing reliable, space-efficient backups.
Strengths include no full backups needed, easy pruning via Git refs, and LAN transfer support via bup server. Limitations: requires setup and isn't a set-it-forget-it tool.
CAVEATS
Repos grow with unique data; requires Git familiarity for advanced use. Not encrypted by default—pair with tools like borg or filesystem encryption. Python dependency; can be memory-intensive for huge files.
MAIN SUBCOMMANDS
init: Initialize repo.
save: Backup paths.
restore: Extract files.
ls: List backups.
fsck: Check integrity.
index: Inspect indices.
EXAMPLE USAGE
bup init
bup save -n mybackup /home
bup ls mybackup
bup restore mybackup/latest /home/doc.txt --to /tmp
HISTORY
Developed by Avery Pennarun starting 2009 to address Git's backup shortcomings. Initial release ~2010; maintained as open-source (GPLv2). Gained popularity for VM/server backups; active development through 2020s with Python 3 support.


