使用 AzCopy 与 Azure Blob 存储同步

可以使用 AzCopy v10 命令行实用工具将本地存储与 Azure Blob 存储同步。

可以将本地文件系统的内容与 Blob 容器同步。 还可以将容器和虚拟目录彼此同步。 同步是单向的。 换言之,需要选择这两个终结点中哪一个是源,哪一个是目标。 同步还使用服务器到服务器 API。 本节中提供的示例也适用于具有分层命名空间的帐户。

注释

AzCopy的当前版本仅支持将本地存储与 Azure Blob 存储同步。 它不会将 Blob 容器与其他源和目标(例如 Azure 文件存储 或 Amazon Web Services(AWS)S3 存储桶)同步。

若要查看有关其他类型的任务的示例,例如上传文件、下载 blob 或复制帐户之间的 Blob,请参阅本文的 “后续步骤 ”部分中介绍的链接。

开始

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

注释

本文中的示例假定使用 Microsoft Entra ID 提供授权凭据。

如果你希望使用 SAS 令牌来授权访问 Blob 数据,可将该令牌追加到每个 AzCopy 命令中的资源 URL。 例如: 'https://<storage-account-name>.blob.core.chinacloudapi.cn/<container-name><SAS-token>'

准则

默认情况下,sync 命令会比较文件名和上次修改的时间戳。 可以通过使用 --compare-hash 标志替代该行为,从而使用 MD5 哈希而不是上次修改的时间戳。 如果将 --delete-destination 可选标志设置为 trueprompt 值,当目标目录中的文件不在源目录中存在时,会删除这些文件。

  • 如果将 --delete-destination 标志设置为 true,AzCopy 将删除文件且不提供提示。 若要在 AzCopy 删除文件之前显示提示,请将 --delete-destination 标志设置为 prompt

  • 如果计划将 --delete-destination 标志设置为 promptfalse,请考虑使用 copy 命令而不是 sync 命令,并将 --overwrite 参数设置为 ifSourceNewercopy 命令占用的内存较少,且费用较低,因为在移动文件之前,复制操作无需为源或目标编制索引。

  • 如果不计划使用 --compare-hash 标志,运行 sync 命令的计算机应具有准确的系统时钟,因为上次修改时间对于确定是否应传输文件至关重要。 如果你的系统有严重的时钟偏差,请避免修改目标中的文件的时间与计划运行 sync 命令的时间太过接近。

  • AzCopy 使用服务器到服务器 API 在存储帐户之间同步数据。 这意味着数据直接在存储服务器之间复制。 但是,AzCopy 会设置和监视每个传输。对于较大的存储帐户(例如包含数百万个 blob 的帐户),AzCopy 可能需要大量计算资源才能完成这些任务。 因此,如果从虚拟机 (VM) 运行 AzCopy,请确保 VM 有足够的核心/内存来处理负载。

  • 若要防止意外删除,请确保在使用标志之前启用--delete-destination=prompt|true功能。

使用对本地文件系统所做的更改来更新容器

在本例中,容器是目标,本地文件系统是源。

小窍门

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

语法

azcopy sync '<local-directory-path>' 'https://<storage-account-name>.blob.core.chinacloudapi.cn/<container-name>' --recursive

示例

azcopy sync 'C:\myDirectory' 'https://mystorageaccount.blob.core.chinacloudapi.cn/mycontainer' --recursive

使用对容器所做的更改来更新本地文件系统

在这种情况下,本地文件系统是目标,容器是源。

小窍门

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

语法

azcopy sync 'https://<storage-account-name>.blob.core.chinacloudapi.cn/<container-name>' 'C:\myDirectory' --recursive

示例

azcopy sync 'https://mystorageaccount.blob.core.chinacloudapi.cn/mycontainer' 'C:\myDirectory' --recursive

使用一个容器的更改来更新另一个容器

此命令中显示的第一个容器是源。 第二个容器是目标。

如果使用 Microsoft Entra ID 提供授权凭据,请确保在源帐户和目标帐户中设置适当的角色。 请参阅 选项 1:使用 Microsoft Entra ID

小窍门

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

语法

