【问题标题】:Copying azure blob that is being updated复制正在更新的 azure blob
【发布时间】:2013-08-16 20:35:08
【问题描述】:

我正在使用 Start-AzureStorageBlobCopy 将 Blob 及其关联的快照从一个 Azure 存储帐户复制到另一个帐户:

$status = Start-AzureStorageBlobCopy -SrcContainer $container -SrcBlob $blob 
  -SrcContext $srccontext -DestContainer $container 
  -DestBlob $blob -DestContext $destContext -Force

但是,当另一个应用程序更新 blob 时,复制操作会失败。

$copyState = $status | Get-AzureStorageBlobCopyState 
$copyState.Status -eq "Failed"

有没有办法在更新 blob 时复制 blob 或其快照之一?

【问题讨论】:

  • 您收到的错误信息是什么?你收到412 Precondition Failed 错误消息了吗?

标签: azure


【解决方案1】:

在这个MSDN article 中,详细讨论了异步 blob 复制的主题。特别是,它讨论了复制操作如何锁定 blob 的 ETag,以及如果 ETag 更改(例如您更改了 blob),则复制失败。

为避免这种情况,文章建议对 blob 进行租约。

您可以做的另一件事是将快照复制到新的 blob,因为快照不会被修改。

【讨论】:

  • 我也看过那篇文章。问题是源 blob 包含一个用于实时系统的数据库,因此获得租约没有吸引力。此外,快照只包含与底层 blob 的差异,因此当底层 blob 发生变化时它也会发生变化(当 blob 发生变化时,差异会变得更大)。
  • 客户端现在决定接受这样的限制,即他们不能在系统运行时复制 blob(他们将在系统处于离线状态时在部署新版本后立即复制) .
  • 我认为您误解了快照。快照一旦拍摄,就不会改变。忘记底层页面 - 从逻辑上讲,您的应用不会看到快照更改。所以...您拍摄快照,然后将快照复制到另一个 blob。这使您可以在不使您的应用离线的情况下制作副本。而且不需要租约。
猜你喜欢
  • 2016-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-13
  • 1970-01-01
  • 2023-01-12
  • 2018-12-17
  • 2015-07-01
相关资源
最近更新 更多