18 个稳定版本 (3 个主要)
使用旧的 Rust 2015
3.4.0-alpha0 | 2017年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 文件系统
56 每月下载量
2MB
14K SLoC
包含 (ELF exe/lib, 5.5MB) etc/legacy-wrappers/rzbackup
RZBackup
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