CRC32C 和安装 crcmod
概览
Cloud Storage 提供循环冗余校验 (CRC) 标头,以允许客户端验证对象内容的完整性。对于非复合对象,Cloud Storage 还提供了 MD5 标头以允许客户端验证对象的完整性。但对于复合对象,仅提供了 CRC。gsutil 会自动对所有上传和下载执行完整性检查。此外,您还可以使用 gsutil hash
命令对任何本地文件计算 CRC。
Cloud Storage 使用的 CRC 变体称为 CRC32C (Castagnoli),这在标准 Python 发行版中不提供。gsutil 使用的 CRC32C 实现由名为 crcmod 的第三方 Python 模块提供。
crcmod 模块包含 CRC32C 的纯 Python 实现,但使用它会导致校验和计算缓慢,进而导致性能非常差。Python C 扩展程序也由 crcmod 提供,crcmod 需要编译为二进制文件模块才能供使用。gsutil 附带有预编译的适用于 macOS 的 crcmod C 扩展程序;对于其他平台,请参阅下面的安装说明。
在每个复制操作结束时,gsutil cp
、gsutil mv
和 gsutil rsync
命令会验证源文件/对象的校验和是否与目标文件/对象的校验和匹配。如果校验和不匹配,gsutil 将删除无效副本并输出一条警告消息。这种情况很少发生,但如果确实发生,您应该重试该操作。
配置
如需确定 Python 环境中是否提供编译版 crcmod,您可以检查 gsutil version
命令的输出中是否存在“compiled crcmod”条目:
$ gsutil version -l
...
compiled crcmod: True
...
如果您的 crcmod 库编译为原生二进制文件,则此值将为 True。如果使用纯 Python 版本,则此值将为 False。
如需控制 gsutil 的行为以响应 crcmod 的状态,您可以在 boto 配置文件中设置 check_hashes
变量。 如需详细了解此变量,请参阅 boto 配置文件中的相关注释。如果您的配置文件中不存在 check_hashes
,请运行带有相应 -e
或 -a
标志的 gsutil config
来重新生成文件。
安装
以下安装说明假定:
您已安装
pip
。如需详细了解如何安装pip
,请参阅 pip 安装说明。您可以在
PATH
环境变量中找到安装的pip
。如果找不到,您可能需要将以下命令中的pip3
替换为可执行文件的完整路径。您安装的是要与系统安装的 Python 结合使用的 crcmod 软件包,因此使用
sudo
命令。如果为其他 Python 环境(例如,在 virtualenv 中)安装 crcmod,应忽略以下命令中的sudo
。您通过 gsutil 使用 Python 3 版本。通过运行
gsutil version -l
并查找python version: 2.x.x
或python version: 3.x.x
行,您可以确定 gsutil 使用的 Python 版本。
CentOS、RHEL、Fedora
如需编译和安装 crcmod,请运行以下命令:
yum install gcc python3-devel python3-setuptools redhat-rpm-config
sudo pip3 uninstall crcmod
sudo pip3 install --no-cache-dir -U crcmod
Debian 和 Ubuntu
如需编译和安装 crcmod,请运行以下命令:
sudo apt-get install gcc python3-dev python3-setuptools
sudo pip3 uninstall crcmod
sudo pip3 install --no-cache-dir -U crcmod
企业版 SUSE
如需在使用 Enterprise SUSE for SAP 12 时编译和安装 crcmod,请运行以下命令:
sudo zypper install gcc python-devel
sudo pip uninstall crcmod
sudo pip install --no-cache-dir -U crcmod
如需在使用 Enterprise SUSE for SAP 15 时编译和安装 crcmod,请运行以下命令:
sudo zypper install gcc python3-devel
sudo pip uninstall crcmod
sudo pip install --no-cache-dir -U crcmod
macOS
gsutil 分发了适用于 macOS 的预编译版 crcmod,因此您无需自行编译和安装该版本。如果由于某种原因未检测到预编译版本,请告知 Cloud Storage 团队(参阅 gsutil help support
)。
如需在 macOS 上手动编译,您需要先安装 Xcode,然后运行以下命令:
pip3 install -U crcmod
Windows
安装程序适用于以下网址中的 Python Package Index (PyPi) 提供的编译版 crcmod:
https://pypi.python.org/pypi/crcmod/1.7
在某些情况下,安装程序错误地安装到 <python_dir>\Lib\site-packages\crcmod
手动将 crcmod 目录复制到正确的位置应该可以解决问题。