昨天我在我的计算机(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 包