下载文件的 md5sum 不正确

下载文件的 md5sum 不正确

我有一台 Ubuntu 10.04.1 LTS Linux 服务器,它遇到了一些奇怪的问题...我刚刚尝试tgz使用 wget 通过 HTTP 下载一个 440 MB 的档案,当使用以下命令扩展它时,tar -xzf filename.tgz我收到:

gzip: stdin: invalid compressed data--crc error

我觉得这很奇怪,于是重命名了文件filename-bad.tgz并再次下载。第二次下载时我收到了同样的错误...该网站列出了该文件的 md5 校验和,所以我对两次下载尝试都进行了校验,以查看该文件是否已损坏...

这两个文件的校验和不同!

于是我将这个文件下载到本地工作站并md5sum在那里运行。这一次,MD5 校验和是正确的,文件提取正确。因此,我将文件从工作站复制到服务器并md5sum在该副本上运行。这是一个新的 md5sum,与正确的 md5sum 不同,也与其他两次尝试不同!

以下是服务器的详细信息:

  • Intel(R) Core(TM) i5 CPU(双核)
  • 8GB 内存
  • 使用 Linux md 设备和 3 个 1TB SATA 驱动器的软件 RAID5 阵列
  • 2 张以太网卡,连接到我们办公室的两个不同网络(有线和无线网络)

我怀疑 RAID 阵列可能已降级/发生故障,因此我运行它mdadm --detail,它报告状态为clean并且所有驱动器都处于active sync。为了进一步测试,我将一个 1GB 文件从 SD 卡复制到 RAID 阵列,并验证了该文件的 md5sum。

会发生什么事?

编辑:cmp -l按要求输出:

324268145 115 105
324268657 274 264
324269297 332 322
324270577 345 344
324270833 155 154

编辑2:我刚刚意识到我拥有的其中一个副本确实具有正确的 MD5 校验和,因此我又从本地机器复制了该文件两次,两次校验和都是正确的!因此这里需要进行更多测试...

编辑3:我现在无法重现此问题。这听起来像是内存有问题。今晚将运行内存测试,欢迎提出其他想法!

编辑4:好的。现在这很奇怪。当将文件复制到服务器上正在运行的特定 VMWare 虚拟机时,该问题 100% 可重现。如果我将文件复制到该虚拟机,有时如果我立即将文件复制到主机,问题就会重现。scp有时在复制到虚拟机时也会出现这种情况:

Received disconnect from 10.1.0.73: 2: Packet corrupt

在我看来,这些都是内存损坏的迹象。大家同意吗?还有其他可能的解释吗?

EDIT5:已解决。哎呀,到底是什么原因导致了这个问题?我就是不明白……:-)

2436 错误!好的!

(我在购买该系统后确实测试过它的 RAM,那是两三个月前的事了......哦,好吧。看来是时候打电话给戴尔了......)

答案1

这两个文件的大小是否相同?如果不是,则其中一个文件可能被截断了。

如果您使用 FTP 传输文件,某些客户端默认会认为是文本文件,因此必须告知其进入二进制模式,否则它们会损坏文件^M^J这曾经是文件损坏的主要原因,但现在已很少见。

TCP 数据包具有 16 位校验和。这意味着大约 65536 中的一个错误无法被检测到,因此传输错误是有可能发生的。

然而,上述任何一种可能性都不能令人满意地解释第三个 md5sum 值。

尝试比较文件(例如,使用cmp -l)并查看差异是否有规律。如果您发现差异似乎总是出现在某些位位置(例如,总是出现在 8*n+3 形式的字节位置的最高有效位),这通常表明您的 RAM 有缺陷。通常,如果数据损坏无法通过软件或网络传输解释,则 RAM 是首先要查看的地方。

答案2

如果您使用 FTP 进行传输,请使用二进制模式传输。否则,文件中的任何行终止符都会被破坏。Windows 不需要在文本模式下破坏行终止符。

答案3

快速检查一下,如果您使用 sneakernet 传输文件(即将其放在闪存驱动器上并读取它),它可以正常工作吗?

相关内容