使用 AzCopy 在 Azure 存储帐户之间复制 Blob

可以使用 AzCopy v10 命令行实用工具在存储帐户之间复制 blob、目录和容器。

有关其他类型的任务(例如上传文件、下载 Blob 和与 Blob 存储同步)的示例,请参阅本文的 “后续步骤 ”部分中的链接。

AzCopy 使用服务器到服务器API,因此,数据会直接在存储服务器之间复制。

开始

请参阅 AzCopy 入门一文下载 AzCopy,并了解如何提供存储服务的授权凭据。

注意

本文中的示例假定你使用 Microsoft Entra ID 提供授权凭据,并且Microsoft Entra 标识对源帐户和目标帐户具有适当的角色分配。

或者,可以将 SAS 令牌追加到每个 AzCopy 命令中的源或目标 URL。 例如:azcopy copy 'https://<source-storage-account-name>.blob.core.chinacloudapi.cn/<container-name>/<blob-path><SAS-token>' 'https://<destination-storage-account-name>.blob.core.chinacloudapi.cn/<container-name>/<blob-path><SAS-token>'

指南

将以下指南应用于 AzCopy 命令。

  • 如果将 Microsoft Entra 授权用于源和目标,则两个帐户必须属于同一Microsoft Entra 租户。

  • 客户端必须对源存储帐户和目标存储帐户具有 网络访问权限

    若要了解如何配置每个存储帐户的网络设置,请参阅配置 Azure 存储防火墙和虚拟网络

    若要了解在帐户之间复制时支持的网络拓扑,请参阅 在具有访问限制的存储帐户之间复制 Blob

  • 如果复制到高级块 Blob 存储帐户,请通过将 s2s-preserve-access-tier 设置为 false(例如:--s2s-preserve-access-tier=false),在复制操作中省略 Blob 的访问层。 高级块 Blob 存储帐户不支持访问层。

  • 可以通过设置 AZCOPY_CONCURRENCY_VALUE 环境变量的值来提高复制操作的吞吐量。 若要了解详细信息,请参阅提高并发性

  • 如果源 Blob 具有索引标记,并且想要保留这些标记,则需要将它们重新应用到目标 Blob。 有关如何设置索引标记的信息,请参阅本文的将 Blob 复制到其他具有索引标记的存储帐户部分。

复制 Blob

使用 azcopy copy 命令将 Blob 复制到另一个存储帐户。

提示

此示例将路径参数括在单引号 ('') 内。 在除 Windows 命令 Shell (cmd.exe) 以外的所有命令 shell 中,都请使用单引号。 如果使用 Windows 命令 Shell (cmd.exe),请用双引号 ("") 而不是单引号 ('') 括住路径参数。

语法

azcopy copy 'https://<source-storage-account-name>.<blob or dfs>.core.chinacloudapi.cn/<container-name>/<blob-path>' 'https://<destination-storage-account-name>.<blob or dfs>.core.chinacloudapi.cn/<container-name>/<blob-path>'

示例

azcopy copy 'https://mysourceaccount.blob.core.chinacloudapi.cn/mycontainer/myTextFile.txt' 'https://mydestinationaccount.blob.core.chinacloudapi.cn/mycontainer/myTextFile.txt'

示例(Data Lake Storage 终结点)

azcopy copy 'https://mysourceaccount.dfs.core.chinacloudapi.cn/mycontainer/myTextFile.txt' 'https://mydestinationaccount.dfs.core.chinacloudapi.cn/mycontainer/myTextFile.txt'

复制操作是同步的。 命令返回时,它指示复制所有文件。

复制目录

使用 azcopy copy 命令将目录复制到另一个存储帐户。

提示

此示例将路径参数括在单引号 ('') 内。 在除 Windows 命令 Shell (cmd.exe) 以外的所有命令 shell 中,都请使用单引号。 如果使用 Windows 命令 Shell (cmd.exe),请用双引号 ("") 而不是单引号 ('') 括住路径参数。

语法

azcopy copy 'https://<source-storage-account-name>.<blob or dfs>.core.chinacloudapi.cn/<container-name>/<directory-path>' 'https://<destination-storage-account-name>.<blob or dfs>.core.chinacloudapi.cn/<container-name>' --recursive

示例

azcopy copy 'https://mysourceaccount.blob.core.chinacloudapi.cn/mycontainer/myBlobDirectory' 'https://mydestinationaccount.blob.core.chinacloudapi.cn/mycontainer' --recursive

示例(Data Lake Storage 终结点)

azcopy copy 'https://mysourceaccount.dfs.core.chinacloudapi.cn/mycontainer/myBlobDirectory' 'https://mydestinationaccount.dfs.core.chinacloudapi.cn/mycontainer' --recursive

复制操作是同步的。 命令返回时,将复制所有文件。

复制容器

使用 azcopy copy 命令将容器复制到另一个存储帐户。

提示

此示例将路径参数括在单引号 ('') 内。 在除 Windows 命令 Shell (cmd.exe) 以外的所有命令 shell 中,都请使用单引号。 如果使用 Windows 命令 Shell (cmd.exe),请用双引号 ("") 而不是单引号 ('') 括住路径参数。

语法

azcopy copy 'https://<source-storage-account-name>.<blob or dfs>.core.chinacloudapi.cn/<container-name>' 'https://<destination-storage-account-name>.<blob or dfs>.core.chinacloudapi.cn/<container-name>' --recursive

示例

azcopy copy 'https://mysourceaccount.blob.core.chinacloudapi.cn/mycontainer' 'https://mydestinationaccount.blob.core.chinacloudapi.cn/mycontainer' --recursive

示例(Data Lake Storage 终结点)

