2013-08-16 71 views
0

我复制一个blob和从一个Azure存储帐户,它的另一个相关快照,使用启动AzureStorageBlobCopy:复制蔚蓝BLOB正在更新

$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或其快照之一?

+0

你得到的错误信息是什么?你是否收到'412 Precondition Failed'错误信息? –

回答

1

在这种MSDN article,异步的团块副本主题中详细讨论。具体来说,它讨论了复制操作如何锁定到斑点的ETag,并且如果ETag改变(例如,您更改了斑点),则复制失败。

为了避免这种情况,文章建议在blob上获得租约。

你可以做的另一件事是快照复制到新斑块,作为快照将不会被修改。

+0

我也看过那篇文章。问题是源blob包含一个实时系统的数据库,因此获得租约并不具吸引力。此外,快照仅包含与底层blob的差异,所以当底层blob更改时(blob更改时,差异变大),快照也会更改。 – user1147862

+0

客户现在决定忍受这样的限制,即他们不能在系统正式运行时复制blob(他们会在部署新版本后立即离线)。 – user1147862

+0

我认为你误解了快照。一旦拍摄,快照不会改变。忘记底层页面 - 从逻辑上讲,您的应用不会看到快照更改。所以......你拍一张快照,然后你把一张快照拷贝到另一个blob上。这可让您在不使应用离线的情况下制作副本。并且不需要租约。 –