本發(fā)明總體上涉及文件系統(tǒng)領(lǐng)域,更具體地,涉及在文件系統(tǒng)中用于保存快照的方法和裝置。
背景技術(shù):快照(Snapshot)通常指生產(chǎn)文件系統(tǒng)(ProductionFileSystem,以下稱為PFS)關(guān)于指定數(shù)據(jù)集合的一個完全可用拷貝,該拷貝包括相應(yīng)數(shù)據(jù)在某個時間點(diǎn)(拷貝開始的時間點(diǎn))的映像,其能夠在存儲設(shè)備發(fā)生邏輯錯誤或文件損壞的情況下進(jìn)行快速的數(shù)據(jù)恢復(fù),例如將數(shù)據(jù)恢復(fù)到某個可用的時間點(diǎn)的狀態(tài)??煺盏膽?yīng)用非常廣泛,例如作為備份的源、作為數(shù)據(jù)挖掘的源、作為保存應(yīng)用程序狀態(tài)的檢查點(diǎn),甚至僅作為單純的數(shù)據(jù)復(fù)制的一種手段等。創(chuàng)建快照的技術(shù)也有很多種,例如包括鏡像分離、指針重映射、日志文件等等,其中,用于保護(hù)文件系統(tǒng)的較為經(jīng)典的快照技術(shù)包括第一次寫時復(fù)制快照。第一次寫時復(fù)制(copyonfirstwrite,以下稱為COFW)是指在對數(shù)據(jù)塊進(jìn)行第一次寫操作之前將原始內(nèi)容復(fù)制并存儲到專用存儲中,并且更新追蹤表以維護(hù)相應(yīng)的映射。這種技術(shù)一般會在塊級完成。如后文將詳細(xì)描述的,在現(xiàn)有的COFW技術(shù)中,每個第一次更新(寫)的數(shù)據(jù)塊均必須各自經(jīng)歷一個完整的COFW周期,包括:讀原始內(nèi)容、分配新的存儲區(qū)域、寫入原始內(nèi)容并最終更新追蹤表(通常在硬盤上持久保存)。如后文將進(jìn)一步說明的,這將產(chǎn)生大量瑣碎的硬盤I/O并消耗大量的計(jì)算資源,并導(dǎo)致極大的性能負(fù)擔(dān)并最終高度影響到正常的PFS操作。因此在本領(lǐng)域中,極需一種更為有效、開銷更小的快照創(chuàng)建方案。案。
技術(shù)實(shí)現(xiàn)要素:為了緩解現(xiàn)有技術(shù)中COFW快照存在的上述缺陷,本發(fā)明的實(shí)施方式提供一種改進(jìn)、高效的、在文件系統(tǒng)中用于保存快照的方法和裝置。根據(jù)本發(fā)明的一個實(shí)施方式,提供一種在文件系統(tǒng)中保存快照的方法,該方法可以包括:批量讀取將進(jìn)行更新的多個數(shù)據(jù)塊中的數(shù)據(jù);為所述批量讀取的數(shù)據(jù)分配存儲空間;以及將所述批量讀取的數(shù)據(jù)中將進(jìn)行第一次更新的數(shù)據(jù)塊中的數(shù)據(jù)批量存儲到所分配的存儲空間。在本發(fā)明的可選實(shí)施方式中,所述方法進(jìn)一步可以包括:在所述將進(jìn)行第一次更新的數(shù)據(jù)塊數(shù)目達(dá)到第一值、和/或最長相鄰的所述將進(jìn)行第一次更新的數(shù)據(jù)塊數(shù)目達(dá)到第二值時,執(zhí)行所述保存快照的方法,其中,所述第一值和所述第二值為預(yù)定值或可在運(yùn)行中調(diào)整。在本發(fā)明的可選實(shí)施方式中,其中所述第一值為使得所述將進(jìn)行第一次更新的數(shù)據(jù)塊數(shù)目占將進(jìn)行更新的所述多個數(shù)據(jù)塊數(shù)目的比例達(dá)到第一閾值的值;所述第二值為使得所述將進(jìn)行第一次更新的數(shù)據(jù)塊數(shù)目占將進(jìn)行更新的所述多個數(shù)據(jù)塊數(shù)目的比例達(dá)到第二閾值的值,并且所述第一閾值和所述第二閾值為預(yù)定值或可在運(yùn)行中調(diào)整。在本發(fā)明的可選實(shí)施方式中,所述方法進(jìn)一步可以包括:批量更新映射表,所述映射表記錄了所述將進(jìn)行第一次更新的數(shù)據(jù)塊和所述將進(jìn)行第一次更新的數(shù)據(jù)塊中的數(shù)據(jù)在所述存儲空間中的位置之間的對應(yīng)關(guān)系。在本發(fā)明的可選實(shí)施方式中,所述更新映射表包括僅通過一次讀寫操作更新所述映射表。在本發(fā)明的可選實(shí)施方式中,所述方法進(jìn)一步包括通過查找在存存儲器中存儲的位圖來獲得所述將進(jìn)行第一次更新的數(shù)據(jù)塊的信息,其中所述信息包括所述將進(jìn)行第一次更新的數(shù)據(jù)塊的數(shù)目、分布、以及首尾位置中的一個或者多個。在本發(fā)明的可選實(shí)施方式中,將進(jìn)行更新的所述多個數(shù)據(jù)塊為連續(xù)分布,并且所述批量讀取將進(jìn)行更新的所述多個數(shù)據(jù)塊中的數(shù)據(jù)包括通過一次讀取操作讀取連續(xù)分布的所述多個數(shù)據(jù)塊中的數(shù)據(jù)。在本發(fā)明的可選實(shí)施方式中,所述批量讀取的起始位置為將進(jìn)行更新的所述多個數(shù)據(jù)塊中第一個將進(jìn)行第一次更新的數(shù)據(jù)塊;和/或所述批量讀取的結(jié)束位置為將進(jìn)行更新的所述多個數(shù)據(jù)塊中最后一個將進(jìn)行第一次更新的數(shù)據(jù)塊。在本發(fā)明的可選實(shí)施方式中,為所述批量讀取的數(shù)據(jù)分配的所述存儲空間包括一次性分配的連續(xù)存儲空間,并且所述批量存儲包括僅通過一次寫入操作進(jìn)行存儲。在本發(fā)明的可選實(shí)施方式中,為所述批量讀取的數(shù)據(jù)分配的所述存儲空間大小相應(yīng)于存儲所述將進(jìn)行第一次更新的數(shù)據(jù)塊中的數(shù)據(jù)所需的存儲空間大小,并且所述保存快照的方法進(jìn)一步包括:僅存儲所述批量讀取的數(shù)據(jù)中所述將進(jìn)行第一次更新的數(shù)據(jù)塊中的數(shù)據(jù)之外的數(shù)據(jù)。在本發(fā)明的可選實(shí)施方式中,所述批量存儲采用完全條帶寫的方式。在本發(fā)明的可選實(shí)施方式中,所述存儲空間包括磁盤上的專用存儲空間,并且所述批量存儲的數(shù)據(jù)為快照。根據(jù)本發(fā)明的另一實(shí)施方式,提供一種在文件系統(tǒng)中保存快照的方法,其中所述文件系統(tǒng)具有將進(jìn)行第一次更新的一段或多段連續(xù)的數(shù)據(jù)塊,所述方法可以包括:批量讀取每段所述連續(xù)數(shù)據(jù)塊中的數(shù)據(jù);為所述批量讀取的數(shù)據(jù)分配存儲空間;以及將所述批量讀取的數(shù)據(jù)批量存儲到所分配的存儲空間。在本發(fā)明的可選實(shí)施方式中,并行地針對所述將進(jìn)行第一次更新新的一段或多段連續(xù)數(shù)據(jù)塊,執(zhí)行所述讀取步驟、所述分配步驟以及所述存儲步驟。根據(jù)本發(fā)明的又一實(shí)施方式,提供一種在文件系統(tǒng)中保存快照的裝置,包括:讀取裝置,用于批量讀取將進(jìn)行更新的多個數(shù)據(jù)塊中的數(shù)據(jù);分配裝置,用于為所述批量讀取的數(shù)據(jù)分配存儲空間;以及存儲控制裝置,用于將所述批量讀取的數(shù)據(jù)中將進(jìn)行第一次更新的數(shù)據(jù)塊中的數(shù)據(jù)批量存儲到所分配的存儲空間。在本發(fā)明的可選實(shí)施方式中,所述裝置進(jìn)一步包括:觸發(fā)裝置,用于在所述將進(jìn)行第一次更新的數(shù)據(jù)塊數(shù)目達(dá)到第一值、和/或最長相鄰的所述將進(jìn)行第一次更新的數(shù)據(jù)塊數(shù)目達(dá)到第二值時,觸發(fā)所述保存快照的裝置的執(zhí)行,其中,所述第一值和所述第二值為預(yù)定值或可在運(yùn)行中調(diào)整。在本發(fā)明的可選實(shí)施方式中,所述第一值為使得所述將進(jìn)行第一次更新的數(shù)據(jù)塊數(shù)目占將進(jìn)行更新的所述多個數(shù)據(jù)塊數(shù)目的比例達(dá)到第一閾值的值;所述第二值為使得所述將進(jìn)行第一次更新的數(shù)據(jù)塊數(shù)目占將進(jìn)行更新的所述多個數(shù)據(jù)塊數(shù)目的比例達(dá)到第二閾值的值,并且所述第一閾值和所述第二閾值為預(yù)定值或可在運(yùn)行中調(diào)整。在本發(fā)明的可選實(shí)施方式中,所述裝置進(jìn)一步包括:更新裝置,用于批量更新映射表,所述映射表記錄了所述將進(jìn)行第一次更新的數(shù)據(jù)塊和所述將進(jìn)行第一次更新的數(shù)據(jù)塊中的數(shù)據(jù)在所述存儲空間中的位置之間的對應(yīng)關(guān)系。在本發(fā)明的可選實(shí)施方式中,所述更新映射表包括僅通過一次讀寫操作更新所述映射表。在本發(fā)明的可選實(shí)施方式中,所述裝置進(jìn)一步包括信息獲取裝置,用于通過查找在存儲器中存儲的位圖來獲得所述將進(jìn)行第一次更新的數(shù)據(jù)塊的信息,其中所述信息包括所述將進(jìn)行第一次更新的數(shù)據(jù)塊的數(shù)目、分布、以及首尾位置中的一個或者多個。在本發(fā)明的可選實(shí)施方式中,將進(jìn)行更新的所述多個數(shù)據(jù)塊為連連續(xù)分布,并且所述批量讀取將進(jìn)行更新的所述多個數(shù)據(jù)塊中的數(shù)據(jù)包括通過一次讀取操作讀取連續(xù)分布的所述多個數(shù)據(jù)塊中的數(shù)據(jù)。在本發(fā)明的可選實(shí)施方式中,所述批量讀取的起始位置為將進(jìn)行更新的所述多個數(shù)據(jù)塊中第一個將進(jìn)行第一次更新的數(shù)據(jù)塊;和/或所述批量讀取的結(jié)束位置為將進(jìn)行更新的所述多個數(shù)據(jù)塊中最后一個將進(jìn)行第一次更新的數(shù)據(jù)塊。在本發(fā)明的可選實(shí)施方式中,為所述批量讀取的數(shù)據(jù)分配的所述存儲空間包括一次性分配的連續(xù)存儲空間,并且所述批量存儲包括僅通過一次寫入操作進(jìn)行存儲。在本發(fā)明的可選實(shí)施方式中,為所述批量讀取的數(shù)據(jù)分配的所述存儲空間大小相應(yīng)于存儲所述將進(jìn)行第一次更新的數(shù)據(jù)塊中的數(shù)據(jù)所需的存儲空間大小,并且所述存儲控制裝置進(jìn)一步用于:僅存儲所述批量讀取的數(shù)據(jù)中所述將進(jìn)行第一次更新的數(shù)據(jù)塊中的數(shù)據(jù)。在本發(fā)明的可選實(shí)施方式中,所述批量存儲采用完全條帶寫的方式。在本發(fā)明的可選實(shí)施方式中,所述存儲空間包括磁盤上的專用存儲空間,并且所述批量存儲的數(shù)據(jù)為快照。根據(jù)本發(fā)明的另一實(shí)施方式,提供一種在文件系統(tǒng)中保存快照的裝置,其中所述文件系統(tǒng)具有將進(jìn)行第一次更新的一段或多段連續(xù)的數(shù)據(jù)塊,所述裝置可以包括:讀取裝置,用于批量讀取每段所述連續(xù)數(shù)據(jù)塊中的數(shù)據(jù);分配裝置,用于為所述批量讀取的數(shù)據(jù)分配存儲空間;以及存儲控制裝置,用于將所述批量讀取的數(shù)據(jù)批量存儲到所分配的存儲空間。在本發(fā)明的可選實(shí)施方式中,并行地針對所述將進(jìn)行第一次更新的一段或多段連續(xù)的數(shù)據(jù)塊,啟動所述讀取裝置、所述分配裝置以及所述存儲控制裝置。附圖說明通過參考附圖閱讀下文的詳細(xì)描述,本發(fā)明實(shí)施方式的上述以及其他目的、特征和優(yōu)點(diǎn)將變得明顯。在附圖中,以示例性而非限制性的方式示出了本發(fā)明的若干實(shí)施方式,其中相同的參考標(biāo)號表示相同或相似的元素。圖1示出了本發(fā)明可以實(shí)施于其中的虛擬文件系統(tǒng)架構(gòu)的示例性圖示;圖2示出了根據(jù)現(xiàn)有技術(shù)的COFW快照過程的示意性圖示;圖3A和3B示出了根據(jù)現(xiàn)有技術(shù)的COFW快照過程的示意性缺陷圖示;圖4示出了根據(jù)本發(fā)明一個實(shí)施方式的在文件系統(tǒng)中保存數(shù)據(jù)快照的方法的流程圖。圖5示出了根據(jù)本發(fā)明另一實(shí)施方式的在文件系統(tǒng)中保存數(shù)據(jù)快照的方法的流程圖。圖6A-6D示出了根據(jù)本發(fā)明優(yōu)選實(shí)施方式的在文件系統(tǒng)中保存數(shù)據(jù)快照的具體示例。圖7示出了根據(jù)本發(fā)明又一實(shí)施方式的在文件系統(tǒng)中保存數(shù)據(jù)快照的裝置的框圖。圖8示出了根據(jù)本發(fā)明另一實(shí)施方式的在文件系統(tǒng)中保存數(shù)據(jù)快照的裝置的框圖。具體實(shí)施方式為更好地理解本發(fā)明,在此對本發(fā)明所可能采用的術(shù)語進(jìn)行簡要說明。要注意的是,在此的說明僅出于更全面地理解本發(fā)明而示出,并不作為對本發(fā)明任何方面的限制。本發(fā)明所稱的“生產(chǎn)文件系統(tǒng)”(PFS)指代用于生產(chǎn)環(huán)境并由快照保護(hù)的文件系統(tǒng),既可讀也可寫。要注意的是,雖然本發(fā)明出于示例性目的示出PFS,但本領(lǐng)域技術(shù)人員可以理解,根據(jù)本發(fā)明各個方面的方法和裝置也可以應(yīng)用于其他類型的文件系統(tǒng)。圖1示出了本發(fā)明可以實(shí)施于其中的虛擬文件系統(tǒng)架構(gòu)的示例性圖示100。如圖所示,虛擬文件系統(tǒng)101總體而言包括PFS102部分和快照106部分。PFS102通常由硬盤104上組織成的各PFS卷(volume)103構(gòu)建而成。而快照106存儲在快照存儲空間105中,該存儲空間105可以是諸如SavVol之類專門用于容納快照的專用存儲。在PFS卷103與快照存儲空間105這一級之間發(fā)生COFW快照過程。如所已知的,圖1所例示的文件系統(tǒng)通常以“高速緩存(cached)”模式裝配,其支持頁高速緩存和緩沖器高速緩存機(jī)制以獲得低延時和高帶寬。在所述“高速緩存”模式中,臟數(shù)據(jù)塊由文件系統(tǒng)IO以例如異步(asyc)方式進(jìn)行沖刷。這里的術(shù)語“文件系統(tǒng)IO”包括但不限于諸如ListIO之類的非阻塞IO,ListIO由FSBN排序,其是允許其他處理在傳輸完成之前繼續(xù)的一種輸入/輸出處理形式。在上述沖刷期間,連續(xù)的臟數(shù)據(jù)塊合并(merge)成例如由FSBN所排序的盤區(qū)(extent)。本領(lǐng)域技術(shù)人員將理解,術(shù)語“盤區(qū)”指代文件系統(tǒng)中由FSBN所排序的連續(xù)范圍的臟數(shù)據(jù)塊,其中數(shù)據(jù)塊的數(shù)目是可變的,一般由具體的文件系統(tǒng)一次IO所能訪問的最大數(shù)據(jù)塊的數(shù)目所決定。典型的,盤區(qū)中數(shù)據(jù)塊的數(shù)目例如可以為32個。本領(lǐng)域技術(shù)人員還將理解,這里所稱的“盤區(qū)”僅是出于更好地描述本發(fā)明的目的而示出,并不作為對文件系統(tǒng)的任何限制,用于實(shí)現(xiàn)本發(fā)明各個方面的文件系統(tǒng)完全可以不包括該“盤區(qū)”。為后文更好地理解本發(fā)明的各種優(yōu)點(diǎn),在此示出現(xiàn)有技術(shù)中典型的數(shù)據(jù)更新過程。在接收文件的更新(寫)請求;之后,如果滿足預(yù)定條件(諸如已聚集32個臟數(shù)據(jù)塊,或者到達(dá)存儲器水印),則生產(chǎn)文件系統(tǒng)開始處理寫操作。此時數(shù)據(jù)塊被合并,并且由FSBN排序,繼而這些連續(xù)的臟數(shù)據(jù)塊由例如ListIO進(jìn)行沖刷,在所述沖刷期間如有必要,則進(jìn)行日志記錄(journallog)。在上述過程期間,快照監(jiān)控PFS上的每一次寫操作,對于ListIO中的每個數(shù)據(jù)塊,進(jìn)行如圖2所示的根據(jù)現(xiàn)有技術(shù)的COFW快照過程200:在步驟S201,首先檢查數(shù)據(jù)塊是否是第一次更新,并且如果是,則進(jìn)行步驟S202,從PFS卷中讀取原始內(nèi)容。接下來,步驟S203為所讀取的原始內(nèi)容分配存儲空間。作為示例,可以是從諸如SavVol之類的用于容納快照的專用存儲中分配例如槽(slot)來存儲被快照的塊。接著,步驟S204,將原始內(nèi)容寫入所分配的例如SavVol的槽中。接下來步驟S205,更新映射表以維護(hù)映射,所述映射表例如記錄了被快照的塊與其在諸如SavVol之類的快照存儲空間上的位置之間的映射關(guān)系。作為示例,該映射表典型地為塊映射表(BlockMap),并且采用B+樹(B樹)的方式進(jìn)行組織。同樣作為示例,該映射表也可以存儲在諸如SavVol之類的快照存儲空間中。此后,繼續(xù)進(jìn)行PFS寫操作。最后,步驟S206周期性地將映射表沖刷到硬盤。如上所述,現(xiàn)有的數(shù)據(jù)更新過程將臟數(shù)據(jù)塊組織成盤區(qū)內(nèi)的可變向量,并且提供起始塊地址(例如假定為N),而快照篩選器將按每塊(例如8KB)切斷了這些連續(xù)的塊,這會導(dǎo)致性能問題。例如,圖3A和3B詳細(xì)示出了根據(jù)現(xiàn)有技術(shù)的COFW快照過程的示意性缺陷圖示。如圖3A所示,假定PFS文件系統(tǒng)的一次ListIO涉及從塊號為N至N+31的總共32個臟數(shù)據(jù)塊,參考圖3B,現(xiàn)有技術(shù)的COFW快照過程尤其在密集型寫和快照工作負(fù)載下將遭受如下巨大的性能問題,包括:1、存在大量小型(例如8KB)塊讀取和塊寫入IO操作,這使得對硬盤或SAN存儲產(chǎn)生巨大的壓力,而另一方面,小型IO通常很難被優(yōu)化,諸如寫操作對于合并或級化(staging)而言要求更多的資源,并且由于存儲一般為共享,從而預(yù)取可能也不能有效工作。2、頻繁地分配諸如槽之類的存儲快照的空間并且因而頻繁地產(chǎn)生中斷。3、頻繁的映射表(諸如塊映射表)更新,而眾所周知由于用于數(shù)據(jù)一致性的內(nèi)部鎖機(jī)制,B樹的更新開銷非常大。4、多個快照流(或線程)之間存在鎖競爭,這是因?yàn)樵谙到y(tǒng)中存在用于數(shù)據(jù)完整性和快速恢復(fù)的同步點(diǎn),因此并行性劣化。有鑒于此,本發(fā)明提出一種改進(jìn)的在文件系統(tǒng)中保存數(shù)據(jù)快照的方法和裝置。圖4示出了根據(jù)本發(fā)明一個實(shí)施方式的在文件系統(tǒng)中保存數(shù)據(jù)快照的方法的流程圖400。為更為清楚地理解本發(fā)明,以下結(jié)合圖6A-圖6D詳細(xì)描述如圖4所述的方法的流程圖。圖6A-圖6D示出了根據(jù)本發(fā)明優(yōu)選實(shí)施方式的在文件系統(tǒng)中保存數(shù)據(jù)快照的具體示例。在圖6A-圖6D中,假定盤區(qū)的長度為10。本領(lǐng)域技術(shù)人員應(yīng)理解,所述的具體示例僅為更為清楚地理解本發(fā)明而示出,并不作為對本發(fā)明的任何限制。如方法400所示出的,本發(fā)明開始之后,進(jìn)行步驟S402,批量讀取將進(jìn)行更新的多個數(shù)據(jù)塊中的數(shù)據(jù)。所述讀取操作典型地包括通過批量的、諸如ListIO之類的IO操作來從PFS中讀取。根據(jù)本發(fā)明的優(yōu)選實(shí)施方式,將進(jìn)行更新的所述多個數(shù)據(jù)塊為連續(xù)分布,并且批量讀取將進(jìn)行更新的所述多個數(shù)據(jù)塊中的數(shù)據(jù)包括通過一次讀取操作讀取連續(xù)分布的所述多個數(shù)據(jù)塊(例如32個連續(xù)數(shù)據(jù)塊)中的數(shù)據(jù)。根據(jù)本發(fā)明的優(yōu)選實(shí)施方式,所述批量讀取的起始位置為將進(jìn)行更新的所述多個數(shù)據(jù)塊中第一個將進(jìn)行第一次更新的數(shù)據(jù)塊,也即第一個將被快照的數(shù)據(jù)塊。在圖6B的示例中,批量讀取的起始位置例如可以是PFS中的塊#2。根據(jù)本發(fā)明的優(yōu)選實(shí)施方式,所述批量讀取的結(jié)束位置為將進(jìn)行更新的所述多個數(shù)據(jù)塊中最后一個將進(jìn)行第一次更新的數(shù)據(jù)塊,也即最后一個將被快照的數(shù)據(jù)塊。在圖6B的示例中例如為PFS中的塊#10,在圖6C所示的示例中例如為PFS中的塊#9。在上述優(yōu)選實(shí)施方式中,所讀取的數(shù)據(jù)塊的數(shù)目可以大于將進(jìn)行第一次更新的數(shù)據(jù)塊的數(shù)目。例如,在圖6B的示例中,所讀取的數(shù)據(jù)塊可以優(yōu)選地為從PFS中的塊#2至塊#10,或者在圖6C的示例中,所讀取的數(shù)據(jù)塊可以優(yōu)選地為從PFS中的塊#2至塊#9。接下來,過程前進(jìn)至步驟S404,為所述批量讀取的數(shù)據(jù)塊分配存儲空間。根據(jù)本發(fā)明的優(yōu)選實(shí)施方式,為所述批量讀取的數(shù)據(jù)分配的所述存儲空間包括一次性分配的連續(xù)存儲空間。此外,根據(jù)本發(fā)明的優(yōu)選實(shí)施方式,所述存儲空間包括磁盤上的專用存儲空間,諸如SavVol中的槽。根據(jù)本發(fā)明的另一優(yōu)選實(shí)施方式,為所述批量讀取的數(shù)據(jù)分配的所述存儲空間大小相應(yīng)于(例如等于)存儲所述將進(jìn)行第一次更新的數(shù)據(jù)塊中的數(shù)據(jù)所需的存儲空間大小。例如,在圖6A的示例中,需要分配8個槽;而圖6B的示例中,需要分配7個槽。所分配的存儲空間(或槽)的地址可以例如保持在存儲空間表(例如槽表)中供后續(xù)參考。所述存儲空間表(例如槽表)可以例如采用鏈表實(shí)現(xiàn)。接著,過程前進(jìn)至步驟S406,將所述批量讀取的數(shù)據(jù)塊中將進(jìn)行第一次更新的數(shù)據(jù)塊中的數(shù)據(jù)批量存儲到所分配的存儲空間。根據(jù)本發(fā)明的優(yōu)選實(shí)施方式,該步驟S406中的批量存儲包括僅通過一次寫入操作進(jìn)行存儲。例如,所述寫入操作可以包括通過一個ListIO之類的IO操作進(jìn)行。要注意的是,如上文關(guān)于步驟S402描述的那樣,有時所讀取的數(shù)據(jù)塊數(shù)目會大于第一次更新的數(shù)據(jù)塊的數(shù)目,這時,根據(jù)本發(fā)明的優(yōu)選實(shí)施方式,步驟S406中的批量存儲將包括僅存儲所述批量讀取的數(shù)據(jù)中所述將進(jìn)行第一次更新的數(shù)據(jù)塊中的數(shù)據(jù),而對其余的數(shù)據(jù)不進(jìn)行存儲。例如,在圖6A的示例中,不寫入塊#2和塊#9所對應(yīng)的數(shù)據(jù)。此外,考慮到在后端存儲中通常以RAID方式進(jìn)行的配置,根據(jù)本發(fā)明的優(yōu)選實(shí)施方式,所述批量存儲可以采用完全條帶寫(fullstripewrite)的方式。根據(jù)本發(fā)明的另一優(yōu)選實(shí)施方式,所述批量存儲的數(shù)據(jù)為快照。至此,過程結(jié)束。要注意的是,根據(jù)本發(fā)明的各個方面在文件系統(tǒng)中保存快照的方法與現(xiàn)有技術(shù)中的保存快照的方法是兼容的,它們也可以共存并在運(yùn)行中切換。因此,如果進(jìn)一步考慮到快照性能和存儲器開銷之間的性能平衡,優(yōu)選的,可以在進(jìn)行如圖4所示出方法400之前查看需要進(jìn)行快照塊的狀態(tài),據(jù)此判斷采用本發(fā)明所述的在文件系統(tǒng)中保存數(shù)據(jù)快照的方法是否具有所要求的性能,從而決定是采用根據(jù)本發(fā)明的保存快照的方法還是傳統(tǒng)的保存快照的方法。下面結(jié)合圖6A和6B詳細(xì)說明如何查看狀態(tài)和進(jìn)行所述判斷。本領(lǐng)域技術(shù)人員員應(yīng)知,如下詳細(xì)說明的所述查看狀態(tài)和所述判斷均是為進(jìn)一步優(yōu)化本發(fā)明性能而作出的可選示例。其不是必須的。根據(jù)本發(fā)明的優(yōu)選實(shí)施方式,可以通過查找在存儲器中存儲的位圖來獲得所述將進(jìn)行第一次更新的數(shù)據(jù)塊的信息,所述信息包括(例如盤區(qū)中)所述將進(jìn)行第一次更新的數(shù)據(jù)塊的數(shù)目、分布、以及首尾位置中的一個或多個。由于位圖通常位于存儲器中,因此查詢速度將會非常快。根據(jù)本發(fā)明的另一優(yōu)選實(shí)施方式,所述判斷包括在步驟S402之前,進(jìn)一步確定在所述將進(jìn)行第一次更新的數(shù)據(jù)塊數(shù)目達(dá)到第一值、和/或確定最長相鄰的所述將進(jìn)行第一次更新的數(shù)據(jù)塊數(shù)目達(dá)到第二值時,執(zhí)行如圖4中方法400的步驟S402-S406所述的過程。根據(jù)本發(fā)明的優(yōu)選實(shí)施方式,所述第一值和所述第二值為預(yù)定值或可在運(yùn)行中調(diào)整。作為進(jìn)一步補(bǔ)充的又一優(yōu)選實(shí)施方式,所述第一值為使得所述將進(jìn)行第一次更新的數(shù)據(jù)塊數(shù)目占將進(jìn)行更新的所述多個數(shù)據(jù)塊數(shù)目的比例達(dá)到第一閾值的值;所述第二值為使得所述將進(jìn)行第一次更新的數(shù)據(jù)塊數(shù)目占將進(jìn)行更新的所述多個數(shù)據(jù)塊數(shù)目的比例達(dá)到第二閾值的值。根據(jù)本發(fā)明的優(yōu)選實(shí)施方式,所述第一閾值和所述第二閾值為預(yù)定值或可在運(yùn)行中調(diào)整。作為本發(fā)明的優(yōu)選實(shí)施方式,所述第一閾值可以為80%。作為本發(fā)明的又一優(yōu)選實(shí)施方式,所述第二閾值可以為50%。例如,在圖6A的示例中,盤區(qū)中存在8個第一次更新的數(shù)據(jù)塊,其占盤區(qū)的總數(shù)據(jù)塊比例達(dá)80%,則根據(jù)本發(fā)明一個方面的策略,可以采用根據(jù)本發(fā)明的在文件系統(tǒng)中保存數(shù)據(jù)快照的方法。否則,如果僅有20%的數(shù)據(jù)塊是第一次更新的數(shù)據(jù)塊,則作為一種選擇,可以采用傳統(tǒng)保存數(shù)據(jù)快照的方法。在圖6B的示例中,盤區(qū)中存在7個第一次更新的數(shù)據(jù)塊,則根據(jù)本發(fā)明一個方面的策略,即考慮將進(jìn)行第一次更新的數(shù)據(jù)塊數(shù)目所占盤區(qū)比例的這一策略,由于該比例未達(dá)80%,因而需要采用傳統(tǒng)保存數(shù)據(jù)快照的方法;然而,根據(jù)本發(fā)明的另一方面的策略,即考慮最長相鄰的所述將進(jìn)行第一次更新的數(shù)據(jù)塊數(shù)目所占盤區(qū)比例的這一策略,由于該比例達(dá)到60%,可以采用根據(jù)本發(fā)明的在文件系統(tǒng)中保存數(shù)據(jù)快照的方法。一旦確定使用根據(jù)本發(fā)明的用于保存文件快照的方法,本發(fā)明還可優(yōu)選地提取快照表供后續(xù)參考,所述快照表例如可以采用鏈表的形式記錄下(例如盤區(qū)中的)哪些數(shù)據(jù)塊需要被快照的信息,這些信息例如可以是PFS塊號。根據(jù)本發(fā)明進(jìn)一步的優(yōu)選實(shí)施方式,快照表中內(nèi)的PFS塊號可以依據(jù)B樹的節(jié)點(diǎn)按升序排列(但可不相鄰)。例如對于圖6A所示的示例,在快照表中可以例如標(biāo)注塊#1、塊#3-塊#8以及塊#10作為將被快照的塊。根據(jù)本發(fā)明進(jìn)一步的優(yōu)選實(shí)施方式,在圖4中方法400所示的步驟S406之后,還可以包括批量更新映射表的步驟,所述映射表記錄了所述將進(jìn)行第一次更新的數(shù)據(jù)塊和所述將進(jìn)行第一次更新的數(shù)據(jù)塊中的數(shù)據(jù)在所述存儲空間中的位置之間的對應(yīng)關(guān)系。作為本發(fā)明進(jìn)一步的優(yōu)選實(shí)施方式,可以基于所述快照表和所述存儲空間表(槽表)來更新所述映射表。根據(jù)本發(fā)明的優(yōu)選實(shí)施方式,所述更新映射表包括僅通過一次讀寫操作更新所述映射表。根據(jù)本發(fā)明的又一優(yōu)選實(shí)施方式,所述映射表的更新可以遵循現(xiàn)有的鎖機(jī)制。要注意的是,在所述映射表中的映射或關(guān)鍵字仍然在塊級進(jìn)行保持,因此根據(jù)本發(fā)明的方面的保存文件快照的方法可以與當(dāng)前的設(shè)計(jì)相兼容。圖5示出了根據(jù)本發(fā)明另一實(shí)施方式的在文件系統(tǒng)中保持?jǐn)?shù)據(jù)快照的方法的流程圖500。與圖4所示出的方法400的不同之處在于,圖5所示的方法500針對的是文件系統(tǒng)中將進(jìn)行第一次更新的一段或多段連續(xù)的數(shù)據(jù)塊。針對這些數(shù)據(jù)塊,在方法開始之后,步驟S502,批量讀取每段連續(xù)數(shù)據(jù)塊中的數(shù)據(jù)。所述批量讀取的具體方法例如如前文參照圖4的方法400中步驟S402中所示出的,讀取操作典型地包括通過批量的、諸如ListIO之類的IO操作(例如一次IO操作)來從PFS中讀取。結(jié)合圖6D進(jìn)行說明,在圖6D所示的示例中,針對(例如盤區(qū)中)將進(jìn)行第一次更新的連續(xù)數(shù)據(jù)塊#2-塊#4,以及塊#7-塊#10,分別進(jìn)行根據(jù)本發(fā)明一個實(shí)施方式的如圖5所示的方法500。接下來,步驟前進(jìn)到步驟S504,為所述批量讀取的數(shù)據(jù)分配存儲空間。與圖4的方法400中步驟S404的分配類似,步驟S504中所分配的存儲空間包括磁盤上的專用存儲空間,諸如SavVol中的槽。繼而,步驟前進(jìn)至步驟S506,將所述批量讀取的數(shù)據(jù)批量存儲到所分配的存儲空間。與前述步驟S406類似,步驟S506中的批量存儲也包括僅通過一次寫入操作(例如通過一個ListIO)進(jìn)行存儲。至此,過程結(jié)束。需要注意的是,根據(jù)本發(fā)明的優(yōu)選實(shí)施方式,如圖5所示的方法可以針對將進(jìn)行第一次更新的一段或多段連續(xù)數(shù)據(jù)塊并行地進(jìn)行。本領(lǐng)域技術(shù)人員應(yīng)理解,以上所描述的說明性流程圖的每個框以及流程圖中框的組合可以由計(jì)算機(jī)程序指令來執(zhí)行。這些程序指令可以被提供至處理器以生產(chǎn)機(jī)器,從而使得所述指令在處理器上執(zhí)行時創(chuàng)建用于實(shí)現(xiàn)一個或多個流程圖框中所指定操作的裝置。所述計(jì)算機(jī)程序指令可以由處理器執(zhí)行以使得所述處理器執(zhí)行一系列操作步驟來產(chǎn)生計(jì)算機(jī)實(shí)施的處理,以使得在處理器上執(zhí)行的指令提供用于實(shí)現(xiàn)一個或多個流程圖框中所指定操作的裝置。所述計(jì)算機(jī)程序指令還可以使得流程圖框中所示出的至少一些操作步驟并行執(zhí)行。此外,諸如可能在多處理器計(jì)算機(jī)系統(tǒng)中出現(xiàn)的某些步驟還可以跨多個的處理器執(zhí)行。此外,流程圖圖示中的一個或多個框或框的組合還可以在不背離本發(fā)明的范圍或精神的情況下與其它框或框的組合同時執(zhí)行,或者甚至以不同于所圖示的順序來執(zhí)行。圖7示出了根據(jù)本發(fā)明一個實(shí)施方式的在文件系統(tǒng)中保存數(shù)據(jù)快照的裝置的框圖。如圖所示,裝置700包括讀取裝置701,配置用于批量讀取將進(jìn)行更新的多個數(shù)據(jù)塊中的數(shù)據(jù);分配裝置702,配置用于為所述批量讀取的數(shù)據(jù)分配存儲空間;以及存儲控制裝置703,配置用于將所述批量讀取的數(shù)據(jù)中將進(jìn)行第一次更新的數(shù)據(jù)塊中的數(shù)據(jù)批量存儲到所分配的存儲空間。在本發(fā)明的可選實(shí)施方式中,裝置700進(jìn)一步包括:觸發(fā)裝置704,配置用于在所述將進(jìn)行第一次更新的數(shù)據(jù)塊數(shù)目達(dá)到第一值、和/或最長相鄰的所述將進(jìn)行第一次更新的數(shù)據(jù)塊數(shù)目達(dá)到第二值時,觸發(fā)所述保存快照的裝置的執(zhí)行。其中,所述第一值和所述第二值為預(yù)定值或可在運(yùn)行中調(diào)整。在本發(fā)明的可選實(shí)施方式中,所述第一值為使得所述將進(jìn)行第一次更新的數(shù)據(jù)塊數(shù)目占將進(jìn)行更新的所述多個數(shù)據(jù)塊數(shù)目的比例達(dá)到第一閾值的值;所述第二值為使得所述將進(jìn)行第一次更新的數(shù)據(jù)塊數(shù)目占將進(jìn)行更新的所述多個數(shù)據(jù)塊數(shù)目的比例達(dá)到第二閾值的值,并且所述第一閾值和所述第二閾值為預(yù)定值或可在運(yùn)行中調(diào)整。在本發(fā)明的可選實(shí)施方式中,所述裝置700進(jìn)一步包括更新裝置705,配置用于批量更新映射表,所述映射表記錄了所述將進(jìn)行第一次更新的數(shù)據(jù)塊和所述將進(jìn)行第一次更新的數(shù)據(jù)塊中的數(shù)據(jù)在所述存儲空間中的位置之間的對應(yīng)關(guān)系。在本發(fā)明的可選實(shí)施方式中,所述更新映射表包括僅通過一次讀寫操作更新所述映射表。在本發(fā)明的可選實(shí)施方式中,所述裝置700進(jìn)一步包括信息獲取裝置706,配置用于通過查找在存儲器中存儲的位圖來獲得所述將進(jìn)行第一次更新的數(shù)據(jù)塊的信息,其中所述信息包括所述將進(jìn)行第一次更新的數(shù)據(jù)塊的數(shù)目、分布、以及首尾位置中的一個或多個。在本發(fā)明的可選實(shí)施方式中,將進(jìn)行更新的所述多個數(shù)據(jù)塊為連續(xù)分布,并且所述批量讀取將進(jìn)行更新的所述多個數(shù)據(jù)塊中的數(shù)據(jù)包括通過一次讀取操作讀取連續(xù)分布的所述多個數(shù)據(jù)塊中的數(shù)據(jù)。在本發(fā)明的可選實(shí)施方式中,所述批量讀取的起始位置為將進(jìn)行更新的所述多個數(shù)據(jù)塊中第一個將進(jìn)行第一次更新的數(shù)據(jù)塊;和/或或所述批量讀取的結(jié)束位置為將進(jìn)行更新的所述多個數(shù)據(jù)塊中最后一個將進(jìn)行第一次更新的數(shù)據(jù)塊。在本發(fā)明的可選實(shí)施方式中,為所述批量讀取的數(shù)據(jù)分配的所述存儲空間包括一次性分配的連續(xù)存儲空間,并且所述批量存儲包括僅通過一次寫入操作進(jìn)行存儲。在本發(fā)明的可選實(shí)施方式中,為所述批量讀取的數(shù)據(jù)分配的所述存儲空間大小相應(yīng)于存儲所述將進(jìn)行第一次更新的數(shù)據(jù)塊中的數(shù)據(jù)所需的存儲空間大小,并且所述存儲控制裝置進(jìn)一步配置用于:僅存儲所述批量讀取的數(shù)據(jù)中所述將進(jìn)行第一次更新的數(shù)據(jù)塊中的數(shù)據(jù)。在本發(fā)明的可選實(shí)施方式中,所述批量存儲采用完全條帶寫的方式。在本發(fā)明的可選實(shí)施方式中,所述存儲空間包括磁盤上的專用存儲空間,并且所述批量存儲的數(shù)據(jù)為快照。圖8示出了根據(jù)本發(fā)明另一實(shí)施方式的在文件系統(tǒng)中保存數(shù)據(jù)快照的裝置的框圖。如圖所示,裝置800配置為針對文件系統(tǒng)中將進(jìn)行第一次更新的一段或多段連續(xù)的數(shù)據(jù)塊,包括讀取裝置801,配置用于批量讀取每段所述連續(xù)數(shù)據(jù)塊中的數(shù)據(jù);分配裝置802,配置用于為所述批量讀取的數(shù)據(jù)分配存儲空間;以及存儲控制裝置803,配置用于將所述批量讀取的數(shù)據(jù)批量存儲到所分配的存儲空間。在本發(fā)明的可選實(shí)施方式中,并行地針對所述將進(jìn)行第一次更新的一段或多段連續(xù)數(shù)據(jù)塊,啟動所述讀取裝置801、所述分配裝置802以及所述存儲控制裝置803。應(yīng)當(dāng)注意,盡管在上文詳細(xì)描述中提及了設(shè)備的若干裝置或子裝置,但是這種劃分僅僅并非強(qiáng)制性的。實(shí)際上,根據(jù)本發(fā)明的實(shí)施方式,上文描述的兩個或更多裝置的特征和功能可以在一個裝置中具體化。反之,上文描述的一個裝置的特征和功能可以進(jìn)一步劃分為由多個裝置來具體化。特別地,除硬件實(shí)施方式之外,本發(fā)明的實(shí)施方式還可以通過計(jì)算機(jī)程序產(chǎn)品的形式實(shí)現(xiàn)。例如,參考圖4和圖5描述的方法400和500可以通過計(jì)算機(jī)程序產(chǎn)品來實(shí)現(xiàn)。該計(jì)算機(jī)程序產(chǎn)品可以存儲在例如RAM、ROM、硬盤和/或任何適當(dāng)?shù)拇鎯橘|(zhì)中,或者通過網(wǎng)絡(luò)從適當(dāng)?shù)奈恢孟螺d到計(jì)算機(jī)系統(tǒng)上。計(jì)算機(jī)程序產(chǎn)品可以包括計(jì)算機(jī)代碼部分,其包括可由適當(dāng)?shù)奶幚碓O(shè)備(例如,中央處理單元CPU)執(zhí)行的程序指令。所述程序指令至少可以包括:用于批量讀取將進(jìn)行更新的多個數(shù)據(jù)塊中的數(shù)據(jù)的指令,為所述批量讀取的數(shù)據(jù)分配存儲空間的指令,以及將所述批量讀取的數(shù)據(jù)中將進(jìn)行第一次更新的數(shù)據(jù)塊中的數(shù)據(jù)批量存儲到所分配的存儲空間的指令。上文已經(jīng)結(jié)合若干具體實(shí)施方式闡釋了本發(fā)明的精神和原理。以下將結(jié)合COFW的特點(diǎn),對根據(jù)本發(fā)明的各種實(shí)施方式的在文件系統(tǒng)中保存快照的方法的諸多優(yōu)點(diǎn)加以描述。由于COFW通常采用高速緩存模式和ListIO,PFS默認(rèn)按照高速緩存模式進(jìn)行更新(高速緩存寫操作一般為NAS服務(wù)器的默認(rèn)模式),而在高速緩存模式中數(shù)據(jù)塊往往在硬盤上為連續(xù)的,這樣,利用根據(jù)本發(fā)明的各種實(shí)施方式將會將會易于結(jié)合批量I/O操作并獲得非常良好的性能。同樣,由于COFW的本地規(guī)則,即通常本地地分配和修改相鄰塊,高速緩存模式也將有助于進(jìn)行隨機(jī)更新。更為具體而言,根據(jù)本發(fā)明的實(shí)施方式,將PFS讀和SavVol寫分別合并為(例如單個)批量IO操作,這顯著地降低了從硬盤讀取或向硬盤寫入的IO數(shù)量(典型地為32:1,具體取決于文件系統(tǒng)的設(shè)置,例如取決于文件系統(tǒng)一次IO所能訪問的數(shù)據(jù)塊的數(shù)目),并且通過適當(dāng)?shù)刂С痔崆白x和完全條帶寫而提高了IO性能。與此同時,顯著地降低了快照存儲空間分配和映射表更新的函數(shù)調(diào)用(多達(dá)32:1)。并在多個快照服務(wù)線程之間的鎖競爭以及因而支持更多寫入流(即向不同文件)并行運(yùn)行。特別的,本發(fā)明尤其對于順序?qū)懞涂煺斩阅軌颢@得更好的多的快照性能。同時,使用檢測更新模式和自動切換快照的方法的策略更為靈活地在性能和存儲器消耗之間進(jìn)行平衡。而且,本發(fā)明與當(dāng)前的快照可以兼容,實(shí)際上,本發(fā)明的快照方式與現(xiàn)有技術(shù)中的快照方式可以共存并在運(yùn)行中切換。此外,由于幾乎所有變化都在存儲器結(jié)構(gòu)/邏輯中發(fā)生,因此本發(fā)明還易于實(shí)現(xiàn)。雖然已經(jīng)參考若干具體實(shí)施方式描述了本發(fā)明,但是應(yīng)該理解,本發(fā)明并不限于所公開的具體實(shí)施方式。本發(fā)明旨在涵蓋所附權(quán)利要求的精神和范圍內(nèi)所包括的各種修改和等同布置。所附權(quán)利要求的范圍符合最寬泛的解釋,從而包含所有這樣的修改及等同結(jié)構(gòu)和功能。