Virtual-Machines

Hyper-V VM 快照是否會隨著對 HDD 的寫入而持續增長?

  • September 10, 2018

(請注意,雖然這個問題是關於 Hyper-v 的,但我實際上對通用的 VM 快照答案很感興趣,除非 Hyper-v 的具體答案不適用於這樣的一般解釋。)

我在一家擁有相當規模的 VM 基礎架構(幾千台 VM)的大公司工作。我的一位伺服器工程師告訴我,他們不允許將 VM 快照保存很長時間 - 他們將允許在對 VM 進行重大更改之前將快照作為備份,但他們需要盡快將其刪除之後(幾天左右,一旦我們確定我們的更改沒有破壞任何東西)。

我對這個過程很好——我不希望快照充當實際備份等的代理。我可以尊重他們在環境中節省空間的願望。我不同意的是他的推理。他說他們事後需要刪除它們的原因是“快照可以無限增長,每次你寫入硬碟時,它都會向快照寫入額外的數據,沒有限制。這與你配置原始虛擬硬碟時不同,您可以在其中指定最大大小。您不能為快照指定最大大小。

據我了解,快照映像是來自父磁碟映像的 DELTA。例如,如果我在原始圖像上有一個塊,看起來像:

0101 0101 0101

…然後我像這樣重寫中間部分:

0101 1111 0101

…然後快照只儲存兩者之間的差異(加上一些我確信會增加複雜性的資料結構成本,但從儲存角度來看並不重要)。此外,我知道如果我將這些塊重寫回其原始狀態,則增量將丟棄該塊(以便將來對該塊的讀取將讀取到原始圖像)。

(我不太了解快照如何儲存差異 - 我確信有非常複雜的結構需要保持一切井井有條。我只對它確實儲存差異的原則感興趣,但不是變化的“執行歷史”。)

他說快照不是那樣工作的——他說如果我有一個數據塊,我會改變它,然後我再把它改回來,每次我這樣做,快照都會增長,最終吃掉很多磁碟空間。

我的理解是快照永遠不會超過原始圖像的大小(例如,如果您從字面上翻轉 HDD 上的每一位,增量會儲存它),也許還有一些恆定的成本大小。他似乎認為這不是真的,隨著越來越多的寫入虛擬 HDD,VM 快照將無限增長。

我是否誤解了 VM 快照的工作原理?

您的工程師正在遵循良好的做法,但出於錯誤的原因。您是正確的,因為 VHDX(或正在使用的任何虛擬磁碟技術)將:

  • 在重寫時重用寫入的塊,而不是寫全新的
  • 具有等於父虛擬磁碟的最大配置大小的硬大小限制。無法為快照指定最大大小的原因是父 VHDX 已指定它。

但是,我不知道如果塊返回到其原始狀態,任何機制會丟棄先前寫入的增量。即使在相對較小的規模下,在源塊和增量塊上執行差異算法與保持塊寫入的簡單記錄相比,性能成本也會很大。

除非虛擬機有大量的磁碟攪動,否則你可能不會看到它的快照增長得可怕。

具有單個快照的 VM 也沒有任何顯著的性能損失,儘管我沒有看到任何地方提到過。

快照存在三個非常現實的問題:

  • 環境問題可能導致孤立的 AVHDX 磁碟
  • 快照存在的每一分鐘,它都會從“有價值”走向“責任”
  • 數據不重複

此外,即使快照本身不能真正無限增長,想像一下對快照沒有控制的環境。理論上,單個快照可以增長到其父級分配的大小的兩倍。我相信微軟制定了每個虛擬機 50 個快照的硬性上限,但只是作為一種“好吧,現在你只是傻了”的故障安全,而不是因為技術需要它。因此,VM 的理論上限是分配大小的 51 倍。雖然這不太可能發生,但您可以看到即使擁有幾個具有多個快照的 VM 也會讓您的儲存管理員頭疼。它當然有利於建立合理的快照使用限制。

快照的環境問題

很多事情都可以作為此類問題的根本原因。它們都歸結為一個基本問題:如果父 VHDX 以任何方式被修改,那麼 AVHDX 將完全失效並且完全無用。如果擁有的 VM 已打開電源,則此類修改應該非常困難。但是,如果擁有的 VM 已關閉,則父 VHDX 只是一個文件。在您嘗試訪問子 AVHDX 之前,Hyper-V 或您的其他系統不會知道任何問題。

快照存在的時間越長,出現問題的可能性就越大,尤其是在具有多個管理員的環境中。如果虛擬機有多個快照,那麼問題可能會更加複雜。

這個問題並不是快照所特有的;任何虛擬磁碟差異系統都可能出現這些問題。

快照隨年齡貶值

這確實是不要長時間保留快照的主要原因。正如您正確推測的那樣,差異機制不會保留更改的歷史記錄。僅保留對塊的最新更改。因此,您只有現在以快照後形式存在的虛擬機,以及拍攝快照時存在的虛擬機。您可以恢復舊的或保留新的。中間沒有。

為了論證(並且因為這種情況已經發生),假設您有一個小型 Exchange 環境,它全部執行在單個虛擬機上。在從 Exchange 2013 升級到 Exchange 2016 之前拍攝快照。然後讓它執行一年。那個快照有什麼用?你會恢復它嗎?想知道刪除合併需要多長時間嗎?

快照不會重複數據

快照的目的是將虛擬機快速快照回某個時間點。它通過直接修改虛擬機的狀態來實現。它絕不會複製數據。如果 AVHDX 損壞,則只有父級保存有效資訊,並且自快照以來所做的任何更改都將失去。如果父 VHDX 已損壞,則這兩個文件均無用。此外,我不知道有任何工具可以插入 AVHDX 並僅提取更改的數據。因此,為了在有意義的時間段內保持不同的狀態,備份是您的最佳選擇。它不像快照那樣快速或方便,但它解決了所有其他問題。

引用自:https://serverfault.com/questions/928746