將封存的 Blob 解除凍結到線上階層
本文內容
若要讀取封存層中的 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 現在以高優先順序解除凍結。
另請參閱