Filesystems 为什么文件校验和会不一致地失败?

Filesystems 为什么文件校验和会不一致地失败?,filesystems,checksum,disk,Filesystems,Checksum,Disk,我创建了一个~2MiB文件 dd if=/dev/urandom of=file.bin bs=2M count=1 然后,我复制了该文件很多次,并为每个(相同的)副本生成一个校验和 然后,我使用验证脚本验证了所有这些校验和文件,以便针对每个文件运行sha512sum for file in `find . -regex ".*\.sha512"` do sha512sum --check --quiet "${file}" || ( cat "${file}" &

我创建了一个
~2MiB
文件

dd if=/dev/urandom of=file.bin bs=2M count=1
然后,我复制了该文件很多次,并为每个(相同的)副本生成一个校验和

然后,我使用验证脚本验证了所有这些校验和文件,以便针对每个文件运行
sha512sum

for file in `find . -regex ".*\.sha512"`
do
    sha512sum --check --quiet "${file}" || (
      cat "${file}" && sha512sum "${file%.sha512}"
    )
done
我刚刚创建了这些文件,当我稍后验证它们时,我看到数据中出现间歇性故障和不一致(控制台文本因可读性而被截断)

校验和文件都是相同的,因为源文件都是相同的

问题似乎是,当我去验证时,我的计算机似乎随机地为我的一些文件生成了错误的校验和。不同的文件每次都会使校验和失败,以前失败的文件将通过

will:/mnt/usb $ for file in `find ...
sha512sum: WARNING: 1 computed checksum did NOT match
91fc201a3812e93ef3d4890 ... file.3248.bin
442a1d8805ed134c9ab5252 ... ./file.3248.bin
请记住,所有这些文件都是相同的

我在SATA SSD和HDD以及USB设备、md5和sha512、xfs、btrfs、ext4和vfat上看到了相同的行为。我尝试了实时引导到另一个操作系统。不管怎样,我都看到了同样的陌生人行为。我还看到这些文件的
rsync--checksum
认为校验和是错误的,并重新复制这些文件,即使它们没有更改


什么可以解释这种行为?由于在我描述的所有场景中,它都发生在多个设备上,我怀疑这是有点糟糕。我的内核日志没有显示明显的错误。根据我的故障排除,我假设这是一个硬件问题,但如何诊断呢?是CPU、主板、RAM吗?

什么可以解释这种行为?如何诊断?

据我所知,许多问题可以解释这种行为。坏磁盘、坏PSU(电源)、坏RAM、文件系统问题

我尝试了以下方法来确定发生了什么。我用不同的方法重复了这个实验

  • 磁盘
  • 磁盘类型(SDD与HDD)
  • 外部驱动器(3.5和2.5机柜)
  • 闪存驱动器(不同端口上的USB 2和3)
  • 文件系统(ext4、vfat(fat32)、xfs、btrfs)
  • 不同PSU
  • 不同的操作系统(实时启动)
似乎没有什么能解决这个问题

最后,我通过Ubuntu live USB进行了尝试

。它发现记性不好。通过清除过程,我确定我的一支记忆棒坏了,然后测试了另一支,以确保它状态良好。我再次运行了我的实验,在我所有的文件上都看到了一致的校验和

多么微妙的错误。我只是偶然注意到这种不良行为。如果我没有乱搞文件校验和,我想我不会找到这个坏内存

这使我想定期安排一个例行程序,在其中验证和测试我的RAM。这个坏记忆棒的一个后果是,我的一些测试数据最终确实损坏了,但通常情况下,校验和验证只是暂时的失败

在一个示例数据池中,所有校验和都以
cb2848ca0e1ff27202a309408ec76…
开头,因为所有~50000个文件都是相同的

虽然有两个文件已损坏,但这不是位损坏或文件完整性损坏

看起来最有可能的是,这些文件是损坏创建的,因为
cp
在创建这些文件时遇到了坏RAM。这些文件始终返回
58fe24f0e00229e8399dc6668b9…
bd85b51065ce5ec31ad7ebf3…
的错误校验和,而其他49998文件返回相同的校验和


这是一个有趣而又令人沮丧的调试实验。

我更换了PSU,因为这可能会导致硬盘出现故障,但我看不到行为上的差异。有时我的验证过程似乎根本找不到文件
sha512sum:file.6707.bin:Input/output error
我运行了(在修复了一个,
lodctr/R
之后),英特尔测试给了我一个没有错误的通过结果。我在系统菜单中找不到BIOS诊断实用程序,但它们似乎不再承载该工具。我在一个不可靠的下载站点上找到了该工具的下载,但它没有报告任何错误。我的,但它不会运行,从我所读的内容来看,它似乎只是一个风扇速度的实用程序。向不放弃致敬,并提供详细的反馈。
will:/mnt/usb $ for file in `find ...
file.5602.bin: FAILED
sha512sum: WARNING: 1 computed checksum did NOT match
91fc201a3812e93ef3d4890 ... file.5602.bin
b176e8e3ea63a223130f3a0 ... ./file.5602.bin
will:/mnt/usb $ for file in `find ...
sha512sum: WARNING: 1 computed checksum did NOT match
91fc201a3812e93ef3d4890 ... file.3248.bin
442a1d8805ed134c9ab5252 ... ./file.3248.bin