用于保留克隆分離操作之后的存儲(chǔ)對(duì)象中的消重的系統(tǒng)和方法
【專利摘要】一種用于保留從基存儲(chǔ)對(duì)象的克隆的分離操作中作為結(jié)果的存儲(chǔ)對(duì)象(例如,靈活卷)的數(shù)據(jù)塊的消重的系統(tǒng)和方法。所述克隆可以包括與基存儲(chǔ)對(duì)象的至少一個(gè)數(shù)據(jù)塊共享的數(shù)據(jù)塊和不與基存儲(chǔ)對(duì)象的至少一個(gè)數(shù)據(jù)塊共享的至少一個(gè)數(shù)據(jù)塊。與基存儲(chǔ)對(duì)象共享的克隆的數(shù)據(jù)塊可以被指示成接收可以包括將新的指針指派給所指示的數(shù)據(jù)塊的寫分配。每個(gè)數(shù)據(jù)塊可以包括多個(gè)指針,包括虛擬地址指針和物理地址指針。照此,可以將單個(gè)物理地址指針指派給包括相同的虛擬地址指針的克隆的數(shù)據(jù)塊。
【專利說(shuō)明】用于保留克隆分離操作之后的存儲(chǔ)對(duì)象中的消重的系統(tǒng)和方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明的實(shí)施例涉及存儲(chǔ)系統(tǒng),并且特別地,用于保留克隆分離操作之后的存儲(chǔ)對(duì)象中的消重(dedup I i cation )。
【背景技術(shù)】
[0002]如所期望的,一種存儲(chǔ)系統(tǒng)通常包括可以將信息輸入其中并且可以從其中獲取信息的一個(gè)或多個(gè)存儲(chǔ)設(shè)備。該存儲(chǔ)系統(tǒng)包括尤其通過(guò)調(diào)用存儲(chǔ)操作來(lái)功能地組織該系統(tǒng)以便支持由該系統(tǒng)所實(shí)現(xiàn)的存儲(chǔ)服務(wù)的存儲(chǔ)操作系統(tǒng)。存儲(chǔ)系統(tǒng)可以根據(jù)各種存儲(chǔ)架構(gòu)來(lái)實(shí)現(xiàn),包括但不限于,網(wǎng)絡(luò)附接的存儲(chǔ)環(huán)境、存儲(chǔ)區(qū)域網(wǎng)、以及直接附接到客戶端或主計(jì)算機(jī)的磁盤組裝件。存儲(chǔ)設(shè)備通常是被組織為磁盤陣列的磁盤驅(qū)動(dòng)器,其中術(shù)語(yǔ)“磁盤”通常描述自給式旋轉(zhuǎn)磁介質(zhì)存儲(chǔ)設(shè)備。本上下文中的術(shù)語(yǔ)“磁盤”與硬盤驅(qū)動(dòng)器(HDD)或直接訪問(wèn)存儲(chǔ)設(shè)備(DASD)同義。
[0003]存儲(chǔ)系統(tǒng)的存儲(chǔ)操作系統(tǒng)可以實(shí)現(xiàn)諸如文件系統(tǒng)之類的高級(jí)模塊,以邏輯地將在卷上存儲(chǔ)的信息組織為存儲(chǔ)對(duì)象的層級(jí)結(jié)構(gòu),諸如文件和邏輯單元(LU)。一種已知類型的文件系統(tǒng)是不重寫磁盤上的數(shù)據(jù)的隨地寫(write-anywhere)文件系統(tǒng)。被配置成對(duì)存儲(chǔ)系統(tǒng)進(jìn)行操作的隨地寫文件系統(tǒng)的示例是可從加利福尼亞州森尼維爾市NetApp,Inc.獲得的隨地寫文件布局(WAFL?)文件系統(tǒng)。
[0004]存儲(chǔ)系統(tǒng)可以進(jìn)一步被配置成允許許多服務(wù)器訪問(wèn)在存儲(chǔ)系統(tǒng)上存儲(chǔ)的存儲(chǔ)對(duì)象。在該模型中,服務(wù)器可以運(yùn)行通過(guò)計(jì)算機(jī)網(wǎng)絡(luò)(諸如,點(diǎn)對(duì)點(diǎn)鏈路、共享的局域網(wǎng)(LAN)、廣域網(wǎng)(WAN)、或通過(guò)諸如因特網(wǎng)之類的公用網(wǎng)絡(luò)而實(shí)現(xiàn)的虛擬專用網(wǎng)(VPN))而“連接”到存儲(chǔ)系統(tǒng)的諸如數(shù)據(jù)庫(kù)應(yīng)用之類的應(yīng)用。每個(gè)服務(wù)器可以通過(guò)經(jīng)由網(wǎng)絡(luò)向系統(tǒng)發(fā)布作為基于文件的和基于塊的協(xié)議消息(以分組的形式)的訪問(wèn)請(qǐng)求(讀/寫請(qǐng)求)來(lái)請(qǐng)求存儲(chǔ)系統(tǒng)的數(shù)據(jù)服務(wù)。
[0005]可以將多個(gè)存儲(chǔ)系統(tǒng)互連,以提供被配置成服務(wù)許多服務(wù)器的存儲(chǔ)系統(tǒng)架構(gòu)。在一些實(shí)施例中,存儲(chǔ)系統(tǒng)架構(gòu)提供一個(gè)或多個(gè)聚合(aggregate),每個(gè)聚合包括一組一個(gè)或多個(gè)存儲(chǔ)設(shè)備(例如,磁盤)。每個(gè)聚合可以存儲(chǔ)一個(gè)或多個(gè)存儲(chǔ)對(duì)象,諸如一個(gè)或多個(gè)卷。聚合可以跨被互連為集群(cluster)的多個(gè)存儲(chǔ)系統(tǒng)而分布。存儲(chǔ)對(duì)象(例如,卷)可以被配置成存儲(chǔ)由該集群響應(yīng)于由服務(wù)器所發(fā)布的多協(xié)議數(shù)據(jù)訪問(wèn)請(qǐng)求而服務(wù)的諸如文件和邏輯單元之類的存儲(chǔ)對(duì)象的內(nèi)容。
[0006]集群的每個(gè)存儲(chǔ)系統(tǒng)(節(jié)點(diǎn))可以包括(i)適于服務(wù)特定的聚合或卷的存儲(chǔ)服務(wù)器(被稱為“D刀片”)以及(ii)適于將數(shù)據(jù)訪問(wèn)請(qǐng)求重定向到集群的任何存儲(chǔ)服務(wù)器的多協(xié)議引擎(被稱為“N刀片”)。在說(shuō)明性實(shí)施例中,每個(gè)存儲(chǔ)系統(tǒng)的存儲(chǔ)服務(wù)器體現(xiàn)為磁盤元件(D刀片),并且多協(xié)議引擎體現(xiàn)為網(wǎng)絡(luò)元件(N刀片)。N刀片從客戶端接收多協(xié)議數(shù)據(jù)訪問(wèn)請(qǐng)求,將該訪問(wèn)請(qǐng)求轉(zhuǎn)換成集群構(gòu)造(CF)消息,以及將該消息重定向到集群的適當(dāng)?shù)腄刀片。[0007]集群的存儲(chǔ)系統(tǒng)可以被配置成彼此通信以共同地動(dòng)作,以提高性能或彌補(bǔ)集群內(nèi)的任何單個(gè)存儲(chǔ)系統(tǒng)故障。集群通過(guò)提供至共享存儲(chǔ)(包括一組存儲(chǔ)設(shè)備)的訪問(wèn)來(lái)向服務(wù)器提供數(shù)據(jù)服務(wù)。通常,服務(wù)器將為與存儲(chǔ)系統(tǒng)的數(shù)據(jù)訪問(wèn)會(huì)話而與集群的存儲(chǔ)系統(tǒng)相連接。在與存儲(chǔ)系統(tǒng)的數(shù)據(jù)訪問(wèn)會(huì)話期間,服務(wù)器可以提交由存儲(chǔ)系統(tǒng)接收和執(zhí)行的訪問(wèn)請(qǐng)求(讀/寫請(qǐng)求)。
[0008]集群的每個(gè)存儲(chǔ)系統(tǒng)可以包括存儲(chǔ)操作系統(tǒng)。此外,每個(gè)服務(wù)器可以運(yùn)行要求集群的數(shù)據(jù)服務(wù)的多個(gè)應(yīng)用。每個(gè)服務(wù)器的數(shù)據(jù)可以存儲(chǔ)于共享存儲(chǔ)上的存儲(chǔ)對(duì)象中,諸如數(shù)據(jù)聚合、卷、卷的克隆等。照此,存儲(chǔ)系統(tǒng)可以包括對(duì)存儲(chǔ)對(duì)象執(zhí)行系統(tǒng)操作的存儲(chǔ)操作系統(tǒng)。例如,存儲(chǔ)操作系統(tǒng)可以對(duì)卷執(zhí)行消重操作,產(chǎn)生卷的克隆,以及對(duì)卷的克隆執(zhí)行分離操作。
[0009]如本領(lǐng)域所公知的,為了節(jié)省卷上的存儲(chǔ)空間,可以對(duì)卷的數(shù)據(jù)進(jìn)行消重。然后可以產(chǎn)生對(duì)于卷的克隆,因此克隆可以基于或依賴于基卷,以使得靈活卷的克隆包括與基卷共享的數(shù)據(jù)塊。靈活卷的克隆還可以包括經(jīng)消重的數(shù)據(jù)塊。然后可以對(duì)卷的克隆執(zhí)行分離操作以使該克隆獨(dú)立于其基卷,以使得作為結(jié)果的卷不包括與基靈活卷共享的數(shù)據(jù)塊。然而,通常,將卷的克隆與其基卷相分離導(dǎo)致作為結(jié)果的卷中的消重的損失,因此作為結(jié)果的卷中的數(shù)據(jù)塊不再包括經(jīng)消重的數(shù)據(jù)塊。照此,將卷的克隆與其基卷相分離的常規(guī)的存儲(chǔ)系統(tǒng)技術(shù)不保留作為結(jié)果的卷的數(shù)據(jù)塊中的消重。
【發(fā)明內(nèi)容】
[0010]本文所描述的實(shí)施例提供一種用于保留存儲(chǔ)對(duì)象克隆分離操作之后的作為結(jié)果的存儲(chǔ)對(duì)象中的消重的系統(tǒng)和方法。在這些實(shí)施例中,可以對(duì)原始存儲(chǔ)對(duì)象進(jìn)行消重,并且然后為經(jīng)消重的原始存儲(chǔ)對(duì)象產(chǎn)生克隆??寺】梢砸蕾囉凇盎鎯?chǔ)對(duì)象”,包括產(chǎn)生該克隆的時(shí)間點(diǎn)處的原始存儲(chǔ)對(duì)象的數(shù)據(jù)。然后可以對(duì)該克隆執(zhí)行分離操作以產(chǎn)生獨(dú)立于其基存儲(chǔ)對(duì)象的作為結(jié)果的存儲(chǔ)對(duì)象。在一些實(shí)施例中,在克隆的分離操作期間,消重被保留在作為結(jié)果的存儲(chǔ)對(duì)象中,從而保留消重的存儲(chǔ)節(jié)約益處。
[0011 ] 在一些實(shí)施例中,存儲(chǔ)系統(tǒng)可以在多個(gè)存儲(chǔ)設(shè)備上存儲(chǔ)多個(gè)存儲(chǔ)對(duì)象,并且對(duì)存儲(chǔ)對(duì)象執(zhí)行操作。如本領(lǐng)域所公知的,每個(gè)存儲(chǔ)對(duì)象可以包括基礎(chǔ)數(shù)據(jù)塊和指針數(shù)據(jù)塊?;A(chǔ)數(shù)據(jù)塊可以包括被存儲(chǔ)以尋址存儲(chǔ)設(shè)備上的位置的客戶端數(shù)據(jù)。存儲(chǔ)對(duì)象的指針數(shù)據(jù)塊可以包括指向基礎(chǔ)數(shù)據(jù)塊的指針。存儲(chǔ)系統(tǒng)可以對(duì)原始存儲(chǔ)對(duì)象執(zhí)行消重,因此,(基礎(chǔ)數(shù)據(jù)塊中的)客戶端數(shù)據(jù)的實(shí)例在存儲(chǔ)聚合中僅存儲(chǔ)一次,并且原始存儲(chǔ)對(duì)象的多個(gè)指針數(shù)據(jù)塊可以指向相同的客戶端數(shù)據(jù)的單個(gè)實(shí)例,因而提供存儲(chǔ)節(jié)約益處。
[0012]存儲(chǔ)系統(tǒng)然后可以產(chǎn)生經(jīng)消重的原始存儲(chǔ)對(duì)象的克隆,克隆依賴于“基存儲(chǔ)對(duì)象”(包括產(chǎn)生該克隆的時(shí)間點(diǎn)處的原始存儲(chǔ)對(duì)象的數(shù)據(jù))和“增量(delta)數(shù)據(jù)”(包括產(chǎn)生該克隆的時(shí)間點(diǎn)之后的對(duì)于原始存儲(chǔ)對(duì)象的數(shù)據(jù)改變)。如果原始存儲(chǔ)對(duì)象被消重,那么基存儲(chǔ)對(duì)象也可以被消重并且具有消重的存儲(chǔ)益處(原因在于,基存儲(chǔ)對(duì)象包括產(chǎn)生克隆的時(shí)間點(diǎn)處的原始存儲(chǔ)對(duì)象的拷貝)。
[0013]基存儲(chǔ)對(duì)象還可以包括基礎(chǔ)數(shù)據(jù)塊和指針數(shù)據(jù)塊?;A(chǔ)數(shù)據(jù)塊可以包括被存儲(chǔ)以尋址存儲(chǔ)設(shè)備上的位置的客戶端數(shù)據(jù)。基存儲(chǔ)對(duì)象的指針數(shù)據(jù)塊可以包括指向基存儲(chǔ)對(duì)象的基礎(chǔ)數(shù)據(jù)塊的指針??寺】梢园ɑ鎯?chǔ)對(duì)象的指針數(shù)據(jù)塊的單獨(dú)拷貝,但通常將不具有基存儲(chǔ)對(duì)象的基礎(chǔ)數(shù)據(jù)塊的單獨(dú)拷貝。更確切地說(shuō),因?yàn)榭寺“ㄅc基存儲(chǔ)對(duì)象相同的指針數(shù)據(jù)塊,所以克隆包括指向基存儲(chǔ)對(duì)象的相同的基礎(chǔ)數(shù)據(jù)塊的相同指針。照此,因?yàn)榭寺〔话淮鎯?chǔ)到單獨(dú)的/新的地址位置的基礎(chǔ)數(shù)據(jù)塊的單獨(dú)拷貝,所以克隆“共享”基存儲(chǔ)對(duì)象的基礎(chǔ)數(shù)據(jù)塊(被稱為“共享數(shù)據(jù)塊”)。因而,克隆可以視為依賴于基存儲(chǔ)對(duì)象。
[0014]然后可以對(duì)克隆執(zhí)行分離操作,以使克隆獨(dú)立于其基存儲(chǔ)對(duì)象。分離操作可以產(chǎn)生并存儲(chǔ)用于克隆的共享數(shù)據(jù)塊的單獨(dú)拷貝。例如,分離操作邏輯可以提交用于基存儲(chǔ)對(duì)象的共享數(shù)據(jù)塊的寫分配,來(lái)為克隆將共享數(shù)據(jù)塊拷貝并存儲(chǔ)到存儲(chǔ)設(shè)備上的單獨(dú)的/新的地址位置。照此,因?yàn)榭寺⒒A(chǔ)數(shù)據(jù)塊的其單獨(dú)的拷貝存儲(chǔ)在單獨(dú)的/新的地址位置處,所以基存儲(chǔ)對(duì)象的基礎(chǔ)數(shù)據(jù)塊將不再與克隆共享。因而,分離操作可以修改克隆以產(chǎn)生包含基礎(chǔ)數(shù)據(jù)塊的單獨(dú)拷貝的且獨(dú)立于基存儲(chǔ)對(duì)象的“作為結(jié)果的存儲(chǔ)對(duì)象”。然而,通常,作為結(jié)果的存儲(chǔ)對(duì)象將不保留原始或基存儲(chǔ)對(duì)象的任何在前消重。
[0015]在一些實(shí)施例中,如果基存儲(chǔ)對(duì)象包括經(jīng)消重的數(shù)據(jù)塊并且如果將依賴于基存儲(chǔ)對(duì)象的克隆與基存儲(chǔ)對(duì)象相分離,由克隆分離操作所產(chǎn)生的作為結(jié)果的存儲(chǔ)對(duì)象可以保留基存儲(chǔ)對(duì)象的消重。在這些實(shí)施例中,當(dāng)對(duì)克隆執(zhí)行分離操作時(shí),寫分配邏輯可以確保當(dāng)發(fā)現(xiàn)克隆的兩個(gè)或更多指針數(shù)據(jù)塊包括指向基存儲(chǔ)對(duì)象的相同的基礎(chǔ)數(shù)據(jù)塊的相同指針時(shí),基礎(chǔ)數(shù)據(jù)塊的單個(gè)拷貝被產(chǎn)生并存儲(chǔ)到新的地址位置(而不是基礎(chǔ)數(shù)據(jù)塊的多個(gè)拷貝被存儲(chǔ)到多個(gè)新的地址位置)。同樣,作為結(jié)果的存儲(chǔ)對(duì)象中的兩個(gè)或更多指針數(shù)據(jù)塊將被配置成使得指向基礎(chǔ)數(shù)據(jù)塊的單個(gè)拷貝的每個(gè)指針被存儲(chǔ)到新的地址位置。照此,在作為結(jié)果的存儲(chǔ)對(duì)象中,數(shù)據(jù)的實(shí)例將在存儲(chǔ)聚合中存儲(chǔ)一次,并且作為結(jié)果的存儲(chǔ)對(duì)象的多個(gè)指針數(shù)據(jù)塊可以指向數(shù)據(jù)的單個(gè)實(shí)例,因而提供消重存儲(chǔ)節(jié)約益處。
[0016]在一些實(shí)施例中,經(jīng)受分離操作的克隆的指針數(shù)據(jù)塊可以被指示成接收寫分配。例如,與基存儲(chǔ)對(duì)象共享的克隆的指針數(shù)據(jù)塊可以被指示成接收寫分配??寺〉拿總€(gè)指針數(shù)據(jù)塊可以包括兩個(gè)指針:虛擬地址指針和物理地址指針。虛擬地址指針可以指向克隆的虛擬地址空間中的位置,并且物理地址指針可以指向存儲(chǔ)聚合(例如,基礎(chǔ)數(shù)據(jù)塊)內(nèi)的位置。如果克隆的指針數(shù)據(jù)塊與基存儲(chǔ)對(duì)象共享并且如果未接收到包括相同的虛擬地址指針的克隆的另一個(gè)指針數(shù)據(jù)塊的寫分配,則可以將新的指針指派給克隆的所指示的指針數(shù)據(jù)塊的物理地址指針。如果新的指針被指派給克隆的指針數(shù)據(jù)塊的物理地址指針,那么記錄對(duì)于物理地址指針的改變。例如,每個(gè)克隆可以包括描述該克隆的物理地址指針與該克隆的虛擬地址指針之間的關(guān)系的塊映射。塊映射可以包括虛擬地址指針對(duì)物理地址指針的一對(duì)一配對(duì)。照此,克隆的每個(gè)虛擬地址指針與該克隆的一個(gè)物理地址指針相對(duì)應(yīng)。然后,在克隆的指針數(shù)據(jù)塊的后續(xù)寫分配中,可以檢查克隆的塊映射以確定是否已經(jīng)將新的指針指派給與對(duì)應(yīng)于克隆的后續(xù)指針數(shù)據(jù)塊的虛擬地址指針的虛擬地址指針配對(duì)的物理地址指針。照此,如果已經(jīng)確定了是否接收到包括相同的虛擬地址指針的克隆的指針數(shù)據(jù)塊的寫分配,那么寫分配將向克隆的指針數(shù)據(jù)塊指派與已經(jīng)被指示用于寫分配的克隆的指針數(shù)據(jù)塊的虛擬地址指針配對(duì)的來(lái)自塊映射的物理地址指針。照此,如果克隆的多個(gè)所指示的指針數(shù)據(jù)塊具有相同的虛擬地址指針,那么可以僅將一個(gè)新的物理地址指針指派給包括相同的虛擬地址指針的該克隆的所有所指示的指針數(shù)據(jù)塊。
[0017]照此,克隆分離和消重保留系統(tǒng)和方法呈現(xiàn)了對(duì)于存儲(chǔ)系統(tǒng)環(huán)境的若干優(yōu)勢(shì)。例如,當(dāng)基存儲(chǔ)對(duì)象因消重而包括共享數(shù)據(jù)塊時(shí),將克隆與其基存儲(chǔ)對(duì)象相分離可以更高效??寺》蛛x和消重保留系統(tǒng)和方法可以導(dǎo)致更快的克隆分離操作以及作為結(jié)果的存儲(chǔ)對(duì)象中的經(jīng)消重的數(shù)據(jù)塊的保留。照此,因?yàn)樵谧鳛榻Y(jié)果的存儲(chǔ)對(duì)象中保留了消重,所以存儲(chǔ)系統(tǒng)可以利用較少的存儲(chǔ)資源,并且存儲(chǔ)系統(tǒng)的管理員可以不需要在作為結(jié)果的存儲(chǔ)對(duì)象上重新運(yùn)行消重過(guò)程。
【專利附圖】
【附圖說(shuō)明】
[0018]圖1是一些實(shí)施例操作于其中的示例性分布式存儲(chǔ)系統(tǒng)環(huán)境的示意圖。
[0019]圖2是可以被用于一些實(shí)施例操作于其中的存儲(chǔ)系統(tǒng)環(huán)境中的示例性存儲(chǔ)系統(tǒng)的示意圖。
[0020]圖3是根據(jù)一些實(shí)施例的形成被用于存儲(chǔ)操作系統(tǒng)中的集成協(xié)議軟件棧的一組軟件層的示意圖。
[0021]圖4是用于實(shí)現(xiàn)用于一些實(shí)施例操作于其中的示例性存儲(chǔ)系統(tǒng)的存儲(chǔ)協(xié)議的存儲(chǔ)側(cè)層的示意圖。
[0022]圖5是可以被用于一些實(shí)施例中的聚合(系統(tǒng)或數(shù)據(jù)聚合)的實(shí)施例的示意性框圖。
[0023]圖6是根據(jù)一些實(shí)施例的包括各種數(shù)據(jù)結(jié)構(gòu)的文件結(jié)構(gòu)的框圖。
[0024]圖7是根據(jù)一些實(shí)施例來(lái)自文件的塊到存儲(chǔ)聚合的存儲(chǔ)設(shè)備的塊的示例性映射。
[0025]圖8是根據(jù)一些實(shí)施例的卷的數(shù)據(jù)塊的雙塊號(hào)的示例性映射。
[0026]圖9是根據(jù)一些 實(shí)施例的用于將數(shù)據(jù)塊標(biāo)記為臟并且利用臟標(biāo)記來(lái)處理數(shù)據(jù)塊的方法的流程圖。
[0027]圖10是根據(jù)一些實(shí)施例的用于將靈活卷克隆的數(shù)據(jù)塊標(biāo)記為假臟并且利用假臟標(biāo)記來(lái)處理數(shù)據(jù)塊的方法的流程圖。
[0028]圖11是根據(jù)一些實(shí)施例的用于利用對(duì)寫分配邏輯的修改來(lái)將數(shù)據(jù)塊標(biāo)記為假臟的方法的流程圖。
[0029]圖12A是包括數(shù)據(jù)塊的消重的靈活卷克隆的多個(gè)數(shù)據(jù)塊的示例。
[0030]圖12B是已經(jīng)標(biāo)記為“假臟”的靈活卷克隆的經(jīng)消重的數(shù)據(jù)塊的示例性修改后的寫分配。
[0031]圖13是被用于一些實(shí)施例中的示例性數(shù)據(jù)克隆層級(jí)遷移管理數(shù)據(jù)結(jié)構(gòu)900?!揪唧w實(shí)施方式】
[0032]在以下描述中,為了解釋的目的,闡述了許多細(xì)節(jié)和替代。然而,本領(lǐng)域一般技術(shù)人員將意識(shí)到實(shí)施例能夠在不使用這些特定細(xì)節(jié)的情況下實(shí)施。在其它實(shí)例中,公知的結(jié)構(gòu)和設(shè)備采用框圖形式來(lái)示出,以免因不必要的細(xì)節(jié)而使實(shí)施例晦澀難懂。
[0033]將跟著的描述劃分成三個(gè)部分。部分I包含本文所使用的術(shù)語(yǔ)。部分II描述一些實(shí)施例操作于其中的集群存儲(chǔ)系統(tǒng)環(huán)境。部分III描述一種用于保留卷克隆分離操作之后的卷中的消重的系統(tǒng)和方法。
[0034]存儲(chǔ)對(duì)象:如本文所使用的,存儲(chǔ)對(duì)象包括用于存儲(chǔ)數(shù)據(jù)的任何類型的容器。存儲(chǔ)對(duì)象的示例包括但不限于文件、LU、配額樹(shù)(qtree)、卷、靈活卷、聚合、存儲(chǔ)設(shè)備等。為了說(shuō)明的目的,以下實(shí)施例關(guān)于靈活卷(例如,基靈活卷、靈活卷克隆、靈活卷克隆層級(jí)等)來(lái)描述。然而,在其它實(shí)施例中,任何其它類型的存儲(chǔ)對(duì)象可以被用于以下實(shí)施例中。
[0035]克隆:如本文所使用的,克隆可以包括存儲(chǔ)對(duì)象的即時(shí)復(fù)制,其中在創(chuàng)建時(shí)不要求附加的存儲(chǔ)空間。存儲(chǔ)對(duì)象的克隆可以包括存儲(chǔ)對(duì)象的數(shù)據(jù)的透明虛擬拷貝并且不要求對(duì)數(shù)據(jù)進(jìn)行任何拷貝。存儲(chǔ)對(duì)象的克隆衍生自并且基于存儲(chǔ)對(duì)象。例如,克隆可以包括存儲(chǔ)對(duì)象的虛擬圖像、指向存儲(chǔ)對(duì)象的指針、或指向存儲(chǔ)對(duì)象的圖像的指針。例如,克隆可以包括虛擬圖像或指向基存儲(chǔ)對(duì)象的指針。照此,克隆可以包括可以被動(dòng)態(tài)地供應(yīng)、定大小、以及調(diào)整大小的虛擬容器,以簡(jiǎn)化操作。然而,增量存儲(chǔ)容量只對(duì)于克隆特定的元數(shù)據(jù)和非冗余的數(shù)據(jù)塊而言是需要的。在一些實(shí)施例中,該克隆存儲(chǔ)包括基存儲(chǔ)對(duì)象與該克隆之間的改變的數(shù)據(jù)。當(dāng)創(chuàng)建克隆時(shí),它使用基存儲(chǔ)對(duì)象和/或基存儲(chǔ)對(duì)象的快照?qǐng)D像來(lái)用作它的基。例如,克隆可以包括指向存儲(chǔ)對(duì)象的圖像的指針和增量數(shù)據(jù),因此在第一時(shí)間點(diǎn)處產(chǎn)生圖像并且在該第一時(shí)間點(diǎn)之后的第二時(shí)間點(diǎn)處產(chǎn)生克隆。克隆的增量數(shù)據(jù)可以包括在第一時(shí)間點(diǎn)與第二時(shí)間點(diǎn)之間的對(duì)于存儲(chǔ)對(duì)象的改變。該克隆接收快照?qǐng)D像元數(shù)據(jù)的拷貝,并且然后當(dāng)克隆被寫時(shí)更新其元數(shù)據(jù)?;鎯?chǔ)對(duì)象與克隆之間的共同快照是只讀的,并且可以作為用于多個(gè)克隆的基而重新使用。因而,節(jié)約了存儲(chǔ)設(shè)備空間,原因在于所使用的新的設(shè)備空間與少量的元數(shù)據(jù)或者對(duì)于基存儲(chǔ)對(duì)象或克隆的有意義的改變相關(guān)聯(lián)。因而,克隆可以包括基存儲(chǔ)對(duì)象或甚至是基存儲(chǔ)對(duì)象的另一個(gè)克隆的可寫時(shí)間點(diǎn)圖像。照此,克隆將新級(jí)別的敏捷度和效率添加到存儲(chǔ)操作。為了說(shuō)明的目的,以下實(shí)施例關(guān)于靈活卷克隆來(lái)描述。然而,在其它實(shí)施例中,任何其它類型的克隆可以被用于以下實(shí)施例中。
[0036]集群存儲(chǔ)系統(tǒng):如本文所使用的,集群存儲(chǔ)系統(tǒng)可以包括一組一個(gè)或多個(gè)存儲(chǔ)系統(tǒng)。在一些實(shí)施例中,集群可以包括一個(gè)存儲(chǔ)系統(tǒng)。照此,有時(shí)可以可互換地使用術(shù)語(yǔ)“集群”和“存儲(chǔ)系統(tǒng)”。在其它實(shí)施例中,集群包括多個(gè)存儲(chǔ)系統(tǒng)。
[0037]靈活卷:如本文所使用的,靈活卷可以包括可以跨多個(gè)存儲(chǔ)設(shè)備高效地分布的并且可以被調(diào)整大小以滿足改變的業(yè)務(wù)或應(yīng)用需要的一種類型的存儲(chǔ)卷。在一些實(shí)施例中,存儲(chǔ)系統(tǒng)可以提供跨被互連為集群的多個(gè)節(jié)點(diǎn)而分布的一個(gè)或多個(gè)存儲(chǔ)卷和一個(gè)或多個(gè)聚合。每個(gè)存儲(chǔ)卷可以被配置成存儲(chǔ)諸如文件和邏輯單元之類的數(shù)據(jù)。照此,在一些實(shí)施例中,靈活卷可以被包括在存儲(chǔ)聚合內(nèi),并且進(jìn)一步包括至少一個(gè)存儲(chǔ)設(shè)備。存儲(chǔ)聚合可以通過(guò)RAID叢而抽象化,其中每個(gè)叢包括RAID群。此外,每個(gè)RAID群可以包括多個(gè)存儲(chǔ)磁盤。照此,靈活卷可以包括遍布在多個(gè)存儲(chǔ)磁盤或設(shè)備之上的數(shù)據(jù)存儲(chǔ)。
[0038]基靈活卷:如本文所使用的,基靈活卷包括不是靈活卷的克隆的卷。例如,基靈活卷可以是被克隆過(guò)的靈活卷。照此,基靈活卷可以視為至少一個(gè)靈活卷克隆所依賴的基卷。靈活卷克隆可以視為子靈活卷。
[0039]快照:如本文所使用的,快照包括創(chuàng)建文件系統(tǒng)的在線且只讀拷貝的特征??煺湛梢栽诓粡?fù)制文件內(nèi)容的情況下防范文件的意外刪除或修改。在一些實(shí)施例中,快照被靈活卷克隆用來(lái)創(chuàng)建基靈活卷的時(shí)間點(diǎn)視圖或圖像。當(dāng)改變文件時(shí),快照拷貝(或作為結(jié)果的靈活卷克隆)仍然可以指向在其被修改之前文件存在其中的存儲(chǔ)設(shè)備塊,并且將改變寫到新的存儲(chǔ)設(shè)備塊。當(dāng)數(shù)據(jù)在基靈活卷中被改變時(shí),原始數(shù)據(jù)塊保持與快照拷貝相關(guān)聯(lián),而不是被標(biāo)記以供重新使用。
[0040]增量數(shù)據(jù):如本文所使用的,增量數(shù)據(jù)包括基靈活卷與其靈活卷克隆之間的差異。例如,靈活卷克隆增量可以包括已經(jīng)被存儲(chǔ)或?qū)懙叫碌拇鎯?chǔ)設(shè)備塊的基靈活卷與靈活卷克隆之間的改變或差異。
[0041]虛擬卷塊號(hào):如本文所使用的,虛擬卷塊號(hào)(VVBN)可以指定數(shù)據(jù)塊在容器文件內(nèi)的偏移。例如,虛擬卷塊號(hào)可以包括靈活卷的虛擬塊地址空間內(nèi)的塊地址。在一些實(shí)施例中,虛擬卷塊號(hào)可以包括靈活卷克隆的虛擬塊地址空間內(nèi)的塊地址。照此,虛擬卷塊號(hào)可以包括虛擬地址指針。
[0042]物理卷塊號(hào):如本文所使用的,物理卷塊號(hào)(PVBN)可以指定數(shù)據(jù)塊在存儲(chǔ)聚合內(nèi)的位置。例如,物理卷塊號(hào)可以指定用于靈活卷的數(shù)據(jù)塊的存儲(chǔ)聚合內(nèi)的位置。在一些實(shí)施例中,物理卷塊號(hào)可以指定用于靈活卷克隆的數(shù)據(jù)塊的存儲(chǔ)聚合內(nèi)的位置或地址。照此,物理卷塊號(hào)可以包括物理地址指針。
[0043]一致點(diǎn):如本文所使用的,一致點(diǎn)(CP)可以指代用于執(zhí)行數(shù)據(jù)塊的多個(gè)寫分配的文件系統(tǒng)(例如,隨地寫文件布局)的寫片段或點(diǎn)。照此,每個(gè)CP可以包括多個(gè)寫分配以使得每個(gè)CP導(dǎo)致對(duì)磁盤文件系統(tǒng)圖像上的一致。在一些實(shí)施例中,WAFL系統(tǒng)可以把所有進(jìn)入的寫分配請(qǐng)求記到存儲(chǔ)器日志。照此,包括寫分配請(qǐng)求的日志可以被用來(lái)確定哪些數(shù)據(jù)塊需要在CP處更新或被寫。
[0044]索引節(jié)點(diǎn):如本文所使用的,索引節(jié)點(diǎn)可以指代文件特定的信息。照此,存儲(chǔ)系統(tǒng)上的或者靈活卷或靈活卷克隆中的每個(gè)文件可以與索引節(jié)點(diǎn)相關(guān)聯(lián)。在一些實(shí)施例中,索引節(jié)點(diǎn)可以包括文件相關(guān)的元數(shù)據(jù)和指向數(shù)據(jù)塊的指針。
[0045]消重:如本文所使用的,消重可以指代用于消除冗余數(shù)據(jù)的數(shù)據(jù)壓縮技術(shù)。在一些實(shí)施例中,卷的消重可以導(dǎo)致在存儲(chǔ)設(shè)備上存儲(chǔ)一次數(shù)據(jù),并且卷內(nèi)的多個(gè)引用可以指向所存儲(chǔ)的數(shù)據(jù)的單個(gè)實(shí)例。例如,存儲(chǔ)對(duì)象(例如,卷)可以包括多個(gè)數(shù)據(jù)塊。每個(gè)數(shù)據(jù)塊可以包括引用存儲(chǔ)設(shè)備內(nèi)的相同塊的指針。照此,存儲(chǔ)對(duì)象的多個(gè)數(shù)據(jù)塊可以均指向存儲(chǔ)設(shè)備內(nèi)的單個(gè)塊。
[0046]分離:如本文所使用的,分離操作可以指代使存儲(chǔ)對(duì)象的克隆(例如,靈活卷克隆)獨(dú)立于其基存儲(chǔ)對(duì)象(例如,基靈活卷)。在一些實(shí)施例中,將克隆與其基存儲(chǔ)對(duì)象相分離導(dǎo)致不與另一個(gè)存儲(chǔ)對(duì)象(例如,克隆的基靈活卷)共享數(shù)據(jù)塊的新的存儲(chǔ)對(duì)象(例如,克隆當(dāng)前是卷或靈活卷)。例如,靈活卷克隆的分離操作可以導(dǎo)致具有被指派給靈活卷克隆的數(shù)據(jù)塊的新的物理卷塊號(hào)的與基靈活卷共享的靈活卷克隆的數(shù)據(jù)塊。
墜ι.m+ew/儲(chǔ)系統(tǒng)壞境
[0047]圖1是一些實(shí)施例操作于其中的示例性虛擬服務(wù)器環(huán)境100的框圖。環(huán)境100可以包括一組一個(gè)或多個(gè)服務(wù)器系統(tǒng)和一個(gè)或多個(gè)存儲(chǔ)系統(tǒng)120。服務(wù)器系統(tǒng)110均可以經(jīng)由網(wǎng)絡(luò)167而訪問(wèn)連接至服務(wù)器系統(tǒng)110的一個(gè)或多個(gè)存儲(chǔ)系統(tǒng)120。一個(gè)或多個(gè)存儲(chǔ)系統(tǒng)120包括集群存儲(chǔ)系統(tǒng)135。集群135中的每個(gè)存儲(chǔ)系統(tǒng)120可以包括用于存儲(chǔ)客戶端數(shù)據(jù)的一組存儲(chǔ)設(shè)備130,集群135的存儲(chǔ)設(shè)備130包括存儲(chǔ)系統(tǒng)120的共享存儲(chǔ)。注意,服務(wù)器系統(tǒng)110也彼此連接(例如,經(jīng)由網(wǎng)絡(luò)167)以彼此通信(例如,如本文所描述的,以共同地工作以向用戶/客戶端系統(tǒng)(未示出)提供數(shù)據(jù)訪問(wèn)服務(wù),以共同地托管多個(gè)虛擬機(jī))。
[0048]服務(wù)器系統(tǒng)110可以包括可以運(yùn)行與存儲(chǔ)系統(tǒng)120進(jìn)行交互以接收讀/寫訪問(wèn)請(qǐng)求以及通過(guò)網(wǎng)絡(luò)167接收或發(fā)送數(shù)據(jù)的一個(gè)或多個(gè)應(yīng)用112的計(jì)算機(jī)系統(tǒng)。在一些實(shí)施例中,服務(wù)器系統(tǒng)110可以包括托管服務(wù)器系統(tǒng)110的多個(gè)實(shí)例的框架(chassis),每個(gè)服務(wù)器系統(tǒng)Iio托管體現(xiàn)為虛擬機(jī)的多個(gè)客戶端系統(tǒng)。網(wǎng)絡(luò)167和/或網(wǎng)絡(luò)167的子網(wǎng)可以物理地體現(xiàn)于此類框架內(nèi)。
[0049]在服務(wù)器系統(tǒng)110上運(yùn)行的應(yīng)用112可以通過(guò)發(fā)送和處理針對(duì)來(lái)自一個(gè)或多個(gè)存儲(chǔ)系統(tǒng)120的數(shù)據(jù)的訪問(wèn)請(qǐng)求而提供數(shù)據(jù)訪問(wèn)服務(wù)。繼而,應(yīng)用112利用存儲(chǔ)系統(tǒng)120的服務(wù)來(lái)訪問(wèn)、存儲(chǔ)、和管理一組存儲(chǔ)設(shè)備130中的數(shù)據(jù)。照此,服務(wù)器系統(tǒng)110可以運(yùn)行提交針對(duì)訪問(wèn)存儲(chǔ)設(shè)備上的特定存儲(chǔ)對(duì)象的訪問(wèn)請(qǐng)求的一個(gè)或多個(gè)應(yīng)用112。每個(gè)應(yīng)用112可以提交針對(duì)訪問(wèn)集群135的存儲(chǔ)系統(tǒng)上的特定存儲(chǔ)對(duì)象的訪問(wèn)請(qǐng)求,并且集群135可以執(zhí)行接收到的對(duì)存儲(chǔ)對(duì)象的請(qǐng)求。應(yīng)用112可以包括基于非虛擬的應(yīng)用,諸如典型電子郵件交換應(yīng)用或數(shù)據(jù)庫(kù)應(yīng)用。在其它實(shí)施例中,應(yīng)用112可以包括基于虛擬的應(yīng)用,諸如虛擬機(jī)(以下所討論的)。
[0050]存儲(chǔ)系統(tǒng)120可以通過(guò)諸如局域網(wǎng)(LAN)、以太網(wǎng)子網(wǎng)、PCI或PCIe子網(wǎng)、交換式PCIe子網(wǎng)、廣域網(wǎng)(WAN)、城域網(wǎng)(MAN)、因特網(wǎng)等之類的網(wǎng)絡(luò)167而在本地耦合至服務(wù)器系統(tǒng)110。在一些實(shí)施例中,服務(wù)器系統(tǒng)110可以包括在單個(gè)框架(例如,刀片服務(wù)器框架)內(nèi)托管服務(wù)器系統(tǒng)110的多個(gè)實(shí)例的框架,其中服務(wù)器系統(tǒng)110的每個(gè)實(shí)例經(jīng)由網(wǎng)絡(luò)167與框架中的服務(wù)器系統(tǒng)110的每個(gè)其它實(shí)例進(jìn)行通信。
[0051]每個(gè)存儲(chǔ)系統(tǒng)120可以具有分布式架構(gòu)。例如,每個(gè)存儲(chǔ)系統(tǒng)120可以包括單獨(dú)的N模塊(網(wǎng)絡(luò)模塊)和D模塊(數(shù)據(jù)模塊)組件(未示出)。在此類實(shí)施例中,N模塊被用來(lái)與服務(wù)器系統(tǒng)110進(jìn)行通信,而D模塊包括文件系統(tǒng)功能并且被用來(lái)與存儲(chǔ)設(shè)備130進(jìn)行通信。在另一個(gè)實(shí)施例中,存儲(chǔ)系統(tǒng)120可以具有集成架構(gòu),其中將網(wǎng)絡(luò)和數(shù)據(jù)組件都包含在單個(gè)盒或單元中。存儲(chǔ)系統(tǒng)120可以通過(guò)交換構(gòu)造(未示出)而耦合至集群135中的其它存儲(chǔ)系統(tǒng)120。以該方式,可以將集群135的所有存儲(chǔ)系統(tǒng)120互連以形成可以由所連接的服務(wù)器系統(tǒng)110所訪問(wèn)的單個(gè)存儲(chǔ)池。
[0052]存儲(chǔ)系統(tǒng)120包括協(xié)作以提供分布式存儲(chǔ)系統(tǒng)架構(gòu)的功能組件,所述分布式存儲(chǔ)系統(tǒng)架構(gòu)向服務(wù)器系統(tǒng)110提供整合數(shù)據(jù)服務(wù)。服務(wù)器系統(tǒng)110可以包括利用集群存儲(chǔ)系統(tǒng)135的服務(wù)來(lái)存儲(chǔ)和管理存儲(chǔ)系統(tǒng)120的存儲(chǔ)設(shè)備130中的數(shù)據(jù)的計(jì)算機(jī)系統(tǒng)。服務(wù)器系統(tǒng)110與存儲(chǔ)系統(tǒng)120之間的交互能夠?qū)崿F(xiàn)存儲(chǔ)服務(wù)的供應(yīng)。也就是說(shuō),服務(wù)器系統(tǒng)110可以請(qǐng)求存儲(chǔ)系統(tǒng)120的服務(wù),并且存儲(chǔ)系統(tǒng)120可以通過(guò)經(jīng)由連接系統(tǒng)167來(lái)交換分組而返回由服務(wù)器系統(tǒng)110所請(qǐng)求的服務(wù)的結(jié)果。當(dāng)訪問(wèn)采用文件和目錄形式的信息時(shí),月艮務(wù)器系統(tǒng)110可以通過(guò)經(jīng)由傳輸控制協(xié)議/網(wǎng)際協(xié)議(TCP/IP)來(lái)發(fā)布使用基于文件的訪問(wèn)協(xié)議(諸如,公用因特網(wǎng)文件系統(tǒng)(CIFS)協(xié)議或網(wǎng)絡(luò)文件系統(tǒng)(NFS)協(xié)議)的分組而請(qǐng)求存儲(chǔ)系統(tǒng)的服務(wù)??商娲兀?dāng)訪問(wèn)采用塊的形式的信息時(shí),服務(wù)器系統(tǒng)110可以發(fā)布包括基于塊的訪問(wèn)協(xié)議(諸如,光纖通道協(xié)議(FCP)、或因特網(wǎng)小型計(jì)算機(jī)系統(tǒng)接口( iSCSI)存儲(chǔ)區(qū)域網(wǎng)(SAN)訪問(wèn))的分組。
[0053]存儲(chǔ)系統(tǒng)120可以包括將數(shù)據(jù)存儲(chǔ)在一組存儲(chǔ)設(shè)備130中優(yōu)選地在一個(gè)或多個(gè)可寫存儲(chǔ)設(shè)備介質(zhì)(諸如,磁存儲(chǔ)設(shè)備、錄像帶、光、DVD、磁帶、以及適于存儲(chǔ)包括數(shù)據(jù)和奇偶校驗(yàn)信息的信息的任何其它類似介質(zhì))上的計(jì)算機(jī)系統(tǒng)。存儲(chǔ)系統(tǒng)120可以實(shí)現(xiàn)文件系統(tǒng)以將數(shù)據(jù)邏輯地組織為存儲(chǔ)設(shè)備130上的存儲(chǔ)對(duì)象。存儲(chǔ)系統(tǒng)120或服務(wù)器系統(tǒng)110可以運(yùn)行提交針對(duì)訪問(wèn)存儲(chǔ)設(shè)備130上的特定存儲(chǔ)對(duì)象的訪問(wèn)請(qǐng)求的一個(gè)或多個(gè)應(yīng)用112。
[0054]服務(wù)器系統(tǒng)110與一個(gè)或多個(gè)存儲(chǔ)系統(tǒng)120之間的交互能夠?qū)崿F(xiàn)存儲(chǔ)服務(wù)的供應(yīng)。也就是說(shuō),服務(wù)器系統(tǒng)Iio可以請(qǐng)求一個(gè)或多個(gè)存儲(chǔ)系統(tǒng)120的服務(wù)(通過(guò)提交讀/寫訪問(wèn)請(qǐng)求),并且一個(gè)或多個(gè)存儲(chǔ)系統(tǒng)120可以通過(guò)經(jīng)由網(wǎng)絡(luò)167對(duì)服務(wù)器系統(tǒng)110接收或發(fā)送數(shù)據(jù)(例如,通過(guò)經(jīng)由通過(guò)網(wǎng)絡(luò)167的連接來(lái)交換數(shù)據(jù)分組)而響應(yīng)服務(wù)器系統(tǒng)110的讀/寫訪問(wèn)請(qǐng)求。
[0055]存儲(chǔ)系統(tǒng)120與服務(wù)器系統(tǒng)110中的任何一個(gè)之間的通信通常體現(xiàn)為通過(guò)計(jì)算機(jī)網(wǎng)絡(luò)167所發(fā)送的分組。服務(wù)器系統(tǒng)110可以向存儲(chǔ)系統(tǒng)120發(fā)送訪問(wèn)請(qǐng)求(讀/寫訪問(wèn)請(qǐng)求)以訪問(wèn)在存儲(chǔ)系統(tǒng)上存儲(chǔ)的特定數(shù)據(jù)。服務(wù)器系統(tǒng)110可以通過(guò)發(fā)布根據(jù)用于訪問(wèn)存儲(chǔ)設(shè)備的常規(guī)存儲(chǔ)訪問(wèn)協(xié)議(諸如DIFS、NFS等)而格式化的存儲(chǔ)訪問(wèn)協(xié)議消息來(lái)請(qǐng)求存儲(chǔ)系統(tǒng)120的服務(wù)。當(dāng)訪問(wèn)采用文件和目錄形式的數(shù)據(jù)時(shí),訪問(wèn)請(qǐng)求(例如,讀/寫訪問(wèn)請(qǐng)求)可以通過(guò)經(jīng)由傳輸控制協(xié)議/網(wǎng)際協(xié)議(TCP/IP)來(lái)發(fā)布使用基于文件的訪問(wèn)協(xié)議(諸如,公用因特網(wǎng)文件系統(tǒng)(CIFS)協(xié)議、或網(wǎng)絡(luò)文件系統(tǒng)(NFS)協(xié)議)的分組而實(shí)現(xiàn)。可替代地,當(dāng)訪問(wèn)采用塊的形式的數(shù)據(jù)時(shí),服務(wù)器系統(tǒng)110可以通過(guò)發(fā)布使用基于塊的訪問(wèn)協(xié)議(諸如,光纖通道協(xié)議(FCP )、或因特網(wǎng)小型計(jì)算機(jī)系統(tǒng)接口( iSCSI)存儲(chǔ)區(qū)域網(wǎng)(SAN)訪問(wèn))的分組來(lái)發(fā)布訪問(wèn)請(qǐng)求。
[0056]在服務(wù)器系統(tǒng)110上運(yùn)行的每個(gè)應(yīng)用112可以利用集群135的服務(wù)來(lái)存儲(chǔ)和訪問(wèn)其數(shù)據(jù)。存儲(chǔ)系統(tǒng)120可以包括在一組一個(gè)或多個(gè)存儲(chǔ)設(shè)備130中將數(shù)據(jù)存儲(chǔ)為存儲(chǔ)對(duì)象的計(jì)算機(jī)系統(tǒng)。存儲(chǔ)設(shè)備130可以包括可寫存儲(chǔ)設(shè)備介質(zhì),諸如存儲(chǔ)設(shè)備、錄像帶、光學(xué)設(shè)備、DVD、磁帶、閃速存儲(chǔ)器、磁隨機(jī)存取存儲(chǔ)器(MRAM)、相變RAM (PRAM)、或適于存儲(chǔ)信息(包括數(shù)據(jù)和奇偶校驗(yàn)信息)的任何其它類似介質(zhì)。
[0057]如本領(lǐng)域所公知的,存儲(chǔ)設(shè)備130可以包括存儲(chǔ)對(duì)象,包括一個(gè)或多個(gè)存儲(chǔ)卷,其中每個(gè)卷具有在該卷上實(shí)現(xiàn)的文件系統(tǒng)。在存儲(chǔ)設(shè)備130上實(shí)現(xiàn)的文件系統(tǒng)可以在單個(gè)卷中提供多個(gè)目錄,每個(gè)目錄包含零個(gè)或多個(gè)文件名。文件系統(tǒng)提供如何在卷上組織數(shù)據(jù)(文件)的邏輯表示,其中將數(shù)據(jù)(文件)表示為組成一個(gè)或多個(gè)目錄的文件名。公用文件系統(tǒng)的示例包括新技術(shù)文件系統(tǒng)(NTFS)、文件分配表(FAT)、分層文件系統(tǒng)(HFS)、通用存儲(chǔ)設(shè)備格式(UDF)、UNIX?文件系統(tǒng)等。對(duì)于可以實(shí)現(xiàn)隨地寫文件布局(WAFL?)文件系統(tǒng)的數(shù)據(jù)0ΝΤΑΡ?存儲(chǔ)操作系統(tǒng)(可從加利福尼亞州森尼維爾市的NetApp, Inc.獲得)而言,通常在每個(gè)卷內(nèi)存在WAFL文件系統(tǒng),并且在WAFL文件系統(tǒng)內(nèi),可以存在一個(gè)或多個(gè)邏輯單元(LU)。
[0058]圖2是可以被用于圖1的存儲(chǔ)系統(tǒng)環(huán)境中的示例性存儲(chǔ)系統(tǒng)120的示意性框圖。本領(lǐng)域技術(shù)人員將理解的是,本文所描述的實(shí)施例可以應(yīng)用于任何類型的專用計(jì)算機(jī)(例如,存儲(chǔ)系統(tǒng))、或者體現(xiàn)或不體現(xiàn)為存儲(chǔ)系統(tǒng)的包括獨(dú)立計(jì)算機(jī)的通用計(jì)算機(jī)。為了該目的,能夠?qū)挿旱厍铱商娲貙⒋鎯?chǔ)系統(tǒng)120稱為計(jì)算機(jī)系統(tǒng)。此外,本文所描述的實(shí)施例的教導(dǎo)能夠適于各種存儲(chǔ)系統(tǒng)架構(gòu),包括但不限于,網(wǎng)絡(luò)附接的存儲(chǔ)環(huán)境、存儲(chǔ)區(qū)域網(wǎng)、以及直接附接至服務(wù)器計(jì)算機(jī)的磁盤組裝件。因而,術(shù)語(yǔ)“存儲(chǔ)系統(tǒng)”應(yīng)該寬泛地視為包括此類布置。
[0059]存儲(chǔ)系統(tǒng)120包括由系統(tǒng)總線260互連的網(wǎng)絡(luò)適配器210、處理器220、存儲(chǔ)器240、非易失性隨機(jī)存取存儲(chǔ)器(NVRAM) 245、以及存儲(chǔ)適配器250。網(wǎng)絡(luò)適配器210包括通過(guò)計(jì)算機(jī)網(wǎng)絡(luò)150而將存儲(chǔ)系統(tǒng)120連接至服務(wù)器系統(tǒng)110所需要的機(jī)械、電氣、和信令電路。存儲(chǔ)系統(tǒng)可以包括一個(gè)或多個(gè)網(wǎng)絡(luò)適配器。每個(gè)網(wǎng)絡(luò)適配器210具有唯一的IP地址,并且可以為服務(wù)器系統(tǒng)110提供一個(gè)或多個(gè)數(shù)據(jù)訪問(wèn)端口以訪問(wèn)存儲(chǔ)系統(tǒng)120 (其中網(wǎng)絡(luò)適配器接受來(lái)自服務(wù)器系統(tǒng)110的采用數(shù)據(jù)分組的形式的讀/寫訪問(wèn)請(qǐng)求)。
[0060]存儲(chǔ)器240包括可由處理器220和適配器尋址的用于存儲(chǔ)軟件程序代碼和數(shù)據(jù)的存儲(chǔ)位置。存儲(chǔ)器240可以包括通常由電力循環(huán)或其它重啟操作(例如,其是“易失性”存儲(chǔ)器)來(lái)清除的隨機(jī)存取存儲(chǔ)器(RAM)的形式。然而,在其它實(shí)施例中,存儲(chǔ)器240可以包括不需要電力來(lái)保持信息的非易失性形式的存儲(chǔ)器。處理器220和適配器可以繼而包括被配置成運(yùn)行軟件代碼以及操縱在存儲(chǔ)器240中存儲(chǔ)的數(shù)據(jù)的處理元件和/或邏輯電路。
[0061]存儲(chǔ)系統(tǒng)120還可以包括可以被用作確保存儲(chǔ)系統(tǒng)120在發(fā)生系統(tǒng)關(guān)機(jī)或其它無(wú)法預(yù)見(jiàn)的問(wèn)題的情況下不“丟失”接收到的信息(例如,CIFS和NFS請(qǐng)求)的后備存儲(chǔ)器的NVRAM 245.NVRAM 245通常是在發(fā)生對(duì)陣列的任何電力失去的情況下保存存儲(chǔ)器的最后狀態(tài)的具有后備電池或者其它內(nèi)建的最后狀態(tài)保留能力的大容量固態(tài)存儲(chǔ)器陣列(RAM)(例如,閃速存儲(chǔ)器)。因而,即使存儲(chǔ)器240中存儲(chǔ)的訪問(wèn)請(qǐng)求丟失或被擦除(例如,由于暫時(shí)的斷電),其仍然可以從NVRAM 245中恢復(fù)。
[0062]處理器220運(yùn)行尤其通過(guò)調(diào)用存儲(chǔ)操作來(lái)功能地組織存儲(chǔ)系統(tǒng)以便支持由存儲(chǔ)系統(tǒng)所實(shí)現(xiàn)的文件服務(wù)的存儲(chǔ)系統(tǒng)120的存儲(chǔ)操作系統(tǒng)應(yīng)用300。在一些實(shí)施例中,存儲(chǔ)操作系統(tǒng)300包括由處理器220所運(yùn)行的多個(gè)軟件層(包括消重層275)。在一些實(shí)施例中,消重層275被實(shí)現(xiàn)以對(duì)卷克隆的數(shù)據(jù)進(jìn)行消重。存儲(chǔ)操作系統(tǒng)300的部分通常駐存于存儲(chǔ)器240中。然而,對(duì)于本領(lǐng)域技術(shù)人員將明顯的是,其它處理和存儲(chǔ)器件(包括各種計(jì)算機(jī)可讀介質(zhì))可以被用于存儲(chǔ)和運(yùn)行與存儲(chǔ)操作系統(tǒng)300相關(guān)的程序指令。
[0063]在一些實(shí)施例中,元數(shù)據(jù)結(jié)構(gòu)290也駐存于存儲(chǔ)器240中。在其它實(shí)施例中,元數(shù)據(jù)結(jié)構(gòu)290還可以駐存于NVRAM 245中或存儲(chǔ)于存儲(chǔ)設(shè)備125上。如以下所討論的,在一些實(shí)施例中,元數(shù)據(jù)結(jié)構(gòu)290由消重層275產(chǎn)生并用來(lái)存儲(chǔ)用于所存儲(chǔ)的塊的序列的元數(shù)據(jù),并且被用來(lái)確定如何處理用于所述塊的寫分配。在這些實(shí)施例中,元數(shù)據(jù)結(jié)構(gòu)290有時(shí)被稱為塊比較機(jī)制。在其它實(shí)施例中,元數(shù)據(jù)結(jié)構(gòu)290還由消重層275用來(lái)記錄經(jīng)消重的冗余塊至其對(duì)應(yīng)匹配的存儲(chǔ)塊的映射。在這些實(shí)施例中,元數(shù)據(jù)結(jié)構(gòu)290有時(shí)還被稱為映射機(jī)制。
[0064]存儲(chǔ)適配器250與在存儲(chǔ)系統(tǒng)120上運(yùn)行的存儲(chǔ)操作系統(tǒng)300協(xié)作以訪問(wèn)由服務(wù)器系統(tǒng)110所請(qǐng)求的數(shù)據(jù)。所述數(shù)據(jù)可以在經(jīng)由存儲(chǔ)適配器250而附接到存儲(chǔ)系統(tǒng)120或如本文所定義的存儲(chǔ)系統(tǒng)的其它節(jié)點(diǎn)的存儲(chǔ)設(shè)備125上存儲(chǔ)。存儲(chǔ)適配器250包括通過(guò)輸入/輸出(I/O)互連布置(諸如,常規(guī)的高性能光纖通道串行鏈路拓?fù)?而耦合到存儲(chǔ)設(shè)備125的I/O接口電路。響應(yīng)于從服務(wù)器系統(tǒng)110接收到的訪問(wèn)請(qǐng)求,數(shù)據(jù)可以由存儲(chǔ)適配器250來(lái)檢索,并且如果必要的話,在通過(guò)系統(tǒng)總線260轉(zhuǎn)發(fā)到網(wǎng)絡(luò)適配器210之前,由處理器220 (或適配器250自身)來(lái)處理,其中可以將數(shù)據(jù)格式化成分組并且返回給服務(wù)器系統(tǒng) 110。
[0065]在說(shuō)明性實(shí)施例中,存儲(chǔ)設(shè)備125可以包括被布置成多個(gè)卷的磁盤設(shè)備,每個(gè)卷具有與其關(guān)聯(lián)的文件系統(tǒng)。在一些實(shí)施例中,存儲(chǔ)設(shè)備125包括被配置成多個(gè)RAID (獨(dú)立磁盤的冗余陣列)群的磁盤設(shè)備,由此將多個(gè)存儲(chǔ)設(shè)備125組合成單個(gè)邏輯單元(即,RAID群)。在典型的RAID群中,該群的存儲(chǔ)設(shè)備125在磁盤之間共享或復(fù)制數(shù)據(jù),這可以提高數(shù)據(jù)可靠性或性能。根據(jù)優(yōu)選的RAID-4配置,RAID群的存儲(chǔ)設(shè)備125被配置成使得一些磁盤存儲(chǔ)條帶數(shù)據(jù)并且至少一個(gè)磁盤存儲(chǔ)用于數(shù)據(jù)的單獨(dú)的奇偶校驗(yàn)。然而,也考慮其它配置(例如,具有跨條帶的分布式奇偶校驗(yàn)的RAID-5、RAID-DP等)。單個(gè)卷通常包括多個(gè)存儲(chǔ)設(shè)備125,并且可以體現(xiàn)為多個(gè)RAID群。
[0066]現(xiàn)在簡(jiǎn)要地描述用于示例性存儲(chǔ)系統(tǒng)120的存儲(chǔ)操作系統(tǒng)300的組織。然而,要清楚考慮的是,本文所描述的實(shí)施例的原理能夠使用各種替代的存儲(chǔ)操作系統(tǒng)架構(gòu)來(lái)實(shí)現(xiàn)。如以上所討論的,如本文關(guān)于存儲(chǔ)系統(tǒng)所使用的術(shù)語(yǔ)“存儲(chǔ)操作系統(tǒng)”通常指代可操作于存儲(chǔ)系統(tǒng)上的實(shí)現(xiàn)文件系統(tǒng)語(yǔ)義(諸如,以上所提及的WAFL?)和管理數(shù)據(jù)訪問(wèn)的計(jì)算機(jī)可執(zhí)行代碼。在該意義上,數(shù)據(jù)0ΝΤΑΡ?軟件是被實(shí)現(xiàn)為微核的此類存儲(chǔ)操作系統(tǒng)的示例。存儲(chǔ)操作系統(tǒng)還能夠?qū)崿F(xiàn)為在諸如UNIX?或Window?之類的通用操作系統(tǒng)之上操作的應(yīng)用程序,或者實(shí)現(xiàn)為具有可配置功能的通用操作系統(tǒng)。
[0067]如圖3中所示,存儲(chǔ)操作系統(tǒng)300包括形成集成協(xié)議軟件棧的一組軟件層。協(xié)議棧為服務(wù)器系統(tǒng)110提供數(shù)據(jù)路徑360,以使用數(shù)據(jù)訪問(wèn)協(xié)議來(lái)訪問(wèn)在存儲(chǔ)系統(tǒng)120上存儲(chǔ)的數(shù)據(jù)。協(xié)議棧包括網(wǎng)絡(luò)驅(qū)動(dòng)器(例如,以太網(wǎng)驅(qū)動(dòng)器)的介質(zhì)訪問(wèn)層310。介質(zhì)訪問(wèn)層310與諸如網(wǎng)際協(xié)議(IP)層320和傳輸層330 (例如,TCP/UDP協(xié)議)之類的網(wǎng)絡(luò)通信和協(xié)議層進(jìn)行對(duì)接。IP層320可以被用來(lái)為服務(wù)器系統(tǒng)110提供一個(gè)或多個(gè)數(shù)據(jù)訪問(wèn)端口以訪問(wèn)存儲(chǔ)系統(tǒng)120。在一些實(shí)施例中,IP層320層為由存儲(chǔ)系統(tǒng)120所實(shí)現(xiàn)的一個(gè)或多個(gè)遠(yuǎn)程文件訪問(wèn)協(xié)議中的每個(gè)提供專用私有端口。
[0068]數(shù)據(jù)訪問(wèn)協(xié)議層340提供多協(xié)議數(shù)據(jù)訪問(wèn)并且例如可以包括基于文件的訪問(wèn)協(xié)議,諸如超文本傳輸協(xié)議(HTTP)協(xié)議、NFS協(xié)議、CIFS協(xié)議等。存儲(chǔ)操作系統(tǒng)300可以包括對(duì)其它協(xié)議的支持,諸如基于塊的訪問(wèn)協(xié)議。此類協(xié)議可以包括但不限于直接訪問(wèn)文件系統(tǒng)(DAFS)協(xié)議、基于web (網(wǎng)絡(luò))的分布式創(chuàng)作和版本控制(WebDAV)協(xié)議、光纖通道協(xié)議(FCP)、因特網(wǎng)小型計(jì)算機(jī)系統(tǒng)接口(iSCSI)協(xié)議等。
[0069]存儲(chǔ)操作系統(tǒng)300可以使用存儲(chǔ)側(cè)層370來(lái)管理存儲(chǔ)設(shè)備125。如圖4中所示,存儲(chǔ)側(cè)層370可以包括實(shí)現(xiàn)存儲(chǔ)協(xié)議(諸如,RAID協(xié)議)的存儲(chǔ)層380以及實(shí)現(xiàn)設(shè)備控制協(xié)議的設(shè)備驅(qū)動(dòng)器層385 (諸如,小型計(jì)算機(jī)系統(tǒng)接口(SCSI)、電子集成驅(qū)動(dòng)器(IDE)等)。將存儲(chǔ)側(cè)層370與網(wǎng)絡(luò)和協(xié)議層橋接的是存儲(chǔ)操作系統(tǒng)300的文件系統(tǒng)層350。在說(shuō)明性實(shí)施例中,文件系統(tǒng)層350實(shí)現(xiàn)具有基于塊的磁盤上格式表示的使用索引節(jié)點(diǎn)來(lái)描述文件的文件系統(tǒng)。
[0070]文件系統(tǒng)層350為每個(gè)文件指派唯一的索引節(jié)點(diǎn)號(hào)和關(guān)聯(lián)的索引節(jié)點(diǎn)。索引節(jié)點(diǎn)可以包括被用來(lái)存儲(chǔ)關(guān)于文件的元數(shù)據(jù)信息(諸如,文件名、文件何時(shí)被產(chǎn)生或最后修改、文件的所有權(quán)、用于文件的訪問(wèn)許可、文件的大小等)的數(shù)據(jù)結(jié)構(gòu)。每個(gè)索引節(jié)點(diǎn)還可以包含關(guān)于文件的塊位置的信息。在一些實(shí)施例中,塊位置由為文件的每個(gè)塊所賦予的唯一邏輯塊號(hào)(LBN)來(lái)指示。如以下所討論的,如果存儲(chǔ)設(shè)備包括磁盤設(shè)備,那么具有序列的LBN的一組塊指示了該組塊被順序地存儲(chǔ)在磁盤設(shè)備的相同軌道上。文件系統(tǒng)350可以對(duì)包含和索引(通過(guò)索引節(jié)點(diǎn)號(hào))各種文件的索引節(jié)點(diǎn)的索引節(jié)點(diǎn)文件進(jìn)行存儲(chǔ)和維護(hù)。
[0071]響應(yīng)于從服務(wù)器系統(tǒng)110接收文件訪問(wèn)請(qǐng)求(包含外部文件句柄),文件系統(tǒng)350生成從存儲(chǔ)設(shè)備125加載(檢索)所請(qǐng)求的數(shù)據(jù)的操作(如果其未駐存于存儲(chǔ)系統(tǒng)的存儲(chǔ)器240中的話)。訪問(wèn)請(qǐng)求中的外部文件句柄通常標(biāo)識(shí)由服務(wù)器系統(tǒng)110所請(qǐng)求的文件或目錄。具體地,文件句柄可以指定與所請(qǐng)求的數(shù)據(jù)對(duì)應(yīng)的生成號(hào)、索引節(jié)點(diǎn)號(hào)、和卷號(hào)。如果信息未駐存于存儲(chǔ)系統(tǒng)的存儲(chǔ)器240中,那么文件系統(tǒng)層350使用接收到的索引節(jié)點(diǎn)號(hào)來(lái)索引到索引節(jié)點(diǎn)文件中,以訪問(wèn)用于所標(biāo)識(shí)的文件的適當(dāng)?shù)乃饕?jié)點(diǎn)條目,并且從該索引節(jié)點(diǎn)中檢索文件位置信息(例如,邏輯塊號(hào))。
[0072]文件系統(tǒng)層350然后將邏輯塊號(hào)傳遞給設(shè)備驅(qū)動(dòng)器層385的適當(dāng)?shù)尿?qū)動(dòng)器(例如,在光纖通道互連上實(shí)現(xiàn)的SCSI的封裝)。設(shè)備驅(qū)動(dòng)器層385訪問(wèn)來(lái)自存儲(chǔ)設(shè)備125的適當(dāng)?shù)膲K,并且在存儲(chǔ)器240中加載所請(qǐng)求的數(shù)據(jù),以供存儲(chǔ)系統(tǒng)120處理。在成功完成該請(qǐng)求時(shí),存儲(chǔ)系統(tǒng)(和存儲(chǔ)操作系統(tǒng))通過(guò)網(wǎng)絡(luò)150將響應(yīng)(例如,由CIFS規(guī)范所定義的常規(guī)的應(yīng)答分組)返回給服務(wù)器系統(tǒng)110。
[0073]應(yīng)注意的是,通過(guò)以上所描述的為存儲(chǔ)系統(tǒng)處所接收的請(qǐng)求而執(zhí)行數(shù)據(jù)存儲(chǔ)訪問(wèn)所需要的存儲(chǔ)操作系統(tǒng)層的軟件“路徑”360可以可替代地以硬件、或者硬件和軟件的組合來(lái)實(shí)現(xiàn)。也就是說(shuō),在可替代的實(shí)施例中,存儲(chǔ)訪問(wèn)請(qǐng)求路徑360可以被實(shí)現(xiàn)為在現(xiàn)場(chǎng)可編程門陣列(FPGA)或?qū)S眉呻娐?ASIC)內(nèi)體現(xiàn)的邏輯電路。該類型的硬件實(shí)現(xiàn)可以提高由存儲(chǔ)系統(tǒng)120響應(yīng)于由服務(wù)器系統(tǒng)110所發(fā)布的文件系統(tǒng)請(qǐng)求分組而提供的文件服務(wù)的性能。此外,在另一實(shí)施例中,網(wǎng)絡(luò)和存儲(chǔ)適配器210和250的處理元件可以被配置成分別從處理器220卸載分組處理和存儲(chǔ)訪問(wèn)操作中的一些或所有,以從而提高由存儲(chǔ)系統(tǒng)120所提供的數(shù)據(jù)訪問(wèn)服務(wù)的性能。
[0074]在一些實(shí)施例中,存儲(chǔ)操作系統(tǒng)300還包括與存儲(chǔ)操作系統(tǒng)300的其它軟件層和文件系統(tǒng)聯(lián)合操作的消重層275,以如本文所描述的那樣對(duì)在存儲(chǔ)系統(tǒng)120上存儲(chǔ)的數(shù)據(jù)進(jìn)行消重。例如,在一些實(shí)施例中,消重層275可以駐存于存儲(chǔ)操作系統(tǒng)300的文件系統(tǒng)層350與存儲(chǔ)層380之間(如圖3和4中所示)。在其它實(shí)施例中,消重層275可以駐存于存儲(chǔ)操作系統(tǒng)300的其它層附近。
[0075]在一些實(shí)施例中,存儲(chǔ)側(cè)層370還包括離臺(tái)(de-staging)層375。例如,在一些實(shí)施例中,離臺(tái)層375可以駐存于存儲(chǔ)操作系統(tǒng)300的文件系統(tǒng)層350與消重層275之間。在其它實(shí)施例中,離臺(tái)層375可以駐存于存儲(chǔ)操作系統(tǒng)300的其它層附近。
[0076]離臺(tái)層375可以被實(shí)現(xiàn)于一些存儲(chǔ)系統(tǒng)125中,以采用兩個(gè)階段來(lái)執(zhí)行所接收的針對(duì)文件的寫請(qǐng)求。在第一階段中,將由文件系統(tǒng)層350所接收的寫請(qǐng)求發(fā)送到離臺(tái)層375,寫請(qǐng)求包含待寫的數(shù)據(jù)的塊。離臺(tái)層375為所接收的每個(gè)寫請(qǐng)求產(chǎn)生寫日志,寫日志包含待寫的數(shù)據(jù)的塊??梢詫懭罩?95存儲(chǔ)到例如NVRAM 245 (如圖2中所示)。在第二階段中,以預(yù)定的時(shí)間間隔(被稱為一致點(diǎn)),將累積的寫日志295 (例如,NVRAM 245中的)發(fā)送到然后將寫日志中的數(shù)據(jù)的塊寫到存儲(chǔ)設(shè)備125的存儲(chǔ)層380。
[0077]本文所描述的實(shí)施例可以應(yīng)用于在具有或不具有離臺(tái)層375的情況下實(shí)現(xiàn)的存儲(chǔ)系統(tǒng)120。在一些實(shí)施例中,消重層275與離臺(tái)層375聯(lián)合使用。在這些實(shí)施例中,消重層275可以處理在等待要寫到存儲(chǔ)設(shè)備125的接下來(lái)的一致點(diǎn)的第一階段期間所累積的寫日志。在該時(shí)間期間,消重層275可以在將塊寫到存儲(chǔ)設(shè)備125之前處理所累積的寫日志中的塊以進(jìn)行可能的消重。在其它實(shí)施例中,消重層275在不使用離臺(tái)層375的情況下使用。在這些實(shí)施例中,消重層275可以從文件系統(tǒng)350接收寫請(qǐng)求,并且當(dāng)接收到所述請(qǐng)求時(shí)處理寫請(qǐng)求的塊以供消重。
[0078]注意,當(dāng)在第一階段中產(chǎn)生用于針對(duì)文件的寫請(qǐng)求的寫日志時(shí),文件系統(tǒng)層350可以指派用于待寫的文件中的每個(gè)塊的LBN,塊的所指派的LBN指示了該塊將在接下來(lái)的一致點(diǎn)處被寫到其中的存儲(chǔ)設(shè)備125上的位置。同樣,文件系統(tǒng)層350可以指派用于文件的索引節(jié)點(diǎn)號(hào)和索引節(jié)點(diǎn)。照此,每個(gè)寫日志可以包括待寫的數(shù)據(jù)的塊、塊要被寫到其中的位置(LBN)、指派給文件的索引節(jié)點(diǎn)號(hào)。當(dāng)在第一階段中產(chǎn)生用于針對(duì)文件的寫請(qǐng)求的寫日志時(shí),文件系統(tǒng)層350還可以將用于文件的塊的LBN存儲(chǔ)于其被指派的索引節(jié)點(diǎn)中。
[0079]在其中消重層275在不具有離臺(tái)層375的情況下被使用的其它實(shí)施例中,消重層275可以從文件系統(tǒng)350接收針對(duì)文件的寫請(qǐng)求,由此文件系統(tǒng)層350可以指派用于待寫的文件中的每個(gè)塊的LBN。同樣,文件系統(tǒng)層350可以指派用于文件的索引節(jié)點(diǎn)號(hào)和索引節(jié)點(diǎn),并且將用于文件的塊的所指派LBN存儲(chǔ)于其被指派的索引節(jié)點(diǎn)中。
[0080]在一些實(shí)施例中,消重層275可以被預(yù)包括在存儲(chǔ)操作系統(tǒng)300軟件中。在其它實(shí)施例中,消重層275可以包括與存儲(chǔ)操作系統(tǒng)300 —起工作以增強(qiáng)其功能的外部輔助插入式軟件模塊。照此,可以將消重層275強(qiáng)加在現(xiàn)有的存儲(chǔ)操作系統(tǒng)300和文件系統(tǒng)350上,以提供如本文所描述的數(shù)據(jù)的消重。
[0081]如圖4中所示,存儲(chǔ)側(cè)層370可以包括實(shí)現(xiàn)存儲(chǔ)協(xié)議(諸如RAID協(xié)議)的存儲(chǔ)層380以及實(shí)現(xiàn)設(shè)備控制協(xié)議(諸如,小型計(jì)算機(jī)系統(tǒng)接口(SCSI)、電子集成驅(qū)動(dòng)器(IDE)等)的設(shè)備驅(qū)動(dòng)器層385。將存儲(chǔ)側(cè)層370與網(wǎng)絡(luò)和協(xié)議層橋接的是存儲(chǔ)操作系統(tǒng)300的文件系統(tǒng)層350。在說(shuō)明性實(shí)施例中,文件系統(tǒng)層350實(shí)現(xiàn)具有基于塊的磁盤上格式表示的使用索引節(jié)點(diǎn)來(lái)描述文件的文件系統(tǒng)。
[0082]文件系統(tǒng)層350為每個(gè)文件指派唯一的索引節(jié)點(diǎn)號(hào)和關(guān)聯(lián)的索引節(jié)點(diǎn)。索引節(jié)點(diǎn)可以包括被用來(lái)存儲(chǔ)關(guān)于文件(諸如,文件名、文件何時(shí)被產(chǎn)生或最后修改、文件的所有權(quán)、用于文件的訪問(wèn)許可、文件的大小等)的元數(shù)據(jù)信息的數(shù)據(jù)結(jié)構(gòu)。每個(gè)索引節(jié)點(diǎn)還可以包含關(guān)于文件的塊位置的某些信息。在一些實(shí)施例中,塊位置由為文件的每個(gè)塊所賦予的唯一的邏輯塊號(hào)(LBN)來(lái)指示。如以下所討論的,如果存儲(chǔ)設(shè)備包括磁盤設(shè)備,那么具有序列的LBN的一組塊指示了該組塊被順序地存儲(chǔ)在磁盤設(shè)備的相同軌道上。文件系統(tǒng)350可以對(duì)包含和索引(通過(guò)索引節(jié)點(diǎn)號(hào))各種文件的索引節(jié)點(diǎn)的索引節(jié)點(diǎn)文件進(jìn)行存儲(chǔ)和維護(hù)。
[0083]響應(yīng)于從服務(wù)器系統(tǒng)110接收文件訪問(wèn)請(qǐng)求(包含外部文件句柄),文件系統(tǒng)350生成從存儲(chǔ)設(shè)備130加載(檢索)所請(qǐng)求的數(shù)據(jù)的操作(如果其未駐存于存儲(chǔ)系統(tǒng)的存儲(chǔ)器240中的話)。訪問(wèn)請(qǐng)求中的外部文件句柄通常標(biāo)識(shí)由服務(wù)器系統(tǒng)110所請(qǐng)求的文件或目錄。具體地,文件句柄可以指定與所請(qǐng)求的數(shù)據(jù)對(duì)應(yīng)的生成號(hào)、索引節(jié)點(diǎn)號(hào)、和卷號(hào)。如果信息未駐存于存儲(chǔ)系統(tǒng)的存儲(chǔ)器240中,那么文件系統(tǒng)層350使用接收到的索引節(jié)點(diǎn)號(hào)來(lái)索引到索引節(jié)點(diǎn)文件中,以訪問(wèn)用于所標(biāo)識(shí)的文件的適當(dāng)?shù)乃饕?jié)點(diǎn)條目,并且從該索引節(jié)點(diǎn)中檢索文件位置信息(例如,邏輯塊號(hào))。
[0084]文件系統(tǒng)層350然后將邏輯塊號(hào)傳遞給設(shè)備驅(qū)動(dòng)器層385的適當(dāng)?shù)尿?qū)動(dòng)器(例如,在光纖通道互連上實(shí)現(xiàn)的SCSI的封裝)。設(shè)備驅(qū)動(dòng)器層385訪問(wèn)來(lái)自存儲(chǔ)設(shè)備130的適當(dāng)?shù)膲K,并且在存儲(chǔ)器240中加載所請(qǐng)求的數(shù)據(jù),以供由存儲(chǔ)系統(tǒng)120處理。在成功完成該請(qǐng)求時(shí),存儲(chǔ)系統(tǒng)(和存儲(chǔ)操作系統(tǒng))通過(guò)網(wǎng)絡(luò)150將響應(yīng)(例如,由CIFS規(guī)范所定義的常規(guī)的應(yīng)答分組)返回給服務(wù)器系統(tǒng)110。
[0085]應(yīng)注意的是,通過(guò)以上所描述的為存儲(chǔ)系統(tǒng)處所接收的請(qǐng)求而執(zhí)行數(shù)據(jù)存儲(chǔ)訪問(wèn)所需要的存儲(chǔ)操作系統(tǒng)層的軟件“路徑”360可以可替代地以硬件、或者硬件和軟件的組合來(lái)實(shí)現(xiàn)。也就是說(shuō),在可替代的實(shí)施例中,存儲(chǔ)訪問(wèn)請(qǐng)求路徑360可以被實(shí)現(xiàn)為在現(xiàn)場(chǎng)可編程門陣列(FPGA)或?qū)S眉呻娐?ASIC)內(nèi)體現(xiàn)的邏輯電路。該類型的硬件實(shí)現(xiàn)可以提高由存儲(chǔ)系統(tǒng)120響應(yīng)于由服務(wù)器系統(tǒng)110所發(fā)布的文件系統(tǒng)請(qǐng)求分組而提供的文件服務(wù)的性能。此外,在另一實(shí)施例中,網(wǎng)絡(luò)和存儲(chǔ)適配器210和250的處理元件可以被配置成分別從處理器220卸載分組處理和存儲(chǔ)訪問(wèn)操作中的一些或所有,以從而提高由存儲(chǔ)系統(tǒng)120所提供的數(shù)據(jù)訪問(wèn)服務(wù)的性能。
[0086]在一些實(shí)施例中,存儲(chǔ)操作系統(tǒng)300還包括與存儲(chǔ)操作系統(tǒng)300的其它軟件層和文件系統(tǒng)聯(lián)合操作的消重層275,以如本文所描述的那樣對(duì)在存儲(chǔ)系統(tǒng)120上存儲(chǔ)的數(shù)據(jù)進(jìn)行消重。例如,在一些實(shí)施例中,消重層275可以駐存于存儲(chǔ)操作系統(tǒng)300的文件系統(tǒng)層350與存儲(chǔ)層380之間(如圖3和4中所示)。在其它實(shí)施例中,消重層275可以駐存于存儲(chǔ)操作系統(tǒng)300的其它層附近。
[0087]在一些實(shí)施例中,存儲(chǔ)側(cè)層370還包括離臺(tái)層375。例如,在一些實(shí)施例中,離臺(tái)層375可以駐存于存儲(chǔ)操作系統(tǒng)300的文件系統(tǒng)層350和消重層275之間。在其它實(shí)施例中,離臺(tái)層375可以駐存于存儲(chǔ)操作系統(tǒng)300的其它層附近。
[0088]離臺(tái)層375可以被實(shí)現(xiàn)于一些存儲(chǔ)系統(tǒng)130中,以采用兩個(gè)階段來(lái)執(zhí)行所接收的針對(duì)文件的寫請(qǐng)求。在第一階段中,將由文件系統(tǒng)層350所接收的寫請(qǐng)求發(fā)送到離臺(tái)層375,寫請(qǐng)求包含待寫的數(shù)據(jù)的塊。離臺(tái)層375為所接收的每個(gè)寫請(qǐng)求產(chǎn)生寫日志,寫日志包含待寫的數(shù)據(jù)的塊??梢詫懭罩?95存儲(chǔ)到例如NVRAM 245 (如圖2中所示)。在第二階段中,以預(yù)定的時(shí)間間隔(被稱為一致點(diǎn)),將NVRAM 245中的所累積的寫日志數(shù)據(jù)結(jié)構(gòu)發(fā)送到然后將寫日志中的數(shù)據(jù)的塊寫到存儲(chǔ)設(shè)備130的存儲(chǔ)層380。
[0089]本文所描述的實(shí)施例可以應(yīng)用于在具有或不具有離臺(tái)層375的情況下實(shí)現(xiàn)的存儲(chǔ)系統(tǒng)120。在一些實(shí)施例中,消重層275與離臺(tái)層375聯(lián)合使用。在這些實(shí)施例中,消重層275可以處理在等待要寫到存儲(chǔ)設(shè)備125的接下來(lái)的一致點(diǎn)的第一階段期間所累積的寫日志。在該時(shí)間期間,消重層275可以在將塊寫到存儲(chǔ)設(shè)備125之前處理所累積的寫日志中的塊以進(jìn)行可能的消重。在其它實(shí)施例中,消重層275在不使用離臺(tái)層375的情況下使用。在這些實(shí)施例中,消重層275可以從文件系統(tǒng)350接收寫請(qǐng)求,并且當(dāng)接收到所述請(qǐng)求時(shí)處理寫請(qǐng)求的塊以供消重。
[0090]注意,當(dāng)在第一階段中產(chǎn)生用于針對(duì)文件的寫請(qǐng)求的寫日志時(shí),文件系統(tǒng)層350可以指派用于待寫的文件中的每個(gè)塊的LBN,塊的所指派的LBN指示了該塊將在接下來(lái)的一致點(diǎn)處被寫到其中的存儲(chǔ)設(shè)備130上的位置。同樣,文件系統(tǒng)層350可以指派用于文件的索引節(jié)點(diǎn)號(hào)和索引節(jié)點(diǎn)。照此,每個(gè)寫日志可以包括待寫的數(shù)據(jù)的塊、塊要被寫到其中的位置(LBN)、指派給文件的索引節(jié)點(diǎn)號(hào)。當(dāng)在第一階段中產(chǎn)生用于針對(duì)文件的寫請(qǐng)求的寫日志時(shí),文件系統(tǒng)層350還可以將用于文件的塊的LBN存儲(chǔ)于其被指派的索引節(jié)點(diǎn)中。
[0091]在其中消重層275在不具有離臺(tái)層375的情況下被使用的其它實(shí)施例中,消重層275可以從文件系統(tǒng)350接收針對(duì)文件的寫請(qǐng)求,因此文件系統(tǒng)層350可以指派用于待寫的文件中的每個(gè)塊的LBN。同樣,文件系統(tǒng)層350可以指派用于文件的索引節(jié)點(diǎn)號(hào)和索引節(jié)點(diǎn),并且將用于文件的塊的所指派LBN存儲(chǔ)于其被指派的索引節(jié)點(diǎn)中。
[0092]在一些實(shí)施例中,消重層275可以被預(yù)包括在存儲(chǔ)操作系統(tǒng)300軟件中。在其它實(shí)施例中,消重層275可以包括與存儲(chǔ)操作系統(tǒng)300 —起工作以增強(qiáng)其功能的外部輔助插入式軟件模塊。照此,可以將消重層275強(qiáng)加在現(xiàn)有的存儲(chǔ)操作系統(tǒng)300和文件系統(tǒng)350上,以提供如本文所描述的數(shù)據(jù)的消重。[0093]圖5是可以被用于一些實(shí)施例中的聚合500 (系統(tǒng)或數(shù)據(jù)聚合)的實(shí)施例的示意性框圖??梢栽谝唤M一個(gè)或多個(gè)靈活卷510之間分配聚合500的總存儲(chǔ)空間??梢栽诰酆?00的總存儲(chǔ)空間內(nèi)的存儲(chǔ)大小方面,動(dòng)態(tài)地增大或減小靈活卷510。每個(gè)靈活卷510可以包括一個(gè)或多個(gè)存儲(chǔ)對(duì)象,諸如邏輯單元號(hào)(塊)502、導(dǎo)向器504、配額樹(shù)506、文件508等。聚合500被說(shuō)明性地層放在由至少一個(gè)RAID叢550所表示(依賴于存儲(chǔ)配置是否成鏡像)的RAID系統(tǒng)的頂上,其中每個(gè)RAID叢550包括至少一個(gè)RAID群550。每個(gè)RAID群550進(jìn)一步包括多個(gè)存儲(chǔ)磁盤530,例如,一個(gè)或多個(gè)數(shù)據(jù)磁盤和至少一個(gè)奇偶校驗(yàn)磁盤。
111.保分離操作?+iri的作為結(jié)果的卷屮的消《P:
[0094]圖6是包括各種數(shù)據(jù)結(jié)構(gòu)的示例性文件結(jié)構(gòu)的框圖600。在一些實(shí)施例中,文件結(jié)構(gòu)被用于隨地寫文件布局(WAFL)文件系統(tǒng)中。例如,文件結(jié)構(gòu)可以包括卷610。在一些實(shí)施例中,卷610可以包括靈活卷或靈活卷克隆。靈活卷可以包括基靈活卷且因而不依賴于另一個(gè)靈活卷。靈活卷可以包括靈活卷的克隆。照此,卷610可以包括基靈活卷的可寫時(shí)間點(diǎn)圖像(例如,快照),并且包括用于存儲(chǔ)空間以保存與基靈活卷的任何期望的改變的增量靈活卷部分。照此,在一些實(shí)施例中,靈活卷克隆包括基靈活卷的可寫時(shí)間點(diǎn)圖像(例如,基于基靈活卷的快照)與存儲(chǔ)對(duì)于靈活卷克隆依賴于其或從其衍生的基靈活卷的任何期望的改變的增量靈活卷克隆部分。
[0095]在一些實(shí)施例中,卷610可以包括卷信息塊,其可以包括與用于卷610的數(shù)據(jù)結(jié)構(gòu)樹(shù)相關(guān)的信息。卷信息塊可以包括可以描述或包括卷610中的所有索引節(jié)點(diǎn)的索引節(jié)點(diǎn)文件以及可以包括卷610的塊分配位圖的塊映射文件。
[0096]卷610可以存儲(chǔ)一個(gè)或多個(gè)文件。每個(gè)文件可以由索引節(jié)點(diǎn)620來(lái)描述。在一些實(shí)施例中,索引節(jié)點(diǎn)620包括關(guān)于文件、文件大小、文件類型的元數(shù)據(jù)以及指向用于文件的數(shù)據(jù)塊的指針。
[0097]每個(gè)索引節(jié)點(diǎn)620可以包括一個(gè)或多個(gè)數(shù)據(jù)塊630。在一些實(shí)施例中,每個(gè)數(shù)據(jù)塊630可以包括多個(gè)指針。例如 ,每個(gè)數(shù)據(jù)塊630可以包括虛擬卷塊號(hào)(VVBN)和物理卷塊號(hào)(PVBN)。虛擬卷塊號(hào)可以引用卷(例如,靈活卷克隆)的關(guān)聯(lián)的邏輯塊號(hào)或虛擬塊號(hào),并且對(duì)應(yīng)的物理卷塊號(hào)可以引用存儲(chǔ)聚合中的物理塊。例如,物理卷塊號(hào)可以引用或提供指向物理塊640的指針,并且虛擬卷塊號(hào)可以引用或提供指向邏輯或虛擬塊645的指針。照此,索引節(jié)點(diǎn)的每個(gè)數(shù)據(jù)塊可以包括VVBN-PVBN配對(duì),以使得虛擬卷塊號(hào)引用卷的邏輯或虛擬塊號(hào),并且物理卷塊號(hào)引用存儲(chǔ)設(shè)備或存儲(chǔ)聚合中的物理塊號(hào)。
[0098]因而,卷(例如,靈活卷克隆)可以與用于數(shù)據(jù)的每個(gè)塊的兩個(gè)卷塊號(hào)(例如,虛擬卷塊號(hào)和物理卷塊號(hào))相關(guān)聯(lián)。虛擬卷塊號(hào)可以包括數(shù)據(jù)的邏輯或虛擬塊在靈活卷克隆中的地址,并且物理卷塊號(hào)可以包括靈活卷克隆的數(shù)據(jù)的物理塊在存儲(chǔ)聚合中的地址。
[0099]圖7是來(lái)自文件的塊到存儲(chǔ)聚合的存儲(chǔ)設(shè)備的塊的映射700。存儲(chǔ)聚合可以包括每個(gè)卷或靈活卷的信息。例如,存儲(chǔ)聚合可以包括用于每個(gè)卷的RAID文件和容器文件。RAID文件可以包括描述卷(例如,靈活卷克隆)的元數(shù)據(jù),諸如卷的名稱、文件系統(tǒng)標(biāo)識(shí)符、卷的當(dāng)前狀態(tài)、卷的大小、以及與卷關(guān)聯(lián)的其它信息。容器文件可以包括關(guān)于卷的所有塊的信息。例如,被用于卷內(nèi)的塊地址可以指代該卷的容器文件內(nèi)的塊偏移。照此,容器文件可以包括關(guān)于卷內(nèi)的每個(gè)塊的信息。因而,卷的容器文件可以包括指代卷的給定數(shù)據(jù)塊的位置(例如,在靈活卷克隆和存儲(chǔ)聚合內(nèi))的兩種實(shí)現(xiàn)。此類實(shí)現(xiàn)可以包括物理卷塊號(hào)和虛擬卷塊號(hào)。物理卷塊號(hào)指定數(shù)據(jù)塊在存儲(chǔ)聚合內(nèi)的位置。在一些實(shí)施例中,物理卷塊號(hào)可以被用來(lái)讀塊或?qū)K寫到RAID存儲(chǔ)聚合。虛擬卷塊號(hào)可以指定數(shù)據(jù)塊在容器文件或靈活卷或靈活卷克隆內(nèi)的偏移。
[0100]如圖7中所見(jiàn),映射700可以包括文件710,其包括多個(gè)文件塊。每個(gè)文件塊可以與文件塊號(hào)相關(guān)聯(lián)。單個(gè)塊可以屬于若干邏輯或虛擬的和物理的存儲(chǔ)容器或關(guān)聯(lián)。例如,文件塊號(hào)715可以與卷(例如,靈活卷克隆)、存儲(chǔ)聚合、和存儲(chǔ)設(shè)備相關(guān)聯(lián)。如所見(jiàn),文件塊715可以與卷或容器文件720相關(guān)聯(lián)。例如,文件塊號(hào)715可以與卷或容器文件720的虛擬卷塊號(hào)725相關(guān)聯(lián)或映射。類似地,虛擬卷塊號(hào)725可以與存儲(chǔ)聚合相關(guān)聯(lián)。例如,虛擬卷塊號(hào)725可以指向或被映射到存儲(chǔ)聚合730的物理卷塊號(hào)735。物理卷塊號(hào)735可以指向或被映射到存儲(chǔ)設(shè)備。例如,物理卷塊號(hào)735可以指向或被映射到存儲(chǔ)設(shè)備740的設(shè)備塊號(hào)745。照此,文件、卷容器文件、存儲(chǔ)聚合、和存儲(chǔ)設(shè)備包括由塊號(hào)來(lái)索引的塊的陣列。
[0101]照此,卷的塊地址空間可以由容器文件來(lái)定義。文件寫系統(tǒng)可以使用容器文件來(lái)將虛擬卷塊號(hào)轉(zhuǎn)變?yōu)榫酆系膲K地址空間中的塊地址(例如,物理卷塊號(hào))。卷可以包括由虛擬卷塊號(hào)來(lái)索引的物理卷塊號(hào)的陣列。此類信息可以被包括在包括虛擬卷塊號(hào)到物理卷塊號(hào)映射(例如,VVBN-PVBN映射)的容器映射內(nèi)。
[0102]圖8是雙塊號(hào)的映射800。在一些實(shí)施例中,卷的數(shù)據(jù)塊可以包括雙虛擬塊號(hào)。例如,卷(即,靈活卷或靈活卷克隆)可以包括多個(gè)索引節(jié)點(diǎn)。每個(gè)索引節(jié)點(diǎn)包括至少一個(gè)數(shù)據(jù)塊指針,包括虛擬卷塊號(hào)和物理卷塊號(hào)。如圖8中所見(jiàn),物理卷塊號(hào)810可以包括指向存儲(chǔ)聚合840內(nèi)的聚合塊845的指針。此外,虛擬卷塊號(hào)820可以包括指向容器映射830的塊號(hào)835的指針。塊號(hào)835可以提供指向存儲(chǔ)聚合840的存儲(chǔ)聚合塊845的指針。照此,每個(gè)虛擬卷塊號(hào)可以與物理卷塊號(hào)相關(guān)聯(lián)。在一些實(shí)施例中,可以將虛擬卷塊號(hào)與物理卷塊號(hào)之間的關(guān)聯(lián)存儲(chǔ)在VVBN-PVBN映射內(nèi)。在一些實(shí)施例中,多個(gè)虛擬卷塊號(hào)可以與單個(gè)物理卷塊號(hào)相關(guān)聯(lián)。例如,第一虛擬卷塊號(hào)和第二虛擬卷塊號(hào)二者都可以與單個(gè)物理卷塊號(hào)相關(guān)聯(lián)。照此,第一虛擬卷塊號(hào)和第二虛擬卷塊號(hào)指向存儲(chǔ)聚合內(nèi)的相同塊。
[0103]圖9是用于將數(shù)據(jù)塊標(biāo)記為臟并且利用臟指示符或標(biāo)記來(lái)處理數(shù)據(jù)塊的方法900的流程圖。如將討論的,將數(shù)據(jù)塊指示或標(biāo)記為“臟”可以不保留靈活卷克隆分離操作之后的靈活卷克隆的消重。
[0104]如先前所討論的,靈活卷克隆可以包括一個(gè)或多個(gè)索引節(jié)點(diǎn),并且每個(gè)索引節(jié)點(diǎn)可以包括一個(gè)或多個(gè)數(shù)據(jù)塊。每個(gè)數(shù)據(jù)塊可以包括雙指針,包括虛擬卷塊號(hào)和物理卷塊號(hào)。在一些實(shí)施例中,靈活卷克隆的多個(gè)數(shù)據(jù)塊可以包括相同的指針。照此,靈活卷克隆的多個(gè)數(shù)據(jù)塊可以包括相同的虛擬卷塊號(hào)和相同的物理卷塊號(hào)。此類配置可以被稱為靈活卷克隆的數(shù)據(jù)的消重。
[0105]在一些實(shí)施例中,隨地寫文件布局系統(tǒng)可以將卷的數(shù)據(jù)塊標(biāo)記為“臟”或“假臟”(如以下將進(jìn)一步討論的)。將數(shù)據(jù)庫(kù)標(biāo)記為“臟”可以包括設(shè)置數(shù)據(jù)塊的首部中的至少一位以指示數(shù)據(jù)塊在寫分配操作期間已經(jīng)被修改以及必須被尋址。
[0106]在一些實(shí)施例中,分離靈活卷克隆可以包括數(shù)據(jù)塊的寫分配。如先前所討論的,靈活卷克隆可以包括指向基靈活卷的快照的指針和可以包括靈活卷克隆與基靈活卷的快照之間的數(shù)據(jù)方面的差異的增量數(shù)據(jù)。照此,靈活卷克隆包括與基靈活卷的快照共享或依賴于基靈活卷的快照的數(shù)據(jù)塊和不與基靈活卷的快照共享的數(shù)據(jù)塊(例如,與靈活卷克隆的增量數(shù)據(jù)關(guān)聯(lián)的數(shù)據(jù)塊)。當(dāng)執(zhí)行靈活卷克隆分離操作(例如,使靈活卷克隆獨(dú)立于基靈活卷的操作)時(shí),可以將與基靈活卷的快照共享的數(shù)據(jù)塊標(biāo)記為“臟”,而可以不將與增量數(shù)據(jù)關(guān)聯(lián)的數(shù)據(jù)塊標(biāo)記為“臟”。然而,如將進(jìn)一步詳細(xì)討論的,將數(shù)據(jù)塊標(biāo)記為“臟”在將靈活卷克隆從其基靈活卷分離之后可能不保留該靈活卷克隆中的消重。
[0107]如圖9中所見(jiàn),方法900可以將共享或依賴于基靈活卷的快照的靈活卷克隆的數(shù)據(jù)塊標(biāo)記為“臟”(在步驟910處)。在一些實(shí)施例中,方法900可以通過(guò)檢查靈活卷克隆的容器文件來(lái)確定靈活卷克隆的數(shù)據(jù)塊共享或依賴于基靈活卷的快照。例如,方法900可以訪問(wèn)與容器文件關(guān)聯(lián)的靈活卷克隆的虛擬卷塊號(hào)至物理卷塊號(hào)(VVBN-PVBN)映射。在一些實(shí)施例中,如果靈活卷克隆的數(shù)據(jù)塊共享或依賴于基靈活卷的快照,那么該數(shù)據(jù)塊的物理卷塊號(hào)可以包括孔(hole)或“O”值。然而,如果靈活卷克隆的數(shù)據(jù)塊不共享或依賴于基靈活卷的快照(例如,與靈活卷克隆的增量數(shù)據(jù)關(guān)聯(lián)的數(shù)據(jù)塊),那么該數(shù)據(jù)塊的物理卷塊號(hào)可以不包括孔或“0”,并且可以代之以指定存儲(chǔ)聚合內(nèi)的地址或位置。因而,當(dāng)執(zhí)行卷克隆分離操作時(shí),方法900可以將具有“O”的物理卷塊號(hào)的靈活卷克隆的數(shù)據(jù)塊(如VVBN-PVBN映射中所指示的)標(biāo)記為“臟”。
[0108]方法900可以接收用于弄臟的數(shù)據(jù)塊的寫分配(在步驟920處)。在一些實(shí)施例中,弄臟的數(shù)據(jù)塊的寫分配可以發(fā)生在一致點(diǎn)(CP)期間。在一些實(shí)施例中,隨地寫文件布局可以收集或聚集多個(gè)數(shù)據(jù)塊更新(例如,與正在經(jīng)受分離操作的靈活卷克隆關(guān)聯(lián)的數(shù)據(jù)塊的寫分配),并且在一個(gè)時(shí)間(例如,一致點(diǎn))寫或更新多個(gè)數(shù)據(jù)塊。在一些實(shí)施例中,隨地寫文件布局可以利用非易失性存儲(chǔ)器來(lái)將所有進(jìn)入的數(shù)據(jù)塊更新請(qǐng)求記入日志。照此,非易失性存儲(chǔ)器可以包括與基靈活卷的快照共享的、根據(jù)將靈活卷克隆與基靈活卷的快照相分離而要求更新或被寫的靈活卷克隆的數(shù)據(jù)塊的數(shù)據(jù)日志。在一些實(shí)施例中,如關(guān)于圖2所討論的,將數(shù)據(jù)塊更新請(qǐng)求記入日志的非易失性存儲(chǔ)器可以包括NVRAM日志的內(nèi)容。
[0109]在接收弄臟的數(shù)據(jù)塊的寫分配之后,方法900可以將新的虛擬卷塊號(hào)指派給數(shù)據(jù)塊(在步驟930處)。例如,方法900可以在與基靈活卷的快照共享或由其支持的數(shù)據(jù)塊已經(jīng)被弄臟之后將新的虛擬卷塊號(hào)指派給該數(shù)據(jù)塊。此外,方法900還可以將新的物理卷塊號(hào)指派給該數(shù)據(jù)塊(在步驟940處)。因而,對(duì)數(shù)據(jù)塊的“臟”標(biāo)記在寫分配期間將新的虛擬卷塊號(hào)和新的物理卷塊號(hào)指派給該數(shù)據(jù)塊。照此,因?yàn)榘研碌奶摂M卷塊號(hào)和物理卷塊號(hào)指派給靈活卷克隆的數(shù)據(jù)塊,所以把靈活卷克隆的數(shù)據(jù)塊標(biāo)記為“臟”將導(dǎo)致與基靈活卷的快照共享的靈活卷克隆的數(shù)據(jù)塊內(nèi)的消重的損失。
[0110]圖10是用于將靈活卷克隆的數(shù)據(jù)塊標(biāo)記為“假臟”并且利用假臟指示符或標(biāo)記來(lái)處理數(shù)據(jù)塊的方法1000的流程圖。通常,將數(shù)據(jù)塊標(biāo)記為“假臟”可以包括當(dāng)執(zhí)行靈活卷克隆分離操作時(shí)保留數(shù)據(jù)塊的虛擬卷塊號(hào)并且將新的物理卷塊號(hào)指派給靈活卷克隆的數(shù)據(jù)塊。
[0111]如先前所描述的,靈活卷克隆可以包括一個(gè)或多個(gè)數(shù)據(jù)塊,其可以包括雙指針,包括虛擬卷塊號(hào)和物理卷塊號(hào)。類似地,將靈活卷克隆的數(shù)據(jù)塊標(biāo)記為“假臟”可以包括設(shè)置數(shù)據(jù)塊的首部中的至少一位以指示數(shù)據(jù)塊在寫分配操作期間已經(jīng)被修改以及必須被尋址。
[0112]在一些實(shí)施例中,分離靈活卷克隆以使得其從基靈活卷的對(duì)應(yīng)快照中獨(dú)立可以包括將數(shù)據(jù)塊標(biāo)記為“假臟”。如先前所討論的,靈活卷克隆可以包括具有指向基靈活卷的快照的指針的數(shù)據(jù)塊和與可以包括靈活卷克隆與基靈活卷的快照之間的數(shù)據(jù)方面的差異的增量數(shù)據(jù)對(duì)應(yīng)的數(shù)據(jù)塊。因而,靈活卷克隆包括與基靈活卷的快照共享或依賴于基靈活卷的快照的數(shù)據(jù)塊和不與基靈活卷的快照共享的數(shù)據(jù)塊。當(dāng)執(zhí)行靈活卷克隆的分離操作時(shí),可以將與基靈活卷的快照共享的數(shù)據(jù)塊標(biāo)記為“假臟”,而可以不將與增量數(shù)據(jù)關(guān)聯(lián)的數(shù)據(jù)塊標(biāo)記為“假臟”,原因在于與增量數(shù)據(jù)對(duì)應(yīng)的數(shù)據(jù)塊不依賴于基靈活卷的快照。
[0113]如圖1000中所見(jiàn),方法1000可以將共享或依賴于基靈活卷的快照的靈活卷克隆的數(shù)據(jù)塊標(biāo)記為“假臟”(在步驟1010處)。在一些實(shí)施例中,方法1000可以通過(guò)檢查靈活卷克隆的容器文件來(lái)確定靈活卷克隆的數(shù)據(jù)塊共享或依賴于基靈活卷的快照。例如,方法1000可以訪問(wèn)與容器文件關(guān)聯(lián)的靈活卷克隆的VVBN-PVBN映射。在一些實(shí)施例中,如果靈活卷克隆的數(shù)據(jù)塊共享或依賴于基靈活卷的快照,那么該數(shù)據(jù)塊的物理卷塊號(hào)可以包括孔或“O”值。然而,如果靈活卷克隆的數(shù)據(jù)塊不共享或依賴于基靈活卷的快照(例如,與靈活卷克隆的增量數(shù)據(jù)關(guān)聯(lián)的數(shù)據(jù)塊),那么該數(shù)據(jù)塊的物理卷塊號(hào)可以不包括孔或“0”,并且可以代之以指定存儲(chǔ)聚合內(nèi)的地址或位置。因而,當(dāng)執(zhí)行卷克隆分離操作時(shí),方法1000可以將具有“O”的物理卷塊號(hào)的靈活卷克隆的數(shù)據(jù)塊標(biāo)記為“假臟”。
[0114]方法1000可以接收用于已經(jīng)被標(biāo)記為“假臟”的數(shù)據(jù)塊的寫分配(在步驟1020處)。在一些實(shí)施例中,被標(biāo)記或指示為“假臟”的數(shù)據(jù)塊的寫分配可以發(fā)生在CP處。在一些實(shí)施例中,WAFL系統(tǒng)可以收集或聚集多個(gè)數(shù)據(jù)塊更新(例如,與正在經(jīng)受分離操作的靈活卷克隆關(guān)聯(lián)的數(shù)據(jù)塊),并且在一個(gè)時(shí)間(例如,一致點(diǎn))寫或更新卷的多個(gè)數(shù)據(jù)塊。在一些實(shí)施例中,隨地寫文件布局可以利用非易失性存儲(chǔ)器將對(duì)所有進(jìn)入的數(shù)據(jù)塊更新請(qǐng)求(例如,已經(jīng)被標(biāo)記為“假臟”的靈活卷克隆的數(shù)據(jù)塊)記入日志。照此,非易失性存儲(chǔ)器可以包括與基靈活卷的快照共享的、根據(jù)將靈活卷克隆與基靈活卷的快照相分離而要求更新或被寫的靈活卷克隆的數(shù)據(jù)塊的數(shù)據(jù)日志。在一些實(shí)施例中,如關(guān)于圖2所討論的,將數(shù)據(jù)塊更新請(qǐng)求記入日志的非易失性存儲(chǔ)器可以包括NVRAM日志的內(nèi)容。
[0115]在接收已經(jīng)被標(biāo)記或指示為“假臟”的數(shù)據(jù)塊的寫分配之后,方法1000可以將虛擬卷塊號(hào)保留到新寫的或更新的數(shù)據(jù)塊(在步驟1030處)。例如,方法1000可以在與基靈活卷的快照共享或由其支持的靈活卷克隆的數(shù)據(jù)塊被標(biāo)記為“假臟”之后將虛擬卷塊號(hào)保留到該數(shù)據(jù)塊。此外,方法1000可以將新的物理卷塊號(hào)指派給靈活卷克隆的數(shù)據(jù)塊(在步驟1040處)。因而,對(duì)數(shù)據(jù)塊的“假臟”標(biāo)記保留虛擬卷塊號(hào),但在寫分配期間將新的物理卷塊號(hào)指派給該數(shù)據(jù)塊。照此,因?yàn)閷⑿碌奈锢砭韷K號(hào)指派給新寫的數(shù)據(jù)塊,所以將靈活卷克隆的數(shù)據(jù)塊標(biāo)記為“假臟”可能不足以保留消重。然而,如以下進(jìn)一步詳細(xì)討論的,對(duì)數(shù)據(jù)塊的“假臟”標(biāo)記的使用和寫分配邏輯的改變可以保留靈活卷克隆分離操作之后的靈活卷克隆中的消重。
[0116]圖11是用于當(dāng)指派靈活卷克隆的數(shù)據(jù)塊的物理卷塊號(hào)時(shí)利用對(duì)寫分配邏輯的改變或修改來(lái)將靈活卷克隆的數(shù)據(jù)塊標(biāo)記為“假臟”的方法1100的流程圖。通常,方法1100可以將要與其基靈活卷分離的靈活卷克隆的數(shù)據(jù)塊標(biāo)記為“假臟”,如果靈活卷克隆的該數(shù)據(jù)塊與基靈活卷的快照共享的話。此外,對(duì)于靈活卷克隆的給定虛擬卷塊號(hào),方法1100可以僅為數(shù)據(jù)塊分配一次新的物理卷塊號(hào)。
[0117]如圖11中所見(jiàn),方法1100可以掃描靈活卷克隆的索引節(jié)點(diǎn)(在步驟1105處)。在一些實(shí)施例中,靈活卷克隆可以包括多個(gè)索引節(jié)點(diǎn)。照此,可以由方法1100來(lái)掃描靈活卷克隆的每個(gè)索引節(jié)點(diǎn)。方法1100可以確定靈活卷克隆的索引節(jié)點(diǎn)的特定數(shù)據(jù)塊是否與基靈活卷的支持快照共享(在步驟1110處)。在一些實(shí)施例中,該確定通過(guò)訪問(wèn)并檢查與靈活卷克隆關(guān)聯(lián)的容器文件來(lái)執(zhí)行。如先前所描述的,容器文件可以包括虛擬卷塊號(hào)至物理卷塊號(hào)(VVBN-PVBN)映射。照此,與已經(jīng)被指派給靈活卷塊號(hào)的數(shù)據(jù)塊的虛擬卷塊號(hào)關(guān)聯(lián)的物理卷塊號(hào)可以包括孔或“O”值或者地址或位置。如果來(lái)自VVBN-PVBN映射的物理卷塊號(hào)不是“0”,那么該數(shù)據(jù)塊可能不與基靈活卷的快照共享(例如,該數(shù)據(jù)塊與靈活卷克隆的增量數(shù)據(jù)相關(guān)聯(lián))。照此,方法1100可以不將該數(shù)據(jù)塊指派或標(biāo)記為“假臟”(在步驟1115處)。然而,在一些實(shí)施例中,如VVBN-PVBN映射中所指示的,與基靈活卷的快照共享或由其支持的靈活卷克隆的數(shù)據(jù)塊可以包括孔或“O”的物理卷塊號(hào)。在與虛擬卷塊號(hào)關(guān)聯(lián)的物理卷塊號(hào)是孔或“O”的情況下,方法1100可以將靈活卷克隆的數(shù)據(jù)塊指派、標(biāo)記、或指示為“假臟”(在步驟1120處)。
[0118]照此,方法1100可以接收要經(jīng)受靈活卷克隆分離操作的靈活卷克隆的數(shù)據(jù)塊。靈活卷克隆的VVBN-PVBN映射被接收并引用以確定該數(shù)據(jù)塊是否與基靈活卷的支持快照共享(例如,指向存儲(chǔ)聚合的相同數(shù)據(jù)塊)。例如,可以在VVBN-PVBN映射中檢查所接收的數(shù)據(jù)塊的虛擬卷塊號(hào),并且可以分析對(duì)應(yīng)的物理卷塊號(hào)。照此,靈活卷克隆的VVBN-PVBN映射包括虛擬卷塊號(hào)與物理卷塊號(hào)之間的關(guān)聯(lián)。如果與虛擬卷塊號(hào)關(guān)聯(lián)的物理卷塊號(hào)不與基靈活卷的快照共享(例如,對(duì)應(yīng)的物理卷塊號(hào)不是“0”),那么不將該數(shù)據(jù)塊標(biāo)記或指示為“假臟”。然而,如果與虛擬卷塊號(hào)關(guān)聯(lián)的物理卷塊號(hào)與基靈活卷的快照共享(例如,對(duì)應(yīng)的物理卷塊號(hào)是“0”),那么將該數(shù)據(jù)塊標(biāo)記或指示為“假臟”。
[0119]方法1100可以接收靈活卷克隆的數(shù)據(jù)塊的寫分配(在步驟1130處)。如先前所討論的,數(shù)據(jù)塊的寫分配可以發(fā)生在一致點(diǎn)期間。在一些實(shí)施例中,在一致點(diǎn)期間可以接收多個(gè)寫分配。照此,可以接收靈活卷克隆的多個(gè)數(shù)據(jù)塊的寫分配。例如,可以接收已經(jīng)被標(biāo)記為“假臟”的靈活卷克隆的每個(gè)數(shù)據(jù)塊的寫分配。方法1100可以檢查或分析靈活卷克隆的容器文件中的VVBN-PVBN映射(在步驟1140處)。在一些實(shí)施例中,步驟1140處的對(duì)VVBN-PVBN映射的檢查或分析可以包括分析與靈活卷克隆的數(shù)據(jù)塊的虛擬卷塊號(hào)關(guān)聯(lián)的物理卷塊號(hào)??梢宰龀雠c虛擬卷塊號(hào)關(guān)聯(lián)的物理卷塊號(hào)是否為孔或“O”的確定(在步驟1150處)。如果如VVBN-PVBN映射中所指示的,物理卷塊號(hào)不是孔或“0”,那么可以假設(shè)已經(jīng)將物理卷塊號(hào)指派或分配給與數(shù)據(jù)塊關(guān)聯(lián)的虛擬卷塊號(hào)。因?yàn)橐呀?jīng)為已經(jīng)被指派了物理卷塊號(hào)的相同虛擬卷塊號(hào)發(fā)布了數(shù)據(jù)塊的寫分配,那么與來(lái)自VVBN-PVBN映射的虛擬卷塊號(hào)關(guān)聯(lián)的物理卷塊號(hào)可以被使用或指派到靈活卷克隆的數(shù)據(jù)塊(在步驟1160處)。照此,不將新的物理卷塊號(hào)指派給靈活卷克隆的數(shù)據(jù)塊。
[0120]然而,如果如VVBN-PVBN映射中所指示的,物理卷塊號(hào)是孔或“0”,那么可以將新的物理卷塊號(hào)指派或分配給靈活卷克隆的數(shù)據(jù)塊(在步驟1170處)。例如,靈活卷克隆的數(shù)據(jù)塊可以包括虛擬卷塊號(hào)。方法1100可以通過(guò)查找數(shù)據(jù)塊的虛擬卷塊號(hào)以及接收與該虛擬卷塊號(hào)關(guān)聯(lián)的物理卷塊號(hào)的值來(lái)分析靈活卷克隆的VVBN-PVBN映射。如果物理卷塊號(hào)是“0”,那么可以將新的物理卷塊號(hào)分配或指派給該數(shù)據(jù)塊。該方法還可以利用新分配或指派的物理卷塊號(hào)來(lái)更新VVBN-PVBN映射(在步驟1180處)。例如,在將新的物理卷塊號(hào)分配給數(shù)據(jù)塊之后,與數(shù)據(jù)塊的虛擬卷塊號(hào)對(duì)應(yīng)的物理卷塊號(hào)的值可以從孔或“O”改變到新分配的物理卷塊號(hào)(例如,存儲(chǔ)聚合內(nèi)的地址或位置,并且不是孔或“O”)。
[0121]作為結(jié)果,方法1100可以在靈活卷克隆分離操作期間保留靈活卷克隆的數(shù)據(jù)塊的消重。例如,作為結(jié)果的靈活卷(例如,在已經(jīng)將靈活卷克隆與基靈活卷的快照相分離之后)可以包括多個(gè)數(shù)據(jù)塊,其中某些數(shù)據(jù)塊將包括相同的虛擬卷塊號(hào)和相同的物理卷塊號(hào)。因而,通過(guò)塊共享來(lái)保留消重。
[0122]圖12A是包括數(shù)據(jù)塊的消重的靈活卷克隆的多個(gè)數(shù)據(jù)塊的示例1200。通常,與消重關(guān)聯(lián)的靈活卷的多個(gè)數(shù)據(jù)塊包括相同的虛擬卷塊號(hào)和物理卷塊號(hào)。如圖12A中所見(jiàn),數(shù)據(jù)塊1210和數(shù)據(jù)塊1220中的每個(gè)包括虛擬卷塊和物理卷塊。數(shù)據(jù)塊1210包括虛擬卷塊1211和物理卷塊1212。類似地,數(shù)據(jù)塊1220包括虛擬卷塊1221和物理卷塊1222。因?yàn)閿?shù)據(jù)塊1210和數(shù)據(jù)塊1220被消重,所以所述數(shù)據(jù)塊共享虛擬卷塊號(hào)和物理卷塊號(hào)。例如,虛擬卷塊1211和虛擬卷塊1221可以包括相同的值或號(hào)“VVBN1”。此外,物理卷塊1212和物理卷塊1222可以包括孔或“O”的值。照此,物理卷塊1212和1222中的每個(gè)與基靈活卷的快照共享。
[0123]圖12B是已經(jīng)被標(biāo)記為“假臟”的靈活卷克隆的經(jīng)消重的數(shù)據(jù)塊的修改后的寫分配1240的示例。通常,利用修改后的寫分配將數(shù)據(jù)塊標(biāo)記為“假臟”(如先前關(guān)于圖11所描述的)導(dǎo)致靈活卷克隆的共享數(shù)據(jù)塊的消重的保留。在一些實(shí)施例中,如果利用修改后的寫分配來(lái)將圖12A的數(shù)據(jù)塊1210和1220標(biāo)記為“假臟”(如關(guān)于圖11所描述的),那么可以保留消重。例如,數(shù)據(jù)塊1280和數(shù)據(jù)塊1290可以表示在修改后的寫分配以及被標(biāo)記或指示為“假臟”之后的數(shù)據(jù)塊1210和數(shù)據(jù)塊1220。如圖12B中所見(jiàn),數(shù)據(jù)塊1280包括虛擬卷塊1281和物理卷塊1282,并且數(shù)據(jù)塊1290包括虛擬卷塊1291和物理卷塊1292。每個(gè)數(shù)據(jù)塊1280和1290包括相同的虛擬卷塊號(hào)和相同的物理卷塊號(hào)。例如,數(shù)據(jù)塊1280的虛擬卷塊1281和數(shù)據(jù)塊1290的虛擬卷塊1291 二者都包括相同的虛擬卷塊號(hào)“VBN1”。同樣地,數(shù)據(jù)塊1280的物理卷塊1282和數(shù)據(jù)塊1290的物理卷塊1292還包括相同的物理卷塊號(hào)“PVBN3”。照此,每個(gè)數(shù)據(jù)塊共享指向相同的虛擬卷塊和相同的物理卷塊的指針。因而,已經(jīng)保留了消重。
[0124]圖13示出被用于一些實(shí)施例中的靈活卷克隆數(shù)據(jù)塊寫分配數(shù)據(jù)結(jié)構(gòu)1300。在一些實(shí)施例中,靈活卷克隆數(shù)據(jù)塊寫分配數(shù)據(jù)結(jié)構(gòu)1300包括多個(gè)數(shù)據(jù)集條目1350,每個(gè)數(shù)據(jù)集條目1350表示卷標(biāo)識(shí)符、索引節(jié)點(diǎn)標(biāo)識(shí)符、數(shù)據(jù)塊標(biāo)識(shí)符、和寫分配指示符(以下所討論的)。每個(gè)數(shù)據(jù)集條目1350可以包括用于存儲(chǔ)對(duì)卷、索引節(jié)點(diǎn)、數(shù)據(jù)塊、和寫分配指示符進(jìn)行描述或標(biāo)識(shí)的數(shù)據(jù)的多個(gè)數(shù)據(jù)字段。
[0125]在一些實(shí)施例中,表示用于數(shù)據(jù)塊的寫分配的靈活卷克隆塊數(shù)據(jù)寫分配數(shù)據(jù)條目1350可以包含用于卷標(biāo)識(shí)符1310、索引節(jié)點(diǎn)標(biāo)識(shí)符1320、數(shù)據(jù)塊標(biāo)識(shí)符1330、和寫分配指示符1340的數(shù)據(jù)字段。卷標(biāo)識(shí)符1310可以包括標(biāo)識(shí)特定靈活卷的信息。例如,靈活卷標(biāo)識(shí)符1310可以包括靈活卷或靈活卷克隆的名稱或地址。在一些實(shí)施例中,靈活卷標(biāo)識(shí)符可以標(biāo)識(shí)基靈活卷,或者靈活卷標(biāo)識(shí)符可以提供用于靈活卷克隆的身份信息。照此,靈活卷標(biāo)識(shí)符1310可以標(biāo)識(shí)基靈活卷或靈活卷克隆的任一。
[0126]索引節(jié)點(diǎn)標(biāo)識(shí)符1320可以標(biāo)識(shí)用于每個(gè)數(shù)據(jù)集條目1350的卷的索引節(jié)點(diǎn)。例如,索引節(jié)點(diǎn)標(biāo)識(shí)符1320可以標(biāo)識(shí)正在經(jīng)受卷克隆分離操作的靈活卷克隆的索引節(jié)點(diǎn)。數(shù)據(jù)塊標(biāo)識(shí)符1330可以標(biāo)識(shí)如根據(jù)索引節(jié)點(diǎn)標(biāo)識(shí)符1320所標(biāo)識(shí)的索引節(jié)點(diǎn)的數(shù)據(jù)塊。例如,如果索引節(jié)點(diǎn)包括多個(gè)數(shù)據(jù)塊,那么索引節(jié)點(diǎn)標(biāo)識(shí)符1320可以標(biāo)識(shí)與該節(jié)點(diǎn)關(guān)聯(lián)的一個(gè)此類數(shù)據(jù)塊。[0127]寫分配指示符1340可以指示對(duì)由數(shù)據(jù)塊標(biāo)識(shí)符1330所標(biāo)識(shí)的數(shù)據(jù)塊執(zhí)行的寫分配的類型。例如,寫分配指示符1340可以包括針對(duì)數(shù)據(jù)塊指示符1330中所標(biāo)識(shí)的數(shù)據(jù)塊的“假臟”的標(biāo)記或指示符。
[0128]在一些實(shí)施例中,當(dāng)要將靈活卷克隆與其基靈活卷相分離時(shí),可以生成或接收卷標(biāo)識(shí)符字段1310、索引節(jié)點(diǎn)標(biāo)識(shí)符字段1320、數(shù)據(jù)塊標(biāo)識(shí)符字段1330、以及寫分配指示符字段1340。例如,每當(dāng)要將靈活卷克隆與其基靈活卷相分離時(shí),可以更新靈活卷克隆數(shù)據(jù)塊寫分配數(shù)據(jù)結(jié)構(gòu)1300。
[0129]照此,靈活卷克隆數(shù)據(jù)塊寫分配數(shù)據(jù)結(jié)構(gòu)1300接收關(guān)于卷的信息,在數(shù)據(jù)結(jié)構(gòu)中存儲(chǔ)關(guān)于卷的信息,以及包括用于卷的數(shù)據(jù)塊的寫分配指示符。
[0130]各種實(shí)施例
如對(duì)于計(jì)算機(jī)領(lǐng)域技術(shù)人員而言將明顯的,一些實(shí)施例可以使用根據(jù)本文的教導(dǎo)而編程的常規(guī)的通用或?qū)iT數(shù)字計(jì)算機(jī)或微處理器來(lái)常規(guī)地實(shí)現(xiàn)。一些實(shí)施例可以由被編程以執(zhí)行本文所描述的方法或過(guò)程步驟的通用計(jì)算機(jī)來(lái)實(shí)現(xiàn)。此類編程可以產(chǎn)生用于根據(jù)來(lái)自程序軟件的指令而執(zhí)行特定方法或過(guò)程步驟和功能(本文所描述的)的新的機(jī)器或?qū)S糜?jì)算機(jī)。如對(duì)于軟件領(lǐng)域技術(shù)人員而言將明顯的,可以由程序員基于本文的教導(dǎo)來(lái)準(zhǔn)備適當(dāng)?shù)能浖幋a。如對(duì)于本領(lǐng)域技術(shù)人員而言將顯而易見(jiàn)的,一些實(shí)施例還可以通過(guò)準(zhǔn)備專用集成電路或通過(guò)互連常規(guī)組件電路的適當(dāng)網(wǎng)絡(luò)來(lái)實(shí)現(xiàn)。本領(lǐng)域技術(shù)人員將理解的是,信息可以使用任何各種不同的技術(shù)和技巧來(lái)表示。
[0131]一些實(shí)施例包括計(jì)算機(jī)程序產(chǎn)品,包括具有在其上/中存儲(chǔ)的指令的計(jì)算機(jī)可讀介質(zhì)(多個(gè)介質(zhì)),并且當(dāng)運(yùn)行所述指令(例如,由處理器)時(shí),執(zhí)行本文所描述的方法、技術(shù)、或?qū)嵤├?jì)算機(jī)可讀介質(zhì)包括用于執(zhí)行本文所描述的方法的各個(gè)步驟、技術(shù)、或?qū)嵤├闹噶罴?。?jì)算機(jī)可讀介質(zhì)可以包括非臨時(shí)計(jì)算機(jī)可讀介質(zhì)。計(jì)算機(jī)可讀介質(zhì)可以包括具有在其上/中存儲(chǔ)的可以被用來(lái)控制、或引起計(jì)算機(jī)執(zhí)行實(shí)施例的任何過(guò)程的指令的存儲(chǔ)介質(zhì)。存儲(chǔ)介質(zhì)可以在不具有限制性的情況下包括任何類型的設(shè)備,包括軟盤、迷你盤(MD)、光盤、DVD、CD-ROM、微驅(qū)動(dòng)器、和磁光盤、ROM、RAM、EPROM、EEPROM、DRAM、VRAM、閃速存儲(chǔ)設(shè)備(包括閃速卡)、磁或光卡、納米系統(tǒng)(包括分子存儲(chǔ)器1C)、RAID設(shè)備、遠(yuǎn)程數(shù)據(jù)存儲(chǔ)/存檔/入庫(kù)、或適于在其上/中存儲(chǔ)指令和/或數(shù)據(jù)的任何其它類型的介質(zhì)或設(shè)備。
[0132]一些實(shí)施例包括在計(jì)算機(jī)可讀介質(zhì)(多個(gè)介質(zhì))中的任何一個(gè)上存儲(chǔ)的用于控制通用或?qū)iT計(jì)算機(jī)或微處理器這二者的硬件以及用于使得計(jì)算機(jī)或微處理器能夠與使用實(shí)施例的結(jié)果的人類用戶和/或其它機(jī)制進(jìn)行交互的軟件指令。此類軟件可以在不具有限制性的情況下包括設(shè)備驅(qū)動(dòng)器、操作系統(tǒng)、和用戶應(yīng)用。最后,此類計(jì)算機(jī)可讀介質(zhì)進(jìn)一步包括用于執(zhí)行本文所描述的實(shí)施例的軟件指令。被包括在通用/專門計(jì)算機(jī)或微處理器的編程(軟件)中的是用于實(shí)現(xiàn)一些實(shí)施例的軟件模塊。
[0133]技術(shù)人員將進(jìn)一步領(lǐng)會(huì),本文所描述的實(shí)施例的各種說(shuō)明性的邏輯塊、電路、模塊、算法、技術(shù)、過(guò)程、或方法步驟可以實(shí)現(xiàn)為計(jì)算機(jī)電子硬件、計(jì)算機(jī)軟件、或這二者的組合。為了說(shuō)明硬件和軟件的該可互換性,通常本文根據(jù)其功能來(lái)描述各種說(shuō)明性的組件、塊、模塊、電路、和步驟。此類功能是實(shí)現(xiàn)為硬件還是軟件依賴于在整體系統(tǒng)上所強(qiáng)加的特定應(yīng)用和設(shè)計(jì)約束。本領(lǐng)域技術(shù)人員可以為每個(gè)特定的應(yīng)用以變化的方式來(lái)實(shí)現(xiàn)所描述的功能,但此類實(shí)現(xiàn)決定不應(yīng)解釋為弓I起與本文所描述的實(shí)施例的背離。[0134]結(jié)合本文所公開(kāi)的實(shí)施例來(lái)描述的各種說(shuō)明性的邏輯塊、模塊、和電路可以利用被設(shè)計(jì)成執(zhí)行本文所描述的功能的通用處理器、數(shù)字信號(hào)處理器(DSP)、專用集成電路(ASIC)、現(xiàn)場(chǎng)可編程門陣列(FPGA)或其它可編程邏輯設(shè)備、離散門或晶體管邏輯、離散硬件組件、或其任何組合來(lái)實(shí)現(xiàn)或執(zhí)行。通用處理器可以是微處理器,但可替代地,處理器可以是任何常規(guī)的處理器、控制器、微控制器、或狀態(tài)機(jī)。處理器還可以實(shí)現(xiàn)為計(jì)算設(shè)備的組合,例如,DSP和微處理器的組合、多個(gè)微處理器、聯(lián)合DSP核的一個(gè)或多個(gè)微處理器、或任何其它此類配置。
[0135]結(jié)合本文所公開(kāi)的實(shí)施例來(lái)描述的算法、技術(shù)、過(guò)程、或方法可以直接采用硬件、采用由處理器所運(yùn)行的軟件、或采用這二者的組合來(lái)體現(xiàn)。在一些實(shí)施例中,本文所描述的任何軟件應(yīng)用、程序、工具、模塊、或?qū)涌梢园ㄒ?,包括被配置成?zhí)行本文所描述的實(shí)施例的硬件和/或軟件。通常,本文所描述的軟件應(yīng)用、程序、工具、模塊、或?qū)拥墓δ芸梢灾苯硬捎糜布?lái)體現(xiàn),或體現(xiàn)為由處理器所運(yùn)行的軟件,或體現(xiàn)為這二者的組合。軟件應(yīng)用、層、或模塊可以駐存于RAM存儲(chǔ)器、閃速存儲(chǔ)器、ROM存儲(chǔ)器、EPROM存儲(chǔ)器、EEPROM存儲(chǔ)器、寄存器、硬盤、可移動(dòng)盤、CD-ROM、或本領(lǐng)域所公知的任何其它形式的存儲(chǔ)介質(zhì)中。將示例性存儲(chǔ)介質(zhì)耦合至處理器,以使得處理器能夠從存儲(chǔ)介質(zhì)讀數(shù)據(jù)并向所述存儲(chǔ)介質(zhì)寫數(shù)據(jù)。可替代地,存儲(chǔ)介質(zhì)可以集成到處理器。處理器和存儲(chǔ)介質(zhì)可以駐存于ASIC中。ASIC可以駐存于用戶設(shè)備中??商娲?,處理器和存儲(chǔ)介質(zhì)可以駐存作為用戶設(shè)備中的離散組件。
[0136]雖然參考許多特定細(xì)節(jié)來(lái)描述了本文所描述的實(shí)施例,但是本領(lǐng)域一般技術(shù)人員將認(rèn)識(shí)到,實(shí)施例能夠在不背離實(shí)施例的精神的情況下采用其它特定形式來(lái)體現(xiàn)。因而,本領(lǐng)域一般技術(shù)人員將理解的是,本文所描述的實(shí)施例不由前述說(shuō)明性細(xì)節(jié)而限制,而是由所附權(quán)利要求來(lái)定義。
【權(quán)利要求】
1.一種系統(tǒng),包括至少一個(gè)處理器和存儲(chǔ)器,用于管理存儲(chǔ)系統(tǒng)上的數(shù)據(jù),所述存儲(chǔ)系統(tǒng)為至少一個(gè)存儲(chǔ)對(duì)象和所述存儲(chǔ)對(duì)象的克隆提供數(shù)據(jù)存儲(chǔ),所述系統(tǒng)包括: 所述存儲(chǔ)系統(tǒng)被配置用于: 接收用于所述存儲(chǔ)對(duì)象的克隆的數(shù)據(jù)塊的寫分配,所述克隆包括多個(gè)數(shù)據(jù)塊并且基于所述存儲(chǔ)對(duì)象,每個(gè)數(shù)據(jù)塊包括指向存儲(chǔ)聚合內(nèi)的位置的物理地址指針和指向所述存儲(chǔ)對(duì)象的克隆的地址空間內(nèi)的位置的虛擬地址指針; 確定所述克隆的數(shù)據(jù)塊是否與所述存儲(chǔ)對(duì)象的至少一個(gè)數(shù)據(jù)塊共享;以及 如果所述數(shù)據(jù)塊與所述存儲(chǔ)對(duì)象的至少一個(gè)數(shù)據(jù)塊共享并且如果未接收到包括相同的虛擬地址指針的所述克隆的另一個(gè)數(shù)據(jù)塊的寫分配,則將新的指針指派給所述克隆的數(shù)據(jù)塊的物理地址指針。
2.根據(jù)權(quán)利要求1所述的系統(tǒng),其中所述存儲(chǔ)對(duì)象的克隆包括與所述存儲(chǔ)對(duì)象的至少一個(gè)數(shù)據(jù)塊共享的至少一個(gè)數(shù)據(jù)塊和不與所述存儲(chǔ)對(duì)象的數(shù)據(jù)塊共享的至少一個(gè)數(shù)據(jù)塊。
3.根據(jù)權(quán)利要求2所述的系統(tǒng),其中如果所述克隆的數(shù)據(jù)塊的物理地址指針與所述存儲(chǔ)對(duì)象的至少一個(gè)數(shù)據(jù)塊的物理地址指針相同,則所述克隆的數(shù)據(jù)塊與所述存儲(chǔ)對(duì)象的至少一個(gè)數(shù)據(jù)塊共享。
4.根據(jù)權(quán)利要求1所述的系統(tǒng),所述存儲(chǔ)操作系統(tǒng)進(jìn)一步被配置用于: 如果新的指針被指派,則通過(guò)利用所述新的指針來(lái)改變與對(duì)應(yīng)于所述克隆的數(shù)據(jù)塊的所述虛擬地址指針的虛擬地址指針配對(duì)的數(shù)據(jù)塊映射中的物理地址指針而更新所述存儲(chǔ)對(duì)象的克隆的數(shù)據(jù)塊映射。
5.根據(jù)權(quán)利要求4所述的系統(tǒng),所述存儲(chǔ)操作系統(tǒng)進(jìn)一步被配置用于:` 如果所述克隆的數(shù)據(jù)塊與所述存儲(chǔ)對(duì)象的至少一個(gè)數(shù)據(jù)塊共享并且如果接收到包括相同的虛擬地址指針的所述克隆的另一個(gè)數(shù)據(jù)塊的寫分配,則指派與對(duì)應(yīng)于所述數(shù)據(jù)塊的所述虛擬地址指針的虛擬地址指針配對(duì)的來(lái)自所述數(shù)據(jù)塊映射的物理地址指針。
6.根據(jù)權(quán)利要求1所述的系統(tǒng),所述存儲(chǔ)操作系統(tǒng)進(jìn)一步被配置用于: 接收用于所述存儲(chǔ)對(duì)象的克隆的分離操作,所述分離操作指示與所述存儲(chǔ)對(duì)象的至少一個(gè)數(shù)據(jù)塊共享的所述克隆的所有數(shù)據(jù)塊,對(duì)所述克隆的數(shù)據(jù)塊的所述指示導(dǎo)致所指示的數(shù)據(jù)塊的寫分配。
7.根據(jù)權(quán)利要求1所述的系統(tǒng),其中所述存儲(chǔ)聚合包括多個(gè)存儲(chǔ)設(shè)備之上的地址空間。
8.一種用于管理存儲(chǔ)系統(tǒng)上的數(shù)據(jù)的方法,所述存儲(chǔ)系統(tǒng)為至少一個(gè)存儲(chǔ)對(duì)象和所述存儲(chǔ)對(duì)象的克隆提供數(shù)據(jù)存儲(chǔ),所述方法包括: 使用計(jì)算機(jī)軟件以執(zhí)行: 接收用于所述存儲(chǔ)對(duì)象的克隆的數(shù)據(jù)塊的寫分配,所述克隆包括多個(gè)數(shù)據(jù)塊并且基于所述存儲(chǔ)對(duì)象,每個(gè)數(shù)據(jù)塊包括指向存儲(chǔ)聚合內(nèi)的位置的物理地址指針和指向所述存儲(chǔ)對(duì)象的克隆的地址空間內(nèi)的位置的虛擬地址指針; 確定所述克隆的數(shù)據(jù)塊是否與所述存儲(chǔ)對(duì)象的至少一個(gè)數(shù)據(jù)塊共享;以及 如果所述數(shù)據(jù)塊與所述存儲(chǔ)對(duì)象的至少一個(gè)數(shù)據(jù)塊共享并且如果未接收到包括相同的虛擬地址指針的所述克隆的另一個(gè)數(shù)據(jù)塊的寫分配,則將新的指針指派給所述克隆的數(shù)據(jù)塊的物理地址指針。
9.根據(jù)權(quán)利要求8所述的方法,其中所述存儲(chǔ)對(duì)象的克隆包括與所述存儲(chǔ)對(duì)象的至少一個(gè)數(shù)據(jù)塊共享的至少一個(gè)數(shù)據(jù)塊和不與所述存儲(chǔ)對(duì)象的數(shù)據(jù)塊共享的至少一個(gè)數(shù)據(jù)塊。
10.根據(jù)權(quán)利要求9所述的方法,其中如果所述克隆的數(shù)據(jù)塊的物理地址指針與所述存儲(chǔ)對(duì)象的至少一個(gè)數(shù)據(jù)塊的物理地址指針相同,則所述克隆的數(shù)據(jù)塊與所述存儲(chǔ)對(duì)象的至少一個(gè)數(shù)據(jù)塊共享。
11.根據(jù)權(quán)利要求8所述的方法,所述方法進(jìn)一步包括: 如果新的指針被指派,則通過(guò)利用所述新的指針來(lái)改變與對(duì)應(yīng)于所述克隆的數(shù)據(jù)塊的所述虛擬地址指針的虛擬地址指針配對(duì)的數(shù)據(jù)塊映射中的物理地址指針而更新所述存儲(chǔ)對(duì)象的克隆的數(shù)據(jù)塊映射。
12.根據(jù)權(quán)利要求11所述的方法,所述方法進(jìn)一步包括: 如果所述克隆的數(shù)據(jù)塊與所述存儲(chǔ)對(duì)象的至少一個(gè)數(shù)據(jù)塊共享并且如果接收到包括相同的虛擬地址指針的所述克隆的另一個(gè)數(shù)據(jù)塊的寫分配,則指派與對(duì)應(yīng)于所述數(shù)據(jù)塊的所述虛擬地址指針的虛擬地址指針配對(duì)的來(lái)自所述數(shù)據(jù)塊映射的物理地址指針。
13.根據(jù)權(quán)利要求8所述的方法,所述方法進(jìn)一步包括: 接收用于所述存儲(chǔ)對(duì)象的克隆的分離操作,所述分離操作指示與所述存儲(chǔ)對(duì)象的至少一個(gè)數(shù)據(jù)塊共享的所述克隆的所有數(shù)據(jù)塊,對(duì)所述克隆的數(shù)據(jù)塊的所述指示導(dǎo)致所指示的數(shù)據(jù)塊的寫分配。
14.根據(jù)權(quán)利要求8所述的方法,其中所述存儲(chǔ)聚合包括多個(gè)存儲(chǔ)設(shè)備之上的地址空間。
15.一種系統(tǒng),包括至少一`個(gè)處理器和存儲(chǔ)器,用于管理存儲(chǔ)系統(tǒng)上的數(shù)據(jù),所述存儲(chǔ)系統(tǒng)為包括多個(gè)共享數(shù)據(jù)塊的至少一個(gè)經(jīng)消重的存儲(chǔ)卷提供數(shù)據(jù)存儲(chǔ),每個(gè)數(shù)據(jù)塊包括虛擬地址和物理地址,所述系統(tǒng)包括: 所述存儲(chǔ)系統(tǒng)被配置用于: 創(chuàng)建經(jīng)消重的存儲(chǔ)卷的克隆,所述克隆包括多個(gè)數(shù)據(jù)塊,包括與經(jīng)消重的存儲(chǔ)卷的至少一個(gè)數(shù)據(jù)塊共享的至少一個(gè)數(shù)據(jù)塊; 接收用于所述克隆的分離操作,所述分離操作包括用于與經(jīng)消重的存儲(chǔ)卷的至少一個(gè)數(shù)據(jù)塊共享的所述克隆的每個(gè)數(shù)據(jù)塊的寫分配;以及 通過(guò)為所述克隆的數(shù)據(jù)塊的每個(gè)虛擬地址僅指派一次新的物理地址來(lái)保留所述克隆的數(shù)據(jù)塊的消重。
16.根據(jù)權(quán)利要求15所述的系統(tǒng),其中如果第一數(shù)據(jù)塊和第二數(shù)據(jù)塊均包括相同的虛擬地址和相同的物理地址,則所述第一數(shù)據(jù)塊和所述第二數(shù)據(jù)塊被共享。
17.根據(jù)權(quán)利要求16所述的系統(tǒng),其中所述虛擬地址包括指向所述克隆的地址空間內(nèi)的位置的指針,并且所述物理地址包括指向包括多個(gè)存儲(chǔ)設(shè)備的存儲(chǔ)聚合內(nèi)的位置的指針。
18.一種非臨時(shí)計(jì)算機(jī)可讀介質(zhì),承載用于管理存儲(chǔ)系統(tǒng)上的數(shù)據(jù)的一個(gè)或多個(gè)指令,所述存儲(chǔ)系統(tǒng)為包括多個(gè)共享數(shù)據(jù)塊的至少一個(gè)經(jīng)消重的存儲(chǔ)卷提供數(shù)據(jù)存儲(chǔ),每個(gè)數(shù)據(jù)塊包括虛擬地址和物理地址,其中所述一個(gè)或多個(gè)指令當(dāng)由一個(gè)或多個(gè)處理器運(yùn)行時(shí),使所述一個(gè)或多個(gè)處理器執(zhí)行以下步驟: 創(chuàng)建經(jīng)消重的存儲(chǔ)卷的克隆,所述克隆包括多個(gè)數(shù)據(jù)塊,包括與經(jīng)消重的存儲(chǔ)卷的至少一個(gè)數(shù)據(jù)塊共享的至少一個(gè)數(shù)據(jù)塊; 接收用于所述克隆的分離操作,所述分離操作包括用于與經(jīng)消重的存儲(chǔ)卷的至少一個(gè)數(shù)據(jù)塊共享的所述克隆的每個(gè)數(shù)據(jù)塊的寫分配;以及 通過(guò)為所述克隆的數(shù)據(jù)塊的每個(gè)虛擬地址僅指派一次新的物理地址來(lái)保留所述克隆的數(shù)據(jù)塊的消重。
19.根據(jù)權(quán)利要求18所述的非臨時(shí)計(jì)算機(jī)可讀介質(zhì),其中如果第一數(shù)據(jù)塊和第二數(shù)據(jù)塊均包括相同的虛擬地址和相同的物理地址,則所述第一數(shù)據(jù)塊和所述第二數(shù)據(jù)塊被共享。
20.根據(jù)權(quán)利要求19所述的非臨時(shí)計(jì)算機(jī)可讀介質(zhì),其中所述虛擬地址包括指向所述克隆的地址空間內(nèi)的位置的指針,并且所述物理地址包括指向包括多個(gè)存儲(chǔ)設(shè)備的存儲(chǔ)聚合內(nèi)的位置的指針。`
【文檔編號(hào)】G06F12/02GK103890738SQ201280052979
【公開(kāi)日】2014年6月25日 申請(qǐng)日期:2012年4月26日 優(yōu)先權(quán)日:2011年8月30日
【發(fā)明者】B.拉伊, A.沙馬 申請(qǐng)人:網(wǎng)絡(luò)存儲(chǔ)技術(shù)公司