2013-08-16 139 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上。這可讓您在不使應用離線的情況下製作副本。並且不需要租約。 –