mirror of https://github.com/dswd/zvault
First draft
This commit is contained in:
commit
1e460b66d5
|
@ -0,0 +1,45 @@
|
|||
# ZVault Backup solution
|
||||
|
||||
## Goals
|
||||
|
||||
- Blazingly fast backup runs
|
||||
- Space-efficient storage
|
||||
- Independent backups
|
||||
|
||||
## Design
|
||||
|
||||
- Use rolling checksum to create content-dependent chunks
|
||||
- Use sha3-shake128 to hash chunks
|
||||
- Use mmapped hashtable to find duplicate chunks
|
||||
- Serialize metadata into chunks
|
||||
- Store small file data within metadata
|
||||
- Store directory metadata to avoid calculating checksums of unchanged files (same mtime and size)
|
||||
- Store full directory tree in each backup (use cached metadata and checksums for unchanged entries)
|
||||
- Compress data chunks in blocks of ~10MB to improve compression ("solid archive")
|
||||
- Store metadata in separate data chunks to enable metadata caching on client
|
||||
- Encrypt archive
|
||||
- Sort new files by file extension to improve compression
|
||||
|
||||
## Configurable parameters
|
||||
|
||||
- Rolling chunker algorithm
|
||||
- Minimal chunk size [default: 1 KiB]
|
||||
- Maximal chunk size [default: 64 KiB]
|
||||
- Maximal file size for inlining [default: 128 Bytes]
|
||||
- Block size [default: 10 MiB]
|
||||
- Block compression algorithm [default: Brotli 6]
|
||||
- Encryption algorithm [default: chacha20+poly1305]
|
||||
|
||||
## TODO
|
||||
|
||||
- Remove old data
|
||||
- Locking / Multiple clients
|
||||
|
||||
## Modules
|
||||
|
||||
- Rolling checksum chunker
|
||||
- Also creates hashes
|
||||
- Mmapped hashtable that stores existing chunks hashes
|
||||
- Remote block writing and compression/encryption
|
||||
- Inode data serialization
|
||||
- Recursive directory scanning, difference calculation, new entry sorting
|
Loading…
Reference in New Issue