bupstash(1)
===========
## SYNOPSIS
Bupstash encrypted and deduplicated backups.
Run one of the following `bupstash` subcommands.
`bupstash init ...`
`bupstash new-key ...`
`bupstash new-sub-key ...`
`bupstash put ...`
`bupstash list ...`
`bupstash list-contents ...`
`bupstash diff ...`
`bupstash get ...`
`bupstash restore ...`
`bupstash rm ...`
`bupstash recover-removed ...`
`bupstash gc ...`
`bupstash sync ...`
`bupstash exec-with-locks ...`
`bupstash serve ...`
`bupstash help ...`
`bupstash version ...`
## DESCRIPTION
```bupstash``` is a tool for storing (and retrieving)
files and data in an encrypted bupstash-repostory(7).
Some notable features of ```bupstash``` include:
* Automatic deduplication of stored data.
* Client side encryption of data.
* Incremental file uploads.
* A tag based query language.
* Optional role based encryption and decryption key separation.
* Remote repositories over ssh ssh.
* Optional, per ssh key access repository controls.
* A multi layered approach to security.
The ```bupstash``` tool itself is divided into subcommands
that each have their own documentation.
## SUBCOMMANDS
* bupstash-init(1):
Initialize a bupstash repository.
* bupstash-new-key(1):
Create a new primary key for creating/reading repository items.
* bupstash-new-sub-key(1):
Derive a sub key for a subset of operations.
* bupstash-put(1):
Add data to a bupstash repository.
* bupstash-get(1):
Fetch data from the bupstash repository matching a query.
* bupstash-restore(1):
Restore a snapshot into a local directory.
* bupstash-list(1):
List repository items matching a given query.
* bupstash-list-contents(1):
List directory snapshot contents.
* bupstash-diff(1):
Diff snapshot contents.
* bupstash-rm(1):
Remove repository items matching a given query.
* bupstash-recover-removed(1):
Recover removed items that are pending garbage collection.
* bupstash-gc(1):
Reclaim diskspace in a repository.
* bupstash-sync(1):
Sync items between repositories.
* bupstash-exec-with-locks(1):
Exec a command with exclusive locks held on the repository.
* bupstash-serve(1):
Serve a repository over stdin/stdout using the bupstash-protocol(7).
## EXAMPLES
### Initialize a repository and create keys
```
$ bupstash init -r ssh://$SERVER/home/me/backups
$ bupstash new-key -o backups.key
```
### Tell bupstash to use our repository and key by default
```
$ export BUPSTASH_REPOSITORY=ssh://$SERVER/home/me/backups
$ export BUPSTASH_KEY=backups.key
```
### Directory snapshots
```
$ bupstash put ./some-data
ebb66f3baa5d432e9f9a28934888a23d
$ bupstash list-contents id=ebb66f3baa5d432e9f9a28934888a23d
drwxr-xr-x 0 2020/11/05 10:42:48 .
-rw-r--r-- 177B 2020/07/12 17:13:42 data.txt
```
### List items matching a query
```
$ bupstash list hostname=$(hostname)
id="bcb8684e6bf5cb453e77486decf61685" name="some-file.txt" hostname="my-server" timestamp="2020-07-27 11:26:16"
...
```
### Incremental uploads
```
$ bupstash put --send-log /var/backup.sendlog ./some-data
ebb66f3baa5d432e9f9a28934888a23d
# Second backup is much faster when it reads the send log.
$ bupstash put --send-log /var/backup.sendlog ./some-data
ebb66f3baa5d432e9f9a28934888a23d
```
### Capture and save command output
```
# Checks for errors before saving new item.
$ bupstash put --exec name=database.sql pgdump mydatabase
14ebd2073b258b1f55c5bbc889c49db4
```
### Get an item matching a query
```
$ bupstash get id=bcb8684e6bf5cb453e77486decf61685
some data.
```
### Restore a directory to a previous snapshot
```
$ bupstash restore --to ./dir name=dir.tar
```
### Remove items matching a query.
```
$ bupstash rm name=some-data.txt
```
### Wipe a repository
```
$ bupstash rm --allow-many id=*
```
### Reclaim disk space
```
$ bupstash gc
```
### Offline decryption keys
```
# Create a key, a put only key, and a metadata (list/rm only) key.
$ bupstash new-key -o backups.key
$ bupstash new-sub-key --put -k backups.key -o backups-put.key
$ bupstash new-sub-key --list -k backups.key -o backups-metadata.key
... Copy backups.key to secure offline storage ...
# Remove primary key
$ shred backups.key
$ bupstash put -k backups-put.key ./data
14ebd2073b258b1f55c5bbc889c49db4
... When you need to list or remove backups, you may use the metadata key ...
$ bupstash list -k backups-metadata.key
...
$ bupstash rm -k backups-metadata.key
... After emergency, get decryption key from offline storage ...
# Restore by getting an item and decrypting it using the decryption key.
$ bupstash get -k backups.key id=14ebd2073b258b1f55c5bbc889c49db4 | tar -C ./restore -xf -
```
## SEE ALSO
bupstash-repository(7), bupstash-keyfiles(7)