1 个不稳定版本
使用旧的 Rust 2015
0.1.0 | 2016年2月25日 |
---|
#141 in #backup
70KB
1.5K SLoC
保留
保留是一个用 Rust 编写的加密备份系统。所有备份数据都经过加密,因此可以在不受信任的设备/服务上存储备份,而不暴露任何您的数据。备份简单,操作方式与创建类似 Zip 或 Tar 的归档非常相似。去重使得空间效率更高。
状态
我正在积极开发这个项目,所以它不稳定,也不适合通用使用。当前的代码混乱,缺少许多重要功能。如果您感兴趣,请继续关注!
用法
-
生成密钥文件
preserve keygen --keyfile keyfile
请确保将此密钥文件存储在安全的地方。任何可以访问此密钥文件的人都可以读取您的备份,或破坏它们。
-
创建备份
preserve create --keyfile keyfile --backend file --backend-path /path/to/my/backups/ my-backup-`date +%Y-%m-%d_%H-%M-%S` /home/me/
这将创建
/home/me/
内所有内容的备份,备份将命名为类似my-backup-2016-02-25_11-56-51
的名称,备份将存储在文件系统中的/path/to/my/backups
。为了利用去重,您应该将所有备份存储在同一个地方。如果您备份多个机器,可以使用外部驱动器或 NAS。如果您为所有机器使用相同的密钥文件,则保留将在所有机器之间进行去重。Amazon Cloud Drive 也支持作为后端使用
--backend acd
。ACD 的设置说明即将推出。 -
列出备份
preserve list --keyfile keyfile --backend file --backend-path /path/to/my/backups/
-
恢复备份
preserve restore --keyfile keyfile --backend file --backend-path /path/to/my/backups/ name-of-backup-to-restore /path/to/restore/it/to/
这将恢复名为
name-of-backup-to-restore
的备份,将其内容提取到/path/to/restore/it/to/
构建
cargo build
测试
cargo test
详细信息
通过了解 Preserve 创建备份的过程,可以更容易地理解它。当你告诉 Preserve 创建备份时,它会遍历指定的路径,寻找所有文件和文件夹。它收集所有这些文件和文件夹的信息(名称、权限、mtime、大小),并以树形数据结构存储。然后,它遍历所有文件并读取其内容。每次读取文件内容1MB。对于每个1MB的数据块,它使用收敛加密对数据块进行加密。收敛加密是确定的,因此对于相同的1MB数据块,它将输出相同的1MB加密块(加上id和mac)。每个块还有一个与之关联的32字节的唯一标识符。因此,当 Preserve 读取完一个文件的所有数据块后,它将内容存储在树形数据结构中,作为这些唯一标识符的列表,并在后端存储实际块。当它遇到相同的块两次时,它必须存储两次元数据,但实际上加密数据只存储一次。这就是 Preserve 实现其去重的方式。如果你创建了一个备份,然后创建了另一个与完全相同的数据的备份,Preserve 不必在后端存储任何新的块。它只需要存储一套新的元数据。
当遍历完所有文件后,树形数据结构被序列化为JSON,使用XZ进行压缩,使用公钥加密,然后存储在后端。
使用各种缓存来加快此过程。如果一个文件自 Preserve 上次备份以来没有更改,那么它会从缓存中拉取其元数据和内容标识符列表。因此,实际上不需要重新读取文件。
依赖关系
~33MB
~643K SLoC