1. 程式人生 > >【OpenStack】Nova中的create_image

【OpenStack】Nova中的create_image

Nova中的create_image

本部落格歡迎轉發,但請保留原作者資訊
新浪微博:@孔令賢HW;
QQ:363210168
部落格地址:http://blog.csdn.net/lynn_kong
內容系本人學習、研究和總結,如有雷同,實屬榮幸!

更新記錄:
2013.4.22  增加G版中對live snapshot的約束

在Nova的core api中,對於虛擬機器(server)有這樣一個API:


該API的作用從名字上可以看出是基於虛擬機制作映象。而程式碼中的註釋則是:Snapshot a server instance,可能是基於實現方式的考慮。因為createImage目前(截止到Grizzly版)是基於快照功能實現的。create_image的實現描述如下:
1. 如果虛擬機器的卷全是後端卷(由Cinder管理,或者叫持久化的卷),則由Cinder對每一個卷建立快照,在Glance的映象表中儲存的只是一系列快照的ID,Glance的後端並沒有映象的資料;
2. 如果虛擬機器的系統卷存在本地(隨著虛擬機器被刪除,系統卷也會被刪除),則由各個虛擬化driver負責對系統卷(注意,只對系統卷)建立快照,並將快照資料上傳到Glance的後端。

一個老外將libvert下建立快照的命令總結了一下,原BLog地址:

OpenStack— nova image-create, under the hood,我將命令摘了出來:
$ virsh managedsave fed18
$ qemu-img snapshot -c snap1 fed18.qcow2
$ qemu-img info fed18.qcow2
$ qemu-img convert -f qcow2 -O raw -s snap1 fed18.qcow2 snap1-fed18.img
$ qemu-img info snap1-fed18.img
$ ls -lash fed18.qcow2 snap1-fed18.qcow2
$ qemu-img snapshot -d snap1 fed18.qcow2
$ qemu-img info fed18.qcow2
$ virsh start fed18
由上面的第一條命令可知,在libvert下建立虛擬機器系統卷快照是需要將虛擬機器掛起的。
(2013.4.22新增)G版中的Libvert在做snapshot時,如果滿足QEMU 版本大於等於1.3 並且Libvirt 版本大於等於1.0.0,則不用將虛擬機器掛起(即:live snapshot),增強了使用者體驗。

在Xen,VMware,Hyper-V下都是呼叫各自的API實現對虛擬機器系統卷建立快照,至於做快照時虛擬機器的狀態如何,因缺乏環境驗證,我就不得而知了(感覺應該是不影響虛擬機器執行的)。如果看帖的各位有做過這方面測試的,還煩請回帖解答一下。