azcopy sync 'https://<source-storage-account-name>.blob.core.chinacloudapi.cn/<container-name>/<SAS-token>' 'https://<destination-storage-account-name>.blob.core.chinacloudapi.cn/<container-name>' --recursive

示例

azcopy sync 'https://mysourceaccount.blob.core.chinacloudapi.cn/mycontainer?sv=2018-03-28&ss=bfqt&srt=sco&sp=rwdlacup&se=2019-07-04T05:30:08Z&st=2019-07-03T21:30:08Z&spr=https&sig=CAfhgnc9gdGktvB=ska7bAiqIddM845yiyFwdMH481QA8%3D' 'https://mydestinationaccount.blob.core.chinacloudapi.cn/mycontainer' --recursive

使用对另一个容器中的目录所做的更改来更新一个目录

此命令中显示的第一个目录是源。 第二个目录是目的地。

如果使用 Microsoft Entra ID 提供授权凭据,请确保在源帐户和目标帐户中设置适当的角色。 请参阅 选项 1:使用 Microsoft Entra ID

小窍门

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

语法

azcopy sync 'https://<source-storage-account-name>.blob.core.chinacloudapi.cn/<container-name>/<directory-name>/<SAS-token>' 'https://<destination-storage-account-name>.blob.core.chinacloudapi.cn/<container-name>/<directory-name>' --recursive

示例

azcopy sync 'https://mysourceaccount.blob.core.chinacloudapi.cn/<container-name>/myDirectory?sv=2018-03-28&ss=bfqt&srt=sco&sp=rwdlacup&se=2019-07-04T05:30:08Z&st=2019-07-03T21:30:08Z&spr=https&sig=CAfhgnc9gdGktvB=ska7bAiqIddM845yiyFwdMH481QA8%3D' 'https://mydestinationaccount.blob.core.chinacloudapi.cn/mycontainer/myDirectory' --recursive

通过 SAS 令牌使用另一个容器中的更改更新容器

此命令中显示的第一个容器是源。 第二个容器是目标。

如果提供 SAS 令牌,请确保在使用 azcopy sync 时使用与源存储帐户和目标存储帐户对应的 SAS 令牌。

语法

azcopy sync 'https://<source-storage-account-name>.blob.core.chinacloudapi.cn/<container-name>/<SAS-token>' 'https://<destination-storage-account-name>.blob.core.chinacloudapi.cn/<container-name>/<destination-SAS-token>' --recursive

示例

azcopy sync 'https://mysourceaccount.blob.core.chinacloudapi.cn/mycontainer?sv=2018-03-28&ss=bfqt&srt=sco&sp=rwdlacup&se=2019-07-04T05:30:08Z&st=2019-07-03T21:30:08Z&spr=https&sig=CAfhgnc9gdGktvB=ska7bAiqIddM845yiyFwdMH481QA8%3D' 'https://mydestinationaccount.blob.core.chinacloudapi.cn/mycontainer/?sv=2018-03-28&ss=qrdu&dst=mco&kp=rwdlapuc&se=2019-07-04T05:30:08Z&st=2019-07-03T21:31:10Z&spr=https&sig=CAfhgnc9gdGktvB=yzx9CAjMKeeN678yiyFwdNU092JC8%6D' --recursive

小窍门

如果要复制大量数据,可以使用 Azure 存储资源管理器

若要验证所复制数据的大小,请在顶部栏菜单上选择“ 更多 ->Folder Statistics ”以获取目录的详细信息,包括大小(以字节为单位)。

与可选标志同步

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

情景 旗帜
指定下载时应验证 MD5 哈希的严格程度。 --check-md5=[NoCheck|LogOnly|FailIfDifferent|FailIfDifferentOrMissing]
基于模式排除文件。 --exclude-path
指定你希望与同步相关的日志条目达到何种详细程度。 --log-level=[WARNING|ERROR|INFO|NONE]
指定如何复制 vhd 文件。 --blob-type=BlockBlob --include-pattern “*.vhd”--blob-type=BlockBlob

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

注释

默认情况下,该 --recursive 标志设置为 true--exclude-pattern--include-pattern标志仅适用于文件名,不适用于文件路径的其他部分。

后续步骤

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

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