2016-12-06 120 views
1

我嘗試使用下面的代碼從Azure的Blob存儲下載一個大的VHD文件(30GB):天青蟒SDK - AzureHttpError:使用HTTP條件物管不符合規定條件

blob_service.get_blob_to_path('vhds', '20161206092429.vhd', '20161206092429.vhd') 

其中第一個參數是容器名稱,第二個參數是blob名稱,第三個參數是將要保存的本地文件/路徑。這30GB的下載已正常工作,但突然間,我開始收到此錯誤:

AzureHttpError: The condition specified using HTTP conditional header(s) is not met. ConditionNotMet The condition specified using HTTP conditional header(s) is not met. RequestId:88b6ac24-0001-0001-5ec0-4f490d000000 Time:2016-12-06T12:57:13.5389237Z

下載立即運行一段隨機時間確定:有時候真的很短的時間,有時甚至很長一段時間。甚至高達9GB或10GB的全部30GB下載。

根據這個問題:

Azure Blob: "The condition specified using HTTP conditional header(s) is not met"

304: The condition specified using HTTP conditional header(s) is not met

這似乎是一個競爭條件,但沒有太大的幫助,以解決問題,而潛水和處理SDK碼。有什麼建議可以導致這種情況,因爲之前的下載工作正常?可能是Azure雲中斷?

+0

這與停電無關。只是好奇 - 你是否正在積極使用這個vhd(例如,它用作當前正在運行的虛擬機的磁盤)? –

+0

vhd所連接的VM正在運行。但沒有人登錄它。你認爲關閉虛擬機會解決這個問題嗎? –

回答

2

隨着VHD的變化,其相關的ETag將發生變化。一旦發生這種情況,文件複製操作將不再有效。我相信這是您通過致電blob_service.get_blob_to_path()所看到的,因爲您的vhd正在與正在運行的VM一起使用。並且...即使虛擬機是空閒 - 正在運行的操作系統永遠不會真正閒置 - 總會有一些後臺操作,可能會寫入磁盤。

不是說它會確保成功的文件複製操作,但在啓動複製之前需要先關閉虛擬機。

或者,您可以製作VHD的快照,然後通過快照而不是原始vhd進行復制(然後可以在複製操作期間繼續使用vhd)。

0

如果您使用sas_token創建blob服務,它可能只能設置爲持續一個小時。如果是這種情況,您可以將創建時的令牌到期時間更改爲以後的時間點。