前面我們 backup 了 voluem,今天我們將討論如何 restore volume。
restore 的過程其實很簡單,兩步走:
-
在存儲節點上創建一個空白 volume。
-
將 backup 的數據 copy 到空白 voluem 上。
下面我們來看 restore 操作的詳細流程:
-
向 cinder-api 發送 restore 請求
-
cinder-api 發送消息
-
cinder-scheduler 挑選最合適的 cinder-volume
-
cinder-volume 創建空白 volume
-
cinder-backup 將 backup 數據 copy 到空白 volume 上
我們先來看第 1 步。
向 cinder-api 發送 restore 請求
客戶(可以是 OpenStack 最終用戶,也可以是其他程序)向 cinder-api 發送請求:“請 restore 指定的 backup。這里我們將 restore 之前創建的 backup。
目前 restore 只能在 CLI 中執行。
cinder-api 接收到 restore 請求。日志文件在 /opt/stack/logs/c-api.log。
這里看到 cinder-api 轉發請求,為 restore 創建 volume。 之后 cinder-scheduler 和 cinder-volume 將創建空白 volume,這個過程與 create volume 一樣,不再贅述。
接下來分析數據恢復的過程。 首先,在 cinder-api 日志中可以看到相關信息。
這里注意日志中的 volume_id 和 backup_id 與前面 backup-restore 命令的輸出是一致的。
下面來看 cinder-backup 是如何恢復數據的。
cinder-backup 執行 restore 操作
日志為 /opt/stack/logs/c-vol.log。
-
啟動 restore 操作,mount NFS。
-
讀取 container 目錄中的 metadata。
-
將數據解壓並寫到 volume 中。
-
恢復 volume 的 metadata,完成 restore 操作。
此時,在 GUI 中已經可以看到 restore 創建的 volume。
以上就是 volume restore 的分析,下一節我們討論如何將 volume 作為 instance 的啟動盤。