凌云时刻 · 技术

导读:阿里云对象存储 OSS 是保存海量数据的平台,支持丰富的应用。在使用过程中难免会遇到误操作、程序 Bug、覆盖写等导致数据被删除的场景,对于数据的丢失会非常着急,后果也非常严重,甚至某些情况下还会影响你的职业生涯。

作者 | 罗庆超

来源 | 凌云时刻(微信号:linuxpk)

1. 背景

阿里云对象存储 OSS 是保存海量数据的平台,支持丰富的应用。在使用过程中难免会遇到误操作、程序 Bug、覆盖写等导致数据被删除的场景,对于数据的丢失会非常着急,后果也非常严重,甚至某些情况下还会影响你的职业生涯。OSS 每年都会遇到多起客户误删除数据的事件,为此 OSS 开发了 版本控制 功能,开启该特性后,可以在误删除数据时通过历史版本找回数据。

2. 版本控制技术介绍

存储空间(Bucket)开启版本控制后,OSS 会为 Bucket 中所有文件(Object)的每个版本指定唯一的 ID 值,且 Bucket 中现有 Object 的内容、权限保持不变。开启版本控制后,还能够防止意外覆盖或者删除 Object ,并允许查询、恢复 Object 的历史版本。详细信息,请参考 官网 介绍。

如上图所示,通过 PUT 操作第一次上传同名 Object (key=example.jpg)时,原始 Object 版本(ID=111111)作为历史版本,生成的新版本(ID=222222)将作为当前版本保存在存储空间中。当再次上传同名 Object 时,原始 Object 版本(包括 ID=111111 以及 ID=222222)将作为历史版本,而生成的新版本(ID=333333)则作为当前版本保存在 Bucket 中。

3. 数据防误删实际操作

 3.1 开启版本控制

开启版本控制有两种方式:

  • 创建时,选择开通 版本控制。

  • 创建后,设置 版本控制。

因此,通过创建后设置版本控制,可以对存量的OSS数据设置版本控制,有效的保障历史数据。

 3.2 上传对象

开启版本控制后,在控制台有 显示对象的历史版本 框,选择该框则可以显示对象的历史版本,如下图所示。

通过在控制台上传同名对象,则会生成多个版本,其中显示(最新版本) 的那个对象是最新对象,更新时间 也是最近的时间。

 3.3 删除对象

开启版本控制后,删除对象并不会真正删除,而是插入 删除标记,如下图所示。

删除对象后,如果没有选择 显示对象的历史版本,则在控制台显示该文件不存在,但实际上对象并未删除,因此可以支持后面的恢复操作。

 3.4 快捷的恢复数据

由于开通了版本保护,数据历史版本并未删除,可以采用下图所示的顺序,DIY 恢复数据。第一步,选中 显示对象的历史版本,此时可以看到历史版本,其中显示 (删除标记) 表示该对象被删除。第二步,删除该 (删除标记)就可以让数据在控制台重新可见。第三步,删除标记成功后,最近的版本被恢复为 (最新版本),此时不管是否选中 显示对象的历史版本,都可以在控制台看到该对象。

因此,开通了版本控制后,可以非常便捷的 DIY 恢复数据,不用再担心“误操作、程序 Bug、覆盖写”等带来的严重影响。

4. 数据误删的批量修复实战

OSS 控制台提供了简单的单对象恢复能力,但是对于删除目录下的海量文件,效率就非常低下了,需要频繁的UI点击,修复速度太慢。因此 OSS 提供了 ossutil 工具,能够批量修复数据,提高修复效率。

 4.1 指定前缀批量修复

整个过程如上图,参考命令为:

$) ./ossutilmac64 ls oss://test-jsj-versioning/prefix/ --all-versions
| grep -rn "true        true           oss://"
| awk -F ' '  '{drcmd=("./ossutilmac64 rm " $10" --version-id "$7);print drcmd}'
| sh

其中,删除标记会显示 "true true",所以只需要删除匹配 前缀 的删除标记,即可恢复对象。

 4.2 指定时间批量修复

