Snapshot Volume 操作 - 每天5分鍾玩轉 OpenStack(58)


Snapshot 可以為 volume 創建快照,快照中保存了 volume 當前的狀態,以后可以通過 snapshot 回溯。snapshot 操作實現比較簡單,流程圖如下:

image413.png

  1. 向 cinder-api 發送 snapshot 請求

  2. cinder-api 發送消息

  3. cinder-volume 執行 snapshot 操作

下面我們詳細討論每一個步驟。

向 cinder-api 發送 snapshot 請求

客戶(可以是 OpenStack 最終用戶,也可以是其他程序)向 cinder-api 發送請求:“請 snapshot 指定的 volume。

這里我們將 snapshot volume “vol-1”。

進入 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 發送消息

cinder-api 發送消息 snapshot 消息。cinder-api 沒有打印發送消息的日志,只能通過源代碼查看 /opt/stack/cinder/cinder/volume/api.py,方法為 _create_snapshot。

cinder-volume 執行 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。

 



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM