若要讀取封存層中的 Blob,您必須先將 Blob 解除凍結至線上 (經常性存取、非經常性存取或極非經常性存取) 層。 您可以使用下列兩種方式的其中一個來將 Blob 解除凍結:
- 使用複製 Blob 作業,將其複製到經常性存取層、非經常性存取層或極非經常性存取層中的新 Blob。
- 使用設定 Blob 層作業,將其階層從封存層變更為經常性存取層、非經常性存取層或極非經常性存取層。
將 Blob 解除凍結時,您可以將作業的優先順序指定為標準優先順序或高優先順序。 標準優先順序的解除凍結作業最多可能需要 15 小時才能完成。 高優先順序的作業優先於標準優先順序的要求,而且大小低於 10 GB 的物件可以在一小時內完成。 當作業擱置時,您可以將解除凍結優先順序從標準變更為高。
您可以設定 Azure 事件方格,在解除凍結完成時引發事件,並在回應中執行應用程式程式碼。 若要了解如何處理完成 Blob 解除凍結作業時執行 Azure 函式的事件,請參閱執行 Azure 函式以回應 Blob 解除凍結事件。
如需有關解除凍結 Blob 的詳細資訊,請參閱將 Blob 從封存層解除凍結。
使用複製作業將 Blob 解除凍結
若要透過將 Blob 複製到線上層,將 Blob 從封存層解除凍結,請使用 PowerShell、Azure CLI 或其中一個 Azure 儲存體用戶端程式庫。 請記住,當您將封存的 Blob 複製到線上層時,來源和目的地 Blob 必須有不同的名稱。
在相同的儲存體帳戶中才支援將封存的 Blob 複製到線上目的地層。 從服務版本 2021-02-12 開始,只要目的地帳戶與來源帳戶位於相同的區域,即可將封存的 Blob 複製到不同的儲存體帳戶。
複製作業完成之後,目的地 Blob 會出現在封存層中。 接著,目的地 Blob 會解除凍結至您在複製作業中指定的線上層。 當目的地 Blob 完全解除凍結後,就會在新的線上層中變成可用狀態。
將 Blob 解除凍結至相同的儲存體帳戶
下列範例會顯示如何將已封存的 Blob 複製到相同儲存體帳戶中經常性存取層的 Blob 中。
巡覽至 Azure 入口網站的 [來源儲存體帳戶]。
在儲存體帳戶的瀏覽窗格中,選取 [儲存體瀏覽器]。
在儲存體瀏覽器中,瀏覽至封存 Blob 的位置、選取 Blob 旁邊出現的核取方塊,然後選取 [複製] 按鈕。
瀏覽至您要放置已解除凍結 Blob 的容器,然後選取 [貼上] 按鈕。
[貼上封存 Blob] 對話方塊隨即出現。
注意
如果您在與來源 Blob 位於相同位置時選取 [貼上] 按鈕,則出現在 [目的地 Blob 名稱] 欄位中的預設名稱會包含數字尾碼。 這可確保來源和目的地 Blob 具有不同的名稱。 如果想要,您可以變更此名稱,只要該名稱與來源 Blob 的名稱不同。
在 [貼上封存 Blob] 對話方塊中,選擇存取層和解除凍結優先順序。 然後,選取 [貼上],將 Blob 解除凍結。
重要
請不要在來源 Blob 重新凍結時將其刪除。
若要使用 PowerShell 將封存的 Blob 複製到線上層,請呼叫 Start-AzStorageBlobCopy 命令,並指定目標層和解除凍結優先順序。 請記得以您自己的值取代角括弧中的預留位置:
# Initialize these variables with your values.
$rgName = "<resource-group>"
$accountName = "<storage-account>"
$srcContainerName = "<source-container>"
$destContainerName = "<dest-container>"
$srcBlobName = "<source-blob>"
$destBlobName = "<dest-blob>"
# Get the storage account context
$ctx = (Get-AzStorageAccount `
-ResourceGroupName $rgName `
-Name $accountName).Context
# Copy the source blob to a new destination blob in hot tier with Standard priority.
Start-AzStorageBlobCopy -SrcContainer $srcContainerName `
-SrcBlob $srcBlobName `
-DestContainer $destContainerName `
-DestBlob $destBlobName `
-StandardBlobTier Hot `
-RehydratePriority Standard `
-Context $ctx
若要使用 Azure CLI 將封存的 Blob 複製到線上層,請呼叫 az storage blob copy start 命令,並指定目標層和解除凍結優先順序。 請記得以自有值來取代角括弧中的預留位置:
az storage blob copy start \
--source-container <source-container> \
--source-blob <source-blob> \
--destination-container <dest-container> \
--destination-blob <dest-blob> \
--account-name <storage-account> \
--tier hot \
--rehydrate-priority standard \
--auth-mode login
將 Blob 解除凍結至相同區域中的不同儲存體帳戶
下列範例會顯示如何將已封存的 Blob 複製到不同儲存體帳戶中經常性存取層的 Blob 中。
巡覽至 Azure 入口網站的 [來源儲存體帳戶]。
在儲存體帳戶的瀏覽窗格中,選取 [儲存體瀏覽器]。
在儲存體瀏覽器中,瀏覽至封存 Blob 的位置、選取 Blob 旁邊出現的核取方塊,然後選取 [複製] 按鈕。
瀏覽至目的地儲存體帳戶,然後在瀏覽窗格中,選取 [儲存器瀏覽器]。
瀏覽至您要放置已解除凍結 Blob 的容器,然後選取 [貼上] 按鈕。
[貼上封存 Blob] 對話方塊隨即出現。
在 [貼上封存 Blob] 對話方塊中,選擇存取層和解除凍結優先順序。 然後,選取 [貼上],將 Blob 解除凍結。
重要
請不要在來源 Blob 重新凍結時將其刪除。
若要使用 PowerShell 將已封存的 Blob 複製到不同儲存體帳戶中線上層中的 Blob,請確定您已安裝 Az.Storage 模組版本 4.4.0 或更新版本。 接下來,呼叫 Start-AzStorageBlobCopy 命令,並指定目標線上層和解除凍結的優先順序。 您必須針對已封存的來源 Blob 指定具備讀取權限的共用存取簽章 (SAS)。
下列範例會顯示如何將已封存的 Blob 複製到不同儲存體帳戶中的經常性存取層。 請記得以自有值來取代角括弧中的預留位置:
$rgName = "<resource-group>"
$srcAccount = "<source-account>"
$destAccount = "<dest-account>"
$srcContainer = "<source-container>"
$destContainer = "<dest-container>"
$srcBlob = "<source-blob>"
$destBlob = "<destination-blob>"
# Get the destination account context
$destCtx = New-AzStorageContext -StorageAccountName $destAccount -UseConnectedAccount
# Get the source account context
$srcCtx = New-AzStorageContext -StorageAccountName $srcAccount -UseConnectedAccount
# Get the SAS URI for the source blob
$srcBlobUri = New-AzStorageBlobSASToken -Container $srcContainer `
-Blob $srcBlob `
-Permission rwd `
-ExpiryTime (Get-Date).AddDays(1) `
-FullUri `
-Context $srcCtx
# Start the cross-account copy operation
Start-AzStorageBlobCopy -AbsoluteUri $srcBlobUri `
-DestContainer $destContainer `
-DestBlob $destBlob `
-DestContext $destCtx `
-StandardBlobTier Hot `
-RehydratePriority Standard
若要使用 Azure CLI 將已封存的 Blob 複製到不同儲存體帳戶中線上層中的 Blob,請確定您已安裝版本 2.35.0 或更新版本。 接下來,呼叫 az 儲存體 Blob 複製開始命令,並指定目標線上層和解除凍結的優先順序。 您必須針對已封存的來源 Blob 指定具備讀取權限的共用存取簽章 (SAS)。
下列範例會顯示如何將已封存的 Blob 複製到不同儲存體帳戶中的經常性存取層。 請記得以自有值來取代角括弧中的預留位置:
# Specify the expiry interval
end=`date -u -d "1 day" '+%Y-%m-%dT%H:%MZ'`
# Get a SAS for the source blob
srcBlobUri=$(az storage blob generate-sas \
--account-name <source-account> \
--container <source-container> \
--name <archived-source-blob> \
--permissions rwd \
--expiry $end \
--https-only \
--full-uri \
--as-user \
--auth-mode login | tr -d '"')
# Copy to the destination blob in the hot tier
az storage blob copy start \
--source-uri $srcBlobUri \
--account-name <dest-account> \
--destination-container <dest-container> \
--destination-blob <dest-blob> \
--tier Hot \
--rehydrate-priority Standard \
--auth-mode login
從次要區域解除凍結
如果您已將儲存體帳戶設定為使用讀取權限異地備援儲存體 (RA-GRS),則可以將位於次要區域的封存 Blob,複製到位於相同次要區域中不同儲存體帳戶中的線上層。
若要從次要區域解除凍結,請使用上一節 (將 Blob 解除凍結至相同區域中的不同儲存體帳戶) 示範的相同指引。 將尾碼 -secondary
附加至來源端點的帳戶名稱。 例如,若 Blob 儲存體主要端點是 myaccount.blob.core.windows.net
,則次要端點便會是 myaccount-secondary.blob.core.windows.net
。 主要和次要端點的儲存體帳戶帳戶存取金鑰為相同。
若要深入了解如何取得次要區域的讀取權限,請參閱次要區域中的資料讀取存取。
藉由變更 Blob 的階層來將其解除凍結
若要透過將 Blob 的階層從封存變更為經常性存取或非經常性存取來解除凍結 Blob,請使用 Azure 入口網站、PowerShell 或 Azure CLI。
若要在 Azure 入口網站中將 Blob 的階層從封存變更為經常性存取或非經常性存取,請遵循下列步驟:
在 Azure 入口網站中找出要解除凍結的 Blob。
選取頁面右側的 [更多] 按鈕。
選取 [變更階層]。
從 [存取層] 下拉式清單中選取目標存取層。
從 [解除凍結優先順序] 下拉式清單中,選取所需的解除凍結優先順序。 請記住,若將解除凍結優先順序設為高,通常可加快解除凍結的速度,但也會產生更高的成本。
選取儲存按鈕。
若要使用 PowerShell 將 Blob 的階層從封存變更為經常性存取或非經常性存取,請使用 Blob 的 BlobClient 屬性傳回該 Blob 的 .NET 參考,然後在該參考上呼叫 SetAccessTier 方法。 請記得以自有值來取代角括弧中的預留位置:
# Initialize these variables with your values.
$rgName = "<resource-group>"
$accountName = "<storage-account>"
$containerName = "<container>"
$blobName = "<archived-blob>"
# Get the storage account context
$ctx = (Get-AzStorageAccount `
-ResourceGroupName $rgName `
-Name $accountName).Context
# Change the blob's access tier to hot with Standard priority.
$blob = Get-AzStorageBlob -Container $containerName -Blob $blobName -Context $ctx
$blob.BlobClient.SetAccessTier("Hot", $null, "Standard")
若要使用 Azure CLI 將 Blob 的階層從封存變更為經常性存取或非經常性存取,請呼叫 az storage blob set-tier 命令。 請記得以自有值來取代角括弧中的預留位置:
az storage blob set-tier \
--account-name <storage-account> \
--container-name <container> \
--name <archived-blob> \
--tier Hot \
--rehydrate-priority Standard \
--auth-mode login
若要使用 AzCopy 將 Blob 的階層從封存層變更為經常性存取層或非經常性存取層,請使用 azcopy set-properties 命令,並將 -block-blob-tier
參數設定為所需的層,並將 --rehydrate-priority
設定為 standard
或 high
。 根據預設,此參數設定為 standard
。 若要深入了解每個選項的取捨,請參閱解除凍結優先順序。
注意
此範例會以單引號 ('') 括住路徑引數。 除了 Windows 命令殼層 (cmd.exe) 以外,在所有命令殼層中使用單引號。 如果您使用 Windows 命令殼層 (cmd.exe),請使用雙引號 ("") 括住路徑引數,而非單引號 ('')。
此範例也不會包含 SAS 權杖,因為其假設您已使用 Microsoft Entra ID 提供的授權認證。 若要了解向儲存體服務提供授權認證的方式,請參閱開始使用 AzCopy 一文。
azcopy set-properties 'https://<storage-account-name>.blob.core.windows.net/<container-name>/<blob-name>' --block-blob-tier=hot --rehydrate-priority=high
將一組大量的 Blob 解除凍結
若要將容器或資料夾中的封存 Blob 解除凍結至經常性存取層或非經常性存取層,請透過 Blob 列舉,並在每個 Blob 上呼叫「設定 Blob 層」作業。 下列範例說明如何執行這項作業:
# Initialize these variables with your values.
$rgName = "<resource-group>"
$accountName = "<storage-account>"
$containerName = "<container>"
$folderName = "<folder>/"
$ctx = (Get-AzStorageAccount -ResourceGroupName $rgName -Name $accountName).Context
$blobCount = 0
$Token = $Null
$MaxReturn = 5000
do {
$Blobs = Get-AzStorageBlob -Context $ctx -Container $containerName -Prefix $folderName -MaxCount $MaxReturn -ContinuationToken $Token
if($Blobs -eq $Null) { break }
#Set-StrictMode will cause Get-AzureStorageBlob returns result in different data types when there is only one blob
if($Blobs.GetType().Name -eq "AzureStorageBlob")
{
$Token = $Null
}
else
{
$Token = $Blobs[$Blobs.Count - 1].ContinuationToken;
}
$Blobs | ForEach-Object {
if(($_.BlobType -eq "BlockBlob") -and ($_.AccessTier -eq "Archive") ) {
$_.BlobClient.SetAccessTier("Hot", $null, "Standard")
}
}
}
While ($Token -ne $Null)
az storage blob list --account-name $accountName --account-key $key \
--container-name $containerName --prefix $folderName \
--query "[?properties.blobTier == 'Archive'].name" --output tsv \
| xargs -I {} -P 10 \
az storage blob set-tier --account-name $accountName --account-key $key \
--container-name $containerName --tier Hot --name "{}"
若要一次將大量的 Blob 解除凍結,請呼叫 Blob 批次作業,以大量作業的形式呼叫 Set Blob Tier。
如需示範如何執行批次作業的程式碼範例,請參閱 AzBulkSetBlobTier。
檢查解除凍結作業的狀態
當 Blob 解除凍結時,您可以使用 Azure 入口網站、PowerShell 或 Azure CLI 來檢查其狀態和解除凍結優先順序。 狀態屬性可能會根據解除凍結作業的目標層,傳回 rehydrate-pending-to-hot 或 rehydrate-pending-to-cool。 解除凍結優先順序屬性會傳回「標準」或「高」。
請記住,封存 Blob 的解除凍結可能需要最多 15 小時的時間,重複輪詢 Blob 的狀態來判斷解除凍結是否完成是沒有效率的做法。 使用 Azure 事件方格來擷取解除凍結完成時所引發的事件,可提供更好的效能和成本最佳化。 若要了解引發 Blob 解除凍結相關事件時應如何執行 Azure 函式,請參閱執行 Azure 函式以回應 Blob 解除凍結事件。
若要在 Azure 入口網站中檢查擱置中解除凍結作業的狀態和優先順序,請顯示 Blob 的 [變更階層] 對話方塊:
當解除凍結完成時,您可以在 Azure 入口網站中看到,完整解除凍結的 Blob 現在會出現在目標線上層中。
若要使用 PowerShell 檢查擱置中解除凍結作業的狀態和優先順序,請呼叫 Get-AzStorageBlob 命令,並檢查 Blob 的 ArchiveStatus 和 RehydratePriority 屬性。 如果解除凍結是複製作業,請檢查目的地 Blob 上的這些屬性。 請記得以您自己的值取代角括弧中的預留位置:
$rehydratingBlob = Get-AzStorageBlob -Container $containerName -Blob $blobName -Context $ctx
$rehydratingBlob.BlobProperties.ArchiveStatus
$rehydratingBlob.BlobProperties.RehydratePriority
若要使用 Azure CLI 檢查擱置中解除凍結作業的狀態和優先順序,請呼叫 az storage blob show 命令,並檢查目的地 Blob 的 rehydrationStatus 和 rehydratePriority 屬性。 請記得以您自己的值取代角括弧中的預留位置:
az storage blob show \
--account-name <storage-account> \
--container-name <container> \
--name <blob> \
--query '[rehydratePriority, properties.rehydrationStatus]' \
--output tsv \
--auth-mode login
變更擱置作業的解除凍結優先順序
當標準優先順序的解除凍結作業擱置時,您可以將 Blob 的解除凍結優先順序設定從標準變更為高,以更快速地將 Blob 解除凍結。
擱置作業的解除凍結優先順序設定無法從「高」降低至「標準」。 也請記住,變更解除凍結優先順序可能會產生費用影響。 如需詳細資訊,請參閱將 Blob 從封存層解除凍結。
變更「設定 Blob 階層」擱置作業的解除凍結優先順序
若要在標準優先順序的設定 Blob 階層作業擱置時,變更解除凍結優先順序,請使用 Azure 入口網站、PowerShell、Azure CLI 或其中一個 Azure 儲存體用戶端程式庫。
若要使用 Azure 入口網站來變更擱置作業的解除凍結優先順序,請遵循下列步驟:
瀏覽至您要變更其解除凍結優先順序的 Blob,然後選取 Blob。
選取 [變更階層] 按鈕。
在 [變更階層] 對話方塊中,將解除凍結 Blob 的存取層設定為目標線上存取層 (經常性存取或非經常性存取層)。 [封存狀態] 欄位會顯示目標線上層。
在 [解除凍結優先順序] 下拉式清單中,將優先順序設定為 [高]。
選取 [儲存]。
若要使用 PowerShell 來變更擱置作業的解除凍結優先順序,請確定您已安裝 Az.Storage 模組 (3.12.0 版或更新版本)。 接下來,從服務中取得 Blob 的屬性。 必須執行此步驟,以確保您擁有屬性設定最新的物件。 最後,使用 Blob 的 BlobClient 屬性傳回 Blob 的 .NET 參考,然後在該參考上呼叫 SetAccessTier 方法。
# Get the blob from the service.
$rehydratingBlob = Get-AzStorageBlob -Container $containerName -Blob $blobName -Context $ctx
# Verify that the current rehydration priority is Standard.
if ($rehydratingBlob.BlobProperties.RehydratePriority -eq "Standard")
{
# Change rehydration priority to High, using the same target tier.
if ($rehydratingBlob.BlobProperties.ArchiveStatus -eq "rehydrate-pending-to-hot")
{
$rehydratingBlob.BlobClient.SetAccessTier("Hot", $null, "High")
"Changing rehydration priority to High for blob moving to hot tier."
}
if ($rehydratingBlob.BlobProperties.ArchiveStatus -eq "rehydrate-pending-to-cool")
{
$rehydratingBlob.BlobClient.SetAccessTier("Cool", $null, "High")
"Changing rehydration priority to High for blob moving to cool tier."
}
}
若要使用 Azure CLI 來變更擱置作業的解除凍結優先順序,請先確定您已安裝 Azure CLI (2.29.2 版或更新版本)。 如需安裝 Azure CLI 的詳細資訊,請參閱如何安裝 Azure CLI。
接下來,呼叫 az storage blob set-tier 命令,並將 --rehydrate-priority
參數設定為高。 目標層 (經常性存取或非經常性存取層) 必須是您原本為解除凍結作業指定的相同階層。 請記得以自有值來取代角括弧中的預留位置:
# Update the rehydration priority for a blob moving to the hot tier.
az storage blob set-tier \
--account-name <storage-account> \
--container-name <container> \
--name <blob> \
--tier Hot \
--rehydrate-priority High \
--auth-mode login
# Show the updated property values.
az storage blob show \
--account-name <storage-account> \
--container-name <container> \
--name <blob> \
--query '[rehydratePriority, properties.rehydrationStatus]' \
--output tsv \
--auth-mode login
變更「複製 Blob」擱置作業的解除凍結優先順序
當您透過將封存的 Blob 複製到線上層來將 Blob 解除凍結時,Azure 儲存體會立即在封存層中建立目的地 Blob。 目的地 Blob 接著會以複製作業所指定的優先順序,解除凍結至目標層。 如需有關使用複製作業將封存 Blob 解除凍結的詳細資訊,請參閱將封存的 Blob 複製到線上層。
若要以標準優先順序執行從封存層到線上層的複製作業,請使用 PowerShell、Azure CLI 或其中一個 Azure 儲存體用戶端程式庫。 如需詳細資訊,請參閱使用複製作業將 Blob 解除凍結。 接下來,若要將擱置中解除凍結的解除凍結優先順序從標準變更為高,請在目的地 Blob 上呼叫 Set Blob Tier,並指定目標層。
當您啟始複製作業之後,您會在 Azure 入口網站中看到來源和目的地 Blob 都在封存層中。 目的地 Blob 會以標準優先順序解除凍結。
若要變更目的地 Blob 的解除凍結優先順序,請遵循下列步驟:
- 選取目的地 Blob。
- 選取 [變更階層] 按鈕。
- 在 [變更階層] 對話方塊中,將解除凍結 Blob 的存取層設定為目標線上存取層 (經常性存取或非經常性存取層)。 [封存狀態] 欄位會顯示目標線上層。
- 在 [解除凍結優先順序] 下拉式清單中,將優先順序設定為 [高]。
- 選取 [儲存]。
目的地 Blob 的 [屬性] 頁面現在會顯示其以高優先順序解除凍結。
在您起始複製作業之後,請檢查目的地 Blob 的屬性。 您會看到目的地 Blob 在封存層中,並以標準優先順序解除凍結。
# Initialize these variables with your values.
$rgName = "<resource-group>"
$accountName = "<storage-account>"
$destContainerName = "<container>"
$destBlobName = "<destination-blob>"
# Get the storage account context
$ctx = (Get-AzStorageAccount `
-ResourceGroupName $rgName `
-Name $accountName).Context
# Get properties for the destination blob.
$destinationBlob = Get-AzStorageBlob -Container $destContainerName `
-Blob $destBlobName `
-Context $ctx
$destinationBlob.BlobProperties.AccessTier
$destinationBlob.BlobProperties.ArchiveStatus
$destinationBlob.BlobProperties.RehydratePriority
接下來,透過 PowerShell 呼叫 SetAccessTier 方法,將目的地 Blob 的解除凍結優先順序變更為高,如變更「設定 Blob 階層」擱置作業的解除凍結優先順序中所述。 目標層 (經常性存取或非經常性存取層) 必須是您原本為解除凍結作業指定的相同階層。 再次檢查屬性,以確認 Blob 現在以高優先順序解除凍結。
在您起始複製作業之後,請檢查目的地 Blob 的屬性。 您會看到目的地 Blob 在封存層中,並以標準優先順序解除凍結。
az storage blob show \
--account-name <storage-account> \
--container-name <container> \
--name <blob> \
--query '[rehydratePriority, properties.rehydrationStatus]' \
--output tsv \
--auth-mode login
接下來,呼叫 az storage blob set-tier 命令,並將 --rehydrate-priority
參數設定為高,如變更「設定 Blob 階層」擱置作業的解除凍結優先順序中所述。 目標層 (經常性存取或非經常性存取層) 必須是您原本為解除凍結作業指定的相同階層。 再次檢查屬性,以確認 Blob 現在以高優先順序解除凍結。
另請參閱