直接从文件系统获取文件的校验和而不是显式计算校验和。

5
我猜想典型的文件系统倾向于保留每个它管理的文件的某种校验和/CRC/hash,以便检测文件损坏。这个猜想正确吗?如果是的话,有办法访问吗?我主要关心Windows和NTFS,但其他平台的评论也欢迎...目前语言不重要,但我希望尽可能避免汇编语言。

3
CRC检查是磁盘驱动器的工作。 - Hans Passant
@HansPassant 在代码块级别上,当然可以。但是文件级别呢? - Branko Dimitrijevic
根据操作系统和文件系统的不同,这可能是真实的...例如对于ZFS(可用于Sun、Linux和OSX)...无论如何,如果它是由文件系统计算/存储的,通常无法通过文档化的API访问...要访问它,通常需要深入挖掘并使用一些未经记录的东西,在某些情况下需要特定的权限(管理员、root甚至是内核模块/驱动程序)...这通常比仅计算自己的校验和更麻烦...你的目标究竟是什么? - Yahia
@MarkRansom,对不起,我真的不是这方面的专家,请原谅如果我完全走错了方向...... 我认为块级和(所谓的)文件级校验和之间存在差异。文件中的所有块可能具有正确的校验和,但如果某些块错位(例如,由于电源故障导致未能正确更新块列表的数据结构),则整个文件可能会损坏。因此,虽然文件系统不一定需要在软件中扫描块的内容,但我想将块级校验和“聚合”到文件级校验和中仍然很有用。 - Branko Dimitrijevic
显示剩余6条评论
2个回答

3

1
在大多数文件系统和存储硬件中,它们会保留分配单元的校验和,而不是完整的文件。
硬件中的校验和通常总体上都无法访问,而文件系统簇的校验和对于绝大多数情况来说也没有什么用处,如果可能的话获取起来也很困难。

很遗憾没有散列 (hash) 算法,如果有的话,微软可以优化不替换相同文件(即时间戳和哈希相同)。 - PRMan
有一些文件系统可以实现这一点,尽管它们的工作方式并不完全符合您的描述。我最了解的是ZFS,但通常这种策略被称为“写时复制”。 - Thymine

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接