【问题标题】:Azure blob soft delete and versioning- how to restore files easily?Azure blob 软删除和版本控制 - 如何轻松还原文件?
【发布时间】:2021-05-28 08:50:51
【问题描述】:

我正在尝试了解软删除和版本控制在 Azure 博客存储中的工作原理。

似乎如果您同时打开了软删除和版本控制...您不能只是“取消删除”已删除文件,因为版本控制实际上会将新版本保存为已删除文件。

因此,您必须提升每个已删除文件的最新版本。

但是,如果您有一个嵌套文件夹和数千个 blob 的结构...您不能只提升顶级文件夹的顶级版本...您需要使用 Powershell 列出没有当前版本的文件,并推广它们?你会怎么做呢?

如果没有版本控制,这似乎非常复杂 - 可以从 GUI 获得一个简单的“取消删除”命令。

我错过了什么吗?打开版本控制时,“取消删除”文件夹中包含数千个 blob 的嵌套文件夹结构的最简单方法是什么?

谢谢

【问题讨论】:

    标签: azure azure-blob-storage


    【解决方案1】:

    简单地说,不。

    需要强调的第一点是,blob 存储中的 blob 并不像您想象的那样嵌套。看起来blob存储和本地文件系统一样:一些嵌套的文件夹,里面有很多文件。但实际上这些都是假的,blob存储的存储结构是扁平的。 Blob 存储不是把一个小盒子放在一个盒子里,然后把物品放在小盒子里。事实上,所有的blob都是blob存储的项,没有“小盒子”这样的东西。

    那么,第二点,对于blob存储,软删除操作只支持两个对象,一个是blob,一个是容器。

    查看此文档:

    https://docs.microsoft.com/en-us/azure/storage/blobs/soft-delete-container-overview?tabs=azure-cli#how-container-soft-delete-works

    但是,您只能使用容器软删除来恢复 Blob,如果 容器本身已被删除。恢复已删除的 blob 父容器没有被删除,必须使用blob软删除 或 blob 版本控制。

    所以不幸的是,没有所谓的简单方法。需要对每个blob进行操作,嵌套结构实际上并不存在。

    如果你有兴趣,可以阅读这篇博客:

    https://medium.com/@loopjockey/structuring-azure-blobs-for-functions-8305ba427356

    【讨论】:

      【解决方案2】:

      我完全同意,目前这似乎真的没有记录。我已经针对这个docs page 提出了a github issue,看看他们是否可以改善这种情况。

      我发现的最佳路径如下:

      使用 Azure 存储资源管理器,打开包含软删除的版本化 blob 的容器,然后将下拉列表更改为“所有 blob 和没有当前版本的 blob”。现在您可以选择一个 blob 并点击“升级版本”。删除的 blob 将被恢复,您可以在“活动”窗格中展开操作并点击“将 AzCopy 命令复制到剪贴板”。

      结果将显示如下内容:

      ./azcopy.exe copy 
          "https://accountname.blob.core.windows.net/containername/blobname?<sastoken>&versionid=2021-04-22T11%3A35%3A36.9385599Z" 
          "https://accountname.blob.core.windows.net/containername/blobname?<sastoken>" 
          --overwrite=true 
          --recursive 
          --trusted-microsoft-suffixes=;
      

      现在,基于此,您可以看到您有一个构建块,用于自动化您正在谈论的流程。你现在的问题是找到这个东西:

      versionid=2021-04-22T11%3A35%3A36.9385599Z

      不幸的是,这是您无法推断出的纳秒精度时间戳。我在 powershell、REST API 或 AzCopy 中找不到获取此数据的功能,我拥有找到的唯一方法是 .Net SDK 的 this sample

      所有这一切可能意味着您可以:

      • 使用 Azure.Storage.Blobs 库实现您自己的 C# 控制台应用程序以列出每个 blob 的版本,然后在您知道神奇的版本字符串后执行相关的复制命令
      • 等待 REST API 或 Powershell 库获得列出版本的能力

      【讨论】:

        猜你喜欢
        • 2018-12-24
        • 1970-01-01
        • 2022-10-05
        • 2021-10-09
        • 1970-01-01
        • 2017-11-20
        • 2011-04-27
        • 2012-07-14
        相关资源
        最近更新 更多