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



我正在尝试将〜80,000张图像从一个Google云存储存储桶复制到另一个。我正在使用Google Cloud SDK 180.0.1启动此操作,该操作包含GSUTIL 4.28。

每个图像的〜URL要传输到文本文件中,我将其馈送到gsutil cp so ...

$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 to Uncomenty:

parallel_composite_upload_threshold = 0

这并没有阻止操作悬挂。

我不确定是什么原因导致悬挂。

潜在的需求是通用实用程序将n个项目从一个水桶复制到另一个存储桶。我需要围绕使我完成任务的工作。

update

删除-m选项似乎涉及悬挂问题,但文件传输现在大大降低。我希望能够避免悬挂问题,同时仍会在可能的情况下获得并发速度。

  1. gstuil不应悬挂。这是一个错误。您能记录GSUTL -D的输出,并在悬挂悬挂时,在GSUTIL GITHUB存储库中创建一个问题,并在此处使用链接进行评论?您可以使用以下命令记录输出:

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

    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
    

最新更新