开启阿里云对象存储OSS防误删新功能,保护您珍贵的数据。

一、背景

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

二、版本控制技术介绍

存储空间(Bucket)开启版本控制后,OSS 会为 Bucket 中所有文件(Object)的每个版本指定唯一的 ID 值,且 Bucket 中现有 Object 的内容、权限保持不变。开启版本控制后,还能够防止意外覆盖或者删除 Object ,并允许查询、恢复 Object 的历史版本。详细信息,请参考 官网 介绍。
开启阿里云对象存储OSS防误删新功能,保护您珍贵的数据。_第1张图片
如上图所示,通过 PUT 操作第一次上传同名 Object (key=example.jpg)时,原始 Object 版本(ID=111111)作为历史版本,生成的新版本(ID=222222)将作为当前版本保存在存储空间中。当再次上传同名 Object 时,原始 Object 版本(包括 ID=111111 以及 ID=222222)将作为历史版本,而生成的新版本(ID=333333)则作为当前版本保存在 Bucket 中。

三、数据防误删实际操作

3.1 开启版本控制

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

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

开启阿里云对象存储OSS防误删新功能,保护您珍贵的数据。_第2张图片


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

3.2 上传对象

开启版本控制后,在控制台有 显示对象的历史版本 框,选择该框则可以显示对象的历史版本,如下图所示。
开启阿里云对象存储OSS防误删新功能,保护您珍贵的数据。_第3张图片
通过在控制台上传同名对象,则会生成多个版本,其中显示 (最新版本) 的那个对象是最新对象,更新时间 也是最近的时间。

3.3 删除对象

开启版本控制后,删除对象并不会真正删除,而是插入 删除标记,如下图所示。
开启阿里云对象存储OSS防误删新功能,保护您珍贵的数据。_第4张图片
删除对象后,如果没有选择 显示对象的历史版本,则在控制台显示该文件不存在,但实际上对象并未删除,因此可以支持后面的恢复操作。

3.4 快捷的恢复数据

由于开通了版本保护,数据历史版本并未删除,可以采用下图所示的顺序,DIY 恢复数据。第一步,选中 显示对象的历史版本,此时可以看到历史版本,其中显示 (删除标记) 表示该对象被删除。第二步,删除该 (删除标记) 就可以让数据在控制台重新可见。第三步,删除标记成功后,最近的版本被恢复为 (最新版本),此时不管是否选中 显示对象的历史版本,都可以在控制台看到该对象。
开启阿里云对象存储OSS防误删新功能,保护您珍贵的数据。_第5张图片
因此,开通了版本控制后,可以非常便捷的 DIY 恢复数据,不用再担心“误操作、程序 Bug、覆盖写”等带来的严重影响。

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

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

4.1 指定前缀批量修复

开启阿里云对象存储OSS防误删新功能,保护您珍贵的数据。_第6张图片
整个过程如上图,参考命令为:
$) ./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 指定时间批量修复

开启阿里云对象存储OSS防误删新功能,保护您珍贵的数据。_第7张图片
整个过程如上图,参考命令为:
./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 指定修复列表文件批量修复

开启阿里云对象存储OSS防误删新功能,保护您珍贵的数据。_第8张图片
整个过程如上图,参考命令为:
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
只需要遍历 修复列表文件,并删除对象的删除标记,即可恢复对象。

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

设置版本控制后,即使删除对象也会保留历史版本,这会带来成本的增加。为了支持版本控制的数据恢复,以及成本优化,设计了 版本控制+生命周期 的组合方案,如下图所示。
开启阿里云对象存储OSS防误删新功能,保护您珍贵的数据。_第9张图片
在生命周期配置中,针对 当前版本(删除标记) 和 历史版本 设置策略,可以将其在指定时间后转换为其他类型从而降低成本,也可以选择在指定天数(比如30天)之后删除,从而在 30 天内仍然可以恢复数据,类似回收站的保留时长。

六、小结

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

原文链接
本文为云栖社区原创内容,未经允许不得转载。

你可能感兴趣的:(我是程序员)