You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用gsutil -m递归下载Cloud Storage存储桶文件失败,求解决方案

问题描述

尝试递归复制Cloud Storage存储桶中的所有文件,执行命令:

gsutil -m cp -r gs://{{ src_bucket }} {{ bucket_backup }}

每次执行都会报错:

CommandException: 1个文件/对象无法传输。

未传输的文件数量每次都不一样。试过减少-m选项的线程/进程数,问题依旧。存储桶内有170 MiB数据,约300k个文件,需要尽快完成下载。

更新:添加-L标志查看日志后,发现多条类似错误:

[Errno 2] 没有那个文件或目录: '<path>/en_.gstmp' -> '<path>/en'
解决建议
  • 禁用临时文件重命名机制:
    这个错误源于gsutil并行模式下,下载时先创建.gstmp临时文件,完成后再重命名为目标文件,高并发下易出现文件系统竞争(比如临时文件被意外处理、重命名时机冲突)。通过环境变量关闭该机制:

    export GSUTIL_CPU_TEMP_FILES=0
    gsutil -m cp -r gs://{{ src_bucket }} {{ bucket_backup }}
    

    此方式会直接下载到目标路径,跳过临时文件阶段,避免重命名报错。

  • 分片批量下载:
    针对大量小文件场景,按前缀分批处理降低单命令并发压力:

    # 列出所有文件并保存到列表
    gsutil ls gs://{{ src_bucket }}/** > file_list.txt
    # 按每1000个文件为一批循环下载
    split -l 1000 file_list.txt batch_
    for batch in batch_*; do
        gsutil -m cp -I {{ bucket_backup }} < "$batch"
        rm "$batch"
    done
    rm file_list.txt
    
  • 检查本地文件系统状态:
    确保目标路径{{ bucket_backup }}所在文件系统有足够读写权限,且IO性能能支撑大量小文件并发操作。若使用机械硬盘,高并发小文件操作易出现IO阻塞,换成SSD可缓解此类问题。

  • 单线程兜底+校验补全:
    若上述方法无效,先改用单线程完成基础下载(速度慢但保证完整性):

    gsutil cp -r gs://{{ src_bucket }} {{ bucket_backup }}
    

    再用同步命令校验并补全缺失文件:

    gsutil rsync -r gs://{{ src_bucket }} {{ bucket_backup }}
    

内容的提问来源于stack exchange,提问作者DISCO

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 01:40:32