This is a disaster recovery Backup System. The goal is to recreate the system after a total failure.
- If no backup exists, create full backup
- Get metadata of last backup
- If metadata matches one of the currently available snapshots, create incremental backup from this snapshot. Else go to step 1.
There are up to four snapshots, that are kept on the system.
- Root: The snapshot the last full backup was taken from
- Last Parent: The snapshot that was the parent of the last incremental backup
- Current Parent: The snapshot that was the current state of the last incremental backup
- Current State: The snapshot that is the state for the current incremental backup
- UUID of Snapshot
- Date of Snapshot
- Size of cleartext BLOB in bytes
- SHA512 of cleartext BLOB
- Type (full or incremental)
- UUID of Parent (if not full backup)
The metadata is stored as JSON.
The binary blob will be encrypted with openssl
.
The keyfile wil be stored in the selected CloudFleet key space and in the escapepod data space.
The algorithm will be aes256 [TBD variant, cbc, ctr?]
Every encrypted blob is sent to the Storage Driver along with the encrypted metadata
A storage driver must provide the following functions:
-
store_backup_metadata
Ìnput
encrypted metadata and backup uuidOutput
Success
-
store_backup
Ìnput
encrypted blob and sha256 of cleartext blobOutput
Success
-
get_backup_metadata
Input
None or uuid of backup (if none, metadata of last backup is returned)Output
encrypted metadata of backup
-
get_backup
Input
sha256 of requested blobOutput
encrypted blob of backup
For the first implementation we will target two storage drivers.
Careful One set of snapshots will be kept per storage driver. If you use more than one storage drivers, you might use more disk space than expected.
A very simple service by CloudFleet, that allows to have your encrypted data stored remotely.
See https://dunesea.cloudfleet.io
You need a USB drive, that is labeled escapepod.
If the system finds an external storage with that label, it will create a folder escapepod (if not present) and store the backup data in there.