LinuxCommandLibrary

bup

Create efficient, deduplicated backups

TLDR

Initialize a backup repository in a given local directory

$ bup [[-d|--bup-dir]] [path/to/repository] init
copy

Prepare a given directory before taking a backup
$ bup [[-d|--bup-dir]] [path/to/repository] index [path/to/directory]
copy

Backup a directory to the repository specifying its name
$ bup [[-d|--bup-dir]] [path/to/repository] save [[-n|--name]] [backup_name] [path/to/directory]
copy

Show the backup snapshots currently stored in the repository
$ bup [[-d|--bup-dir]] [path/to/repository] ls
copy

Restore a specific backup snapshot to a target directory
$ bup [[-d|--bup-dir]] [path/to/repository] restore [[-C|--outdir]] [path/to/target_directory] [backup_name]
copy

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.

SEE ALSO

git(1), rsync(1), tar(1), duplicity(1)

Copied to clipboard