1 个不稳定版本

使用旧的 Rust 2015

0.1.0 2016年2月25日

#141 in #backup

MIT/Apache

70KB
1.5K SLoC

保留

保留是一个用 Rust 编写的加密备份系统。所有备份数据都经过加密,因此可以在不受信任的设备/服务上存储备份,而不暴露任何您的数据。备份简单,操作方式与创建类似 Zip 或 Tar 的归档非常相似。去重使得空间效率更高。

状态

我正在积极开发这个项目,所以它不稳定,也不适合通用使用。当前的代码混乱,缺少许多重要功能。如果您感兴趣,请继续关注!

用法

  1. 生成密钥文件

    preserve keygen --keyfile keyfile
    

    请确保将此密钥文件存储在安全的地方。任何可以访问此密钥文件的人都可以读取您的备份,或破坏它们。

  2. 创建备份

    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 的设置说明即将推出。

  3. 列出备份

    preserve list --keyfile keyfile --backend file --backend-path /path/to/my/backups/
    
  4. 恢复备份

    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