VSS卷影拷貝服務其實不是一項新技術了,在2003年先後發佈的Windows 2003和Windows XP SP1都提供了對VSS的支持。最近幾年微軟的一線產品對VSS支持的愈來愈多,包括Exchange,SQL,AD,DPM等等。在Windows 2008中甚至系統的自帶的備份工具也換成了VSS版本的。查一查VSS的資料,發現名詞很多,snapshot、writer、requestor等等。這幾天翻閱了一些資料,仔細閱讀了幾遍,終於撥雲見日,理清了頭緒。 數據庫
VSS解決的問題 windows
任何一個新東西和新技術的出現老是爲了解決現有的問題。在IT領域,不少的資源被放在對各個系統的備份和恢復上。爲了99.9XXX%中那n個9,每多一個9都要付出巨大的代價。 架構
在備份領域,傳統的備份方案通常有全備份,增量備份和差量備份等。我以爲主要的問題有: ide
- 增量和差量須要備份軟件支持,備份程序須要對被備份的數據有足夠了解,備份程序和應用程序協做保證數據的恢復完整一致性,工做量比較大。好比Exchange的數據庫,Exchange本身要暴露出API接口,供NTBackup之類的應用程序調用。
- 備份和恢復的時間漫長。每次作全備都須要若干小時。恢復差量和增量的數據的時候,要先恢復全備份再恢復增量、差量的數據。步驟冗長,容易出錯。
- 缺少與硬件的緊密結合。不少存儲的硬件都有snapshot的方案,可是這些硬件是作卷級別的鏡像,和應用無關,作出來的東西也不能保證在應用級別是完整的。
VSS的出現,就是爲了解決這些問題。 工具
卷影的方法分類 優化
- Clone (Full Copy/Split Mirror)全拷貝、鏡像拷貝。能夠經過軟件或者硬件的方式作源卷和目標卷的同步。在同步鏈接切斷以前2邊的數據是一致的,在同步鏈接中斷以後目標卷的數據和源數據保持獨立,而且是隻讀的。
- Copy-on-Write (Differential Copy)差量拷貝。這種方法也能夠用軟件或者硬件的方法實現。當有寫操做發生在須要被複制的卷時,被寫的那個block會先被複制到另外一個存放差量數據地方,同時這個操做會被索引和記錄下來。使用源卷裏數據和差量數據,這樣在邏輯上咱們就有一個在以前某個時間點的源卷。這種方法的好處是額外須要的存儲空間小,缺點是
- 對源卷有額外的讀寫操做。
- 在作數據恢復的時候源卷的數據必須還在。
基於以上這2種最底層的卷影的方法,能夠實現多種基於軟件和硬件的備份應用和方案。微軟的應用方案有: 操作系統
- Data Protection Manager(DPM)
- Windows Backup Service(in Windows 2008)
VSS服務架構 設計
組件
描述 日誌
Volume Shadow Copy Service server
核心服務,和各個其餘組件交互。
Requestor
提出開始作卷影複製的程序,通常是備份程序。
Writer
首先他是應用程序的一部分,用以確保在作卷影複製的時候應用層面的數據是完整一致的。數據庫級別的應用通常會有本身的Writer,好比Exchange,SQL,AD等。
Provider
建立和維護卷影複製的組件。能夠是操做系統、硬件或者軟件本身實現。
Source volume
含有須要被備份的數據卷。
Storage volume
爲provider提供存放copy-on-write文件的數據卷
卷影複製的組件
Requestors: 發起卷影複製的程序,通常是備份程序。
Writers: 防止數據不一致,不完整。
- 當備份的應用發起備份請求的時候,系統的VSS服務把這個消息通知給各個writer。Writer在收到這個消息以後,開始爲備份作準備,以確保硬盤上的數據的一致性。好比Exchange的writer,會把內存的buff寫回到硬盤裏,確保硬盤上的數據庫和log是完整的。
- Writer也提供其餘一些信息,好比應用的名字、圖標、包含和排除的文件、恢復策略等等。
- Writer和一個或者多個組件相關聯。一個組件是一羣文件的集合。好比,Exchange的文件集合包括數據庫文件和日誌文件等等。這些文件集合是一個總體,必須被同時備份和同時恢復。Writer也提供有關如何按組件恢復數據的信息。
- 若是一個應用沒有提供writer,那麼只有硬盤上的數據被備份,而內存裏面的cache等數據會丟失。這樣恢復出來的數據相似於機器忽然斷電的狀態,數據有可能會不一致。相對於非VSS的備份方法,VSS的好處是即便文件正在被打開也能夠備份。傳統的備份方法被打開的文件是沒法再次被備份程序讀打開的。
- 在這種設計下,維護數據一致性的工做被從備份程序轉移到了應用程序,而應用程序的開發人員對應用程序的數據更加了解,他們知道如何編寫Writer來優化卷影複製。
Providers:用以建立和維護卷影複製。主要有三類實現:
- 硬件實現
- 軟件實現
- 操做系統實現。Windows 2003自帶了一個基於軟件的Provider。
卷影複製建立流程
- Requestor,通常是備份程序,要求VSS枚舉writers和他們的metadata,爲卷影複製作準備工做。
- Writer建立一個XML的備份組件的描述,並定義他們如何被恢復。VSS通知應用程序的Writer爲卷影複製作準備。
- Writer開始作準備,好比把內存中的內容寫到數據庫,把日誌中的內容寫到數據庫等等。作完以後通知VSS。
- VSS發起commit。
- VSS把writer和requestor暫停寫操做幾秒種,以用來建立一個卷影複製。這個時間不能超過60秒。在此期間,VSS把文件系統在內存中的buff寫到硬盤以確保硬盤中文件的一致性。
- VSS告訴requestor花最多10秒的時間來建立卷影複製。
- VSS解凍文件系統。當卷影複製建立好以後,VSS釋放處於未激活狀態的writer,全部在隊列中的讀寫IO操做被完成。
- VSS確認在卷影複製被建立過程當中的IO是成功的,若是失敗的話意味着卷影複製是不一致的,VSS通知requestor而且刪除卷影複製。Requestor能夠選擇重試或者通知管理員等操做。
- VSS開始複製卷影複製的數據,在複製完成以後把位置信息返回給Requestor。這一步纔是耗時最長的備份數據的過程。
參考資料
How Volume Shadow Copy Service Works
Wikipedia:Shadow Copy