快开启阿里云对象存储 OSS 防误删新功能

1、背景

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

2、版本控制技术介绍

存储空间(Bucket)开启版本控制后,OSS 会为 Bucket 中全部文件(Object)的每一个版本指定惟一的 ID 值,且 Bucket 中现有 Object 的内容、权限保持不变。开启版本控制后,还可以防止意外覆盖或者删除 Object ,并容许查询、恢复 Object 的历史版本。详细信息,请参考 官网 介绍。
原理.png
如上图所示,经过 PUT 操做第一次上传同名 Object (key=example.jpg)时,原始 Object 版本(ID=111111)做为历史版本,生成的新版本(ID=222222)将做为当前版本保存在存储空间中。当再次上传同名 Object 时,原始 Object 版本(包括 ID=111111 以及 ID=222222)将做为历史版本,而生成的新版本(ID=333333)则做为当前版本保存在 Bucket 中。工具

3、数据防误删实际操做

3.1 开启版本控制

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

  • 建立时,选择开通 版本控制。
  • 建立后,设置 版本控制。

开通.png

所以,经过建立后设置版本控制,能够对存量的OSS数据设置版本控制,有效的保障历史数据。阿里云

3.2 上传对象

开启版本控制后,在控制台有 显示对象的历史版本 框,选择该框则能够显示对象的历史版本,以下图所示。
上传.png
经过在控制台上传同名对象,则会生成多个版本,其中显示 (最新版本) 的那个对象是最新对象,更新时间 也是最近的时间。spa

3.3 删除对象

开启版本控制后,删除对象并不会真正删除,而是插入 删除标记,以下图所示。
删除.png
删除对象后,若是没有选择 显示对象的历史版本,则在控制台显示该文件不存在,但实际上对象并未删除,所以能够支持后面的恢复操做。设计

3.4 快捷的恢复数据

因为开通了版本保护,数据历史版本并未删除,能够采用下图所示的顺序,DIY 恢复数据。第一步,选中 显示对象的历史版本,此时能够看到历史版本,其中显示 (删除标记) 表示该对象被删除。第二步,删除该 (删除标记) 就可让数据在控制台从新可见。第三步,删除标记成功后,最近的版本被恢复为 (最新版本),此时不论是否选中 显示对象的历史版本,均可以在控制台看到该对象。
恢复.png
所以,开通了版本控制后,能够很是便捷的 DIY 恢复数据,不用再担忧“误操做、程序 Bug、覆盖写”等带来的严重影响。3d

4、数据误删的批量修复实战(工具)

OSS 控制台提供了简单的单对象恢复能力,可是对于删除目录下的海量文件,效率就很是低下了,须要频繁的UI点击,修复速度太慢。所以 OSS 提供了 ossutil 工具,可以批量修复数据,提升修复效率。版本控制

4.1 指定前缀批量修复

按前缀.png
整个过程如上图,参考命令为:
$) ./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",因此只须要删除匹配 前缀 的删除标记,便可恢复对象。code

4.2 指定时间批量修复

按时间.png
整个过程如上图,参考命令为:
./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
只须要删除匹配 时间范围 的删除标记,便可恢复对象。htm

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

按修复列表文件.png
整个过程如上图,参考命令为:
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、版本控制和生命周期结合实现类回收站(成本优化)

设置版本控制后,即便删除对象也会保留历史版本,这会带来成本的增长。为了支持版本控制的数据恢复,以及成本优化,设计了 版本控制+生命周期 的组合方案,以下图所示。
回收站.png
在生命周期配置中,针对 当前版本(删除标记)历史版本 设置策略,能够将其在指定时间后转换为其余类型从而下降成本,也能够选择在指定天数(好比30天)以后删除,从而在 30 天内仍然能够恢复数据,相似回收站的保留时长。

6、小结

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

相关文章
相关标签/搜索