Snapshot 能夠爲 volume 建立快照,快照中保存了 volume 當前的狀態,之後能夠經過 snapshot 回溯。snapshot 操做實現比較簡單,流程圖以下:api
向 cinder-api 發送 snapshot 請求分佈式
cinder-api 發送消息ide
cinder-volume 執行 snapshot 操做spa
下面咱們詳細討論每個步驟。指針
客戶(能夠是 OpenStack 最終用戶,也能夠是其餘程序)向 cinder-api 發送請求:「請 snapshot 指定的 volume。日誌
這裏咱們將 snapshot volume 「vol-1」。ci
進入 GUI 操做菜單 Project -> Compute -> Volumes。日誌分析
選擇 volume 「vol-1」,點擊 「Create Snapshot」。引用
爲 snapshot 命名。請求
這裏咱們看到界面提示當前 volume 已經 attach 到某個 instance,建立 snapshot 可能致使數據不一致。咱們能夠先 pause instance,或者確認當前 instance 沒有大量的磁盤 IO,處於相對穩定的狀態,則能夠建立 snapshot,不然仍是建議先 detach volume 在作 sanpshot。
cinder-api 將接收到 snapshot volume 的請求。日誌文件在 /opt/stack/logs/c-api.log。
cinder-api 發送消息 snapshot 消息。cinder-api 沒有打印發送消息的日誌,只能經過源代碼查看 /opt/stack/cinder/cinder/volume/api.py,方法爲 _create_snapshot。
cinder-volume 執行 lvcreate 命令建立 snapshot。 日誌爲 /opt/stack/logs/c-vol.log。
對於 LVM volume provider,snapshot 實際上也是一個 LV,同時記錄了與源 LV 的 snapshot 關係,能夠經過 lvdisplay 查看。
GUI 的 Volume Snapshots 標籤中能夠看到新建立的 「vol-1-snapshot」。
有了 snapshot,咱們就能夠將 volume 回溯到建立 snapshot 時的狀態。方法是經過 snapshot 建立新的 volume。
新建立的 volume 容量必須大於或等於 snapshot 的容量
其過程與 Create Volume 相似,不一樣之處在於 LV 建立以後會經過 dd 將 snapshot 的數據 copy 到新的 volume。
日誌分析再也不贅述,留個你們練習。
若是一個 volume 存在 snapshot,則這個 volume 是沒法刪除的。
這是由於 snapshot 依賴於 volume,snapshot 沒法獨立存在。
在 LVM 做爲 volume provider 的環境中,snapshot 是從源 volume 徹底 copy 而來,因此這種依賴關係不強。
但在其餘 volume provider(好比商業存儲設備或者分佈式文件系統),snapshot 一般是源 volume 建立快照時數據狀態的一個引用(指針),佔用空間很是小,在這種實現方式裏 snapshot 對源 volume 的依賴就很是明顯了。
以上就是 volume snapshot 的分析,下一節咱們討論一個與 snapshot 容易混淆的操做:backup。