" cat urls.txt | gsutil -m cp -I gs:// target-bucket-name /"传输~10,000个文件后一直挂起

时间:2017-11-21 23:12:51

标签: google-cloud-storage gsutil

我正在尝试将~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选项似乎解决了挂起问题,但文件传输现在明显变慢了。我希望能够避免悬挂问题,同时尽可能提高使用并发性的速度。

1 个答案:

答案 0 :(得分:1)

  1. gstuil不应该挂。这是一个错误。你能记录gsutl -D的输出吗?当它挂起时,在附加输出的gsutil github repo中创建一个问题并在此处注释并附带链接?您可以使用以下命令记录输出:

    $ cat urls.txt | gsutil -D -m cp -I gs://target-bucket-name/ 2>&1 | tee output
    
  2. 同时,您可以尝试通过更改boto文件中的这些默认值来尝试减少并行模式(-m)使用的线程和进程数。

    parallel_process_count = 1    # Default - 12
    parallel_thread_count = 10    # Default - 10
    
  3. 请注意,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
    
相关问题