33 个版本 (6 个稳定版本)

24.8.0 2024年8月12日
23.11.0 2023年11月4日
23.9.0 2023年9月24日
23.5.0 2023年5月24日
0.2.0 2016年4月23日

#111 in 文件系统

Download history 7/week @ 2024-06-03 5/week @ 2024-06-10 1/week @ 2024-06-24 198/week @ 2024-07-22 115/week @ 2024-08-12

每月下载量 313
用于 conserve-fuse

GPL-2.0 许可

340KB
7K SLoC

Conserve:一个健壮的备份程序

https://github.com/sourcefrog/conserve/

GitHub build status crates.io Maturity: Beta

Conserve 的 指导原则

  • 安全:Conserve 使用 Rust 编写,这是一种快速的系统编程语言,具有关于类型、内存安全和并发的编译时保证。Conserve 使用 保守的日志结构格式

  • 健壮:如果在存储中某个文件损坏,或者由于 Conserve 的错误,或者备份中断,您仍然可以恢复所写入的内容。(Conserve 不需要大事务来完成才能使数据可访问。)

  • 小心:备份数据文件在写入后永远不会被触及或更改,除非您选择清除它们。

  • 现在需要帮助时:恢复大型备份的子集非常快,因为它不需要读取整个备份。

  • 不断进步:即使备份过程或其网络连接被反复杀死,Conserve 也能快速恢复到上次的位置并继续前进。

  • 适用于当今时代:存储格式在具有高延迟、有限功能、无限容量的最终一致云对象存储上既快又可靠。

  • 快速:Conserve 利用 Rust 的 无畏并发 充分利用多个核心和 IO 带宽。(在当前版本中,仍有空间添加更多并发性。)

  • 便携:Conserve 在 Windows、Linux(x86 和 ARM)和 OS X 上进行了测试。

快速入门指南

Conserve 存储位于由 conserve init 创建的 归档 目录内

conserve init /backup/home.cons

conserve backup 将源目录复制到归档中的新 版本。Conserve 复制文件、目录和(在 Unix 上)符号链接。如果 conserve backup 命令成功完成(复制整个源树),则备份被认为是 完成 的。

conserve backup /backup/home.cons ~ --exclude /.cache

conserve diff 显示归档和源目录之间的差异。它通常应提供与用于创建备份相同的 --exclude 选项。

conserve diff /backup/home.cons ~ --exclude /.cache

conserve versions 列出了存档中的版本,包括备份是否 完整,备份开始的时间以及完成所需的时间。每个版本都有一个以 b 开头的名称。

$ conserve versions /backup/home.cons
b0000                      complete   2016-11-19T07:30:09+11:00     71s
b0001                      incomplete 2016-11-20T06:26:46+11:00
b0002                      incomplete 2016-11-20T06:30:45+11:00
b0003                      complete   2016-11-20T06:42:13+11:00    286s
b0004                      complete   2016-12-01T07:08:48+11:00     84s
b0005                      complete   2016-12-18T02:43:59+11:00      4s

conserve ls 显示特定版本的文件。与所有从存档读取磁带的命令一样,默认情况下它操作最新的版本,您可以使用 -b 指定不同的版本。(您也可以省略备份版本的前导零。)

conserve ls -b b0 /backup/home.cons | less

conserve restore 将存档中的版本复制出来

conserve restore /backup/home.cons /tmp/trial-restore

conserve validate 检查存档的完整性

conserve validate /backup/home.cons

conserve delete 从存档中删除特定的命名备份

conserve delete /backup/home.cons -b b1

排除项

可以通过命令行传递 --exclude GLOB 选项到操作文件的命令中,包括 backuprestorelslist-source

排除模式开头的 / 将其锚定到备份树的顶部(而不是文件系统的根目录)。** 递归匹配任意数量的目录。 *.o 匹配树中的任何位置。

--exclude-from 从文件中读取排除模式,每行一个,忽略前导和尾随空白,并跳过以 # 开头的注释行。

语法来自 Rust globset 包。

带有 CACHEDIR.TAG 标记的目录会自动从备份中排除。

S3 支持

从 23.9 版本开始,Conserve 支持将备份存储在 Amazon S3 上。AWS IAM 凭据从标准来源读取:环境、配置文件,或者在 EC2 上,从实例元数据服务。

可以通过传递 cargo install --no-default-features 禁用 S3 支持。(如果未使用,则不会产生运行时影响,但会增加很多构建时依赖。)

要使用此功能,只需指定存档位置的 S3 URL。桶必须已经存在。

conserve init s3://my-bucket/
conserve backup s3://my-bucket/ ~

文件将写入 INTELLIGENT_TIERING 存储类。

(此功能应在 API 兼容的服务上工作,但尚未测试;欢迎提供使用经验。)

安装

要构建 Conserve,您需要 Rust 和一个可以由 Rust 使用的 C 编译器。

要从 crates.io 安装最新版本,请运行

cargo install conserve

要从 git 检出安装,请运行

cargo install -f --path .

在 nightly Rust 中,仅在 x86_64 架构上,您可以通过

cargo +nightly install -f --path . --features blake2-rfc/simd_asm

Arch Linux

要从可用的 AUR 包 安装,请使用 AUR 辅助工具

yay -S conserve

更多文档

Windows 上的性能

Windows Defender 和 Windows 搜索索引可能会严重减慢任何进行密集型文件 I/O 的程序,包括 Conserve。我建议您从这两个系统中排除备份目录。

项目状态

Conserve 已经达到一个合理的成熟度;格式是稳定的,基本功能已完善。我已经将其用作主要备份系统一年多。仍然有空间进行几个性能改进和功能扩展。

当前的数据格式(称为“0.6”)将在未来至少两年内可读。

请注意,Conserve 是作为一个兼职的非商业项目开发的,因此无法保证支持或可靠性。欢迎提交错误报告,但我不能保证它们将在任何特定的时间框架内得到解决。

许可证和非保证条款

版权所有 2012-2023 Martin Pool。

本程序是免费软件;您可以在自由软件基金会发布的GNU通用公共许可证的条款下重新分发和/或修改它;许可证的第2版,或者(根据您的选择)任何较新版本。

本程序的分发是希望它将是有用的,但没有任何保证;甚至没有关于其商业性或针对特定目的的适用性的暗示性保证。有关详细信息,请参阅GNU通用公共许可证。

依赖关系

~16–36MB
~531K SLoC