计算引擎使用gsutil下载tgz文件有crcmod错误

时间:2014-04-29 14:54:28

标签: google-cloud-storage google-compute-engine

我发现如果您创建计算引擎(CentOS或Debian)计算机并使用gsutil下载(cp)tgz文件将导致crcmod错误...

$ gsutil cp gs://mybucket/data.tgz .
Copying gs://mybucket/data.tgz...
CommandException:
Downloading this composite object requires integrity checking with CRC32c, but
your crcmod installation isn't using the module's C extension, so the the hash
computation will likely throttle download performance. For help installing the
extension, please see:
  $ gsutil help crcmod
To download regardless of crcmod performance or to skip slow integrity checks,
see the "check_hashes" option in your boto config file.

目前我使用" check_hashes = never"绕过检查...

$ vi /etc/boto.cfg
[GSUtil]
default_project_id = 429100748693
default_api_version = 2
check_hashes = never
...

但是,根本原因是什么?是否有解决问题的好方法?

1 个答案:

答案 0 :(得分:1)

您尝试下载的对象是composite object,这基本上意味着它是以并行方式上传的。上传大于150M的对象(可配置的阈值)时,gsutil会自动执行此操作,以提供更好的性能。

复合对象只有crc32c校验和(没有MD5),因此为了在下载复合对象时验证数据完整性,gsutil需要执行crc32c校验和。遗憾的是,随Python分发的库不包含已编译的crc32c实现,因此除非您安装已编译的crc32c,否则gsutil将使用crc32c的非编译Python实现,这非常慢。打印该警告是为了让您知道解决该性能问题的方法:请运行:

gsutil help crcmod

并按照那里的说明安装已编译的crc32c。这很容易做到,值得付出努力。

另一个注意事项:我强烈建议您不要在boto配置文件中设置check_hashes = never。这将禁用完整性检查,这意味着您的下载可能会被破坏并且您不会知道它。您希望启用数据完整性检查,以确保您使用正确的数据。