sha256sum 怎么可能对同一个文件给出不同的结果?

问题描述 投票:0回答:1

在 Ubuntu 24.04 中,

sha256sum
对于同一文件多次给出了不同的结果。以下是我的 shell 日志的摘录。

$ for i in *.7z; do sha256sum $i; done
...
a5a887bd0c9e9ed03a1a7851c2b6216ce77284c5d8fd326c008426475d39c3b8  somefile=.7z
...

$ pv somefile=.7z  | sha256sum
...
f62423e10e3a629fe07a5d4d3212942af55541cc1d7b4498a1ca2d97aafdb9c3  -

$ sha256sum somefile=.7z
f62423e10e3a629fe07a5d4d3212942af55541cc1d7b4498a1ca2d97aafdb9c3  somefile=.7z

$ for i in *.7z; do sha256sum $i; done
...
f62423e10e3a629fe07a5d4d3212942af55541cc1d7b4498a1ca2d97aafdb9c3  somefile=.7z
...

somefile=.7z
在第一个循环中获得了一个哈希值,但随后又获得了另一个哈希值。该文件自很久以前创建以来从未被修改过。上面的 shell 日志是在几分钟内获取的。文件大小约10G。

我无法再重现该问题,因为哈希似乎已经稳定了。但在摘录上面的日志之前,

sha256sum
给了我另外两个不同的哈希值,总共四个,这让我很难再相信
sha256sum
的结果了。

所以,我的问题是,在我可能忘记提及的任何情况下,如何会出现这种差异?

一些可能重要的因素:

  • sha256sum
    的第一次调用处于循环状态
  • 文件相当大
  • 文件名包含符号
  • =
    
    
  • 文件已复制到仍挂载的外部硬盘驱动器上
但据我所知,他们都无法证明这种差异是合理的。

ubuntu sha
1个回答
0
投票
可能是硬件问题。事实上很可能是这样。这称为 bitrot (

https://en.wikipedia.org/wiki/Data_degradation)。

单个翻转位可能会导致这种情况,如果您使用的存储介质有一个坏点,那么您在那里写入的任何内容都会被损坏,直到该点达到其熵平衡状态。某些文件系统(如 ZFS 或 BtrFS)可以检测到这一点,其他文件系统甚至不添加奇偶校验。

我有一个特别坏的 HDD,它的位旋转速度非常快,以至于当我循环读取相同的 4k 块(任何块)并在屏幕上显示黑白位图时,我几乎可以看到位每分钟翻转。

© www.soinside.com 2019 - 2024. All rights reserved.