2 个版本

0.1.1 2023 年 3 月 9 日
0.1.0 2023 年 2 月 6 日

#11#备份文件

MIT/Apache

30KB
596

bitwrought

bitwrought 是一个文件完整性检查器,主要用于 MacOS(但应该可以在 Linux 上运行)。它将文件的散列值和最后修改时间戳存储为目标文件上的扩展属性。下次运行它时,它将根据文件内容重新计算散列值,并与保存的值进行比较。

如果散列值匹配,则数据没有更改。如果散列值不同,但文件元数据表示文件在之前保存的值之后已修改,则文件可能已被修改。如果散列值不匹配,但文件元数据表示文件在保存的值之后没有被修改,则文件可能已遭受位错或数据损坏。

"bitwrought" 这个名字是一个双关语:"位错" 是指写入磁盘的一些数据在稍后读取时出现不同的现象。这可以由许多原因引起:数据可能已经在磁盘上错误地复制了,或者物理退化可能翻转了一些位。在实践中,这可能是毁灭性的:例如,你珍贵的照片或视频库可能会遭受位错并损坏。然后你不知道地备份了这个损坏的库,覆盖了任何未损坏的备份。在未来的某个时候,你尝试打开这个库,但未能成功。文件以及任何备份都已被损坏。

防止这种情况需要两个东西:1) 一种通知你文件已被更改的方法,2) 一种从文件更改之前检索备份的方法。bitwrought 扮演第一个角色,并在你运行它时告诉你文件的状态。bitwrought 不扮演第二个角色:它不会备份文件。你担心你的位吗?运行 bitwrought!

安装

前往 发布 页面并下载 zip 文件。它还包括这个 README。然后将二进制文件放在你喜欢的任何地方。

对于 Rust 精通者

如果你有必要的 工具,你也可以使用 cargo install bitwrought

使用方法

运行 bitwrought PATH 来检查路径中的文件,或者检查位于 PATH 的所有文件。默认情况下,bitwrought 不递归检查目录,但可以使用 --recursive 选项更改此行为。使用 --delete 选项也可以删除 bitwrought 保存的 xattrs。对于每个指定的文件

  • 如果没有通过 bitwrought 保存的属性,它将计算文件哈希并保存该值,以及文件元数据中的最后修改时间戳,在文件的 xattr 上。
  • 如果文件有哈希,它将计算一个新的哈希值并与保存的哈希值进行比较。文件元数据中的最后修改时间戳与 bitwrought 的最后修改时间戳(保存在 xattr 中)进行比较,以确定文件是否已被修改或可能已受到比特衰减的影响。
Usage: bitwrought [OPTIONS] <path>...

Arguments:
  <path>...  one or more files or directories

Options:
  -r, --recursive  check all files in the directory recursively
  -d, --delete     delete hash and timestamp xattrs saved by bitwrought
  -v, --verbose    verbose output including hashes and timestamps
  -h, --help       Print help
  -V, --version    Print version

支持

Bitwrought 支持 macOS。从理论上讲,它可以支持 Linux,但由于 GitHub actions(和 ec2)中使用的 NFS 版本不支持 xattrs,所以在我找到在 Linux 上测试 bitwrought 的另一种方法之前,我不会发布它的二进制文件。如果您想在 Linux 上使用 bitwrought,请告诉我——也许我们可以想出一个解决方案。

常见问题解答

Q:如果我的文件受到比特衰减的影响,为什么你应该期望保存的扩展属性保持完好无损?

A:APFS 会对其元数据进行校验和,但不会对用户数据进行校验和,这意味着如果文件受到比特衰减的影响,扩展属性仍然可能完好无损。

Q:我应该如何使用 bitwrought?

A:我认为 bitwrought 最好的用例是用于那些你关心但很少更改的文件。例如,你可以在音乐或照片文件夹上运行 bitwrought。

Q:bitwrought 是否快速?

A:合理地讲,是的。目前它是单线程的,这限制了它的速度。但在我本地机器上,它每千兆字节需要几分钟。所有数据读取都是缓冲的,因此它可以处理大文件,而更改缓冲区大小对程序的速度影响很小。

依赖关系

~3–12MB
~147K SLoC