【发布时间】:2015-04-02 02:26:17
【问题描述】:
当我使用 s3cmd 下载文件(大小不合理 - 小于 100 兆字节)时,我偶尔会看到此错误: 警告:MD5 签名不匹配:computed=BLAH, received="NOT-BLAH"
谷歌搜索表明这可能是由 S3 分割文件的方式引起的。其他人都说忽略它。
有谁知道为什么会发生这种情况以及正确的做法是什么?
感谢您的宝贵时间, ——亨利
【问题讨论】:
标签: amazon-s3 amazon-web-services
当我使用 s3cmd 下载文件(大小不合理 - 小于 100 兆字节)时,我偶尔会看到此错误: 警告:MD5 签名不匹配:computed=BLAH, received="NOT-BLAH"
谷歌搜索表明这可能是由 S3 分割文件的方式引起的。其他人都说忽略它。
有谁知道为什么会发生这种情况以及正确的做法是什么?
感谢您的宝贵时间, ——亨利
【问题讨论】:
标签: amazon-s3 amazon-web-services
深入研究,似乎 s3cmd 从 Amazon 读取了错误的 md5 总和。看起来 s3cmd 似乎是从 ETAG 字段中得到它的总和。将 PUT 对象的实际数据与 GET 对象的实际数据进行比较,内容是相同的,可以安全地忽略此错误。
【讨论】:
如果文件作为“Multipart”上传,S3 中文件的 ETag 将与 MD5 不匹配。当一个文件被标记为多部分时,AWS 将对每个部分进行哈希处理,连接结果,然后对该值进行哈希处理。
如果文件实际上没有多个部分,则结果将是散列的散列,末尾添加了 -1。尝试在用于将文件上传到 S3 的工具中禁用 multipart。对于 s3cmd,选项是 --disable-multipart。
【讨论】:
如果文件是使用 S3 分段上传功能上传的(通常用于大于 15MB 的文件或从标准输入读取的文件),则需要在其中包含“-”的 ETag。 s3cmd 1.5.2 知道这一点并忽略此类 ETag。如果您的 s3cmd 早于 1.5.2,请升级。
【讨论】:
这是一个更大的问题,因为您使用的是 s3cmd sync,因为它会导致它重新下载以前同步的文件。要解决此问题,请添加 --no-check-md5 选项,这会导致 s3cmd 仅检查文件大小以确定更改的文件(这对我来说很有用,但可能并不适合所有人,具体取决于应用程序)。
【讨论】:
我在大约一个小时前看到报告说 S3 目前正遇到这个问题,例如this tweet:
RT @drags:@ylastic S3 也将不正确的 md5s 返回到 s3cmd。在 AWS 之前,从未见过带有“-”的 md5。 #AWS #S3
虽然AWS Status Page 没有报告任何问题,但我预计这是一个暂时性问题。请稍后再试:-)
【讨论】: