概述
存儲快照
存儲快照技術SNIA(StorageNetworking Industry Association)對快照(Snapshot)的定義是:關于指定數據集合的一個完全可用拷貝,該拷貝包括相應數據在某個時間點(拷貝開始的時間點)的映像。快照可以是其所表示的數據的一個副本,也可以是數據的一個複制品。
快照的作用
快照的作用主要是能夠進行在線數據備份與恢複。當存儲設備發生應用故障或者文件損壞時可以進行快速的數據恢複,将數據恢複某個可用的時間點的狀态。快照的另一個作用是為存儲用戶提供了另外一個數據訪問通道,當原數據進行在線應用處理時,用戶可以訪問快照數據,還可以利用快照進行測試等工作。所有存儲系統,不論高中低端,隻要應用于在線系統,那麼快照就成為一個不可或缺的功能。
快照的實現方式
當前實現快照有主要有兩種技術,一種是第一次寫時複制(Copy On First Write,COFW),有時簡稱為寫時複制(Copy On Write,COW)。即在數據第一次寫入到某個存儲位置時,首先将原有的内容讀取出來,寫到另一位置處(為快照保留的存儲空間,此文中我們稱為快照空間),然後再将數據寫入到存儲設備中。而下次針對這一位置的寫操作将不再執行寫時複制操作。這種技術常在計算機相關的技術中經常初使用,其基本原理大同小異,隻是面向的對象不同,适用的場合不一樣。
從COW的執行過程我們可以知道,這種實現方式在第一次寫入某個存儲位置時需要完成一個讀操作(讀原位置的數據),兩個寫操作(寫原位置與寫快照空間),如果寫入頻繁,那麼這種方式将非常消耗IO時間。因此可推斷,如果預計某個卷上的I/O多數以讀操作為主,寫操作較少,這種方式的快照實現技術是一個較理想的選擇,因為快照的完成需要較少的時間。除此之外,如果一個應用易出現寫入熱點,即隻針對某個有限範圍内的數據進行寫操作,那麼COW的快照實現方式也是較較理想的選擇。因為其數據更改都局限在一個範圍内,對同一份數據的多次寫操作隻會出現一次寫時複制操作。
寫時複制的示意
但是這種方式的缺點也是非常明顯的。如果寫操作過于分散且頻繁,那麼COW造成的開銷則是不可忽略的,有時甚至是無法接受的。因此在應用時,則需要綜合評估應用系統的使用場景,以判斷這種方式的快照是否适用。
快照實現技術中的另一種技術是I/O重定向(I/O Redirect)。即将讀寫操作重新定向到另一個存儲空間中。在一個快照生成期間,所有的寫操作将被重定向到另一個介質,而讀操作是否需要讀重定向,則需要根據讀取的位置是否有過自上次快照以來的寫重定向,必須對有過寫重定向的位置進行讀重定向,否則不需要進行讀定向。當要創建一個快照時,則将自上次快照以來所有的重定向寫數據所對應在源介質中的數據複制出來生成這個時間點的快照,然後再将這些重定向寫數據寫回到源介質中的相應位置上,從而完成一個快照生成過程。
快照生成
下圖是快照生成過程的示意圖:
SNIA将快照的實現方式表述為:鏡像分離(split mirror)、改變塊(changed block)、并發(concurrent)三大類。後兩種在實現時其實質就是寫時複制及I/O重定向。對于split mirror的方式,由于其靈活性以及開銷問題,在實際的存儲系統中,并不實用。
實現層次
快照的實現層次概述
計算機的存儲結構是一個類似于TCP/IP一樣的棧結構。棧中包括硬件與軟件部分。棧中不同層為上層提供服務,同時利用下層的接口(如下圖)。因此在實現上,快照可以在不同的棧層上實現。但是不同的層其效果及特點是不一樣的。
一般來說,在應用層不太合适實現快照功能。因為不同的應用是千差萬别的,因此需要針對不同的應用實現快照功能,這個代價也太高了。但在應用層實現快照也并不是說一無用處,如在應用層實現快照的一個典型的例子就是vmWare虛拟化軟件中的快照功能。隻是這種快照功能應用在存儲系統中不現實。
其次在文件系統層實現快照與應用也是具有同樣的缺點,就是需要針對不同的文件系統實現快照功能,這樣的代價也很大。
實現層次案例
實現的快照的功能的文件系統基本上都是一些專用系統為者專為某個特定功能實現的文件系統。在這個層級上實現快照,缺乏靈活性和可擴展性。這個比較典型的例子就是ZFS。
而較為适宜實現快照功能的層應該為卷管理層以及物理層。在這兩個層中都不與特定的應用及文件系統相關。這裡比較典型的例子有Linux的LVM。而在硬件層次上實現快照又通常有許多種,在這個層次上實現的快照一般為專用系統,好處是性能是各個方式中最好的。但是在這個層次上實現的快照也有一個不可避免的缺點,那就是由于不與特定的應用及文件系統關聯,因此其就無法理解上層的應用邏輯,也就無法保證每個快照都處于數據一緻性狀态的。但是這個缺點是可以通過其他的方式減少或者解決的,比如在生成快照之前先對數據進行刷新操作,或者在恢複快照時對文件系統進行一緻性檢查等。
圖像快照
在photoshop中有一項功能是圖像快照,它對于圖像的處理有着很大的作用,“快照”命令允許您建立圖像任何狀态的臨時副本(或快照)。新快照将添加到曆史記錄面闆頂部的快照列表中。選擇一個快照使您可以從圖像的那個版本開始工作。
快照與“曆史記錄”面闆中列出的狀态有類似之處,而且它還具有其他優點:
1.您可以命名快照,使它更易于識别。
2.在整個工作會話過程中,您可以随時存儲快照。
3.可輕松比較效果。例如,可以在應用濾鏡前後創建快照。然後選擇第一個快照,并嘗試在不同的設置情況下應用同一個濾鏡。在各快照之間切換,找出您最喜愛的設置。
4.利用快照,可以輕松恢複您的工作。您可以在嘗試使用複雜的技術或應用動作時,先創建一個快照。如果對結果不滿意,您可以選擇該快照來還原所有步驟。
注:快照不會與圖像一起存儲—關閉某個圖像将會删除其快照。同時,除非您選擇了“允許非線性曆史記錄”選項,否則,如果選擇某個快照并更改圖像,則會删除“曆史記錄”面闆中當前列出的所有狀态。



















