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

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

若要查看其他类型任务(如上传文件、下载 Blob 以及与 Blob 存储同步)的示例,请参阅本文的后续步骤部分中提供的链接。

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

开始使用

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

注意

本文中的示例假定你已经通过使用 Microsoft Entra ID 提供了授权凭据,并且,你的 Microsoft Entra 标识针对源帐户和目标帐户都被分配了适当的角色。

或者,也可以在每个 AzCopy 命令中将 SAS 令牌追加到源或目标 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 存储帐户,请通过将 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/write Azure 资源提供程序操作权限。 如果使用共享访问签名 (SAS) 令牌,则该令牌必须通过 SAS 权限 t 提供对 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]

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

后续步骤

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

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