1. 程式人生 > >How Vmware snapshots works

How Vmware snapshots works

連接 ons ice 文件的復制 明顯 問題 系統內存 新的 也會

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鎖。此外,刪除快照時可能會導致性能比較大的下降,虛擬機越忙越明顯。為了避免這個問題,快照的刪除最好在非高峰時期。

How Vmware snapshots works