azcopy copy 'https://mysourceaccount.dfs.core.chinacloudapi.cn/mycontainer' 'https://mydestinationaccount.dfs.core.chinacloudapi.cn/mycontainer' --recursive

复制操作是同步的。 命令返回时,将复制所有文件。

复制容器、目录和 Blob

使用 azcopy copy 命令将所有容器、目录和 Blob 复制到另一个存储帐户。

提示

此示例将路径参数括在单引号 ('') 内。 在除 Windows 命令 Shell (cmd.exe) 以外的所有命令 shell 中,都请使用单引号。 如果使用 Windows 命令 Shell (cmd.exe),请用双引号 ("") 而不是单引号 ('') 括住路径参数。

语法

azcopy copy 'https://<source-storage-account-name>.<blob or dfs>.core.chinacloudapi.cn/' 'https://<destination-storage-account-name>.<blob or dfs>.core.chinacloudapi.cn/' --recursive

示例

azcopy copy 'https://mysourceaccount.blob.core.chinacloudapi.cn/' 'https://mydestinationaccount.blob.core.chinacloudapi.cn' --recursive

示例(Data Lake Storage 终结点)

azcopy copy 'https://mysourceaccount.dfs.core.chinacloudapi.cn/' 'https://mydestinationaccount.dfs.core.chinacloudapi.cn' --recursive

复制操作是同步的。 命令返回时,它指示复制所有文件。

复制 Blob 并添加索引标记

将 Blob 复制到其他存储帐户,并向目标 Blob 中添加 Blob 索引标记

如果使用 Microsoft Entra 授权,请将存储 Blob 数据所有者角色分配给您的安全主体,或者通过自定义 Azure 角色授予其对Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags/writeAzure 资源提供程序操作的权限。 如果使用共享访问签名(SAS)令牌,则令牌必须通过 t SAS 权限提供对 Blob 标记的访问权限。

若要添加标记,请将 --blob-tags 此选项与 URL 编码的键值对一起使用。

例如,若要添加键 my tag 和值 my tag value,请添加到 --blob-tags='my%20tag=my%20tag%20value' 目标参数。

用与号分隔多个索引标记(&)。 例如,如果要添加键 my second tag 和值 my second tag value,则完整的选项字符串将是 --blob-tags='my%20tag=my%20tag%20value&my%20second%20tag=my%20second%20tag%20value'

以下示例演示如何使用 --blob-tags 选项。

提示

这些示例将路径参数括在单引号 ('') 内。 在除 Windows 命令 Shell (cmd.exe) 以外的所有命令 shell 中,都请使用单引号。 如果使用 Windows 命令 Shell (cmd.exe),请用双引号 ("") 而不是单引号 ('') 括住路径参数。

Blob 示例


azcopy copy 'https://mysourceaccount.blob.core.chinacloudapi.cn/mycontainer/myTextFile.txt' 'https://mydestinationaccount.blob.core.chinacloudapi.cn/mycontainer/myTextFile.txt' --blob-tags='my%20tag=my%20tag%20value&my%20second%20tag=my%20second%20tag%20value'

目录示例

azcopy copy 'https://mysourceaccount.blob.core.chinacloudapi.cn/mycontainer/myBlobDirectory' 'https://mydestinationaccount.blob.core.chinacloudapi.cn/mycontainer' --recursive --blob-tags='my%20tag=my%20tag%20value&my%20second%20tag=my%20second%20tag%20value'

容器示例

azcopy copy 'https://mysourceaccount.blob.core.chinacloudapi.cn/mycontainer' 'https://mydestinationaccount.blob.core.chinacloudapi.cn/mycontainer' --recursive --blob-tags='my%20tag=my%20tag%20value&my%20second%20tag=my%20second%20tag%20value'

帐户示例

azcopy copy 'https://mysourceaccount.blob.core.chinacloudapi.cn/' 'https://mydestinationaccount.blob.core.chinacloudapi.cn' --recursive --blob-tags='my%20tag=my%20tag%20value&my%20second%20tag=my%20second%20tag%20value'

复制操作是同步的。 命令返回时,将复制所有文件。

注意

如果为源指定目录、容器或帐户,则复制到目标的所有 Blob 都具有在命令中指定的相同标记。

使用可选标志复制

可以通过使用可选标志来调整复制操作。 下面是几个示例。

方案 标志
将 Blob 复制为块 Blob、页 Blob 或追加 Blob。 --blob-type=[BlockBlob|PageBlob|AppendBlob]
复制到特定访问层(如存档层)。 --block-blob-tier=[None|Hot|Cool|Archive]
自动解压缩文件。 --decompress=[gzip|deflate]

有关完整列表,请参阅选项

指定源和目标类型

AzCopy 使用 --from-to 参数在自动检测可能失败时显式定义源和目标资源类型,例如在管道方案或模拟器中。 此参数可帮助 AzCopy 了解传输的上下文并相应地进行优化。

FromTo 值 Description
BlobBlob 在两个 Azure Blob 存储位置之间复制
BlobBlobFS 从 Azure Blob 存储复制到 Azure Data Lake Gen2 (BlobFS)
BlobFSBlob 从 Azure Data Lake Gen2 (BlobFS) 复制到 Azure Blob 存储
BlobFSBlobFS 在两个 Azure Data Lake Gen2 (BlobFS) 位置之间复制
BlobFSFile 从 Azure Data Lake Gen2 (BlobFS) 复制到 Azure 文件存储
BlobFile 从 Azure Blob 存储复制到 Azure 文件存储
FileBlob 从 Azure 文件存储复制到 Azure Blob 存储
FileBlobFS 从 Azure 文件存储复制到 Azure Data Lake Gen2 (BlobFS)

后续步骤

如需了解更多示例,请参阅以下文章:

请参阅以下文章了解如何配置设置、优化性能和排查问题: