若要读取处于存档层的 Blob,必须先将该 Blob 解冻到联机层(热、凉或冷)。 你可以用两种方式给一团水补水:
当你给一个水团补充水合时,你可以将操作的优先级设置为标准优先级或高优先级。 标准优先补水操作可能需要长达15小时完成。 高优先级操作优先于标准优先级请求,对于大小低于10 GB的对象,可能在一小时内完成。 在手术进行期间,你可以将补水优先级从 标准 改为 高 。
你可以配置 Azure 事件网格 在补液完成后触发事件,并响应运行应用代码。 要了解如何处理在blob补水操作完成后运行Azure函数的事件,请参见“响应blob补水事件时运行Azure函数”。
有关 Blob 重新水化的详细信息,请参阅 从存档层重新水化 Blob。
用复制操作给一个blob补充水分
要通过将 blob 从归档层复制到在线层来重新水合,可以使用 Azure 门户、PowerShell、Azure CLI 或 Azure 存储 客户端库之一。 请记住,当你将归档的blob复制到在线层级时,源blob和目的blob必须有不同的名称。
在同一存储账户内,支持将归档的blob复制到在线目的地层。 从服务版本 2021-02-12 开始,只要目标账户与源账户处于同一区域,你可以将已归档的 blob 复制到不同的存储账户。
复制操作完成后,目标 blob 会出现在归档层。 目标 Blob 随后会重新解冻到你在复制操作中指定的联机层。 当目标 Blob 完全复原后,它将在新的联机层中可用。
将 Blob 重新解冻到同一存储帐户
以下示例展示了如何将归档的 blob 复制到同一存储账户热层的 blob。
在 Azure 门户中导航到源存储帐户。
在存储账户的导航面板中,选择 存储浏览器。
在存储浏览器中,导航到归档的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对话框随即显示。
在 粘贴归档块 对话框中,选择访问层级和补水优先级。 然后选择 粘贴 来重新给团块水化。
若要使用 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 storage blob copy start 命令,指定目标在线层和补水优先级。 你必须为归档的源 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.chinacloudapi.cn,则次要终结点是 myaccount-secondary.blob.core.chinacloudapi.cn。 存储帐户的帐户访问密钥对于主要终结点和次要终结点是相同的。
若要详细了解如何获取对次要区域的读取访问权限,请参阅对次要区域中数据的读取访问权限。
通过改变一块的等级来补充水合
要通过将 blob 的层级从归档切换为热或冷来重新水合,可以使用 Azure 门户、PowerShell 或 Azure CLI。
要在 Azure 门户中将 blob 的层级从归档改为热或冷,请遵循以下步骤:
在Azure传送门中找到那个blob以补充水分。
选择页面右侧的 “更多 ”按钮。
选择 更改层级。
在 访问层 下拉列表中选择目标访问层。
在“ 补水优先级 ”下拉菜单中,选择所需的补水优先级。 请记住,将补水优先级设为 高 通常会加快补水速度,但代价也更高。
选择“ 保存 ”按钮。
要用PowerShell将blob的层级从归档切换为热或冷,使用blob的BlobClient属性返回.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")
要将 blob 的层级从 archive 改为 hot 或cool,使用 Azure CLI,调用 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。 若要详细了解每个选项的权衡取舍,请参阅再水化优先级。
Important
使用 AzCopy 更改 blob 层的功能目前为预览版。
有关适用于 beta 版、预览版或尚未正式发布的 Azure 功能的法律条款,请参阅 Azure 预览补充使用条款。
注释
此示例将路径参数括在单引号 ('') 内。 除 Windows Command Shell(cmd.exe)外,在所有命令行界面中使用单引号。 如果使用 Windows Command Shell (cmd.exe),请用双引号(“”)而不是单引号('')将路径参数括起来。
这个例子也没有SAS令牌,因为它假设你已经通过Microsoft Entra ID提供了授权凭证。 请参阅 AzCopy 入门一文,了解如何向存储服务提供授权凭据。
azcopy set-properties 'https://<storage-account-name>.blob.core.chinacloudapi.cn/<container-name>/<blob-name>' --block-blob-tier=hot --rehydrate-priority=high
批量重新水化一组 Blob 对象
要将容器或文件夹中已归档的 blob 重新水化到热层或冷层,请遍历这些 blob,并对每个 blob 调用 Set Blob Tier 操作。 以下示例展示了如何执行此操作:
# 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 Batch 操作,以批量方式调用 Set Blob Tier。
关于如何执行批处理操作的代码示例,请参见 AzBulkSetBlobTier。
检查补水作业状态
在 Blob 解冻期间,你可以使用 Azure 门户、PowerShell 或 Azure CLI 检查其状态和解冻优先级。 状态属性可能返回“ 待补水 -待热”或“ 待补水冷却”,具体取决于补水操作的目标层级。 重新水化优先级属性返回值为 Standard 或 High。
请注意,已存档 Blob 的重新水化过程最长可能需要 15 小时,而反复轮询 Blob 的状态来确定重新水化是否完成,效率很低。 使用 Azure 事件网格 捕捉补水完成后触发的事件,可以带来更好的性能和成本优化。 要了解如何在事件触发 blob rehydration 时运行 Azure 函数,请参见“响应 blob rehydration 事件时运行 Azure 函数”。
要在 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。
更改待处理的集合层级操作的补水优先级
若要在标准优先级 Set Blob Tier 操作处于挂起状态时更改重新水化优先级,请使用 Azure 门户、PowerShell、Azure CLI 或 Azure 存储客户端库。
要通过 Azure 门户更改待处理操作的补水优先级,请按照以下步骤操作:
导航到你想更改补水优先级的那个水块,然后选择那个水滴。
选择 “更改层 ”按钮。
在 “更改层级 ”对话框中,将访问层设置为补水团块的目标在线访问层(热或冷)。
归档状态字段显示目标在线等级。
在“ 补水优先级 ”下拉菜单里,把优先级设为 高。
选择“保存”。
要用PowerShell更改待处理操作的补水优先级,请确保你安装的是 Az.Storage 模块,版本为3.12.0或更高。 接下来,从服务获取blob的属性。 这一步是确保你的对象拥有最新的属性设置所必需的。 最后,利用blob的BlobClient属性返回.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 设置为 High。 目标等级(热或冷)必须是你最初为补水操作指定的同一等级。 请记得将尖括号中的占位符替换为你自己的值:
# 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
更改正在进行中的 Copy Blob 操作的重新解冻优先级
当你通过将已归档的 Blob 复制到联机层来重新水化该 Blob 时,Azure 存储会立即在归档层创建目标 Blob。 然后,目标 Blob 会按照复制操作中指定的优先级重新水化到目标层级。 关于通过复制操作重新加水归档的blob的更多信息,请参见 “将归档blob复制到在线层级”。
要执行从归档层到带有标准优先级的在线层的复制操作,可以使用PowerShell、Azure CLI或Azure 存储客户端库之一。 有关详细信息,请参阅 使用复制操作重新水化 Blob。 接下来,若要将待处理重新解冻操作的优先级从 标准 更改为 高,请对目标 blob 调用 Set Blob Tier 并指定目标层。
启动复制操作后,你会在 Azure 门户中看到,源 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的补水优先级改为 High,详见 “更改待处理的Set 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 参数设置为 High,如 更改处于挂起状态的 Set Blob Tier 操作的重新水化优先级中所述。 目标等级(热或冷)必须是你最初为补水操作指定的同一等级。 再次检查属性,确认 Blob 现在正以高优先级重新水化。
另见