快開啓阿里雲對象存儲 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 的 版本控制 提供了有效的數據保護方案,封裝 版本控制+生命週期 的回收站也能夠幫助更好的優化成本和恢復體驗,但願您能儘快開通,保護您的珍貴數據。

相關文章
相關標籤/搜索