如何在 blob 容器中查找热文件或冷文件

Posted

技术标签:

【中文标题】如何在 blob 容器中查找热文件或冷文件【英文标题】:How to find hot or cool files in blob container 【发布时间】:2021-05-18 03:00:43 【问题描述】:

是否有某种方法或脚本可以在您的 blob 容器中搜索哪些文件是热文件或冷文件以将其更改为存档?

我有数千个文件夹和文件,手动完成这项工作是一场噩梦

【问题讨论】:

【参考方案1】:

如果您想将 blob 层(热或冷)更改为存档层,有一个名为 lifecycle management 的内置功能。

您可以只为您的存储帐户设置一个规则(该规则可以根据您的需要应用于容器级别或帐户级别或子文件夹级别),然后 blob 服务可以自动更改层(热和冷)归档.

这是容器级别的示例:

1.导航到天蓝色门户 -> 你的存储帐户 -> 生命周期管理,然后点击“添加规则”:

    在“详细信息”面板 -> 指定“规则名称”,选择“规则范围”(此处为容器级别选择“使用过滤器限制 Blob”)、“Blob 类型”和“Blob 子类型”:

3.在“Base blobs”中,指定如下设置:

4.在“过滤器集”中,输入您的container name 进行前缀匹配:

5.单击“添加”按钮保存规则。 请注意 the rule will be executed after 24 hours。

【讨论】:

谢谢,这非常有用,但我怀疑如果我使用此规则,是否会在我的下一个账单中收取已归档文件的费用 @kintela 生命周期管理是免费的。见this section。【参考方案2】:

您可以使用Powershell 更改访问层。

#Initialize the following with your resource group, storage account, container, and blob names
$rgName = ""
$accountName = ""
$containerName = ""

#Select the storage account and get the context
$storageAccount = Get-AzStorageAccount -ResourceGroupName $rgName -Name $accountName
$ctx = $storageAccount.Context

#list the blobs in a container
$blobs = Get-AzStorageBlob -Container $containerName  -Context $ctx  
foreach($blob in $blobs)  
  
    #if tier not equal "Archive"
    if($blob.AccessTier -ne "Archive")
        #Change the blob’s access tier to archive
        $blob.ICloudBlob.SetStandardBlobTier("Archive")
    
  

另一种方法使用 .Net 中的BlobBatch.SetBlobAccessTier Method SDK。

// Get a connection string to our Azure Storage account.
string connectionString = "<connection_string>";
string containerName = "sample-container";

// Get a reference to a container named "sample-container" and then create it
BlobServiceClient service = new BlobServiceClient(connectionString);
BlobContainerClient container = service.GetBlobContainerClient(containerName);
container.Create();
// Create three blobs named "foo", "bar", and "baz"
BlobClient foo = container.GetBlobClient("foo");
BlobClient bar = container.GetBlobClient("bar");
BlobClient baz = container.GetBlobClient("baz");
foo.Upload(new MemoryStream(Encoding.UTF8.GetBytes("Foo!")));
bar.Upload(new MemoryStream(Encoding.UTF8.GetBytes("Bar!")));
baz.Upload(new MemoryStream(Encoding.UTF8.GetBytes("Baz!")));

// Set the access tier for all three blobs at once
BlobBatchClient batch = service.GetBlobBatchClient();
batch.SetBlobsAccessTier(new Uri[]  foo.Uri, bar.Uri, baz.Uri , AccessTier.Archive);

【讨论】:

如果我在我有数千个子文件夹和文件的根文件夹中执行此脚本,那么层的更改只发生在文件 hoot 或cool 真的吗?存档层中的所有文件都不会受到影响,也不会进行任何读取操作,然后计费为 true? 不确定是否会向 blob(Archive) 收费。获得 blob 后,最好查看当前层。

以上是关于如何在 blob 容器中查找热文件或冷文件的主要内容,如果未能解决你的问题,请参考以下文章

如何获取 Blob 存储中容器中所有文件夹的列表?

如何在 Azure 的子容器中获取 Blob 列表

C# Azure.Storage.Blobs SDK 如何列出和压缩容器中的所有文件并将压缩文件存储在另一个容器中

如何使用 blockblobservice 的 delete_blob 方法删除 azure 容器内的文件夹(blob)?

如何删除 Azure Blob 容器中的文件夹

在 Azure Blob 容器中创建两个文件时,如何在 Azure 数据工厂中创建事件触发器?