从谷歌云存储到 s3 的 gsutil rsync 挂在大文件上
Posted
技术标签:
【中文标题】从谷歌云存储到 s3 的 gsutil rsync 挂在大文件上【英文标题】:gsutil rsync from google cloud storage to s3 hangs on large file 【发布时间】:2019-09-25 08:03:34 【问题描述】:我在尝试使用以下命令将我的谷歌云存储桶备份到 aws s3 桶时遇到一个较大的文件 (560MB) 挂起:
gsutil -m rsync -rd gs://<MyGoogleBucket>/ s3://<MyS3Bucket>/
我知道连接良好,因为它复制了大约 150 个较小的文件 (9MB),然后挂在较大的文件上,没有明显的错误消息,只是外壳中的一个挂起的进度条。
当我按 ctrl-C 退出程序时,我注意到几条消息说:
[Errno 104] Connection reset by peer
这是我的 gsutil 版本:
gsutil version: 4.38
checksum: 58d3e78c61e7e0e80813a6ebc26085f6 (OK)
boto version: 2.49.0
python version: 2.7.13 (default, Sep 26 2018, 18:42:22) [GCC 6.3.0 20170516]
OS: Linux 4.9.0-8-amd64
multiprocessing available: True
using cloud sdk: True
pass cloud sdk credentials to gsutil: True
config path(s): /etc/boto.cfg, /home/USER/.boto
gsutil path: /home/USER/google-cloud-sdk/bin/gsutil
compiled crcmod: True
installed via package manager: False
editable install: False
我已尝试在我的云 shell 以及 Google Compute VM 上执行此操作
有没有人知道这个问题的修复或解决方法?提前致谢
-内森
【问题讨论】:
创建一个仅包含该文件的文件夹。然后再试一次。不要按 CTRL-C。等到命令完成或报告错误。 150 个文件成功的事实对调试您的问题没有任何意义,只是验证您可以连接和复制一个小文件。如果您可以在 Compute Engine 上重现此问题,请打开 gcloud 调试并查看输出。 Compute Engine 上的 gcloud 错误会引起注意。 【参考方案1】:虽然尚不清楚是否真的存在错误,但在 gsutil rsync
上使用 -m
选项进行并行处理可能会影响存储之间大规模同步的行为,尤其是网络。这也可以在参考文献 [1] 中找到,其中提到:
m(多线程)选项,gsutil 会消耗大量网络带宽。在某些情况下,这可能会导致问题,例如,如果您通过网络链接启动大型 rsync 操作,该网络链接也被许多其他重要作业使用。
如果问题仍然存在,您可以在没有 -m
选项的情况下测试 gsutil rsync
,或者使用同一参考文献 [1] 中提到的替代方法。
[1]Throttling gsutil
【讨论】:
【参考方案2】:对于 GCS 中的大型对象,请使用 gsutil -o 选项。来自文档
https://cloud.google.com/storage/docs/gsutil/commands/cp
【讨论】:
【参考方案3】:我已经开始使用 rclone,它简化了流程并允许完成复制。您可以在此处找到有关使用此工具的信息:https://rclone.org/docs/
-n
【讨论】:
【参考方案4】:如果问题仍然存在,您可以在没有 -m 选项的情况下测试 gsutil rsync,或者使用同一参考文献 [1] 中提到的替代方法。
我认为开发人员最近解决了这个问题,因为不再需要 -m
并且这些不再发生:
[Errno 104] Connection reset by peer
【讨论】:
以上是关于从谷歌云存储到 s3 的 gsutil rsync 挂在大文件上的主要内容,如果未能解决你的问题,请参考以下文章
继续中断 rsync 后 .gstmp 文件上的 gsutil rsync 错误