vmware snapshot原理

此文爲轉載文章
原文地址爲:https://www.cnblogs.com/pinganzi/p/5663860.html

VMware中的快照是對VMDK在某個時間點的“拷貝”,這個“拷貝”並不是對VMDK文件的複製,而是保持磁盤文件和系統內存在該時間點的狀態,以便在出現故障後虛擬機能夠恢復到該時間點。如果對某個虛擬機創建了多個快照,那麼就可以有多個可恢復的時間點。

當我們爲虛擬機創建的快照時,當前可寫的VMDK文件變成爲只讀狀態,並且創建一個新文件(稱之爲快照文件)來保存變化的內容(使用in-file delta technology)。

在初始狀態下,快照文件的大小爲16MB,並隨着虛擬機對磁盤文件的寫操作而增長。快照文件按照16MB的大小進行增長以減少SCSI reservation衝突。當虛擬機需要修改原來的磁盤文件的數據塊時,這些修改會被保存到快照文件中。當在快照文件中的已經修改過的數據塊需要被再次修改時,這些修改將覆蓋快照文件中的數據塊,此時,快照文件大小不會改變。因此,快照文件的大小永遠不會超過原來的VMDK文件的大小。

快照文件的變化頻率取決於虛擬機應用的寫的繁忙程度,例如對於Exchange和SQL等應用,快照文件變化比較快。多個快照的情況下,在創建新的快照時,之前的快照文件變成只讀的狀態。

不同類型的快照文件

*-delta.vmdk文件:該文件就是前面我們所提到的快照文件,也可以理解爲redo-log文件。在每創建一個快照時就會產生一個這樣的文件。而在刪除快照或回覆到快照時間點狀態時該文件會被刪除。

*.vmsd文件:該文件用於保存快照的metadata和其它信息。這是一個文本文件,保存瞭如快照顯示名、UID(Unique Identifier)以及磁盤文件名等。在創建快照之前,它的大小是0字節。

*.vmsn文件:這是快照狀態文件,用於保存創建快照時虛擬機的狀態。這個文件的大小取決於創建快照時是否選擇保存內存的狀態。如果選擇的話,那麼這個文件會比分配給這個虛擬機的內存大小還要大幾兆。

創建快照

快照的創建可以通過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磁盤文件相合並。但是在有多個快照的情況時,效果就不一樣了。

假設要刪除一個虛擬機的所有快照,該虛擬機有三個快照,snap1、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鎖。此外,刪除快照時可能會導致性能比較大的下降,虛擬機越忙越明顯。爲了避免這個問題,快照的刪除最好在非高峯時期。

vmware snapshot原理
vmware snapshot原理

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章