13 stable releases

Uses old Rust 2015

2.0.0 Dec 19, 2018
1.1.2 May 21, 2018
1.1.0 Apr 29, 2018
1.0.4 Mar 31, 2018
0.9.3 Mar 19, 2018

#635 in Compression

31 downloads per month

MIT license

535KB
12K SLoC

blockyarchive

Build Status Build status codecov Coverage Status Crates dependency status

Documentation

Notes to existing rust-SeqBox users

rsbx 2.0.0 is the last version to be updated for the crate rsbx, all future versions will be published under the crate blkar.


Blockyarchive/blkar (formerly rust-SeqBox) is a comprehensive utility for creating, rescuing, and general handling of SeqBox archives, with optional forward error correction.

SeqBox is a single-file archive format designed by Marco Pontello that facilitates sector level data recovery for when file system metadata is corrupted/missing, while the archive itself still exists as a normal file on file system.

Please visit the official SeqBox repo for the original implementation and technical details on this.

Comparison to the original SeqBox implementation/design

The original SeqBox implementation and format does not support repairing of data, only sector level recoverability. Blkar is also more robust compared to the original SeqBox implementation, as it does not assume the SBX container to be well formed, and makes as few assumptions about the SBX container as possible, if at all.

Blockyarchive allows repairs to be made by adding forward error correction (Reed-Solomon erasure code) to extended versions of SeqBox format, and also allows arranging the blocks in a burst error resistant pattern.

blkar is overall based around osbx, but much more optimized.

Features overall

  • Data recovery that does not depend on file system metadata (sector level recovery)
    • This allows data recovery even when data is fragmented and out of order
  • Supports error correction (via Reed-Solomon erasure code)
  • Supports burst sector error resistance
  • JSON mode
    • Output information in JSON format instead of human readable text

Goals

As blkar is to be used largely as a backup utility, security/robustness of the code will be prioritised over apparent performance.

Getting started

Installation

blkar is available via GitHub releases or via cargo

cargo install blkar

Usage guides & screencasts & other resources

The wiki contains comprehensive guides and resources.

Changelog

Changelog

Specifications

SBX format

blkar specs

Contributions

Contributions are welcome. Note that by submitting contributions, you agree to license your work under the same license used by this project (MIT).

Acknowledgement

I would like to thank Marco (the official SeqBox author) for discussing and clarifying aspects of his project, and also providing of test data during development of osbx. I would also like to thank him for his feedback on the numbering of the error correction enabled SBX versions (versions 17, 18, 19).

I would like to thank Ming for his feedback on the documentation, UX design, and several other general aspects of the osbx project, of which most of the designs are carried over to rsbx, and also his further feedback on this project as well.

The design of the readable rate in progress report text is copied from Arch Linux pacman's progress bar design.

The design of block set interleaving arrangement in RS enabled versions is heavily inspired by Thanassis Tsiodras's design of RockFAT. The interleaving provides resistance against burst sector errors.

License

Libcrc code

The crcccitt code is translated from the C implementation in libcrc and are under the same MIT License as used by libcrc and as stated in libcrc source code, the license text of the crcccitt.c is copied over to crcccitt/build.rs, crcccitt/src/lib.rs, build.rs and src/crc_ccitt.rs as well

The C source code of crcccitt copied directly from libcrc are under the MIT License as used by libcrc, the files are in libcrc_crcccitt

Official SeqBox code

The files in tests folder copied from official SeqBox are under its license, which is MIT as of time of writing

  • tests/SeqBox/*

All remaining files are distributed under the MIT license as stated in the LICENSE file

Dependencies

~7–15MB
~178K SLoC