Google cloud storage &引用;cat urls.txt | gsutil-m cp-I gs://target bucket name/";传输约10000个文件后始终挂起

Google cloud storage &引用;cat urls.txt | gsutil-m cp-I gs://target bucket name/";传输约10000个文件后始终挂起,google-cloud-storage,gsutil,Google Cloud Storage,Gsutil,我正试图将大约80000张图片从一个谷歌云存储桶复制到另一个存储桶。 我是从一个带有google cloud sdk 180.0.1(包含gsutil 4.28)的mac启动此操作的 要在文本文件中传输的每个图像的~url,我将其馈送到gsutil cp,如下所示 $cat urls.txt | gsutil -m cp -I gs://target-bucket-name/ 其中url.txt看起来像 head -3 urls.txt gs://source-bucket-name/150

我正试图将大约80000张图片从一个谷歌云存储桶复制到另一个存储桶。 我是从一个带有google cloud sdk 180.0.1(包含gsutil 4.28)的mac启动此操作的

要在文本文件中传输的每个图像的~url,我将其馈送到gsutil cp,如下所示

$cat urls.txt | gsutil -m cp -I gs://target-bucket-name/
其中url.txt看起来像

head -3 urls.txt 
gs://source-bucket-name/1506567870546.jpg
gs://source-bucket-name/1506567930548.jpg
gs://source-bucket-name/1507853339446.jpg
传输了约10000张图像后,进程始终挂起

我已编辑$HOME/.boto以取消注释:

parallel_composite_upload_threshold = 0
这并没有阻止操作挂起

我不确定是什么原因导致了绞刑

基本需求是通用实用程序将N个项目从一个bucket复制到另一个bucket。我需要一个工作环境,使我能够完成这项任务

更新

删除-m选项似乎可以解决挂起的问题,但文件传输现在明显变慢了。我希望能够避免挂起问题,同时尽可能提高使用并发的速度

  • gstuil不应该挂在墙上。这是一个错误。您能记录gsutl-D的输出吗?当它挂起时,请在中创建一个问题,并附加输出,并在此处添加指向它的链接进行注释?可以使用以下命令记录输出:

    $ 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具有将bucket或子目录中的所有文件复制到新bucket的选项,以及使用以下命令仅复制目标中已更改或不存在的文件的选项:

    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
    
  • 谢谢从macos上的gcloud 182(gsutil 4.28)开始,它似乎正在工作。