Openstack:Nova中“從雲硬碟啟動”、“從映象啟動”、“從映象啟動(建立一個卷)”_prep_block_device中的差異
原文網址:http://blog.csdn.net/xiangpingli/article/details/47913059
在前面跟蹤分析了:“從映象啟動”、“從映象啟動(建立一個新卷)”過程中,卷的建立是在_build_resources->_prep_block_device中建立的,而不是在
spawm->_create_image中建立的,而_create_image只是來在捲上建立映象,或者說來組織映象。
在這裡看一下“從雲硬碟啟動”和“從映象啟動”、“從映象啟動(建立一個卷)”,在_prep_block_device中的差異.
(1)“從雲硬碟啟動”可以先不關注,肯定是在cinder這邊建立的卷,不過是怎麼
(2)“從映象啟動(建立一個新卷)”確定是在cinder中建立的,nova呼叫了cinderclient的建立卷的命令,但其_prep_block_device做了什麼?
(3)“從映象啟動”這裡的卷(_base + disk)是在nova中建立的還是調cinder建立的?在_prep_block_device中做了什麼?
(4)除了建立卷,還做了什麼?不管在哪裡建卷,都要_prep_block_device,是準備哪些東西?
再深入看一下_prep_block_device的流程:
-
->nova.compute.manager.ComputeManager._prep_block_device //準備塊裝置
- ->nova.compute.manager.ComputeManager.attach_block_devices
- ->nova.virt.block_device.attach_block_devices
- ->nova.virt.block_device.DriverImageBlockDevice.attach:volume_api.create //懷疑這裡在不同的建立方式下走不同的流程
- ->Nova.volume.API.create
-
->nova.volume.cinder.API.create
- -> client = cinderclient(context) ; client.volumes.create(size, **kwargs)//呼叫cinder建立卷
確認:
nova.virt.block_device.DriverImageBlockDevice.attach:volume_api.create //懷疑這裡在不同的建立方式下走不同的流程
確認這裡在“從雲硬碟啟動”、“從映象啟動”、“從映象啟動(建立一個新卷)”三種方式下會走不同的流程
(1)“從映象啟動”:
從映象啟動時,那幾個類:DriverImageBlockDevice、DriverSnapshotBlockDevice、DriverBlankBlockDevice中的attach一個也沒有呼叫
看下nova.compute.manager.ComputeManager.attach_block_devices 有沒有被呼叫
- ->nova.compute.manager.ComputeManager._prep_block_device //準備塊裝置
- ->nova.compute.manager.ComputeManager.attach_block_devices
- ->nova.virt.block_device.attach_block_devices
接下來調到哪兒去了?“從映象啟動”建立雲硬碟,應該是在_create_image中做的,這裡attach什麼呢?是不是也要準備塊裝置?_create_image中只是下載?
看這時候有沒有卷資訊呢?
��看下nova.compute.manager.ComputeManager.attach_block_devices 有沒有被呼叫?那幾個類:DriverImageBlockDevice、DriverSnapshotBlockDevice、DriverBlankBlockDevice中的attach一個也沒有呼叫
“從映象啟動”的_prep_block_device:在attach_block_devices這裡就直接返回了,如下是“從映象啟動”的列印:
看下nova.compute.manager.ComputeManager.attach_block_devices 有沒有被呼叫
“從映象啟動(建立一個新卷)”的_prep_block_device:這裡會去呼叫cinder的create建卷,和呼叫cinder的attach去掛載雲硬碟。如下是“從映象啟動(建立一個新卷)”的log:
- ->nova.compute.manager.ComputeManager._prep_block_device //準備塊裝置
- ->nova.compute.manager.ComputeManager.attach_block_devices
- ->nova.virt.block_device.attach_block_devices
- ->nova.virt.block_device.DriverImageBlockDevice.attach
- ->nova.virt.driver.create
- ->nova.virt.libvrit.driver.create 建立一個新卷
- ->nova.virt.block_device.DriverVolumeBlockDevice.attach (DriverVolumeBlockDevice是DriverImageBlockDevice的父類)
- ->nova.virt.driver.attach
- ->nova.virt.libvirt.driver.attach 掛載這個卷
“從雲硬碟啟動”的_prep_block_device:這裡不會去建立卷,因為卷已經存在了,所以這裡會直接呼叫attach去掛載雲硬碟。如下是“從雲硬碟啟動”的Log:
流程如下:
- ->nova.compute.manager.ComputeManager._prep_block_device //準備塊裝置
- ->nova.compute.manager.ComputeManager.attach_block_devices
- ->nova.virt.block_device.attach_block_devices
- ->nova.virt.block_device.DriverVolumeBlockDevice.attach (DriverVolumeBlockDevice是DriverImageBlockDevice的父類)
- ->nova.virt.driver.attach
- ->nova.virt.libvirt.driver.attach 掛載這個卷
也就是說,在_prep_block_device中的差別:
“從映象啟動”,這裡不會去建立卷,也不會去呼叫任何attach,因為這時候不存在一個卷,這個卷要在後面_create_image中建立
“從雲硬碟啟動”這裡卷早已經建好了,但是會去呼叫cinder的attach,去掛載這個卷,或者說掛載這個塊裝置,就是做block_device_mapping
“從映象啟動(建立一個新卷)”:這裡會呼叫呼叫cinder的create去建立一個卷,並且會去呼叫cinder的attach去掛載這個卷
這裡的_prep_block_device方法的更深入的原理是什麼?
【需要搞清楚】對這裡的流程清楚了,就是調到了哪裡。但原理還不夠清楚,怎麼調過去的,為什麼就調到後面的nova.compute.manager.ComputeManager.attach_block_devices了,後面的nova.compute.manager.ComputeManager.attach_block_devices為什麼有的會調create和attach,有的會呼叫attach而不呼叫create,有的create和attach都不會呼叫?【需要搞清楚】
詳細解析:
這裡主要是以attach_block_devices的返回值作為block_device_mapping的成員,所以attach_block_devices返回什麼很重要。
attach_block_devices:
要明白map(func, {{},{}})是什麼意思,map是將第二個引數中的所有成員,在第一個引數的函式中執行一遍!
“從映象啟動(建立一個新卷)”列印:
這裡可以看到,會去呼叫_log_and_attach,去呼叫實際的create和attach去建立卷和掛載卷。
“從映象啟動”列印:
這裡可以看到,不會去呼叫_log_and_attach,這裡不會去建卷,更不會去掛載卷,都在後面的_create_image中來處理。這裡經過再次確認,確實不會呼叫。
“從雲硬碟啟動”,列印:
這裡也會去執行map中的回撥函式:_log_and_attach函式,去掛載已經建立好的雲硬碟。
這裡最根本的是要搞清楚:
block_device_mapping是什麼?
map(_log_and_attach, block_device_mapping)做了什麼?
這裡還沒搞明白,後面再研究。
相關推薦
Openstack:Nova中“從雲硬碟啟動”、“從映象啟動”、“從映象啟動(建立一個卷)”_prep_block_device中的差異
原文網址:http://blog.csdn.net/xiangpingli/article/details/47913059 在前面跟蹤分析了:“從映象啟動”、“從映象啟動(建立一個新卷)”過程中,卷的建立是在_build_resources->_prep_blo
openstack:nova中“從雲硬碟啟動”建立虛擬機器的流程
原文網址:http://blog.csdn.net/xiangpingli/article/details/47912601 先使用cinder建立雲硬碟 然後在nova中建立示例的時候,會先在_prep_block_device中掛載cinder中建立的卷,然後建
openstack:nova中“從映象啟動(建立一個新卷)”建立虛擬機器的流程
原文網址:http://blog.csdn.net/xiangpingli/article/details/47912777 nova還有一種啟動方式:“從映象啟動(建立一個新卷)” 這個流程中,nova會在_prep_block_device中的attach_blo
openstack 卷虛機丟失恢復 (雲硬碟存在,但虛機丟失或無法啟動
openstack中有很多虛機在物理機重啟或服務重啟,資源不足,被人誤刪等原因導致在計算節點執行好好的虛機變成了 ERROR狀態或者shutoff 更可悲的是無法重啟,那樣如果機器中跑著業務,損失就大了。 現基於卷虛機跟大家分享一個解決方案 1. 為了測試對比,現在已有的卷虛機上寫東西,證明資料完
阿里雲 - 更換系統盤(附帶檔案遷移)過程中遇到的一些錯誤
* 必須先生成 【例項快照】,才能繼續生成 【系統映象】 進入方式:雲伺服器ECS -> 例項 -> 點選【例項ID】進入 -> 2. 本例項磁碟 -> 操作列中點選建立快照 3. 檢
一、查看Linux內核版本命令(兩種方法):
use proc color tex 2.6 distrib oot lin hat 一、查看Linux內核版本命令(兩種方法):1、cat /proc/version[[email protected]CentOS home]# cat /proc/versio
第二周:神經網絡的編程基礎----------2、編程作業常見問題與答案(Programming Assignment FAQ)
sort sign 常見問題 keep 什麽 有變 圖標 更新 無限循環 Please note that when you are working on the programming exercise you will find comments that say "#
【Java TCP/IP Socket】深入剖析socket——TCP通信中由於底層隊列填滿而造成的死鎖問題(含代碼)
parameter 兩個 因此 tar 機制 至少 基礎 named 測試 基礎準備 首先需要明白數據傳輸的底層實現機制,在http://blog.csdn.net/ns_code/article/details/15813809這篇博客中有詳細的介紹,在上面的博
微信支付:手機系統自帶的瀏覽器,調用微信支付如何實現(非掃碼)
所有 價格 驗證 返回 調用 -i 是否為空 支付申請 data- Q:翻看了微信支付的api沒發現支持h5調支付接口的情況(微信js除外),然後卻發現美團的支付成功調用了,這是怎麽實現的? A: 使用微信H5支付即可。H5支付通過URL調起微信APP,
關於Spring boot中讀取屬性配置文件出現中文亂碼的問題的解決(針對application.properties)
HA inf encoding 屬性 文件中 ide for 出現 spring 兩種方法: 方法一:在配置文件中設置中文編碼: banner.charset=utf-8server.tomcat.uri-encoding=UTF-8spring.http.encoding
題解報告:hdu 2188 悼念512汶川大地震遇難同胞——選拔誌願者(巴什博弈)
desc 考核 解題思路 bsp c代碼 字符串 每次 代碼 ont 題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=2188 Problem Description 對於四川同胞遭受的災難,全國人民紛紛伸出援助之手,幾乎每個省
群暉(黑) 篇四:申請免費SSL證書以及用群暉套件搭建郵件服務器(可以收藏的)
智能 等待 默認項目 家用路由器 asq 地方 服務器搭建 復制 for 轉載的文章 群暉(黑) 篇四:申請免費SSL證書以及用群暉套件搭建郵件服務器 前言這個系列是關於群暉常用套件的使用記錄,前兩篇討論了監控中心,虛擬機,
Java學習——方法中傳遞參數分簡單類型與復雜類型(引用類型)編程計算100+98+96+。。。+4+2+1的值,用遞歸方法實現
dig oid 傳遞 system alt style 類型 遞歸 gen package hello; public class digui { public static void main(String[] args) { /
二叉樹(建立與訪問)(先序,中序,後序)
二叉樹的建立(先序建立) 二叉樹的訪問(遞迴與非遞迴 先序)(遞迴與非遞迴中序)(遞迴與非遞迴 後序) #include<iostream> #include<stack> using namespace std; struct Tree_Node ///結點的
C# 選擇檔案、選擇資料夾、開啟檔案(或者資料夾) 路徑中獲取檔案全路徑、目錄、副檔名、檔名稱 追加、拷貝、刪除、移動檔案、建立目錄 修改檔名、資料夾名!!
https://www.cnblogs.com/zhlziliaoku/p/5241097.html 1、選擇檔案用OpenDialog OpenFileDialog dialog = new OpenFileDialog(); dialog.Multiselect = true;/
《TensorFlow:實戰Google深度學習框架》--5.2.1 MNIST手寫識別問題(程式已改進)
目錄 MNIST資料集介紹: TensorFlow完整訓練MNIST資料集(程式已改進): 本篇部落格涉及很多本書第4章的知識:啟用函式、指數衰減的學習率設定、正則化、滑動平均等知識。如有疑問請參考本部落格關於第4章記錄介紹。 MNIST資料集介紹: MNIST資料集是N
ml課程:概率圖模型—貝葉斯網路、隱馬爾可夫模型相關(含程式碼實現)
以下是我的學習筆記,以及總結,如有錯誤之處請不吝賜教。 本文主要介紹機器學習中的一個分支——概率圖模型、相關基礎概念以及樸素貝葉斯、隱馬爾可夫演算法,最後還有相關程式碼案例。 說到機器學習的起源,可以分為以下幾個派別: 連線主義:又稱為仿生學派(bionicsism)或生理學派
Java中帶包(建立及引用)的類的編譯
Java中帶包(建立及引用)的類的編譯 Java中帶包(建立及引用)的類的編譯與除錯 java源程式的編譯大家都知道,也就是cmd中到原始檔所在目錄下javac **.java即可,當程式中有包宣告還能簡簡單單的直接javac **.java嗎?答案當然是no,下面舉個簡單的例子證明一下直接
(劍指offer)陣列中的逆序對
時間限制:2秒 空間限制:32768K 熱度指數:228207 本題知識點: 陣列 題目描述 在陣列中的兩個數字,如果前面一個數字大於後面的數字,則這兩個數字組成一個逆序對。輸入一個數組,求出這個陣列中的逆序對的總數P。並將P對1000000007取模的結果輸出。 即輸出P%1000
(劍指offer)陣列中出現次數超過一半的數字
時間限制:1秒 空間限制:32768K 熱度指數:248291 本題知識點: 陣列 題目描述 陣列中有一個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入一個長度為9的陣列{1,2,3,2,2,2,5,4,2}。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。