18 个稳定版本 (3 个主要)

使用旧的 Rust 2015

3.4.0-alpha02017年3月23日
3.3.0 2017年3月23日
3.2.2 2017年1月7日
3.0.0 2016年12月17日
0.1.0 2016年9月13日

#719 in 文件系统

Download history 9/week @ 2024-03-30

56 每月下载量

Apache-2.0

2MB
14K SLoC

包含 (ELF exe/lib, 5.5MB) etc/legacy-wrappers/rzbackup

RZBackup

http://rzbackup.com

James Pharaoh [email protected]

这是 ZBackup 的 Rust 部分克隆,并带有一些独特的功能。

本项目是自由软件,可在 [Apache 2.0 许可证] (https://www.apache.org/licenses/LICENSE2.0) 下获得。

Ubuntu 的二进制文件可供下载,[在此处] (https://dist.wellbehavedsoftware.com/rzbackup/)。

在线文档由 docs.rs (https://docs.rs/rzbackup/) 自动生成。

功能列表

  • Rust 库,用于访问 ZBackup 仓库
  • 支持加密和非加密格式
  • 多线程恢复和可配置的多层块缓存
  • 客户端/服务器工具,用于高效恢复多个备份,具有共享块缓存
  • RandomAccess 实现 Read 和 Seek,为 Rust 应用程序提供高效的随机访问
  • 平衡工具,用于在索引和包文件中重新分配数据,通常用于获得更小数量的均匀大小的文件
  • 彻底的垃圾收集工具,用于清理不再使用的索引和块
  • 检查工具,以各种方式验证仓库的完整性,并修复简单的问题
  • 命令行解密工具,主要用于调试

缺失的功能

  • 没有创建备份的功能,必须使用原始 ZBackup 工具执行

库使用

在 cargo.toml 中

[dependencies]
output = "0.5"
rzbackup = "3.3"

基本示例(来自 examples/restore.rs

extern crate output;
extern crate rzbackup;

use std::env;
use std::ffi::OsString;
use std::io;

use rzbackup::Repository;

fn main () {

	let output =
		output::open ();

	let arguments: Vec <OsString> =
		env::args_os ().collect ();

	let repository =
		Repository::open (
			& output,
			Repository::default_config (),
			& arguments [1],
			if arguments [2] != "" {
				Some (& arguments [2])
			} else { None },
		).unwrap ();

	let stdout =
		io::stdout ();

	let mut stdout_lock =
		stdout.lock ();

	repository.restore (
		& output,
		arguments [3],
		& mut stdout_lock,
	).unwrap ();

}

命令使用

恢复

恢复命令能够执行一次性恢复。它基本上等同于 ZBackup 的 restore 命令。恢复的内容被管道传输到 stdout。

rzbackup restore \
	--repository REPOSITORY \
	[--password-file PASSWORD-FILE] \
	--backup-name BACKUP-NAME

服务器

服务器进程监听客户端连接,并通过套接字传输备份。它具有大缓存,因此比运行单独的恢复进程更高效,这些恢复进程用于备份大量共享去重内容的数据。

rzbackup server \
	--listen-address HOST:PORT \
	--repository REPOSITORY \
	[--password-file PASSWORD-FILE] \
	... (lots more options, try --help)

客户端

客户端连接到服务器并将备份流式传输到标准输出。它还可以通知服务器重新加载其索引,如果创建了新的备份,则这将是必要的。

rzbackup client reindex \
	--server-address HOST:PORT
rzbackup client restore \
	--server-address HOST:PORT \
	--backup-name BACKUP-NAME

转换

转换工具对存储库进行低级更改。它能够平衡索引和包文件,更改它们包含的条目数量。它可以执行垃圾收集,删除不再由任何备份引用的索引条目和块数据。它能够执行各种一致性检查。

平衡包

rzbackup convert balance-bundles \
    --repository REPOSITORY \
    --password-file PASSWORD-FILE \
    [--chunks-per-bundle CHUNKS-PER-BUNDLE] \
    [--fill-factor FILL-FACTOR]

balance-bundles工具平衡包文件中包含的块的数量。这包括按顺序读取所有索引文件,以确定哪些包包含多于或少于所需数量的块,然后读取这些包,并将它们写入到新的包中,每个包包含所需数量的块。

目前,这将为每个包写入一个新索引文件,因此您可能希望运行balance-indexes

每个包的块数可以在命令行上进行配置,目前默认为256,这比zbackup自己的32大得多。填充因子默认为25,这是每个包块数的百分比,这将确定包应保留为原始状态的最低总块百分比。

平衡索引

rzbackup convert balance-indexes \
    --repository REPOSITORY \
    --password-file PASSWORD-FILE \
    [--bundles-per-index BUNDLES-PER-INDEX]

balance-indexes工具平衡单个索引文件中索引的包的数量。这包括读取所有索引以确定哪些包含多于或少于所需数量的包,然后写入关于这些包的信息,到新的索引文件中,每个文件包含所需数量的包。

每个索引的包数可以在命令行上进行配置,目前默认为16384。ZBackup默认在创建新的备份时写入单个索引文件(除非没有写入包),因此索引文件大小不一,在常用的存储库中通常有许多小的索引和少数几个大的索引。

由于在一般情况下,在处理存储库之前会加载每个索引文件,因此拥有更少的文件是有意义的,这样可以减少打开大量文件的开销。这也使得同步(例如到远程位置)更加高效。

检查备份

rzbackup convert check-backups \
    --repository REPOSITORY \
    --password-file PASSWORD-FILE \
    [--move-broken] \
    [--backup-name-hash-prefix] PREFIX

check-backups命令通过验证所有必需的块都存在于索引中,来验证所有备份都可以恢复。它可以选择将无法恢复的任何备份从backups移动到backups-broken,并且可以通过指定一个前缀来对备份子集进行操作,该前缀将与备份名称的SHA1校验和匹配,例如/dir/filename用于位于/backups/dir/filename的备份。

在运行此命令之前运行rebuild-indexes是个好主意,这样索引的状态就可以准确反映可用的块。

检查包

rzbackup convert check-bundles \
    --repository REPOSITORY \
    --password-file PASSWORD-FILE \
    [--bundle-name-prefix] PREFIX

check-bundles工具只是简单地读取每个包的整个内容,对其包含的数据应用一致性检查。这将验证文件开始和结束处的包信息之后的adler32校验和,并检查每个块的数据是否与其块ID的前16个字节组成的截断SHA1校验和匹配。它还隐式地验证压缩和加密是否完整,因为这些是读取包所必需的。

由于这个过程可能需要非常长的时间,可以指定一个包名前缀,并且只检查以该字符串开头的包。这可以用来例如每晚检查一组包。

这有助于检测包文件的损坏,如果有的话,可以从备份中恢复。如果没有备份可用,则可以删除这些包,并使用rebuild-indexes从索引中删除这些包,以防止未来备份创建时引用这些缺失的块。

在运行rebuild-indexes后运行check-backups可以识别已损坏的备份。

检查索引

rzbackup convert check-indexes \
    --repository REPOSITORY \
    --password-file PASSWORD-FILE \
    [--repair]

check-indexes工具读取每个备份文件,构建它们所引用的所有块的索引,然后读取索引文件,报告任何缺失或重复的块。如果指定了--repair选项,它将重写索引文件以删除这些块。

垃圾收集索引

rzbackup convert gc-indexes \
    --repository REPOSITORY \
    --password-file PASSWORD-FILE

gc-indexes工具对索引文件执行垃圾收集。这包括识别所有由备份引用的块,然后重写索引文件以删除不再需要的任何块。

请注意,这不会对包做出任何更改,因此您可能需要运行gc-bundles来删除不再需要的块。

垃圾收集包

rzbackup convert gc-bundles \
    --repository REPOSITORY \
    --password-file PASSWORD-FILE

gc-bundles工具对包执行垃圾收集。这包括识别索引文件中引用的所有块,然后重写包以删除不再需要的任何块。

这还将删除任何重复的块。这些块将不会从索引中删除,这可能会导致引用重复块的恢复操作出现问题,但可以使用rebuild-indexes工具来解决这个问题。

重建索引

rzbackup convert rebuild-indexes \
    --repository REPOSITORY \
    --password-file PASSWORD-FILE

rebuild-indexes工具扫描所有包文件,只读取它们标题中的块信息,然后根据其中包含的信息构建一组全新的索引文件。这是一种确保索引文件正确的方法,并且可以解决由各种类型的损坏引起的大量问题。

这对于确保在发生损坏时恢复操作可以正确进行非常重要,并且对于某些其他工具正确工作可能也要求,因为它们主要依赖于索引文件。

解密

这主要用于调试。它允许您显示ZBackup存储库中任何备份、索引或包文件的解密内容。

rzbackup decrypt \
	--repository REPOSITORY \
	--password-file PASSWORD-FILE \
	--encrypted file ENCRYPTED-FILE

依赖项

~9.5MB
~166K SLoC