整个过程如上图,参考命令为:

./ossutilmac64 ls oss://test-jsj-versioning/pre- --all-versions
| awk '{(dtime=($1" "$2" "$3" "$4));
if ((dtime>="2020-06-16 16:55:05 +0800 CST")
&& (dtime<="2020-06-16 16:55:40 +0800 CST")) print}'
| grep -rn "true        true           oss://"
| awk -F ' '  '{drcmd=("./ossutilmac64 rm " $10" --version-id "$7);print drcmd}'
| sh

只需要删除匹配 时间范围 的删除标记,即可恢复对象。

 4.3 指定修复列表文件批量修复

整个过程如上图,参考命令为:

for i in cat file_list;
do
./ossutilmac64 ls oss://test-jsj-versioning/$i --all-versions
| grep -rn "true        true           oss://"
| awk -F ' '  '{drcmd=("./ossutilmac64 rm " $10" --version-id "$7);print drcmd}'
| sh;
done

只需要遍历 修复列表文件,并删除对象的删除标记,即可恢复对象。

5. 版本控制和生命周期结合实现类回收站(成本优化)

设置版本控制后,即使删除对象也会保留历史版本,这会带来成本的增加。为了支持版本控制的数据恢复,以及成本优化,设计了 版本控制+生命周期的组合方案,如下图所示。

在生命周期配置中,针对 当前版本(删除标记) 和 历史版本 设置策略,可以将其在指定时间后转换为其他类型从而 降低成本,也可以选择在指定天数(比如30天)之后删除,从而在 30 天内仍然可以恢复数据,类似回收站的保留时长。

6. 小结

数据误删除是非常严重的事件,也是难以预防的问题。通过开通对象存储 OSS 的 版本控制 提供了有效的数据保护方案,封装 版本控制+生命周期 的回收站也可以帮助更好的优化成本和恢复体验,希望您能尽快开通,保护您的珍贵数据。

END

往期精彩文章回顾

云原生:重新定义云时代的技术标准

我们能从Matlab被禁中学习什么?

申通上云?技术详解!

Python 命令行库的大乱斗

乘风破浪的中国数据库

SpaceX上天容易,Tesla自动驾驶难

与生命赛跑,Serverless提升AI诊断效率90%

技术创造新商业:云研发时代的效能挑战

生不出孩子怪天气?驳《我国工业软件失去的30年》一文

应云而生,原力觉醒——解读云原生基础设施

长按扫描二维码关注凌云时刻

每日收获前沿技术与科技洞见

