diff options
| author | Stefan Kreutz <mail@skreutz.com> | 2026-06-18 10:44:28 +0200 |
|---|---|---|
| committer | Stefan Kreutz <mail@skreutz.com> | 2026-06-18 10:44:28 +0200 |
| commit | 25eddbeec5bb093db71f4725cd69bbd1de617260 (patch) | |
| tree | d1fb62f1ed8456adfd0bfb48c837da3de635f884 /README.md | |
| parent | b96a862da5c1984692f5ffa5fe27ac1077a9b968 (diff) | |
| download | brck-25eddbeec5bb093db71f4725cd69bbd1de617260.tar.gz | |
Reformat readme
Diffstat (limited to 'README.md')
| -rw-r--r-- | README.md | 97 |
1 files changed, 32 insertions, 65 deletions
@@ -1,17 +1,16 @@ # Brck -- a simple bit rot checker -Brck is a simple bit rot checker for legacy file systems. It records and -compares the modification times and cryptographic hash sums of regular files. -When a file's hash changed but it's modification time did not, then Brck -reports the file as corrupted so you have a chance to restore the file from -backup. You do have backups, right? 😉 +Brck is a simple bit rot checker for legacy file systems. +It records and compares the modification times and cryptographic hash sums of regular files. +When a file's hash changed but it's modification time did not, then Brck reports the file as corrupted so you have a chance to restore the file from backup. +You do have backups, right? 😉 -Brck's original source code is hosted [here][brck-repo]. +Brck's original source code is hosted on [git.skreutz.com](https://git.skreutz.com/brck.git/). ## Installation -Brck is available on [crates.io][brck-cratesio]. You can install it using -Rust's package manager [Cargo][cargo]. +Brck is available on [crates.io](https://crates.io/crates/brck). +You can install it using Rust's package manager [Cargo](https://doc.rust-lang.org/cargo/). $ cargo install brck @@ -21,13 +20,11 @@ Alternatively you can run (or install) the experimental Nix flake. ## Usage -Without any options, Brck will record all regular files in current working -directory recursively and write those records to a gzipped `.brck` file. +Without any options, Brck will record all regular files in current working directory recursively and write those records to a gzipped `.brck` file. $ brck -When you run the same command again, Brck will compare the recorded files -against the current file system and report any corrupted files. +When you run the same command again, Brck will compare the recorded files against the current file system and report any corrupted files. $ brck corrupted: ./test_file @@ -37,9 +34,9 @@ You can optionally deny all changes to existing files: $ brck -d changed,removed,corrupted -Brck is quiet by default. Increase the verbosity using `-v` or request a -summary using `-s`. Alternatively, enable the JSON output using `-J` and -perform your own post-processing, e.g., using [jq][]: +Brck is quiet by default. +Increase the verbosity using `-v` or request a summary using `-s`. +Alternatively, enable the JSON output using `-J` and perform your own post-processing, e.g., using [jq](https://jqlang.github.io/jq/): $ brck -vvJ | jq -sr 'group_by(.type)[] | [.[0].type, length] | @tsv' 2>/dev/null added 4 @@ -52,80 +49,50 @@ See the built-in help for all supported options: ## Features -- Parallel sequential processing: Brck processes files in parallel, yet outputs - and records files in-order +* Parallel sequential processing: Brck processes files in parallel, yet outputs and records files in-order -- One-pass: Brck reads your files only once +* One-pass: Brck reads your files only once -- Constant memory: Brck's memory footprint is independent of the number of - processed files +* Constant memory: Brck's memory footprint is independent of the number of processed files -- Relative paths: Brck records relative paths such that you can move the - containing directory around +* Relative paths: Brck records relative paths such that you can move the containing directory around -- Quiet by default: Without any options, Brck prints denied differences to - standard output, and errors to standard error; nothing else +* Quiet by default: Without any options, Brck prints denied differences to standard output, and errors to standard error; nothing else -- Human readable or machine readable, newline-delimited JSON output, at your - option +* Human readable or machine readable, newline-delimited JSON output, at your option -- Graceful shutdown on the first interrupt signal, forceful immediate shutdown - on the second +* Graceful shutdown on the first interrupt signal, forceful immediate shutdown on the second -- [Pledged][pledge] and [unveiled][unveil] on OpenBSD +* [Pledged](https://man.openbsd.org/pledge) and [unveiled](https://man.openbsd.org/unveil) on OpenBSD ## Limitations -- Brck doesn't follow symlinks. +* Brck doesn't follow symlinks. -- Brck doesn't track hardlinks. Performance will be suboptimal in the presence - of large hardlinked files because Brck hashes each copy individually. +* Brck doesn't track hardlinks. Performance will be suboptimal in the presence of large hardlinked files because Brck hashes each copy individually. -- Brck doesn't track reflinks. Modern copy-on-write file systems are out of - scope because they should check file content integrity themselves, like - OpenZFS and Btrfs do. +* Brck doesn't track reflinks. Modern copy-on-write file systems are out of scope because they should check file content integrity themselves, like OpenZFS and Btrfs do. -- Brck may leak file meta data because its `.brck` file may have different - permissions than the listed files. +* Brck may leak file meta data because its `.brck` file may have different permissions than the listed files. -- Brck doesn't respect platform-specific temporary directories such as `TMPDIR` - on UNIX. Instead, it creates its temporary files in the current working - directory, next to the `.brck` file. This way, Brck can update the files - atomically on POSIX-conform systems. +* Brck doesn't respect platform-specific temporary directories such as `TMPDIR` on UNIX. Instead, it creates its temporary files in the current working directory, next to the `.brck` file. This way, Brck can update the files atomically on POSIX-conform systems. -- Brck may fail to remove its temporary files, e.g., when the process gets - killed. +* Brck may fail to remove its temporary files, e.g., when the process gets killed. ## License -This work is dual-licensed under [MIT](LICENSE-MIT) or -[Apache License, Version 2.0](LICENSE-APACHE-2.0). +This work is dual-licensed under [MIT](LICENSE-MIT) or [Apache License, Version 2.0](LICENSE-APACHE-2.0). ## Contribution -Contributions are welcome! Please [contact][] me via email. +Contributions are welcome! Please [contact](https://www.skreutz.com/contact/) me via email. ## See also -- Definition of *bit rot* in the [Jargon File][jargon] - ([archive][jargon-archive]) +* Definition of *bit rot* in the [Jargon File](http://www.catb.org/jargon/html/B/bit-rot.html) ([archive](https://web.archive.org/web/20240312124910/http://www.catb.org/jargon/html/B/bit-rot.html)) -- A similar Python program named [Bitrot][python-bitrot] +* A similar Python program named [Bitrot](https://github.com/ambv/bitrot/) -- A similar Rust program named [Legdur][legdur] ([crates.io][legdur-cratesio]) +* A similar Rust program named [Legdur](https://git.cyplo.dev/cyplo/legdur) ([crates.io](https://crates.io/crates/legdur)) -- A blog post on [Things UNIX can do atomically][rcrowley] - -[brck-repo]: https://git.skreutz.com/brck.git/ -[brck-cratesio]: https://crates.io/crates/brck -[cargo]: https://doc.rust-lang.org/cargo/ -[jq]: https://jqlang.github.io/jq/ -[pledge]: https://man.openbsd.org/pledge -[unveil]: https://man.openbsd.org/unveil -[jargon]: http://www.catb.org/jargon/html/B/bit-rot.html -[jargon-archive]: https://web.archive.org/web/20240312124910/http://www.catb.org/jargon/html/B/bit-rot.html -[legdur]: https://git.cyplo.dev/cyplo/legdur -[legdur-cratesio]: https://crates.io/crates/legdur -[python-bitrot]: https://github.com/ambv/bitrot/ -[rcrowley]: https://web.archive.org/web/20160304224616/http://rcrowley.org/2010/01/06/things-unix-can-do-atomically -[contact]: https://www.skreutz.com/contact/ +* A blog post on [Things UNIX can do atomically](https://web.archive.org/web/20160304224616/http://rcrowley.org/2010/01/06/things-unix-can-do-atomically) |