15个版本
0.1.6 | 2020年6月29日 |
---|---|
0.1.5 | 2020年6月2日 |
0.1.4 | 2020年5月30日 |
0.1.1 | 2020年4月28日 |
0.0.4 | 2020年2月21日 |
#29 在 #deduplication
在 2 个crate中使用(通过 asuran)
92KB
1.5K SLoC
Asuran
我们相信备份应该是简单、快速且永久的。
Asuran是一种新的存档格式和Rust实现。它旨在成为2020年代的存档器,从头开始编写,以利用前沿研究的见解,并从现代硬件中提取每一分性能,同时仍提供用户在存档器中依赖的功能,如加密、压缩和全局去重。
Asuran也极快,查看一些基准测试!
关于稳定性的说明
Asuran和asuran-cli是预alpha软件,在版本1.0.0之前,发布仅用于评估和测试。在1.0.0之前,API可能在补丁版本之间进行破坏性更改,在0.2.0之前的补丁版本之间可能存在破坏性格式更改(在0.2.0之后,破坏性格式更改可能仅在次要版本增加之间发生)。在更新之前,请始终阅读变更日志。
使命宣言
Asuran应该适合长期存档数据,应该与操作系统和硬件无关,安全、灵活、快速且易于嵌入。
它应该努力使备份过程快速且简单,并允许用户尽可能多地保留他们的文件历史记录在可用空间中。毕竟,一个因为太耗时而从未运行或因为占用太多空间而被删除的备份有什么用呢?
Asuran应该适用于不受信任的存储,并且不应泄露任何可能透露仓库内容的任何数据。
它是如何工作的?
Asuran通过将您的文件分成多个块来工作。它使用可选的(但默认开启)内容定义块分割算法来分割文件,目前默认为FastCDC,以便即使文件的一部分发生变化,其他块也很可能不会发生变化...
然后,这些块可以选择性地(但默认开启)在提交到可寻址存储后端进行压缩和加密。Asuran尽力将每个遇到的块只在存储库中存储一次,在大多数情况下,它可以达到100%的效率。
整个存档结构通过默克尔树过程进行验证,因此您可以确信,如果您的恢复成功,您的数据完好无损,没有被篡改。
您可以在单个存储库中存储任意多的存档,并且可以使用任意多的计算机写入同一个存储库。
整个数据管道建立在现代的异步堆栈之上,允许的性能是以前这个领域的竞争者只能梦想的。
安装和使用
您可以从我们的发布页面下载副本,或者自行从源代码构建。
请注意,我们发布页面上的构建需要核心品牌的Sandy Bridge或更新的/等效处理器,并需要支持AVX指令。如果您需要在较低端CPU或没有这些指令的旧机器上运行,您需要自行从源代码构建。
在大多数情况下,您将与命令行asuran客户端(asuran-cli)交互。您可以从本存储库中的asuran-cli目录自行从源代码构建它,或者使用以下命令安装:
cargo install asuran-cli
可选地,使用以下命令构建以获得更好的性能:env RUSTFLAGS="-C target-cpu=native -C target-feature=+aes" cargo install asuran-cli
有关用法,请参阅asuran-cli --help
。
asuran-cli
本质上是一个薄包装器,它将asuran
库的API粘合在一起。该asuran
包提供用于与存储库交互的高级接口,它始终是一个独立的组件,并享有与asuran-cli
本身相同级别的支持。
文档
请参阅我们的RustDocs以获取API文档,以及内部文档,以讨论格式。
支持
开发软件是项艰巨的工作,而不断改进asuran需要我大量的时间。
我目前正在努力建立一个patreon/open collective/sponus或类似的设置,但在此期间,如果您想支持我,请随时发送您最喜欢的加密货币。
- BTC: bc1q99tz5sv4mn9l3mhx3qc3lh64skgx85uxssg3tc
- ETH: 0xd9CdBD945fE347FDAC4DFA71E13cB3EED7595882
- XRP: r46gGdwgMVMaWreVbRzSoxm9QrT3uSoEWC
- USDT: 0xd9CdBD945fE347FDAC4DFA71E13cB3EED7595882
- BCH: qrrsykuptuu7urt38k4u29j3kvnfa9n3msjssg6cje
如果您想以这里未列出的货币捐赠,请提交一个问题,我将添加地址。
基本概述和术语
asuran格式分为三个逻辑层
-
后端/存储库
后端和存储库被交替使用。这是实际存储数据的地方。它是一个基于内容的存储后端,其中blob(称为
Chunk
)通过其明文的HMAC进行寻址。 -
存档
这是一个数据结构,存储在存储库中,描述了如何将块拼接在一起形成对象/文件。如果您将存储库比作时光机备份,那么存档就是您的快照。
-
清单
清单是一个特殊的数据结构,存储在存储库的其他部分之外,但与其相邻。它维护对所有存档结构的指针,并提供存储库中所有数据的验证根。
比较
与Borg的比较
-
Asuran在多线程的使用上更好。
Asuran 拥有更适合良好利用 CPU 内核的管道,由于存档速度通常受压缩限制,而不是在现代具有 SSD(或仅快速旋转的 Rust 存储)的 CPU 上的读写或加密/hmac,这导致了显著的速度提升。
-
可切换的存储后端
Asuran 提供了一个描述新存储后端并在运行时切换它们的框架,因此您不必仅限于在本地文件系统或运行 SSH 的 Linux 机器上存储文件。
-
可选的切片器
Asuran 允许您选择内容定义的块划分算法,包括使用 FastCDC 或静态块大小切片器,让您决定性能/去重率之间的权衡。
-
仓库格式隐藏块长度
由于我们使用隐藏块长度的仓库格式,Asuran 不像 borg 那样容易受到基于块长度指纹攻击,因为 borg 使用基于块长度的指纹。
与 Restic 的比较
-
Asuran 要快得多
Asuran 通常比 borg 快,borg 通常比 Restic 快,所以这个就顺理成章了。
-
可选/可切换加密
Asuran 支持多个大致等效安全的加密套件,允许您满足组织要求使用特定的加密算法,或者选择在您的硬件上运行最快的加密算法。如果您实际上正在备份到可信存储,您还可以完全禁用加密。
-
支持压缩
Asuran 允许您在仓库中在无压缩、ZStd、LZMA 或 LZ4 压缩之间进行选择,让您在时间/空间权衡中进行选择。
与 Rdedup 的比较
-
内置目录遍历
Asuran 会遍历目录并自动存储其结构。不需要进行额外步骤,也不需要事先创建 tarball 来降低去重。
-
支持多个后端
请参阅 borg 部分的上述注释
对所有改进
-
适合嵌入的高级 API
Asuran 提供了一个高级 API,该 API 由
asuran-cli
消费,这使得将 Asuran 归档支持嵌入到其他应用程序变得容易。 -
支持多个输入格式
Asuran 对其备份的文件来源不关心。它不一定要来自文件系统,Asuran 可以从 tarball 中导入单个文件,或直接从数据库中转储表。
许可
Asuran 在 BSD 2 条款 + 专利许可证的条款下分发。
通过参与此项目,您同意在 BSD 2 条款 + 专利许可证的条款下许可您的贡献。
贡献
请参阅贡献者指南以获取入门指南以及有关我们的程序和流程的简介。
如果您有任何问题,请随时加入聊天并提问!我们欢迎任何技能水平的人。
我现在每周在个人网站上写一篇关于开发状态的博客文章 我的个人网站。这可能有助于新贡献者了解目前正在做什么。
如果您在 GitHub 上,请转到我们的 GitLab。GitHub 存储库严格是镜像。
聊天 & 支持
我们主要的聊天是在 Matrix。
特别感谢
此项目和其持续发展是由我们的名人堂成员使可能的。
依赖项
~4–7MB
~125K SLoC