快照是一種基於時間點的數據拷貝技術,是數據備份領域的一個重要的概念,理解好快照,並且有效的管理快照,是磁碟管理中的重要一課。本文將講述磁碟管理工具Storage Foundation中如何應用和管理快照。
快照的目的在於能夠記錄出某一個時刻的數據信息並將其保存,如果之後發生某些故障需要數據恢復的時候,可以通過快照來將數據恢復到之前時間點的狀態,而該時間點之後的數據都會丟失。備份系統是快照技術的主要應用領域之一,當備份軟體需要備份某些不能停止運行的關鍵業務的時候,利用快照技術可以將某時間點的所有數據信息保存並備份,不會影響到業務的正常運行。
快照技術分為兩類:物理拷貝和邏輯拷貝,物理拷貝就是對原始數據的完全拷貝;邏輯拷貝就是只針對發生過改變的數據進行拷貝。兩種拷貝技術雖然都能夠將數據恢復到某一個時間點,但是其也各有有缺點:
物理拷貝的優點是管理簡單,不需要監控目標數據的狀態,直接將所有數據拷貝到另外一個地方,而且可以作為數據備份直接保存起來。它的缺點是需要最大的存儲空間,需要和目標數據一樣大的空間才能將其完全拷貝下來。
邏輯拷貝的優點就是節省空間,一般來說,經常發生改變的數據只佔所有數據的20%-30%,這樣邏輯備份可以節省出70%左右的存儲空間。但是邏輯備份也有它的缺點,因為它只是保存了發生改變的數據,所以如果目標數據發生損壞的話,快照也無能為力。當前文件系統和備份軟體流行的寫入時拷貝技術(copy on write)就是屬於邏輯拷貝。
雖然快照技術已經在存儲行業中得到了廣泛的應用,但是很多用戶會對其產生誤解,現在對於一些常見的問題進行解釋:
快照 VS. 鏡像
物理拷貝快照和鏡像的工作方式是一樣的,都是將某個目標數據源的內容完整的拷貝到另外的地方,但是快照是在某個時刻點的拷貝,過後目標數據的變化將不再被記錄,而鏡像是時時刻刻都要保證目標數據和拷貝數據的一致性。
兩者的目的也不同,快照的目標是能夠在系統發生錯誤的時候恢復到之前的,而鏡像的目的是為了保證數據冗餘,在數據源發生故障的時候迅速恢復。如果用戶將某個文件誤刪除,那麼如果用戶之前做過快照,就可以回復出來;如果用戶做的是鏡像,那麼鏡像文件下的該文件也會丟失,無法恢復。
反過來說,如果用戶的目標數據源損壞,所有數據丟失,那麼快照只能恢復到最近的一個快照上,會丟失最新修改的數據,而鏡像可以迅速恢復出所有的數據,保證業務的連續性。
而邏輯拷貝快照和鏡像完全不同,沒有可比性。
如果LUN損壞,可以利用對LUN的快照進行恢復嗎?
回答這個問題需要先了解一下快照是基於邏輯拷貝的還是物理拷貝的,如果LUN損壞,物理拷貝的可以恢復,邏輯拷貝就不可以了。不同的存儲設備廠商用的是不同的拷貝技術,需要查清楚自己使用的存儲設備才能搞清楚這個問題。
IBM Flashcopy採用按需複製和虛擬映像;
Sun Instant image採用虛擬映像和按需複製;
EMC timefinder和HDS shadow Image採用中斷鏡像;
Compaq Volume replicator採用虛擬映像;
EMC Symmetrix系列和CLARiiON系列採用中斷鏡像和虛擬映像;
在介紹了快照技術的基本原理之後,讓我們來講述一下如何在storage foundation中使用快照技術。
storage foundation快照類型
在storage foundation中有卷級別的快照和文件系統級別的快照,卷級別的有三種:分別是傳統卷快照、完全即時卷快照(full size instant snapshot)和空間優化即時卷快照(space-optimized instant snapshot);文件系統級別的快照分為兩種:文件系統快照和檢查點快照(storage checkpoint)。它們的快照方式如下表所示:
表一:storage foundation快照類型
由該表可以看出,storage foundation為不同級別的快照提供了多種實現方式,用戶可以根據自己的需求,選擇適合自己的快照。現在我來介紹一個每一種快照的原理和使用方法:
1. 傳統卷快照
傳統卷快照就是將storage foundation上面的某個卷或者卷中的某個字卷(plex)在某一時間點做一個鏡像拷貝,將其數據拷貝到另一個同樣大小的卷中。拷貝出來的卷可以單獨保存以便恢復,也可以在不需要的時候被銷毀重用。因為它是將目標數據完整的拷貝到另外的地方,所以其屬於物理拷貝。
[用法]
1, 創建一個數據卷:
# vxassist -g test make datavol 1g
2, 為該數據卷創建一份鏡像:
# vxassist -g test snapstart datavol
3, 將該鏡像拷貝到另外一個卷snapvol中
# vxassist -g test snapshot datavol snapvol
4, 查看拷貝狀態,如圖所示,注意snapvol所寫入的磁碟(sd)是datavol的一部分,其實就是datavol的鏡像:
5, 如果數據源損壞,需要恢復,只需要對快照做如下操作
# vxassist -g test snapback snapvol
然後snapvol的數據會恢復到datavol中,用戶可以立刻訪問到其中的數據。
6, 如果需要將snap做成一個獨立的卷,而不是datavol的快照
# vxassist -g test snapclear snapvol
7, 如果需要刪除快照卷:
# vxassist -g test remove volume snapvol
2. 完全即時卷快照
完全即時卷快照和傳統卷快照很相似,因為它也需要與目標卷同樣大小的捲來保存數據。完全即時卷備份有兩個優點:一是其快照卷不需要被初始化,在創建卷之後就可以使用;二是它利用了寫入時拷貝技術,可以選擇物理拷貝或者邏輯拷貝兩種方式。
[用法]
1, 為數據卷的鏡像做好準備,包括提供存儲空間,設置異步傳輸等等;
# vxsnap -g test prepare datavol
注意,這裡使用的是vxsnap命令而不是上文的vxassist,因為這裡使用的是SF特有的特性,不再是傳統的用法;
2, 查看一下現在卷的狀態
注意,這裡SF為快照創建了一個空間,但是這裡的大小是270k(544個存儲單元,一個單元是512位元組),這就說明該快照是邏輯快照,不是把全硬碟拷貝的物理快照。
3, 為改數據卷創建一個鏡像:
# vxsnap -g test addmir datavol
4, 查看一下現有卷的狀態:
由圖可知,SF為數據卷創建了兩個子卷(plex),一個是datavol-02,一個是datavol_dc1-02。
5, 自己創建一個快照卷,並且同樣初始化:
# vxassist -g test make snapvol 1g (注意,快照卷大小必須和數據卷相同,否則會失敗)
# vxsnap -g test prepare snapvol
6, 將目標卷快照到快照卷:
# vxsnap -g test make source=datavol/snap=snapvol
7, 查看一下現在的卷狀態:
8, 利用快照卷可以保證數據的安全:
# vxsnap -g test refresh snapvol source=datavol (從數據源更新快照)
# vxsnap -g test reattach snapvol source=datavol (將快照內容恢復數據源,快照被刪除)
# vxsnap -g test restore datavol source=snapvol (從快照內容恢復數據,快照不會被刪除。注意這裡的源內容是snpavol了,說明是從snapvol恢復數據到數據卷datavol)
#vxsnap -g test dis snapvol (將快照卷與數據卷分離,快照卷就可以獨立使用,不再保存數據卷的快照)
9, 刪除快照卷
# vxedit -g test -rf rm snapvol