39 lines
1000 B
Markdown
39 lines
1000 B
Markdown
|
# `btrfs` Backup Solution
|
||
|
|
||
|
Encrypted incremental backups utilizing
|
||
|
[`btrfs send`](https://btrfs.wiki.kernel.org/index.php/Manpage/btrfs-send)
|
||
|
and [`age`](https://age-encryption.org/).
|
||
|
|
||
|
## Setup
|
||
|
|
||
|
At `/media/storage/backup`, we have:
|
||
|
|
||
|
```
|
||
|
backup/
|
||
|
data/ [a btrfs **subvolume** containing the data]
|
||
|
...
|
||
|
snapshots/ [btrfs snapshots of the 'data' subvolume]
|
||
|
repo/ [where encrypted backup files will go]
|
||
|
|
||
|
[an age-encryption v1 key for the at-rest passphrase]
|
||
|
static-passphrase-key
|
||
|
static-passphrase-key.pub
|
||
|
|
||
|
[the contents of this repo:]
|
||
|
backup.sh
|
||
|
create-passphrase-file.sh
|
||
|
```
|
||
|
|
||
|
You can generate the `static-passphrase-key` and `static-passphrase-key.pub` with
|
||
|
`rage-keygen -o static-passphrase-key` and by manually populating the pubkey file.
|
||
|
|
||
|
## Requirements
|
||
|
|
||
|
**Note:** Make sure that `data` is actually a btrfs subvolume!!
|
||
|
|
||
|
- `btrfs`
|
||
|
- `bash`
|
||
|
- `zstd`
|
||
|
- [`rage`](https://github.com/str4d/rage)
|
||
|
- [`simple-age-encryptor`](https://git.lavender.software/charlotte/simple-age-encryptor)
|