【发布时间】:2018-06-02 08:01:03
【问题描述】:
我需要将 vhds 从一个订阅移动到另一个订阅。我想知道哪一个是更好的选择:Start-AzureStorageBlobCopy 或 AzCopy?
哪一个需要更少的时间?
【问题讨论】:
标签: azure azure-storage azure-powershell
我需要将 vhds 从一个订阅移动到另一个订阅。我想知道哪一个是更好的选择:Start-AzureStorageBlobCopy 或 AzCopy?
哪一个需要更少的时间?
【问题讨论】:
标签: azure azure-storage azure-powershell
他们两个都将花费相同的时间,因为他们所做的只是启动Async Server-Side Blob Copy。他们只是告诉服务开始将 blob 从源复制到目标。实际的复制操作由 Azure Blob 存储服务执行。复制 blob 所需的时间取决于许多因素,包括但不限于:
【讨论】:
在不指定选项 /SyncCopy 的情况下运行 AzCopy 并运行 PowerShell 命令 Start-AzureStorageBlobCopy 应该花费相同的持续时间,因为它们都使用服务器端异步复制。
如果您想跨区域复制 blob,最好考虑在执行 AzCopy 时指定选项 /SyncCopy 以实现一致的速度,因为数据的异步复制将在所说的服务器后台运行您可能会在“复制”操作中看到不一致的复制速度。
如果指定了 /SyncCopy 选项,AzCopy 将首先将内容下载到内存,然后将内容上传回 Azure 存储。为了获得更好的 /SyncCopy 性能,您应该在其区域与源存储帐户相同的 VM 中运行 AzCopy。除此之外,VM 大小(决定带宽和 CPU 核心数)也可能会影响复制性能。
更多信息,请参考Getting Started with the AzCopy Command-Line Utility
【讨论】:
他们不会花费相同的时间。
我尝试从一个帐户复制到另一个帐户,结果有很大差异。
Start-AzureStorageBlobCopy -SrcBlob $_.Name -SrcContainer $Container -Context $ContextSrc -DestContainer $Container -DestBlob $_.Name -DestContext $ContextDst --Verbose
这大约需要 2.5 小时。
& .\AzCopy.exe /Source:https://$StorageAccountNameSrc.blob.core.windows.net/$Container /Dest:https://$StorageAccountNameDst.blob.core.windows.net/$Container /SourceKey:$StorageAccountKeySrc /DestKey:$StorageAccountKeyDst /S
这需要几分钟。
我这里有大约 600 Mb 和大约 7000 个文件。
Elapsed time: 00.00:03:41
Finished 44 of total 44 file(s).
[2017/06/22 17:05:35] Transfer summary:
-----------------
Total files transferred: 44
Transfer successfully: 44
Transfer skipped: 0
Transfer failed: 0
Elapsed time: 00.00:00:08
Finished 345 of total 345 file(s).
[2017/06/22 17:06:07] Transfer summary:
-----------------
Total files transferred: 345
Transfer successfully: 345
Transfer skipped: 0
Transfer failed: 0
Elapsed time: 00.00:00:31
有谁知道它为什么如此不同?
【讨论】:
AzCopy 运行的是批量模式,而Start-AzureStorageBlobCopy 是串行运行,因为将 blob 逐个管道化,发送请求以启动传输。即Get-AzureStorageBlob | Start-AzureStorageBlobCopy。这意味着许多单独的网络请求会触发副本。目前尚不清楚Start-AzureStorageBlobCopy 是否可以接受像AzCopy 这样的批量数组传输。
在大多数情况下,AzCopy 可能比Start-AzureStorageBlobCopy 更快,因为您启动复制的方式会减少对 Azure API 的调用:
AzCopy]1 次调用整个容器(不考虑 blob 数量)对
Start-AzureStorageBlobCopy] 由于容器中的 blob 数量,调用了 N 次。最初我认为两者似乎会在 Azure 端触发相同的异步副本,但在客户端这将是直接可见的,正如@Evgeniy 在他的回答中发现的那样。
在容器场景中的 1 blob 中,理论上两个命令会同时完成。
*编辑(可能的解决方法):我能够通过以下方式大大减少我的时间:
-ConcurrentTaskCount 开关,在我的例子中设置为100。现在将其缩短到 5 分钟以内。【讨论】:
AzCopy 提供异步复制服务所缺乏的 SLA。 AzCopy 旨在实现最佳性能。使用/SyncCopy 参数可以获得一致的复制速度。
【讨论】: