Start-AzureStorageBlobCopy 与 AzCopy:哪个花费的时间更少
Start-AzureStorageBlobCopy vs AzCopy: which one takes lesser time
我需要将 vhd 从一个订阅移动到另一个订阅。我想知道哪个是更好的选择:Start-AzureStorageBlobCopy
或 AzCopy
?
哪一个花费的时间更少?
他们都将花费相同的时间,因为他们所做的只是启动 Async Server-Side Blob Copy
。它们只是告诉服务开始将 blob 从源复制到目标。实际的复制操作由 Azure Blob 存储服务执行。复制 blob 所需的时间取决于许多因素,包括但不限于:
- 来源和目的地位置。
- 源 blob 的大小。
- 加载存储服务。
运行 未指定选项 /SyncCopy 的 AzCopy 和 运行ning PowerShell 命令 Start-AzureStorageBlobCopy 的持续时间应该相同,因为它们都使用服务器端异步复制。
如果您想跨区域复制 blob,最好考虑在执行 AzCopy 时指定选项 /SyncCopy 以获得一致的速度,因为数据的异步复制将 运行据说您可能会在“复制”操作中看到不一致的服务器背景。
如果指定了/SyncCopy 选项,AzCopy 会先将内容下载到内存,然后再将内容上传回Azure 存储。为了获得更好的/SyncCopy 性能,您应该在区域与源存储帐户相同的VM 中运行 AzCopy。除此之外,VM 大小(决定带宽和 CPU 核心数)也可能会影响复制性能。
他们花的时间不一样。
我试过从一个账户复制到另一个账户,结果差别很大。
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 提供异步复制服务所缺乏的 SLA。 AzCopy 旨在实现最佳性能。使用 the/SyncCopy 参数以获得一致的复制速度。
在大多数情况下,AzCopy
可能比 Start-AzureStorageBlobCopy
更快,因为您启动复制的方式会减少对 Azure 的调用 API:
- [
AzCopy
]1 次调用整个容器(不考虑 blob 计数)
对
- [
Start-AzureStorageBlobCopy
] 由于容器中的 blob 数量,调用了 N 次。
最初我认为这与两者似乎在 Azure 端触发相同的异步副本相同,但是在客户端这将直接可见,正如@Evgeniy 在他的回答中所发现的那样。
在容器场景中的 1 blob 中,理论上两个命令将同时完成。
*编辑(可能的解决方法): 我能够通过以下方式极大地减少我的时间:
- 删除控制台输出和
- 使用
-ConcurrentTaskCount
开关,在我的例子中设置为 100。现在将其缩短到 5 分钟以下。
我需要将 vhd 从一个订阅移动到另一个订阅。我想知道哪个是更好的选择:Start-AzureStorageBlobCopy
或 AzCopy
?
哪一个花费的时间更少?
他们都将花费相同的时间,因为他们所做的只是启动 Async Server-Side Blob Copy
。它们只是告诉服务开始将 blob 从源复制到目标。实际的复制操作由 Azure Blob 存储服务执行。复制 blob 所需的时间取决于许多因素,包括但不限于:
- 来源和目的地位置。
- 源 blob 的大小。
- 加载存储服务。
运行 未指定选项 /SyncCopy 的 AzCopy 和 运行ning PowerShell 命令 Start-AzureStorageBlobCopy 的持续时间应该相同,因为它们都使用服务器端异步复制。
如果您想跨区域复制 blob,最好考虑在执行 AzCopy 时指定选项 /SyncCopy 以获得一致的速度,因为数据的异步复制将 运行据说您可能会在“复制”操作中看到不一致的服务器背景。
如果指定了/SyncCopy 选项,AzCopy 会先将内容下载到内存,然后再将内容上传回Azure 存储。为了获得更好的/SyncCopy 性能,您应该在区域与源存储帐户相同的VM 中运行 AzCopy。除此之外,VM 大小(决定带宽和 CPU 核心数)也可能会影响复制性能。
他们花的时间不一样。
我试过从一个账户复制到另一个账户,结果差别很大。
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 提供异步复制服务所缺乏的 SLA。 AzCopy 旨在实现最佳性能。使用 the/SyncCopy 参数以获得一致的复制速度。
在大多数情况下,AzCopy
可能比 Start-AzureStorageBlobCopy
更快,因为您启动复制的方式会减少对 Azure 的调用 API:
- [
AzCopy
]1 次调用整个容器(不考虑 blob 计数)
对
- [
Start-AzureStorageBlobCopy
] 由于容器中的 blob 数量,调用了 N 次。
最初我认为这与两者似乎在 Azure 端触发相同的异步副本相同,但是在客户端这将直接可见,正如@Evgeniy 在他的回答中所发现的那样。
在容器场景中的 1 blob 中,理论上两个命令将同时完成。
*编辑(可能的解决方法): 我能够通过以下方式极大地减少我的时间:
- 删除控制台输出和
- 使用
-ConcurrentTaskCount
开关,在我的例子中设置为 100。现在将其缩短到 5 分钟以下。