我正在尝试将~80,000张图片从一个Google云存储桶复制到另一个。 我正在使用包含gsutil 4.28的google cloud sdk 180.0.1从mac启动此操作。
每个图像的〜url要传输到一个文本文件中,我就像这样提供给gsutil cp ...
$cat urls.txt | gsutil -m cp -I gs://target-bucket-name/
其中urls.txt看起来像......
head -3 urls.txt
gs://source-bucket-name/1506567870546.jpg
gs://source-bucket-name/1506567930548.jpg
gs://source-bucket-name/1507853339446.jpg
在传输了大约10,000张图像后,该过程一直挂起。
我已编辑$ HOME / .boto取消注释:
parallel_composite_upload_threshold = 0
这并没有阻止操作挂起。
我不确定导致悬挂的原因。
基本需求是通用实用程序将N个项目从一个存储桶复制到另一个存储桶。我需要一个可以让我完成任务的工作。
更新
删除-m选项似乎解决了挂起问题,但文件传输现在明显变慢了。我希望能够避免悬挂问题,同时尽可能提高使用并发性的速度。
答案 0 :(得分:1)
gstuil不应该挂。这是一个错误。你能记录gsutl -D的输出吗?当它挂起时,在附加输出的gsutil github repo中创建一个问题并在此处注释并附带链接?您可以使用以下命令记录输出:
$ cat urls.txt | gsutil -D -m cp -I gs://target-bucket-name/ 2>&1 | tee output
同时,您可以尝试通过更改boto文件中的这些默认值来尝试减少并行模式(-m)使用的线程和进程数。
parallel_process_count = 1 # Default - 12
parallel_thread_count = 10 # Default - 10
请注意,gsutil具有将存储桶或子目录中的所有文件复制到新存储桶的选项,以及仅使用以下命令复制目标中已更改或不存在的文件:
gsutil -m cp gs://source-bucket/ gs://target-bucket
gsutil -m cp 'gs://source-bucket/dir/**' gs://target-bucket
gsutil -m rsync -r gs://source-bucket gs://target-bucket