2 个版本
0.1.1 | 2023 年 3 月 9 日 |
---|---|
0.1.0 | 2023 年 2 月 6 日 |
#11 在 #备份文件
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