Start-AzureStorageBlobCopy vs AzCopy:哪一个花费更少的时间

时间:2015-04-26 18:48:14

标签: azure azure-storage azure-powershell

我需要将vhds从一个订阅移动到另一个订阅。我想知道哪一个是更好的选择:Start-AzureStorageBlobCopyAzCopy

哪一个花费更少的时间?

5 个答案:

答案 0 :(得分:9)

他们所有人都会花费相同的时间来发起/api/users/XX/validate。他们只是告诉服务开始从源到目标复制blob。实际的复制操作由Azure Blob Storage Service执行。复制blob所需的时间取决于许多因素,包括但不限于:

  • 来源&目的地。
  • 源blob的大小。
  • 加载存储服务。

答案 1 :(得分:2)

运行AzCopy而不指定选项/ SyncCopy并运行PowerShell命令Start-AzureStorageBlobCopy应该使用相同的持续时间,因为它们都使用服务器端异步复制。

如果您想跨区域复制blob,最好在执行AzCopy时考虑指定选项/ SyncCopy以实现一致的速度,因为数据的异步复制将在后台运行据说服务器可能会在“复制”操作中看到不一致的复制速度。

如果指定了/ SyncCopy选项,AzCopy将首先将内容下载到内存,然后将内容上载回Azure存储。为了实现/ SyncCopy的更好性能,您应该在其区域与源存储帐户相同的VM中运行AzCopy。除此之外,VM大小(决定带宽和CPU核心数量)也可能会影响复制性能。

有关详细信息,请参阅Getting Started with the AzCopy Command-Line Utility

答案 2 :(得分:1)

他们不会在同一时间。

我试图从一个帐户复制到另一个帐户,并且有很大的不同。

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

有谁知道为什么它如此不同?

答案 3 :(得分:0)

AzCopy提供了Async复制服务所缺乏的SLA。 AzCopy旨在实现最佳性能。使用/ SyncCopy参数可获得一致的复制速度。

答案 4 :(得分:0)

在大多数情况下,AzCopy可能比Start-AzureStorageBlobCopy更快,因为您可以启动副本,从而减少对Azure API的调用:

  • [AzCopy] 1调用整个容器(无论blob计数)

VS

  • [Start-AzureStorageBlobCopy]由于容器中blob的数量而导致的N次调用。

最初我认为它们似乎都会在Azure端触发相同的异步副本,但在客户端,这将直接显示为@Evgeniy在他的答案中找到。

在1 blob in container场景中,理论上两个命令都会同时完成。

*编辑(可能的解决方法):我能够大大减少我的时间:

  1. 删除控制台输出AND
  2. 使用-ConcurrentTaskCount开关,在我的情况下设置为100。现在减少到不到5分钟。