Ceph RBD快照及分層(寫時複製轉殖)功能詳解

2022-07-13 23:36:27 字數 2098 閱讀 8699

建立快照:

# rbd snap create rbd/test@snap-test
檢視快照:

# rbd snap ls rbd/test

snapid name size

4 snap-test 2048 mb

快照回滾:

# rbd snap rollback rbd/test@snap-test
ps: 回滾以後必須重新掛載卷

note:把映像回滾到某一快照的意思是,用快照中的資料覆蓋映像的當前版本,映像越大,此過程花費的時間就越長。從快照轉殖要快於回滾到某快照,這也是回到先前狀態的首選方法。

刪除快照:

# rbd snap rm rbd/test@snap-test
ps: 是指刪除某個特定的快照

note:ceph osds 非同步地刪除資料,所以刪除快照後不會立即釋放磁碟空間。

清除快照:

# rbd snap purge rbd/test
ps: 是指刪除該rbd的所有快照

步驟:建立映象 --> 建立快照 --> 保護快照 --> 轉殖快照(多次)

保護快照

轉殖映像要訪問父快照。如果使用者不小心刪除了父快照,所有轉殖映像都會損壞。為防止資料丟失,在轉殖前必須先保護快照。

rbd snap protect /@
例如:

rbd snap protect rbd/my-image@my-snapshot
note:你刪除不了受保護的快照。

轉殖快照

轉殖出的映像包含對父快照的引用,也包含儲存池 id 、映像 id 和快照 id 。包含儲存池 id 意味著你可以把乙個儲存池內的快照轉殖到其他儲存池。

要轉殖快照,你得指定父儲存池、父映像名和快照,還有子儲存池和子映像名。轉殖前必須先保護快照。

rbd clone /@ /
例如:

rbd clone rbd/my-image@my-snapshot rbd/new-image
note:你可以把某個儲存池中映像的快照轉殖到另一儲存池。例如,你可以把某一儲存池中的唯讀映像及其快照作為模板維護,把可寫轉殖置於另一儲存池。

取消快照保護

刪除快照前,必須先取消保護。另外,你不可以刪除被轉殖映像引用的快照,所以在你刪除快照前,必須先拍平( flatten )此快照的各個轉殖。

rbd snap unprotect /@
例如:

rbd snap unprotect rbd/my-image@my-snapshot
羅列快照的子孫

用下列命令羅列某個快照的子孫:

rbd children /@
例如:

rbd children rbd/my-image@my-snapshot
拍平轉殖映像

轉殖出來的映像仍保留了對父快照的引用。要從子轉殖刪除這些到父快照的引用,你可以把快照的資訊複製給子轉殖,也就是「拍平」它。拍平轉殖映像的時間隨快照尺寸增大而增加。要刪除快照,必須先拍平子映像。

rbd flatten /
例如:

rbd flatten rbd/my-image
note:因為拍平的映像包含了快照的所有資訊,所以拍平的映像占用的儲存空間會比分層轉殖要大。

C 寫時拷貝實現原理及例項解析

一 什麼是寫時拷貝 寫入時複製是一種計算機程式設計領域的優化策略。其核心思想是,如果有多個呼叫者同時請求相同資源 如記憶體或磁碟上的資料儲存 他們會共同獲取相同的指標指向相同的資源,直到某個呼叫者試圖修改資源的內容時,系統才會真正複製乙份專用副本 private copy 給該呼叫者,而其他呼叫者所...

寫核心定時器時,出現的警告及改正

1 warning functin declaration isn t prototype 錯因 函式沒有按照標準型別定義 比如 驅動載入及解除安裝函式static int inti timer init void 我沒寫 內的void造成的。總結 驅動中,很多函式都有固定的模式,必須完全按照模式寫...

寫批處理時遇到的問題及解決方法

前幾天寫了乙個批處理的小指令碼,之前沒接觸過踩了幾個坑,屬於是 fuzz 程式設計了 一 bat 執行錯誤彈出黑框提示 指令碼需要執行一些命令,但是有的命令無法獲取返回資訊,此時 bat 執行錯誤會彈出黑框提示。解決方法 指令碼最前面加幾行 if 1 hide goto cmdbegin start...