VMware中的快照是對VMDK在某個時間點的「拷貝」,這個「拷貝」並非對VMDK文件的複製,而是保持磁盤文件和系統內存在該時間點的狀態,以便在出現故障後虛擬機可以恢復到該時間點。若是對某個虛擬機建立了多個快照,那麼就能夠有多個可恢復的時間點。html
當咱們爲虛擬機建立的快照時,當前可寫的VMDK文件變成爲只讀狀態,而且建立一個新文件(稱之爲快照文件)來保存變化的內容(使用in-file delta technology)。算法
在初始狀態下,快照文件的大小爲16MB,並隨着虛擬機對磁盤文件的寫操做而增加。快照文件按照16MB的大小進行增加以減小SCSI reservation衝突。當虛擬機須要修改原來的磁盤文件的數據塊時,這些修改會被保存到快照文件中。當在快照文件中的已經修改過的數據塊須要被再次修改時,這些修改將覆蓋快照文件中的數據塊,此時,快照文件大小不會改變。所以,快照文件的大小永遠不會超過原來的VMDK文件的大小。後端
快照文件的變化頻率取決於虛擬機應用的寫的繁忙程度,例如對於Exchange和SQL等應用,快照文件變化比較快。多個快照的狀況下,在建立新的快照時,以前的快照文件變成只讀的狀態。服務器
不一樣類型的快照文件性能
*-delta.vmdk文件:該文件就是前面咱們所提到的快照文件,也能夠理解爲redo-log文件。在每建立一個快照時就會產生一個這樣的文件。而在刪除快照或回覆到快照時間點狀態時該文件會被刪除。spa
*.vmsd文件:該文件用於保存快照的metadata和其它信息。這是一個文本文件,保存瞭如快照顯示名、UID(Unique Identifier)以及磁盤文件名等。在建立快照以前,它的大小是0字節。命令行
*.vmsn文件:這是快照狀態文件,用於保存建立快照時虛擬機的狀態。這個文件的大小取決於建立快照時是否選擇保存內存的狀態。若是選擇的話,那麼這個文件會比分配給這個虛擬機的內存大小還要大幾兆。htm
建立快照blog
快照的建立能夠經過VMware VI客戶端的Snapshot Manager來實現,或者經過ESX服務器的Service Console的命令行vmware-cmd來實現。不管虛擬機是在運行、關機仍是掛起的狀態,均可以建立快照。Snapshot能夠經過VI客戶端直接鏈接到ESX Server或者鏈接到VirtualCenter來管理。內存
刪除快照或者回滾到快照點狀態
當刪除虛擬機的全部快照時,針對該虛擬機所建立的全部delta文件中的內容將會合併到原來的vmdk文件中,合併完成後再刪除vmdk文件。若是隻選擇刪除一個快照,那麼這個快照的delta文件將和其父快照的delta文件進行合併。若是選擇回滾到某一個快照,那麼當前的磁盤和內存狀態將會被丟棄,並且虛擬機會轉變到revert-to的狀態。不管選擇哪一個快照進行回滾,該快照都會變成當前的父快照,就是說當前運行的虛擬機會在這個快照之下。所以,父快照不必定是最近所建立的快照(在沒有回滾的狀況下,父快照通常都是最近所建立的快照)。在Snapshot Manager中父快照之下通常有「You are here」的標記。
若是選擇回滾的快照不包含內存狀態,那麼該虛擬機將會被關機,在管理員啓動該虛擬機時應用所選擇的快照。若是包含內存狀態的話,那麼虛擬機會短暫的停頓一下,而後回覆到快照時的磁盤和內存狀態。
磁盤空間和刪除多個快照
在建立快照前,全部的寫操做都寫入磁盤文件。可是有了快照以後,磁盤文件保持不變,而寫操做寫入delta文件,同時,若是保存內存狀態的話,vmsn文件還要佔用比該虛擬機稍大一些的空間。
在只有一個快照時,在刪除快照時不須要額外的空間。由於要麼直接刪除快照文件,要麼把快照文件和VMDK磁盤文件相合並。可是在有多個快照的狀況時,效果就不同了。
假設要刪除一個虛擬機的全部快照,該虛擬機有三個快照,snap一、snap2和snap3。首先,snap3的快照文件要被合併到snap2的快照文件中,致使snap2佔用空間增長。而後,snap2被合併到snap1中,致使snap1佔用的空間增長。最後,snap1合併到VMDK文件中,此時不會增長空間開銷。在合併完成後,快照纔會被刪除。
一種替代的方式是依次刪除快照,這樣就不會增長所須要的空間,只是稍微繁瑣一些。
刪除快照所須要的時間
經過VI客戶端刪除快照時,VI的狀態欄中顯示的信息可能會產生誤導。一般,狀態欄會很快到達95%完成的狀態,可是會在95%的狀態等待較長的時間一直到合併完成。VirtualCenter對全部的任務都有15分鐘的超時值,即便後臺還在合併,可是過了15分鐘後,VirtualCenter會報告該操做超時。
一種查看該任務是否完成的方式是經過VI客戶端來瀏覽該虛擬機的datastore。若是該快照對應的delta文件不存在了,則說明該快照被刪除了。
若是快照存在的時間比較長,那麼快照文件就會變得比較大,所以在刪除快照時就須要比較長的時間進行合併。合併的時間取決於虛擬機的繁忙程度,在關機的狀態下合併的速度較快。而ESX服務器後端的磁盤子系統的繁忙程度也會影響合併的時間。
一個100GB的快照文件可能須要3-6個小時來合併到原來的VMDK文件中。而從ESX3.5開始,因爲VMware修改了合併的算法,可能須要更長的時間來合併(參見VMware文檔Consolidation of large or deeply nested snapshots)。這會影響虛擬機和ESX服務器的性能。所以,建議限制快照的保留時間,當不須要時即刻刪除快照。
快照和metadata鎖對ESX性能的影響
快照對ESX服務器以及虛擬機的性能影響體如今幾個方面。但建立快照時,虛擬機的活動會暫時停頓一下,此時若是經過ping命令去檢查虛擬機的狀態,能夠看到一些timeout的response。此外,建立快照會致使metadata的更新,爲了不SCSI Reservations衝突會短期內對LUN加鎖,從而致使在短暫的時間內,這個LUN將只能由一個ESX服務器進行排他性訪問。
若是爲虛擬機建立了快照,虛擬機在運行的狀態中,該快照是活躍的。只要快照是活躍的,那麼虛擬機的性能就會降低。由於ESX服務器對delta文件的寫入方式不一樣於VMDK文件,並且效率相對較低。delta文件每次以16MB的大小來增加,它會致使另外一種metadata鎖。
最後,刪除或者回滾快照都會建立一個metadata鎖。此外,刪除快照時可能會致使性能比較大的降低,虛擬機越忙越明顯。爲了不這個問題,快照的刪除最好在非高峯時期。
轉自: http://blog.sina.com.cn/s/blog_62d12053010133al.html
http://www.cnblogs.com/gugnv/archive/2012/02/16/2354441.html