【问题标题】:GSUtil cp moethod corrupt filesGSUtil cp 方法损坏文件
【发布时间】:2014-06-11 05:53:36
【问题描述】:

上周我注意到我使用 GSUtils(现为 v3.42)复制下来的 gz 文件中约有 5-10% 已损坏...当我从 GCS UI 中查看文件时,果然他们比 GSUtils 下载的要大。

(FileNameHere).gz: Unexpected end of archive
(FileNameHere).gz: CRC failed in (FileNameHere). The file is corrupt

用例是将 gzip 文件从 GCS 复制到我们的一台 Windows Server 2008r2 机器。

有其他人看到过这个问题吗?

【问题讨论】:

  • 没有提供更多详细信息,正如 Mike 所建议的那样,您在 GCS 中的对象是否有可能将内容类型和内容编码都设置为 gzip,但实际上只压缩了一次?如果是这种情况,压缩将作为处理 http 级内容编码的一部分被撤消,这将为您留下一个实际未压缩的本地 .gz 文件。解决方法是不对这些对象设置内容编码。

标签: google-cloud-storage gsutil


【解决方案1】:

您能否提供一个具体示例:完整的存储桶和对象名称、您下载对象的具体日期/时间以及使用 gsutil 下载后的文件大小?这样我们就可以调查并尝试重现您所看到的案例。

如果您不想在 StackOverflow 上发布特定的存储桶和对象名称,您可以发送电子邮件至 gs-team@google.com 与 GCS 团队私下交流

谢谢,

迈克

【讨论】:

  • 为了解释这种情况,我们有一个 bash 脚本试图将大量大文件从 GCS 下载回我们的服务器。在此过程中,网络不一致导致它在下载这些文件期间静默失败。 (至少从从 SSIS 包调用 bash 脚本的角度来看,静默失败)。无论如何,下一条评论有一个示例 sn-p,您可以使用该示例让 Bash 脚本在发生错误时重试下载这些文件。 (我想感谢 GSUtil 团队的 Mike 提出的建议……我试过了,它奏效了。)
【解决方案2】:

这个 sn-p 与上面的 cmets 一起使用(重试复制命令直到成功):

#!/bin/sh

export PATH=${PATH}:/cygdrive/c/gsutil
ZIPFOLDER="d:/YourPathHere"
for obj in \
  gs://YourBucketName/YourFileName_01.gz \
  gs://YourBucketName/YourFileName_02.gz \
  gs://YourBucketName/YourFileName_03.gz \
...
  gs://YourBucketName/YourFileName_NN.gz \ ; do
    until gsutil cp $obj "$ZIPFOLDER" ; do :; done
done

【讨论】:

    猜你喜欢
    • 2014-07-04
    • 2021-05-20
    • 2021-11-25
    • 2017-02-09
    • 1970-01-01
    • 1970-01-01
    • 2021-06-18
    • 2015-01-30
    • 2014-10-04
    相关资源
    最近更新 更多