程序员误删,暂时不用离职了…… | 凌云时刻相关推荐

  1. “作环保的程序员,从不用百度开始”(转自酷壳)

    酷壳对来自百度搜索引擎的访问会弹窗,但是我的这个行为发酵出了一些事情,这里把这个事情说明如下,我会更新相关的东西.内行看门道,外行看热闹. 事由 2月6日 看到梁斌同学的微博(起因可能是因为梁斌同学在 ...

  2. 某程序员吐槽:提离职后领导开始演戏,假装不知道我工资低,对我进行挽留,怎么办?...

    遇到爱演戏的领导,是配合他演出,还是视而不见? 一个程序员吐槽:找领导沟通离职,领导问他现在的工资是多少?他告知后,领导表示非常震惊,说自己去年跟人事说了要给他涨薪,怎么会这么低?并让他先别提离职,自 ...

  3. 程序员离职原因的最佳回答_程序员面试被问离职原因,如实回答不适应996,面试官答复尴尬了...

    跳槽面试是一个技术活,特别是面试环节,需要在简短的时间里回答大量问题.如果稍不小心,可能就会导致哭笑不得的结局. 最近,有个程序员就在网上吐槽说,自己原单位加班很严重,长期996(即早上9嗲上班,晚上 ...

  4. 爱奇艺程序员落户北京后离职被判赔 10 万,网友:太值了简直白送

    爱奇艺员工落户北京后离职被起诉,被判赔偿 10 万元 综合整理:程序员的那些事(id:iProgrammer) 2月5日,北京法院审判信息网公开一份二审民事判决书,一位彭姓程序员与爱奇艺公司之间的劳动 ...

  5. 某程序员哀叹:提出离职后被公司挽留,千万别留!自己拒绝offer留下来,却惨遭边缘化!...

    ‍‍ ‍‍提了离职被公司挽留,该不该留? 这大概是许多职场人都会遇到的问题,一位程序员用亲身经历告诉大家:千万别留! 楼主提离职后被挽留,拒了offer留下来,没想到领导态度变得很差,还要把他分去比较 ...

  6. 某外包程序员炫耀:不用管绩效和代码质量,工作摸鱼,从不加班,没有pua,外包是真的舒服!...

    业界都说外包员工苦,但一个外包员工却用亲身经历 证明:外包员工完胜正式员工! 他说:外包不用管绩效和代码质量,有活就慢慢做,到点下班.工作时间刷手机,聊天,一个单表的crud做一周,不用排查线上问题. ...

  7. 程序员必修之路---离职与劳动仲裁的纠纷解决

    拓展知识,保护小伙伴们的合法权益,毕竟我们挣得都是血汗钱!

  8. 手握价值70万录用书的程序员提离职,领导:你已升职成功,还走?

    我认为一个人最大的惊喜就是刚刚提出离职,而原公司的上司却告诉你已经成功晋职,同时你还找到一份高薪工作!最近美团的一位工作人员就在网上发了一个帖子称:最近自己遇到一个 瓶颈 ,刚开始很多人还以为出了什么 ...

  9. 程序员:你为什么要离职?

    点击上方"CSDN",选择"置顶公众号" 关键时刻,第一时间送达! 一直以来,职场上有句俗语,"金三银四,金九银十",指的是跳槽的黄金时间为 ...

  10. “算法考核没过,老板找我聊了3个小时”:离职程序员重刷数学题

    前言 霸哥依稀记得,第一次接触算法是在高中的时候,用尺子规范的在作业本上画流程图,不同的形状对应不同的流程,什么椭圆开始与结束,还有各种代表条件.判断的四边形图. 而且,霸哥现在编程的时候依旧有这样的 ...

最新文章

  1. linux中非法内存,Linux下数组非法访问导致内存破坏 —— 引发segmentation fault的原因...
  2. 分布式服务跟踪及Spring Cloud的实现
  3. linux c 实现 http get post 请求
  4. AKOJ-2037-出行方案
  5. c++设计模式:访问者模式(visitor模式)
  6. CSLA .Net学习资料
  7. c语言else匹配问题
  8. 微软发布Enterprise Library 4.1和Unity 1.2
  9. Python 面向对象(二)
  10. Android通话记录CallLog简单摘要
  11. CoreAnimation-CATransaction
  12. Spring配置XML本地提示:点击eclipse属性——选择XML Catalog
  13. 修改web.conf不重启服务的方法
  14. MAMP Pro for Mac(PHP/MySQL开发环境)v6.6
  15. CAD中怎么配置灭火器?
  16. 中国油用牡丹行业需求状况及产销规模预测报告(新版)2022-2027年
  17. 【思维 | 图论 | 高斯消元】所罗门王的宝藏
  18. win10删除右键菜单多余项
  19. WPS2007去广告
  20. 杯具的无线鼠标安装记

热门文章

  1. 思科常用配置实例的常用操作项
  2. MAX5内存盒给至强松绑 IBM X5架构继往开来
  3. sqlalchemy 简介
  4. WeakHashMap回收时机结合JVM 虚拟机GC的一些理解
  5. Struts2之命名空间与Action的三种创建方式
  6. 【转】Nutch源代码研究 网页抓取 数据结构
  7. 解决Win7下JMF读取摄像头错误
  8. oracle和sqlserver数据库直接生成xml
  9. error LNK2019: 无法解析的外部符号 _WinMain@16
  10. python aiohttp百万并发