使用 AzCopy 与 Azure Blob 存储同步

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

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

注意

当前版本的 AzCopy 不会在其他源和目标之间同步(例如:文件存储或 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

使用可选标志同步

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

方案 标志
指定下载时应验证 MD5 哈希的严格程度。 --check-md5=[NoCheck|LogOnly|FailIfDifferent|FailIfDifferentOrMissing]
基于模式排除文件。 --exclude-path
指定你希望与同步相关的日志条目达到何种详细程度。 --log-level=[WARNING|ERROR|INFO|NONE]

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

注意

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

后续步骤

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

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