当我使用 s3cmd 下拉文件(大小不合理 - 小于 100 兆字节)时,我偶尔会看到此错误:警告:MD5 签名不匹配:计算 = BLAH,收到 =“NOT-BLAH”
谷歌搜索表明这可能是由 S3 分割文件的方式引起的。其他人说忽略它。
有谁知道为什么会发生这种情况以及正确的做法是什么?
谢谢你的时间,--亨利
当我使用 s3cmd 下拉文件(大小不合理 - 小于 100 兆字节)时,我偶尔会看到此错误:警告:MD5 签名不匹配:计算 = BLAH,收到 =“NOT-BLAH”
谷歌搜索表明这可能是由 S3 分割文件的方式引起的。其他人说忽略它。
有谁知道为什么会发生这种情况以及正确的做法是什么?
谢谢你的时间,--亨利
深入研究,似乎 s3cmd 从亚马逊读取了错误的 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 仅检查文件大小以确定更改的文件(这对我的目的很有用,但可能并不适合所有人,具体取决于应用程序)。