Azure 如何处理AZcopy失败的文件传输

Azure 如何处理AZcopy失败的文件传输,azure,azure-storage-blobs,azcopy,Azure,Azure Storage Blobs,Azcopy,我正在将大量小文件从本地文件系统复制到Azure blob存储。 很少有文件无法上传。 AZcopy似乎只记录这些失败,没有简单的方法来重试上载这些文件。 逐个搜索每个文件并手动上载是不可行的(时间方面)。 是否有任何建议来处理这些故障并重试自动上载到Blob?如果传输作业错误不是由sas令牌或身份验证导致的,您可以从下面的命令行尝试 显示失败作业的错误消息: azcopy jobs show <job-id> --with-status=Failed azcopy作业显示--状态

我正在将大量小文件从本地文件系统复制到Azure blob存储。 很少有文件无法上传。 AZcopy似乎只记录这些失败,没有简单的方法来重试上载这些文件。 逐个搜索每个文件并手动上载是不可行的(时间方面)。
是否有任何建议来处理这些故障并重试自动上载到Blob?

如果传输作业错误不是由sas令牌或身份验证导致的,您可以从下面的命令行尝试

显示失败作业的错误消息:

azcopy jobs show <job-id> --with-status=Failed
azcopy作业显示--状态为失败

修复它们,然后执行恢复命令:

azcopy jobs resume <job-id> --source-sas="<sas-token>"
azcopy jobs resume <job-id> --destination-sas="<sas-token>"
azcopy作业恢复--source sas=“”
azcopy作业继续--目标sas=“”
请参阅上述命令的声明:

azcopy jobs resume <job-id> --source-sas="<sas-token>"
azcopy jobs resume <job-id> --destination-sas="<sas-token>"
恢复作业时,AzCopy会查看作业计划文件。计划 “文件”列出了在启动时标识为要处理的所有文件 这项工作是第一次创建的。恢复作业时,AzCopy将尝试 传输计划文件中列出的所有文件 他们还没有被转移


我遇到过进程被终止的情况(可能发生在集装箱化环境中)。因此,我想最简单的方法是实现重试机制(灵感来源于)。我在下载时遇到了这个问题,但修复方法基本相同:

function azcopyWithRetry() {
      local list_of_blobs=`echo ${1}`
      local connection_string="https://${2}.blob.core.windows.net/${3}/*?${4}"
      local download_path="/tmp/download"
      local max_attempts="${5}"
      local command="azcopy copy --include-path ${list_of_blobs} ${connection_string} ${download_path}"

      local n=1
      while true; do
        ${command}  && break || {
          if [[ $n -lt $max_attempts ]]; then
            echo "WARN: Command failed, retrying. (attempt $n/$max_attempts) "
            ((n++))
            sleep 1;
          else
            echo "FAIL: Command failed after $n attempts. Nothing will happen"
            return 1
          fi
        }
      done
}
您可以通过以下方式调用此函数:

export LIST_BLOBS="blobs.txt"
export AZ_ACCOUNT="..."
export AZ_CONTAINER="..."
export AZ_SAS_TOKEN="..."
azcopyWithRetry ${LIST_BLOBS} ${AZ_ACCOUNT} ${AZ_CONTAINER} ${AZ_SAS_TOKEN} 5

5次重试

添加到此线程,因为我偶尔会遇到大量失败。对于填充空白目录的作用域场景,一个简单的解决方案是使用--overwrite=false命令再次运行azcopy copy命令