如何解决Azure blob 软删除和版本控制 - 如何轻松还原文件?
我正在尝试了解如何在 azure 博客存储中进行软删除和版本控制。
似乎如果您同时打开了软删除和版本控制……您不能只是“取消删除”已删除的文件,因为版本控制实际上会将新版本另存为已删除的文件。
因此,您必须提升每个已删除文件的最新版本。
但是如果你有一个嵌套文件夹和数千个 blob 的结构怎么办……你不能只提升顶级文件夹的顶级版本……你需要使用 Powershell 列出没有当前版本的文件,并宣传他们?你会怎么做?
如果没有版本控制,这看起来非常复杂 - 可以从 GUI 使用一个简单的“取消删除”命令。
我错过了什么吗?在打开版本控制时,“取消删除”文件夹中数千个 blob 的嵌套文件夹结构的最简单方法是什么?
谢谢
解决方法
简单地说,不是。
需要强调的第一点是 blob 存储中的 blob 并没有您想象的那样嵌套。 blob 存储似乎与本地文件系统相同:一些嵌套的文件夹,以及内部的许多文件。但实际上这些都是假的,blob存储的存储结构是扁平的。 Blob 存储不是将一个小盒子放入盒子中,然后将物品放入小盒子中。实际上,所有的 blob 都是 blob 存储项,不存在“小盒子”这样的东西。
那么,第二点,对于blob存储,软删除操作只支持两个对象,一个是blob,一个是容器。
查看此文档:
但是,如果出现以下情况,您只能使用容器软删除来恢复 blob 容器本身已被删除。还原已删除的 blob 父容器没有被删除,必须使用blob软删除 或 blob 版本控制。
很遗憾,没有所谓的简单方法。需要对每个blob进行操作,嵌套结构实际上并不存在。
有兴趣的可以看看这篇博客:
https://medium.com/@loopjockey/structuring-azure-blobs-for-functions-8305ba427356
,我完全同意,目前这似乎真的没有记录。我已经提出 a github issue 反对这个 docs page,看看他们是否可以改善情况。
我发现的最佳路径如下:
使用 Azure 存储资源管理器,打开包含软删除的版本化 blob 的容器,然后将下拉列表更改为“所有 blob 和没有当前版本的 blob”。现在您可以选择一个 blob 并点击“Promote Version”。删除的 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 中找不到任何功能来获取这些数据,我找到的唯一方法是 this sample 用于 .Net SDK。
所有这些可能意味着您可以:
- 使用 Azure.Storage.Blobs 库实现您自己的 C# 控制台应用程序以列出每个 blob 的版本,然后执行相关的复制命令,现在您知道了神奇的版本字符串
- 等待 REST API 或 Powershell 库获得列出版本的能力
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。