开启阿里云对象存储OSS防误删新功能,保护您珍贵的数据。
一、背景
阿里云對象存儲 OSS 是保存海量數據的平臺,支持豐富的應用。在使用過程中難免會遇到誤操作、程序 Bug、覆蓋寫等導致數據被刪除的場景,對于數據的丟失會非常著急,后果也非常嚴重,甚至某些情況下還會影響你的職業生涯。OSS 每年都會遇到多起客戶誤刪除數據的事件,為此 OSS 開發了?版本控制?功能,開啟該特性后,可以在誤刪除數據時通過歷史版本找回數據。
二、版本控制技術介紹
存儲空間(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.1 開啟版本控制
開啟版本控制有兩種方式:
- 創建時,選擇開通?版本控制。
- 創建后,設置?版本控制。
因此,通過創建后設置版本控制,可以對存量的OSS數據設置版本控制,有效的保障歷史數據。
3.2 上傳對象
開啟版本控制后,在控制臺有?顯示對象的歷史版本?框,選擇該框則可以顯示對象的歷史版本,如下圖所示。
通過在控制臺上傳同名對象,則會生成多個版本,其中顯示?(最新版本)?的那個對象是最新對象,更新時間?也是最近的時間。
3.3 刪除對象
開啟版本控制后,刪除對象并不會真正刪除,而是插入?刪除標記,如下圖所示。
刪除對象后,如果沒有選擇?顯示對象的歷史版本,則在控制臺顯示該文件不存在,但實際上對象并未刪除,因此可以支持后面的恢復操作。
3.4 快捷的恢復數據
由于開通了版本保護,數據歷史版本并未刪除,可以采用下圖所示的順序,DIY 恢復數據。第一步,選中?顯示對象的歷史版本,此時可以看到歷史版本,其中顯示?(刪除標記)?表示該對象被刪除。第二步,刪除該?(刪除標記)?就可以讓數據在控制臺重新可見。第三步,刪除標記成功后,最近的版本被恢復為?(最新版本),此時不管是否選中?顯示對象的歷史版本,都可以在控制臺看到該對象。
因此,開通了版本控制后,可以非常便捷的 DIY 恢復數據,不用再擔心“誤操作、程序 Bug、覆蓋寫”等帶來的嚴重影響。
四、數據誤刪的批量修復實戰(工具)
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
只需要遍歷?修復列表文件,并刪除對象的刪除標記,即可恢復對象。
五、版本控制和生命周期結合實現類回收站(成本優化)
設置版本控制后,即使刪除對象也會保留歷史版本,這會帶來成本的增加。為了支持版本控制的數據恢復,以及成本優化,設計了?版本控制+生命周期?的組合方案,如下圖所示。
在生命周期配置中,針對?當前版本(刪除標記)?和?歷史版本?設置策略,可以將其在指定時間后轉換為其他類型從而降低成本,也可以選擇在指定天數(比如30天)之后刪除,從而在 30 天內仍然可以恢復數據,類似回收站的保留時長。
六、小結
數據誤刪除是非常嚴重的事件,也是難以預防的問題。通過開通對象存儲 OSS 的?版本控制?提供了有效的數據保護方案,封裝?版本控制+生命周期?的回收站也可以幫助更好的優化成本和恢復體驗,希望您能盡快開通,保護您的珍貴數據。
原文鏈接
本文為云棲社區原創內容,未經允許不得轉載。
總結
以上是生活随笔為你收集整理的开启阿里云对象存储OSS防误删新功能,保护您珍贵的数据。的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 高并发库存秒杀场景,阿里巴巴数据库是这样
- 下一篇: 从零入门Serverless|一文搞懂函