#archive #reed-solomon #backup #ec-seq-box #data-recovery

bin+lib blkar

多线程存档工具,提供位旋转保护和扇区级别的可恢复性

17个稳定版本 (5个主要版本)

7.2.7 2019年11月6日
7.2.5 2019年7月29日
6.0.1 2019年4月22日
5.0.0 2019年4月11日
2.2.0 2018年12月25日

#15 in #reed-solomon

Download history 5/week @ 2024-03-13 10/week @ 2024-03-27 12/week @ 2024-04-03

每月下载量 53次

MIT许可证

755KB
19K SLoC

blockyarchive

Build Status codecov Crates dependency status Gitter chat

文档

Blockyarchive/blkar(发音为“bloc-kar”)是一个用Rust编写的多线程存档工具,提供位旋转保护和更容易从失败的存储设备中恢复存档数据的功能。

演示

asciicast

它是如何工作的?

blkar将您的数据编码为SeqBox和EC-SeqBox存档。这两种格式都便于数据恢复,但只有EC-SeqBox提供数据修复功能。

什么是SeqBox和EC-SeqBox?

SeqBox是由Marco Pontello设计的单文件存档格式,便于在文件系统元数据损坏/缺失时进行扇区级别数据恢复,而存档本身仍作为文件系统上的正常文件存在。请访问官方SeqBox仓库以获取原始实现和此处的技术细节。

错误纠正SeqBox(简称EC-SeqBox)是由Darren Ldl为此项目开发的SeqBox的扩展版本,通过Reed-Solomon擦除码引入前向错误纠正。

Blockyarchive/blkar在重命名之前被称为rust-SeqBox/rsbx。

总体特性

  • 不依赖于文件系统元数据的数据恢复(扇区级别恢复)
    • 这允许在数据碎片化和顺序错乱的情况下进行数据恢复
  • 支持EC-SeqBox的错误纠正(通过Reed-Solomon擦除码)
  • 支持EC-SeqBox的突发(扇区)错误抵抗
    • 这是通过交错块排列方案实现的。这主要是为了解决简单存档设计中数据修复的限制。
    • 更复杂的存档设计,如PAR2,可以在没有任何额外排列方案的情况下修复突发错误,但它们也比EC-SeqBox复杂得多
  • 多线程
    • 许多日常工作中涉及的操作都编写为利用多核CPU提供高性能
  • JSON模式
    • 以JSON格式输出信息,而不是可读文本,便于与脚本集成

限制

  • 只支持单个文件作为SeqBox和EC-SeqBox编码,因为它们都是单文件归档格式
    • 然而,当您有多个文件时,blkar仍然可以使用,因为blkar在编码时支持从stdin接收输入,在解码时也支持输出到stdout
    • 这意味着如果您有一个支持使用管道即时捆绑和解捆绑的归档程序,例如tar,您可以将归档程序和blkar的使用合并为一套编码和解码步骤

入门指南

安装

blkar可通过AURGitHub发行版cargo获取

cargo install blkar

使用指南 & 屏幕录像 & 其他资源

维基wiki包含了全面的指南和资源。

目标和状态

由于blkar主要用作备份工具,因此代码的安全性/健壮性将优先于性能。

该项目已达到预期的功能完整性,因此不会发生针对新功能的活动开发。然而,该项目仍然受到积极维护,即我会回应PRs、问题和电子邮件,会考虑功能请求,快速响应错误报告等。

换句话说,这是一个在原始范围方面的完成项目,但它并未被遗弃。

与原始SeqBox实现/设计的比较

变更日志

SBX格式(EC-SeqBox也在本文件中指定)

blkar规范

贡献

欢迎贡献。请注意,通过提交贡献,您同意根据本项目的LICENSE文件中所述的相同许可证许可您的工作。

致谢

我想感谢Marco(官方SeqBox作者)讨论并澄清了他的项目的某些方面,并在osbx的开发过程中提供了测试数据。我还想感谢他对ECSBX版本(版本17、18、19)错误纠正编号的反馈。

我想感谢Ming对文档、UX设计以及osbx项目的其他几个方面的反馈,其中大部分设计已经应用到blkar中,以及他对这个项目的进一步反馈。

进度报告文本中可读速率的设计是从Arch Linux pacman的进度条设计复制的。

RS启用版本中块集交错排列的设计受到了Thanassis Tsiodras的RockFAT设计的强烈启发。交错提供了对突发扇区错误的抵抗。

捐赠

注意:捐赠不会促进新功能的开发。如上所述,该项目旨在稳定、经过良好测试和良好维护,但我通常不会积极添加新功能到其中。

如果blockyarchive对您有帮助,并且您想为开发工作向我捐赠,您可以通过这里进行捐赠。

许可证

Libcrc代码

crcccitt代码是从libcrc中的C实现翻译而来的,并使用与libcrc相同的MIT许可证,如libcrc源代码中所述。crcccitt.c的许可证文本已复制到crc-ccitt/build.rscrc-ccitt/src/lib.rsbuild.rssrc/crc_ccitt.rs

官方SeqBox代码

以下文件是从官方SeqBox复制的,位于测试文件夹中,并受其许可证的约束,截至撰写时为MIT许可证

  • tests/SeqBox/*

所有剩余文件均根据LICENSE文件所述,在MIT许可下分发。

依赖项

~7.5MB
~137K SLoC