上一節咱們成功地經過 attach 操做爲 instance 添加了 volume,而與之相對的操做是 detach,就是將 volume 從 instance 上卸載下來。api
下圖是 Detach 操做的流程圖緩存
向 cinder-api 發送 detach 請求spa
cinder-api 發送消息日誌
nova-compute detach volumeci
cinder-volume 刪除 targetget
下面咱們詳細討論每個步驟。it
客戶(能夠是 OpenStack 最終用戶,也能夠是其餘程序)向 cinder-api 發送請求:「請 detach 指定 instance 上的 volume。配置
這裏咱們將 detach instance 「c2」上的 volume 「vol-1」 進入 GUI 操做菜單Project -> Compute -> Volumes。請求
選擇 volume 「vol-1」,點擊「Manage Attachments」。程序
點擊 「Detach Volume」。
再次確認。
cinder-api 將接收到 detach volume 的請求。日誌文件在 /opt/stack/logs/c-api.log。
cinder-api 發送消息 detach 消息。 cinder-api 沒有打印發送消息的日誌,只能經過源代碼查看 /opt/stack/cinder/cinder/volume/api.py,方法爲 detach。
Detach 的操做由 nova-compute 和 cinder-volume 共同完成:
首先 nova-compute 將 volume 從 instance 上 detach,而後斷開與 iSCSI target 的鏈接。
最後 cinder-volume 刪除 volume 相關的 iSCSI target。
後面兩個小節將詳細討論這兩個步驟。
nova-compute 首先將 volume 從 instance 上 detach 。 日誌爲 /opt/stack/logs/n-cpu.log。
這時經過 virsh edit 能夠看到 XML 配置文件中已經不在有 volume 的虛擬磁盤。
接下來斷開與 iSCSI target 的鏈接。
具體有下面幾個步驟:
將緩存中的數據 Flush 到 volume。
刪除計算節點上 volume 對應的 SCSI 設備。
經過 iscsiadm 的 logout,delete 操做斷開與 iSCSI target 的鏈接。
compue-nova 完成了 detach 工做,接下來 cinder-volume 就能夠刪除 volume 相關的 target 了。
存儲節點 cinder-volume 經過 tgt-admin 命令刪除 volume 對應的 target。日誌文件爲 /opt/stack/logs/c-vol.log。
至此 detach volume 操做已經完成,GUI 也會更新 volume 的 attach 信息。
以上就是 detach volume 的分析,下一節咱們討論 extend 操做。