sha256sum/md5sum 对大文件给出不同的结果(Ext4/全盘加密)

sha256sum/md5sum 对大文件给出不同的结果(Ext4/全盘加密)

昨天我在我的计算机(4GB RAM)上重新安装了 Ubuntu 13.04 64 位,并且第一次决定使用全盘加密(所有默认设置)。

今天运行备份时我的计算机崩溃了两次。

现在我继续处理我的备份,当检查我的备份的哈希值时,我发现 sha256sum 对大文件显示了错误的结果。

我浏览了 /var/log/syslog 并且没有发现任何错误,并且磁盘实用程序也显示磁盘正常。

我试图重现该错误,对于小文件,我没有遇到此问题,但对于大文件,我会遇到:

$ dd if=/dev/zero of=zeroes bs=1M count=4000 && sha256sum zeroes && sha256sum zeroes
4000+0 records in
4000+0 records out
4194304000 bytes (4,2 GB) copied, 54,0345 s, 77,6 MB/s
ad6637bd22568145039a053da5cbf4c31d3eda5ef95c29646fa66b0cacd15a8c  zeroes
8ea0d0c9ad97de182335e98045a1f197456ceee782fa6e801fd3e68bea4d35d3  zeroes

$ md5sum zeroes && md5sum zeroes 
8097877e1c991721dae7ffe228ae2f5a  zeroes
fbd1e7fcd3861446310c87abf72066bf  zeroes

如果我不能依赖任何数据,这真的很糟糕,所以如果有人能帮助我找出问题所在,我将不胜感激。

答案1

您在这里看到的是硬件问题。消费级硬件中的内存缺乏完整性检查 (ECC),因此内存中的错误在系统级别上几乎检测不到。正如您所指出的,您也看到了崩溃,如果内存有故障,这是可以预料到的。

通过在您的系统上运行内存测试,您可以验证这一点。使用 Ubuntu 12.04 Live CD 进行 Memtest

您现在还必须验证所有备份,因为 I/O 会经过内存,用这个有故障的 RAM 制作的备份也可能损坏。请注意,它可能损坏轻微,很难发现。

答案2

发现得很好 :D

在我的环境中复制失败。(当然)

我有 4G 内存,但我的 coreutils[1] 是 8.13 版本(你的是 8.20),而且我的磁盘未加密。

我认为这个问题在 13.04 之前不存在,因为这样的问题不会被忽视。所以我查看了更新日志: https://web.archive.org/web/20140618230346/http://changelogs.ubuntu.com/changelogs/pool/main/c/coreutils/coreutils_8.20-3ubuntu5/changelog

然后我看到了一个可能与此问题相关的补丁:

coreutils (8.13-3.2ubuntu6) 急促;紧急程度=低

  • 反向移植上游补丁,以避免在处理某些文件系统上非常零散和稀疏的输入文件时,cp/mv/install 中的 free-memory-read 数据损坏 (LP:#1073514)。 * 依赖于 valgrind 进行构建,以便能够运行上述修复的测试。

  • 修复 99_sort_-u_data_loss.dpatch 以便实际运行添加的测试。

您能用 coreutils 8.13 版本进行同样的测试吗?(如果我有时间,我会自己测试)

以防万一,您到底加密了您的计算机吗?

如果你想进一步调查这个问题,那么更新日志非常有用。也可能是另一个补丁破坏了某些东西。


[1]: md5sum 和 sha256sum 来自 GNU coreutils 包

相关内容