当我使用s3cmd下拉文件(不合理的大小 - 小于100兆字节)时,我偶尔会看到这个错误: 警告:MD5签名不匹配:computed = BLAH,received =“NOT-BLAH”
谷歌搜索表明这可能是由S3分段文件的方式引起的。其他人则说要忽略它。
有人知道为什么会这样,而正确的做法是什么?
感谢您的时间, - 亨利
答案 0 :(得分:28)
更深入地看,似乎s3cmd正在从亚马逊读取错误的md5总和。看起来s3cmd从ETAG字段得到它的总和。将PUT对象的实际数据与GET对象进行比较,内容相同,可以安全地忽略此错误。
答案 1 :(得分:7)
如果文件上传为“Multipart”,则S3中文件的ETag将与MD5不匹配。当文件被标记为多部分时,AWS将对每个部分进行哈希处理,连接结果,然后对该值进行哈希处理。
如果文件实际上没有多个部分,则结果将是散列的散列,并在末尾添加-1。尝试在用于将文件上载到S3的工具中禁用multipart。对于s3cmd,选项为--disable-multipart。
答案 2 :(得分:3)
ETag与' - '如果使用S3 Multipart Upload功能(通常用于文件> 15MB或从stdin读取的文件)上传文件,则需要使用它们。 s3cmd 1.5.2知道这一点而忽略了这样的ETag。如果您的s3cmd早于1.5.2,请升级。
答案 3 :(得分:2)
这是一个更大的问题,你使用s3cmd同步,因为它导致它重新下载以前同步的文件。要解决此问题,请添加--no-check-md5
选项,这会导致s3cmd仅检查文件大小以确定更改的文件(这对我的目的很好,但可能不适合所有人,具体取决于应用程序)。
答案 4 :(得分:1)
我在一个小时前看到有关S3目前确实遇到此问题的报告,例如this tweet:
RT @drags:@ylastic S3也将错误的md5s返回到s3cmd。从未见过带有' - '的md5,直到AWS。 #AWS#S3
虽然AWS Status Page报告没有问题,但我认为这是一个短暂的问题。马上再试一次: - )