專利名稱:計(jì)算機(jī)存儲(chǔ)去復(fù)制操作的制作方法
技術(shù)領(lǐng)域:
本發(fā)明一般地涉及計(jì)算機(jī)存儲(chǔ)去復(fù)制(deduplication)操作。
背景技術(shù):
典型的計(jì)算機(jī)文件系統(tǒng)在固定尺寸的小塊中存儲(chǔ)文件數(shù)據(jù),其中固定尺寸的小塊 被與每個(gè)文件相關(guān)聯(lián)的元數(shù)據(jù)中維護(hù)的指針?biāo)赶?。在兩個(gè)指針指向相同塊的情況下, 通過(guò)改變一個(gè)或兩個(gè)指針使得它們指向同一塊可以回收一些存儲(chǔ)空間。找到指向相同塊 的指針并且隨后改變一個(gè)或兩個(gè)指針使得他們指向同一塊的過(guò)程在這里被稱作"去復(fù)制 (deduplication)"。這種去復(fù)制通常由控制宿主計(jì)算機(jī)對(duì)存儲(chǔ)介質(zhì)的訪問(wèn)的入口連接器 (gateway)執(zhí)行。 本申請(qǐng)要求了于2008年9月11日遞交的美國(guó)臨時(shí)申請(qǐng)No. 61/096,258的權(quán)益。
發(fā)明內(nèi)容
根據(jù)本發(fā)明的一個(gè)方面,本發(fā)明提供了一種數(shù)據(jù)中心,包括多個(gè)計(jì)算機(jī)主機(jī)以及 所述主機(jī)外部的存儲(chǔ)系統(tǒng),所述存儲(chǔ)系統(tǒng)包括用于存儲(chǔ)有形編碼數(shù)據(jù)塊的存儲(chǔ)塊,所述主 機(jī)中的每個(gè)包括安裝有去復(fù)制文件系統(tǒng)驅(qū)動(dòng)器的主機(jī)操作系統(tǒng),文件系統(tǒng)驅(qū)動(dòng)器,以下說(shuō) 明書和附圖中簡(jiǎn)稱為"文件系統(tǒng)",標(biāo)識(shí)出相應(yīng)存儲(chǔ)塊中存儲(chǔ)的相同數(shù)據(jù)塊。文件系統(tǒng)將這 些相同數(shù)據(jù)塊合并成單個(gè)存儲(chǔ)塊,從而由第一主機(jī)排他訪問(wèn)的第一文件和由第二主機(jī)排他 訪問(wèn)的第二文件同時(shí)指向同一存儲(chǔ)塊。 根據(jù)本發(fā)明的另一方面,本發(fā)明提供了一種包括計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)的制品,所 述計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)編碼有計(jì)算機(jī)可執(zhí)行指令的文件系統(tǒng),所述文件系統(tǒng)在宿主計(jì)算機(jī) 系統(tǒng)上運(yùn)行時(shí)連接到存儲(chǔ)系統(tǒng)管理文件,包括在所述存儲(chǔ)系統(tǒng)中編碼的共享塊文件。所述 文件包含有形編碼的指向包含有形編碼數(shù)據(jù)塊的存儲(chǔ)塊的元數(shù)據(jù)指針,所述共享塊文件具 有指向由多個(gè)所述元數(shù)據(jù)指針指向的塊的元數(shù)據(jù)指針,所述文件系統(tǒng)包括用于更新哈希值 索引的寫日志處理器,所述哈希值索引具有通過(guò)所述共享塊文件間接指向共享存儲(chǔ)塊的共 享?xiàng)l目集,并且具有通過(guò)所述共享塊文件之外的所述文件間接指向非共享存儲(chǔ)塊的非共享 條目集,所述哈希值索引被有形編碼在所述存儲(chǔ)系統(tǒng)上。 根據(jù)本發(fā)明的又一方面,本發(fā)明提供了一種方法,包括第一文件系統(tǒng)在第一宿主 計(jì)算機(jī)系統(tǒng)上執(zhí)行,所述第一文件系統(tǒng)通過(guò)以下操作來(lái)管理向存儲(chǔ)系統(tǒng)上的第一文件的第 一寫操作將第一數(shù)據(jù)塊寫入所述存儲(chǔ)系統(tǒng)的第一存儲(chǔ)塊并使所述第一文件的第一元數(shù)據(jù) 指針指向所述第一存儲(chǔ)塊;第二文件系統(tǒng)在第二宿主計(jì)算機(jī)系統(tǒng)上執(zhí)行,所述第二文件系 統(tǒng)通過(guò)以下操作來(lái)管理向存儲(chǔ)系統(tǒng)上的第二文件的第二寫操作將第二內(nèi)容寫入所述存儲(chǔ) 系統(tǒng)的第二塊并使所述第二文件的第二元數(shù)據(jù)指針指向所述第二塊;并且所述第二文件管 理器確定所述第二內(nèi)容是否與所述第一 內(nèi)容相同;以及如果所述第二內(nèi)容與所述第一 內(nèi)容 相同,那么所述第二文件管理器使得所述第二元數(shù)據(jù)指針指向所述第一塊。
圖1是根據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)中心的簡(jiǎn)要示圖。 圖2是根據(jù)本發(fā)明實(shí)施例的方法流程圖。圖2重點(diǎn)示出了與寫操作相關(guān)聯(lián)的步驟。 圖3是圖1數(shù)據(jù)中心更為詳細(xì)的示圖。 圖4是圖1數(shù)據(jù)中心的一對(duì)文件集的簡(jiǎn)要框圖。 圖5是圖2方法的去復(fù)制步驟的流程圖。圖5重點(diǎn)示出了與找到寫記錄和哈希值 索引條目之間的匹配相關(guān)的步驟。 圖6是圖2方法的去復(fù)制步驟的流程圖。圖6重點(diǎn)示出了與處理指向可變塊指針 的匹配相關(guān)的步驟。這些步驟可以包括發(fā)出合并請(qǐng)求。 圖7是圖2方法的去復(fù)制步驟的流程圖。圖7重點(diǎn)示出了圖2方法的合并請(qǐng)求處 理步驟。 圖8是圖2方法的去復(fù)制步驟的流程圖。圖8重點(diǎn)示出了與處理指向?qū)憰r(shí)拷貝 (copy-onirite)塊指針的匹配相關(guān)的步驟。 圖9是圖2方法的去復(fù)制步驟的流程圖。圖9重點(diǎn)示出了圖2方法的清理步驟。
圖10A和10B分別示出了根據(jù)本發(fā)明實(shí)施例的Inode節(jié)點(diǎn)。
具體實(shí)施例方式
圖1中描述了實(shí)現(xiàn)本發(fā)明的數(shù)據(jù)中心AP1。數(shù)據(jù)中心AP1包括主機(jī)HA和HB以及 存儲(chǔ)陣列網(wǎng)絡(luò)(SAN) 11形式的存儲(chǔ)系統(tǒng)。主機(jī)HA包括硬件13A,硬件13A包括處理器14A、 介質(zhì)15A和通信設(shè)備16A。計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)15A編碼有計(jì)算機(jī)可執(zhí)行指令程序,包括應(yīng) 用17A、操作系統(tǒng)(OS) 19A以及去復(fù)制文件系統(tǒng)20A。這里,"介質(zhì)"指的是有形計(jì)算機(jī)可讀 存儲(chǔ)介質(zhì),是一類制品。"介質(zhì)"包括硬盤、光盤以及固態(tài)存儲(chǔ)設(shè)備。應(yīng)用17A運(yùn)行在操作系 統(tǒng)19A上,其使用文件系統(tǒng)20A訪問(wèn)SAN 11。主機(jī)HB類似地包括硬件13B、處理器14B、介 質(zhì)15B、通信設(shè)備16B、應(yīng)用17B、操作系統(tǒng)19B以及去復(fù)制文件系統(tǒng)20B。
如本領(lǐng)域普通技術(shù)人員將猜測(cè)到的,本發(fā)明適用于多種數(shù)據(jù)中心以及其他的計(jì)算 機(jī)系統(tǒng)拓?fù)浣Y(jié)構(gòu)。本發(fā)明適用于具有多個(gè)主機(jī)的數(shù)據(jù)中心,并且主機(jī)彼此可以不同,例如在 涉及的硬件類型和供電方面、在運(yùn)行的操作系統(tǒng)和應(yīng)用的類型與數(shù)量方面、以及聯(lián)網(wǎng)主機(jī) 的方案方面可以不同。例如,使用虛擬機(jī)技術(shù),一個(gè)主機(jī)可以在相應(yīng)的操作系統(tǒng)中運(yùn)行若干 應(yīng)用,所有應(yīng)用共享相同的文件系統(tǒng)。 應(yīng)用17A和17B與操作系統(tǒng)19A和19B在諸如文件FA、 FB和FC的文件中存儲(chǔ)數(shù) 據(jù)。文件系統(tǒng)20A和20B將數(shù)據(jù)劃分成固定尺寸的塊,在本實(shí)施例中為4kB,并且將其作為 數(shù)據(jù)塊D1-DN存儲(chǔ)在相應(yīng)的存儲(chǔ)塊B1-BN中。文件通過(guò)元數(shù)據(jù)塊指針與其內(nèi)容相關(guān)聯(lián)。例 如,文件FA包括與文件FA內(nèi)的偏移位置相關(guān)聯(lián)的塊指針PA1。塊指針PA1指向包含數(shù)據(jù) 塊D1的存儲(chǔ)塊B1。(注意虛箭頭代表指針與塊的先前關(guān)聯(lián),而實(shí)箭頭代表指針與塊的當(dāng) 前關(guān)聯(lián)。)文件通常具有許多指針,并且他們中的不只一個(gè)可以指向給定的存儲(chǔ)塊。例如, 文件FA包括指針PA2和PA3,PA2和PA3都指向存儲(chǔ)塊B2。還可以是來(lái)自不同文件的指針 指向同一塊。例如,文件FA的指針PA4和文件FB的指針PB1都指向存儲(chǔ)塊B4。
如雙向箭頭21和23所指示的那樣,主機(jī)HA和HB與SAN 11的通信很大程度上是 獨(dú)立的。為防止文件訪問(wèn)沖突,主機(jī)HA和HB被防止同時(shí)訪問(wèn)同一文件。為此目的,每個(gè)文件包括可以由主機(jī)擁有的鎖。盡管文件在任意給定時(shí)間至多可以由一個(gè)主機(jī)訪問(wèn),但是主 機(jī)HA和HB通過(guò)釋放和取得鎖可以分時(shí)共享(在不同的時(shí)刻訪問(wèn))文件(例如文件FC)。 出于記憶和說(shuō)明的目的,兩個(gè)文件在這里被認(rèn)為由相應(yīng)的主機(jī)"永久性"擁有主機(jī)HA永久 性擁有鎖LA,從而主機(jī)HB永遠(yuǎn)不能訪問(wèn)文件FA ;類似地,主機(jī)HB永久性擁有鎖LB,從而主 機(jī)HA永遠(yuǎn)不能訪問(wèn)文件FB。"永久性"這里指的是"這里所討論的整個(gè)期間段內(nèi)"。
在數(shù)據(jù)中心AP1中,去復(fù)制被分散。每個(gè)主機(jī)HA、 HB具有其自己的去復(fù)制文件系 統(tǒng)20A、20B。與集中化方式相比,這具有若干優(yōu)點(diǎn)。不需要專門軟件來(lái)處理去復(fù)制。不存在 可能成為數(shù)據(jù)中心AP1故障單點(diǎn)或瓶頸的中央主機(jī)。此外,本發(fā)明可以方便地?cái)U(kuò)展,因?yàn)樘?加更多的主機(jī)必然為去復(fù)制功能貢獻(xiàn)更多資源。 根據(jù)以下示例可以實(shí)現(xiàn)去復(fù)制。在去復(fù)制之前,指針PA2指向存儲(chǔ)塊B2,進(jìn)而指向 數(shù)據(jù)塊D2,而指針PA3指向存儲(chǔ)塊B3,進(jìn)而指向數(shù)據(jù)塊D3。在去復(fù)制操作25期間,確定數(shù) 據(jù)塊D3與數(shù)據(jù)塊D2等同。通過(guò)改變塊指針PA3使得其指向存儲(chǔ)塊B2,數(shù)據(jù)塊D3隨后與存 儲(chǔ)塊B2中的數(shù)據(jù)塊D2有效合并。存儲(chǔ)塊B3因此被解放以做他用。去復(fù)制操作25是由主 機(jī)HA執(zhí)行的,而其能夠?qū)ξ募﨔A進(jìn)行排他訪問(wèn),文件FA以元數(shù)據(jù)形式包括操作25中涉及 的所有塊指針。 然而,本發(fā)明不需要一個(gè)主機(jī)能夠訪問(wèn)去復(fù)制操作中涉及的兩個(gè)文件。例如,主 機(jī)HA可以發(fā)現(xiàn)存儲(chǔ)塊B5和存儲(chǔ)塊B4很可能包含等同的數(shù)據(jù)塊,即使沒(méi)有主機(jī)HA能夠訪 問(wèn)的文件指向存儲(chǔ)塊B5??梢酝ㄟ^(guò)去復(fù)制專用文件27來(lái)作出上述可能等同物的發(fā)現(xiàn)。主 機(jī)HA可以通過(guò)發(fā)出合并請(qǐng)求并將其存儲(chǔ)在去復(fù)制專用文件27之一中來(lái)記錄這個(gè)可能等同 物。 一旦主機(jī)HB可以獲得對(duì)合并請(qǐng)求的訪問(wèn),主機(jī)HB可以確定提出的等同物是否有效,如 果有效,那么將塊指針PB1(主機(jī)HB能夠訪問(wèn)該指針)改變成指向存儲(chǔ)塊B4以實(shí)現(xiàn)去復(fù)制 操作29。因此,盡管獨(dú)立行動(dòng),主機(jī)HA和HB可以通過(guò)分時(shí)共享去復(fù)制專用文件27來(lái)合作 實(shí)現(xiàn)去復(fù)制操作。 由于存儲(chǔ)系統(tǒng)通常處理的存儲(chǔ)塊數(shù)量巨大,對(duì)每對(duì)可能的塊進(jìn)行比較以找到可能 的復(fù)制件是不可行的。然而,由于新復(fù)制件僅(或者至少主要)在寫操作的上下文中出現(xiàn), 可以通過(guò)跟蹤寫操作來(lái)標(biāo)識(shí)出去復(fù)制候選者。在本發(fā)明的實(shí)施例中,作為寫操作的一部分, 每個(gè)塊被檢查以尋找可能的匹配。然而,圖示的實(shí)施例監(jiān)視寫操作,但是延遲去復(fù)制操作直 到對(duì)計(jì)算資源的需求相對(duì)較低的時(shí)候才進(jìn)行,從而最小化對(duì)應(yīng)用17A和17B的任何性能干 擾。 寫操作 因此,在如圖2以流程圖示出的方法ME1中,文件系統(tǒng)20A在寫操作S1A期間監(jiān)視 在主機(jī)HA上發(fā)起的寫操作,并且稍后執(zhí)行去復(fù)制操作S2A。文件系統(tǒng)20A在SAN 11上以 4kB塊的形式存儲(chǔ)信息。(如下文進(jìn)一步解釋的,文件系統(tǒng)20A以分層級(jí)的方式使用1MB和 4KB塊。) 在步驟S11A處,應(yīng)用17A發(fā)起例如數(shù)據(jù)向文件FA的寫操作。寫操作涉及將數(shù)據(jù) 寫入存儲(chǔ)在SAN ll上的文件中的位置。由應(yīng)用17A發(fā)起的寫操作可以是1)限于單個(gè)塊; 或者2)涵蓋多個(gè)塊或者至少跨越塊邊界。在后一種情形中,文件系統(tǒng)20A將寫操作分成單 塊子操作,其中每個(gè)子操作如下文所描述的被看作單塊寫操作。類似地,應(yīng)用17A聲明的寫 地址的范圍被轉(zhuǎn)換為文件指針。每個(gè)文件指針規(guī)定文件標(biāo)識(shí)符(文件ID)和偏移值(指示
7指定文件內(nèi)的位置)。與每個(gè)這樣的文件位置相關(guān)聯(lián)的是定義指向4kB存儲(chǔ)塊(B1-BN)的 塊指針的元數(shù)據(jù)。 在步驟S12A,文件系統(tǒng)20A檢測(cè)到寫操作并生成寫記錄。在過(guò)程中,文件系統(tǒng)20A 生成數(shù)據(jù)塊的哈希值并且將其與來(lái)自寫請(qǐng)求的文件指針相關(guān)聯(lián)。在圖示的實(shí)施例中,寫記 錄僅為整個(gè)塊被重寫的寫操作生成。沒(méi)有寫記錄以及確定的去復(fù)制響應(yīng)于部分塊的寫操作 而發(fā)生。在另一實(shí)施例中,對(duì)于寫操作僅涉及塊的一部分的情形,塊的其余部分必須被讀取 以生成哈希值。文件系統(tǒng)20A使用生成160位哈希值的SHA-1算法,也被稱為"指紋"、"簽 名"和"文摘",因此與4kB值對(duì)照,比較是在20字節(jié)的值之間進(jìn)行的。具有不同哈希值的 兩個(gè)塊一定不同。SHA-1是抗沖突的(collisionresistant),因此不太可能兩個(gè)具有相同 哈希值的塊將不同。為了防止錯(cuò)配的可能,可以有選擇地使用整個(gè)塊的逐位比較以確認(rèn)哈 希值比較所指示的匹配。SHA-1哈希值還具有與安全性相關(guān)的加密屬性,這使得很難從其哈 希值確定塊。另一實(shí)施例使用其他哈希算法,例如SHA-2和MD5。 在步驟S13A處,文件系統(tǒng)20A訪問(wèn)文件系統(tǒng)20A從應(yīng)用17A規(guī)定的寫地址范圍生 成的文件指針?biāo)赶虻膲K指針。因此,例如,對(duì)于塊D4向文件FA的寫入以及與塊指針PA4 相關(guān)聯(lián)的偏移,主機(jī)HA將訪問(wèn)塊指針PA4。 文件系統(tǒng)20A和20B區(qū)分寫時(shí)拷貝(C0W)塊指針和"可變"塊指針??勺冾愋椭?針指示目標(biāo)存儲(chǔ)塊可以被重寫。COW類型指針指示目標(biāo)存儲(chǔ)塊不能被重寫。例如,諸如圖l 中的B2的被不只一個(gè)塊指針(PA2和PA3)指向的存儲(chǔ)塊通常不能被重寫。作為替代,其內(nèi) 容可以被拷貝到空閑的存儲(chǔ)塊,該存儲(chǔ)塊隨后可以被重寫而無(wú)需無(wú)效其他指針。在另一實(shí) 施例中,存儲(chǔ)塊引用計(jì)數(shù)而非指針類型確定是否可以適當(dāng)?shù)貓?zhí)行寫操作。
在步驟S14A處,文件系統(tǒng)20A確定1)寫操作能適當(dāng)?shù)貓?zhí)行,即,目標(biāo)塊可以被重 寫;還是2)寫操作必須在目標(biāo)塊的拷貝上執(zhí)行,例如因?yàn)橹赶蛟搲K的其他文件期望其保持 不變。在圖示的實(shí)施例中,該確定是通過(guò)檢查步驟S13A中訪問(wèn)的塊指針的C0W和可變類型 而作出的。如果指針是可變的,那么在步驟S15A處寫操作中規(guī)定的數(shù)據(jù)塊重寫所指向的 存儲(chǔ)塊的內(nèi)容。如果塊指針類型為COW,那么執(zhí)行寫時(shí)拷貝操作并在步驟S16A處將數(shù)據(jù)塊 寫入空閑的存儲(chǔ)塊。在步驟S17A處,S13A中訪問(wèn)的塊指針被改變以指向新的存儲(chǔ)塊;其類 型仍是"可變"。在步驟S18A處,與新使用的存儲(chǔ)塊相關(guān)聯(lián)的存儲(chǔ)塊引用計(jì)數(shù)從"0"("空 閑")遞增至"l"("唯一")。并且,在步驟S18A處,與拷貝源塊相關(guān)聯(lián)的存儲(chǔ)塊引用計(jì)數(shù) 遞減,因?yàn)橹赶蛩膲K指針少了一個(gè)。 在步驟S19A處,步驟S12A中生成的寫記錄被從主機(jī)HA傳送到SAN11。典型地,寫 記錄在主機(jī)處累積,其中在主機(jī)處他們由目的地文件組織。寫記錄隨后被傳送到SAN ll上 的寫日志以用于他們相應(yīng)的文件。寫記錄隨后在去復(fù)制操作S2A期間使用,通常被安排在 低利用時(shí)間,例如2am。方法ME1類似地提供步驟S1B、 S2B和S11B-S19B用以實(shí)現(xiàn)主機(jī)HB 的操作。 數(shù)據(jù)中心細(xì)節(jié) 如圖3所示,用于主機(jī)HA的文件系統(tǒng)20A包括寫記錄器31A和去復(fù)制器33A。寫 記錄器31A生成寫記錄并且將它們暫時(shí)存儲(chǔ)在主機(jī)HA上的日志緩沖器35A中。去復(fù)制器 33A包括調(diào)度器37A、寫日志處理器39A和合并請(qǐng)求處理器43A,其中寫日志處理器39A包 括合并請(qǐng)求生成器41A。主機(jī)HB的文件系統(tǒng)20B類似地包括帶有緩沖器35B的寫記錄器31B、去復(fù)制器33B、調(diào)度器37B、帶有合并請(qǐng)求生成器41B的寫日志處理器39B、以及合并請(qǐng) 求處理器44B。 SAN 11包括包括塊Bl和B2在內(nèi)的存儲(chǔ)塊、包括文件集FSA和FSB的文件集、哈 希值索引45、以及共享塊或"池"文件FP。哈希值索引45、池文件FP、寫日志W(wǎng)LA和WLB、以 及合并日志MLA和MLB是去復(fù)制專用文件FS(圖1)的示例。每個(gè)文件集包括"特性"文件 (例如文件集FSA的文件FA),并且還可以包括關(guān)聯(lián)的寫日志文件(例如寫日志W(wǎng)LA)和/ 或關(guān)聯(lián)的合并日志文件(例如合并日志MLA)。前面句子中出現(xiàn)詞語(yǔ)"可以"是因?yàn)?)當(dāng) 不存在與特性文件相關(guān)聯(lián)的寫記錄的時(shí)候,文件集不包括寫日志文件;以及2)如果不存在 與特性文件相關(guān)聯(lián)的合并請(qǐng)求,那么文件集不包括合并日志文件。另一實(shí)施例提供了空的 寫日志文件和空的合并日志文件。 寫日志(例如寫日志W(wǎng)LA和WLB)和合并日志(例如合并日志MLA和MLB)是具有 與特性文件類似結(jié)構(gòu)的文件。換句話說(shuō),他們的內(nèi)容(包括寫記錄和合并請(qǐng)求)是以數(shù)據(jù) 塊的形式安排的,而數(shù)據(jù)塊又被存儲(chǔ)在存儲(chǔ)塊B1-BN中。寫日志和合并日志包括指向存儲(chǔ) 寫記錄和合并請(qǐng)求的存儲(chǔ)塊的元數(shù)據(jù)塊指針。處于說(shuō)明的目的,這里從物理方面(例如,帶 有元數(shù)據(jù)塊指針)考量特性文件(例如FA和FB),而從邏輯方面(S卩,具有對(duì)內(nèi)容的直接引 用)考量輔助文件(例如寫日志和合并日志)。 當(dāng)存儲(chǔ)寫記錄時(shí)對(duì)寫日志W(wǎng)LA和WLB進(jìn)行寫入,并且當(dāng)在去復(fù)制期間處理那些記 錄時(shí)從寫日志W(wǎng)LA和WLB讀取。并且還對(duì)寫日志W(wǎng)LA和WLB進(jìn)行讀取以發(fā)現(xiàn)可以被清理的 哈希值索引條目。寫日志文件的所有權(quán)遵從關(guān)聯(lián)主文件的所有權(quán)。因此,例如只要主機(jī)HA 具有對(duì)文件FA的排他訪問(wèn)權(quán),它就具有對(duì)寫日志W(wǎng)LA的排他訪問(wèn)權(quán)。 不管關(guān)聯(lián)主文件是否可訪問(wèn),主機(jī)HA和HB都可以在分時(shí)共享基礎(chǔ)上(S卩,在不同 的時(shí)刻,主機(jī)HA和主機(jī)HB都具有對(duì)這些去復(fù)制專用文件的排他訪問(wèn)權(quán))訪問(wèn)所有其它去 復(fù)制專用文件。例如,主機(jī)HA可以在分時(shí)共享的基礎(chǔ)上訪問(wèn)合并請(qǐng)求日志MLB,即使它根本 不能訪問(wèn)文件FB。這使得主機(jī)HA可以存儲(chǔ)由主機(jī)HB處理的合并請(qǐng)求。
圖4中更詳細(xì)地示出了文件集FSA和FSB。在圖4中,鑒于上面給出的原因,特性 文件FA和FB以其物理形式表示為塊指針,而輔助文件WLA、 WLB、 MLA和MLB以其邏輯形式 表示為內(nèi)容。具體而言,寫日志W(wǎng)LA包括寫記錄WA1和WA2,而寫日志W(wǎng)LB包括寫記錄WB1 和WB2。每個(gè)寫記錄WA1 、 WA2、 WB1 、 WB2包括哈希值HA1 、 HA2、 HB1 、 HB2 (對(duì)應(yīng)于被寫入的數(shù) 據(jù)塊)以及文件指針FA1、FA2、FB2、FB2(對(duì)應(yīng)于從操作系統(tǒng)19A和19B的觀點(diǎn)出發(fā)的寫目 的地)。寫日志用來(lái)基于每個(gè)目的地存儲(chǔ)寫操作的記錄以用于后續(xù)的去復(fù)制處理。
合并日志MLA包括合并請(qǐng)求MA1和MA2 ,而合并日志MLB包括合并請(qǐng)求MB1和MB2 。 每個(gè)合并請(qǐng)求MA1、MA2、MB1規(guī)定了兩個(gè)文件指針"本地"文件指針ML1、ML2、MBL,以及"池" 文件指針MP、MP2、MBP。本地文件指針指向關(guān)聯(lián)特性文件中的位置。例如,本地文件指針 ML1指向特性文件FA內(nèi)的偏移。(注意由于每個(gè)輔助文件(寫日志或合并日志)僅與一個(gè) 特性文件相關(guān)聯(lián),所以本地文件指針僅需明確規(guī)定偏移。)池文件指針指向池文件FP內(nèi)的 位置。 本地文件指針和池文件指針直接指向具有關(guān)聯(lián)塊指針的文件位置。因此,本地文 件指針和池文件指針間接指向存儲(chǔ)塊。在另一實(shí)施例中,合并請(qǐng)求包括來(lái)自池文件的塊指 針而非池文件塊指針。換句話說(shuō),在另一實(shí)施例中,合并請(qǐng)求直接指向而非通過(guò)中間文件(例如FA或FB)間接指向存儲(chǔ)塊。 哈希值索引45,盡管是在延遲的基礎(chǔ)上,用做所有已使用存儲(chǔ)塊的主列表。哈希值索引45包括將哈希值分配給文件指針的條目47、49等。文件指針指向與關(guān)聯(lián)于下述存儲(chǔ)塊的塊指針相關(guān)聯(lián)的文件地址,其中存儲(chǔ)塊與哈希值所表示的數(shù)據(jù)塊相關(guān)聯(lián)。換句話說(shuō),哈希值索引45利用存儲(chǔ)塊的內(nèi)容對(duì)存儲(chǔ)塊間接索引。 哈希值索引45被劃分成水平碎片(horizontal shard) 51和53。每個(gè)碎片覆蓋預(yù)定范圍的哈希值,例如,碎片51包括以"0"開(kāi)始的值,而碎片53包括以"l"開(kāi)始的哈希值。劃分哈希值索引使得主機(jī)HA和HB 二者可以同時(shí)訪問(wèn)相應(yīng)的碎片,并且隨后切換使得每個(gè)主機(jī)可以訪問(wèn)所有條目。對(duì)于更大數(shù)目的主機(jī),劃分哈希值索引所得碎片的數(shù)量可以更多,使得所有或大多數(shù)主機(jī)可以同時(shí)訪問(wèn)哈希值索弓I的相應(yīng)部分。 在另一實(shí)施例中,每個(gè)哈希值索引明確與指向同一塊的相應(yīng)塊指針的所有文件指針的列表相關(guān)聯(lián)。在圖示的實(shí)施例中,對(duì)于每個(gè)哈希值僅列出一個(gè)文件指針。對(duì)于與不只一個(gè)塊指針相關(guān)聯(lián)的哈希值,關(guān)聯(lián)的文件指針指向池文件位置。與該池文件位置相關(guān)聯(lián)的塊指針指向那些塊指針引用的共同塊。 池文件FP,與其它文件FA和FB類似,包括鎖LP和塊指針PS 1和PS2?;旧希V邓饕龡l目(例如47、49)指向池文件或其它文件。指向池文件FP的哈希值索引條目指向COW類型塊指針,而指向其它文件的哈希值索引條目指向可變類型塊指針。COW類型指針指向被共享的塊;可變塊類型指針指向未被共享的塊。在另一實(shí)施例中,不存在池文件,并且哈希值索引條目列出與共享塊相關(guān)聯(lián)的所有文件指針。
找到匹配 在可以合并存儲(chǔ)塊內(nèi)容之前,必須確定它們相同。為此,比較內(nèi)容的哈希值。更具體地說(shuō),寫記錄中的哈希值與哈希值索引45中可能匹配的哈希值相比較。因此,如圖5中所示,步驟S20A涉及獲得對(duì)哈希值索引45或者至少其碎片51、53之一的排他訪問(wèn)權(quán)。在一個(gè)或多個(gè)實(shí)施例中,在找到哈希值匹配之后,塊的內(nèi)容被比較以防止錯(cuò)配。
在步驟S21A處,文件系統(tǒng)20A例如通過(guò)檢查鎖進(jìn)而標(biāo)識(shí)出主機(jī)HA具有排他訪問(wèn)權(quán)的文件。在步驟S22A處,寫日志處理器39A訪問(wèn)可訪問(wèn)文件的寫日志中的寫記錄;只有那些具有在被訪問(wèn)碎片范圍內(nèi)的哈希值的寫記錄被處理,直到不同的碎片被訪問(wèn)。在哈希值索引未被劃分成碎片的實(shí)施例中,所有可訪問(wèn)的寫記錄可以被訪問(wèn)。即使在哈希值未被分成碎片的實(shí)施例中,哈希值也可被排序,使得僅僅哈希值條目的一部分需要被檢查以成立"未命中"(無(wú)匹配索引條目)。 在步驟S23A處,對(duì)于每個(gè)寫記錄,確定記錄中的哈希值是否匹配哈希值索引45中的哈希值。如果不存在匹配,那么對(duì)應(yīng)于寫記錄的數(shù)據(jù)塊是唯一的。去復(fù)制是不可能的。然而,哈希值索引在步驟S24A處被更新以包括對(duì)應(yīng)于該寫記錄的新條目。條目包括寫記錄的文件指針和哈希值。這完成了對(duì)所針對(duì)寫記錄的處理。下面的步驟是在步驟S25A處處理合并請(qǐng)求以及清理去復(fù)制專用文件FD。這兩個(gè)步驟將在下文進(jìn)一步討論。
如果在步驟S23A處找到匹配,那么在步驟S27A處訪問(wèn)與哈希值索引中的哈希值相關(guān)聯(lián)的文件指針。參考圖4,寫記錄WA1的哈希值HA1匹配索引條目47中的哈希值HB1。當(dāng)他們哈希值相等的時(shí)候,寫記錄匹配索引條目。寫記錄文件指針FA1匹配索引條目文件指針FBI是不需要的也是不太可能的。注意步驟S20A-S27A具有主機(jī)HB的對(duì)應(yīng)步驟S20B-S27B。 寫記錄文件指針FA1規(guī)定文件(文件FA)和塊指針PA4所位于的該文件中的偏移。
塊指針PA4指向包含數(shù)據(jù)塊D4的存儲(chǔ)塊B4。這里,"WR文件"、"WR偏移"、"WR塊指針"、"WR
存儲(chǔ)塊"和"WR數(shù)據(jù)塊"均指向?qū)懹涗浺?guī)定或直接或間接指向的條目。類似地,前綴"IE"指
向原始形式下的索引條目文件指針規(guī)定或指向的條目。如果索引條目文件指針已被修改,
那么使用前綴"RE"。 指向唯一存儲(chǔ)塊的匹配 實(shí)際上,不匹配任何預(yù)先存在的索引條目的寫記錄自己被輸入到哈希值索引45中。最初,新條目規(guī)定寫記錄規(guī)定的相同文件指針(文件和偏移)。該條目保持不變直到其被另一寫記錄所匹配。同時(shí),IE文件指針指向原始的可變類型WR塊指針,而原始可變類型WR塊指針又指向WR存儲(chǔ)塊。然而,由于WR塊指針是可變的,所以WR數(shù)據(jù)塊可能在生成寫記錄的時(shí)間與識(shí)別出匹配的時(shí)間期間已被重寫。在這種情況下,WR哈希值和IE哈希值之間的匹配是過(guò)時(shí)的。 如果處理寫記錄的主機(jī)不能訪問(wèn)IE文件,那么主機(jī)將不能確定哈希值索引條目是否是過(guò)時(shí)的。例如,如果主機(jī)HA正在處理用于文件FA的寫記錄,并且如果該寫記錄匹配指向文件FB的哈希值索引條目,那么如果想要確定索引條目的有效性,則主機(jī)HA實(shí)際上將需要主機(jī)HB的幫助。然而,由于主機(jī)HA和HB獨(dú)立訪問(wèn)SAN 11,這個(gè)合作不能依賴于合作動(dòng)作。相反,主機(jī)HA通過(guò)將其塊指針拷貝到池文件FP并將去復(fù)制任務(wù)的剩余部分以合并請(qǐng)求的形式傳送到主機(jī)HB,而使得其信息可用。 當(dāng)在步驟S27A處寫日志處理器39A確定IE文件不是池文件FP時(shí),在步驟S28A處繼續(xù)方法ME1,如圖6所示。盡管其不能訪問(wèn)IE文件,但是處理寫記錄的主機(jī)必須能夠訪問(wèn)WR文件和WR可變類型塊指針。該塊指針在步驟S28A處被訪問(wèn)。 在步驟S29A處,WR塊指針的類型從"可變"變?yōu)?C0W"。在步驟S30A處,該新的C0W類型WR塊指針被添加到池文件FP,從而其可被所有主機(jī)訪問(wèn)。由于WR文件和池文件現(xiàn)在共享WR存儲(chǔ)塊,因此其計(jì)數(shù)遞增至"2"。 在步驟S31A處,IE文件指針被改變成指向池文件。(注意正是此步驟得到如下推斷,即指向文件而非池文件FP的索引條目先前未被匹配。)該最終的修改條目RE文件指針現(xiàn)在指向WR存儲(chǔ)塊。例如,如果主機(jī)HA正在處理通過(guò)WR塊指針PA4指向WR存儲(chǔ)塊B4 (如圖1所示)的寫記錄,并且索引條目指向指向IE存儲(chǔ)塊B5的IE塊指針PB1,那么步驟S31A使得修改的條目通過(guò)池文件FP4指向RE存儲(chǔ)塊B4而非IE存儲(chǔ)塊B5。即使IE存儲(chǔ)塊B5已被重寫,RE數(shù)據(jù)塊(至少在寫記錄代表的寫操作的時(shí)候)也對(duì)應(yīng)于匹配IE哈希值。 由于對(duì)文件的訪問(wèn)是排他的,因此處理寫請(qǐng)求的主機(jī)一般將不能訪問(wèn)IE塊指針。如果主機(jī)不能訪問(wèn)IE文件,那么它不能標(biāo)識(shí)出IE存儲(chǔ)塊并且不能改變IE塊指針以匹配池文件中的一個(gè)(來(lái)自步驟S30A)。因此,通過(guò)發(fā)出合并請(qǐng)求并將其存儲(chǔ)在用于目標(biāo)文件的合并日志中,主機(jī)將這些任務(wù)的責(zé)任傳送到能夠訪問(wèn)IE文件的主機(jī)。例如,合并請(qǐng)求生成器41B可以在合并日志MLB中存儲(chǔ)合并請(qǐng)求,用以在步驟S25B處由主機(jī)HB的合并請(qǐng)求處理器43B進(jìn)行處理。類似地,主機(jī)HB的合并請(qǐng)求生成器41B可以在合并日志MLA中存儲(chǔ)合并請(qǐng)求,用以在步驟S25A處由主機(jī)HA的合并請(qǐng)求處理器43A進(jìn)行處理。
在另一實(shí)施例中,當(dāng)主機(jī)能夠訪問(wèn)索引條目指向的文件時(shí),主機(jī)完成匹配確認(rèn)。因此,只有當(dāng)處理寫記錄的主機(jī)無(wú)法訪問(wèn)索引條目引用的非池文件時(shí),才發(fā)出合并請(qǐng)求。
處理合并請(qǐng)求 如圖7所示,步驟S25A和S25B包括若干子步驟,這里稱為"步驟"。在步驟S34B處,主機(jī)HB訪問(wèn)用于主機(jī)HB可訪問(wèn)的文件的合并請(qǐng)求。如圖4所示,合并請(qǐng)求規(guī)定1) IE文件指針,以及2)池文件FP中的RE塊指針。RE塊指針指向WR存儲(chǔ)塊。問(wèn)題是IE數(shù)據(jù)塊是否匹配WR/RE數(shù)據(jù)塊。在步驟S35B處,IE和RE塊的內(nèi)容例如通過(guò)生成并比較它們的哈希值而被比較。 如果比較確認(rèn)IE數(shù)據(jù)塊和RE數(shù)據(jù)塊不相同,那么在步驟S36B處主機(jī)HB丟棄合并請(qǐng)求而不執(zhí)行任何去復(fù)制。IE塊指針和IE存儲(chǔ)塊響應(yīng)于合并請(qǐng)求保持不變。WR存儲(chǔ)塊仍舊由池文件FP和WR文件"共享"。在另一實(shí)施例中,在處理產(chǎn)生合并請(qǐng)求的寫記錄之前,哈希值索引和池文件回到他們各自的狀態(tài)。 如果S35B處的比較確認(rèn)匹配,那么在步驟S37B處使排他文件中的IE塊指針與池文件中的COW類型塊指針一致。在步驟S38B處,塊計(jì)數(shù)被調(diào)節(jié)。曾由一個(gè)指針指向的IE存儲(chǔ)塊現(xiàn)在由零指向,因此其計(jì)數(shù)從"1"遞減至"0"。池文件中所指向的IE存儲(chǔ)塊將其計(jì)數(shù)從"2"遞增至"3"。 例如,如果在處理合并請(qǐng)求的過(guò)程中,主機(jī)HB確定存儲(chǔ)塊B5的內(nèi)容仍舊對(duì)應(yīng)于索引條目哈希值,那么指針PB1將從指向存儲(chǔ)塊B2改變?yōu)橹赶虼鎯?chǔ)塊54,如圖1的去復(fù)制操作29所示。這完成了方法ME1中關(guān)于處理匹配唯一哈希值索引條目的寫記錄的部分。類似的方法步驟S33A-S38A由主機(jī)HA實(shí)施。
處理指向池文件的匹配 當(dāng)寫記錄匹配唯一索引條目的時(shí)候,索引條目被改變,使得其指向池文件而非其原始文件。在圖示的實(shí)施例中,索引條目在其它方向上沒(méi)有改變。在另一實(shí)施例中,僅僅一個(gè)其它塊指針和池文件指向的存儲(chǔ)塊返回具有唯一索引條目,并且以和原始唯一條目相同的方式被處理。 如果在步驟S27A處,匹配的索引條目最初指向池文件FP,那么在步驟S39A處從WR存儲(chǔ)塊的內(nèi)容生成新哈希值,如圖8所示。如果哈希值不匹配,那么在步驟S40A處寫記錄被丟棄。在這種情形中,哈希值索引、塊指針和塊計(jì)數(shù)均保持不變。 如果在步驟S39A處,匹配被確認(rèn)(未過(guò)時(shí)),那么在步驟S41A處主機(jī)HA訪問(wèn)池文件條目中的IE塊指針。在步驟S42A處WR塊指針被更新以匹配池文件FP中的IE塊指針。在步驟S43A處,IE存儲(chǔ)塊計(jì)數(shù)被遞增。在步驟S44A處,WR存儲(chǔ)塊的計(jì)數(shù)被遞減至零,并且塊被釋放。主機(jī)HB可以實(shí)現(xiàn)類似的步驟S39B-S44B,用以處理共享?xiàng)l目的匹配。
清理 清理步驟S26A和S26B在圖9中以流程圖的方式示出。當(dāng)空閑存儲(chǔ)塊首先被寫入的時(shí)候,其計(jì)數(shù)從"0"遞增至"1"。當(dāng)塊變?yōu)楣蚕淼臅r(shí)候,其計(jì)數(shù)遞增兩次一次是因?yàn)槌匚募械膲K指針,一次是因?yàn)槠浔幌嗤虿煌匦晕募械牡诙K指針指向。因此,計(jì)數(shù)從"1"跳到"3"。 每次嘗試重寫共享塊都將產(chǎn)生COW操作,使得指向原始存儲(chǔ)塊的指針減少一個(gè);在這種情形中,計(jì)數(shù)減l。因此,C0W操作可以將計(jì)數(shù)從"3"降至"2";對(duì)塊的下一次C0W操作可以將計(jì)數(shù)從"2"降至"1",這對(duì)應(yīng)于現(xiàn)在僅僅池文件指向存儲(chǔ)塊的事實(shí)。由于沒(méi)有其它文件指向該塊,因此通過(guò)將其計(jì)數(shù)器減至"O"可以釋放該塊,并且可以清理索引和池文件中對(duì)應(yīng)的條目。 此外,未處理的寫日志可以指示唯一存儲(chǔ)塊已被重寫。如果在寫日志被處理前另一寫日志匹配用于唯一存儲(chǔ)塊的哈希值,那么方法ME1將確定不存在匹配。通過(guò)簡(jiǎn)單地清理文件指針匹配未處理寫記錄的文件指針的唯一索引條目,可以避免此種情況。
相應(yīng)地,清理方法S26A包括在步驟S45A處主機(jī)HA掃描哈希值索引45。在步驟S46A處,清理帶有匹配那些未處理寫記錄的文件指針的哈希值索引條目。在步驟S47A處,與具有計(jì)數(shù)"l"的共享塊相對(duì)應(yīng)的哈希值索引條目連同所引用的池文件條目一起被清理。并且在該步驟中,通過(guò)將所引用存儲(chǔ)塊的計(jì)數(shù)設(shè)為"O"來(lái)釋放所引用的存儲(chǔ)塊。主機(jī)HB類似地執(zhí)行步驟S45B-S47B。
混合文件塊尺寸支持 在文件系統(tǒng)中,數(shù)據(jù)是以一些固定尺寸塊的形式被管理的。例如,一些通用文件系統(tǒng)使用4千字節(jié)的塊而其它一些文件系統(tǒng)(例如VMWare VMFS)使用更大的塊,例如1兆字節(jié)的塊。管理更大尺寸塊形式的數(shù)據(jù)簡(jiǎn)化了許多讀和寫操作并且減少了跟蹤所存儲(chǔ)數(shù)據(jù)所需的元數(shù)據(jù)的量。然而,當(dāng)使用較小塊時(shí)去復(fù)制操作更趨有效,因?yàn)檎业絻蓚€(gè)匹配數(shù)據(jù)塊的可能性更大。 圖10A圖示了具有指向大數(shù)據(jù)塊151的指針的文件Inode節(jié)點(diǎn)150。 Inode節(jié)點(diǎn)150可以包括多個(gè)指針,每個(gè)指針指向不同的大數(shù)據(jù)塊。Inode節(jié)點(diǎn)150是用來(lái)存儲(chǔ)文件元數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)。在一個(gè)實(shí)施例中,如圖IOB所示,片段指針塊152被引入Inode節(jié)點(diǎn)150和大數(shù)據(jù)塊151之間。片段指針塊152包括指向小文件塊的指針,這些小文件塊加總后等于大文件塊的尺寸。即,大文件塊邏輯上被劃分成多個(gè)較小的塊。指向這些較小塊中每一個(gè)的指針153隨后被存儲(chǔ)在片段指針塊152中。 在一個(gè)實(shí)施例中,為了讓文件系統(tǒng)知道這個(gè)塊分段,在Inode節(jié)點(diǎn)150中存儲(chǔ)標(biāo)志來(lái)指示Inode節(jié)點(diǎn)150中的指針現(xiàn)在指向片段指針塊。在一個(gè)實(shí)施例中,該標(biāo)志存儲(chǔ)在指向片段指針塊的指針中。在該實(shí)施例中,如果標(biāo)志被設(shè)為特定狀態(tài)(例如,是或否,或者O或1等),那么文件系統(tǒng)調(diào)節(jié)其自身以管理多個(gè)較小塊。在一個(gè)示例中,考慮其Inode節(jié)點(diǎn)包括指向1兆字節(jié)文件塊的指針的直接文件。為了對(duì)文件中偏移為1032千字節(jié)處的4千字節(jié)塊獨(dú)立尋址,該文件的第二個(gè)1兆字節(jié)塊被劃分成256個(gè)4千字節(jié)塊。片段指針塊被分配以存儲(chǔ)指向這256個(gè)小塊的指針,并且指向原始l兆字節(jié)塊的指針被指向片段指針塊的指針替代。 這里,"哈希值"索引是將哈希值與數(shù)據(jù)塊的(當(dāng)前或過(guò)去)存儲(chǔ)塊位置(直接或間接)相關(guān)聯(lián)的文件或其它數(shù)據(jù)結(jié)構(gòu),其中所述數(shù)據(jù)塊用來(lái)生成或以其它方式對(duì)應(yīng)于哈希值。這里,"共享塊文件"或"池文件"(在其它地方也被稱為"競(jìng)技場(chǎng)(arena)")是帶有指針的文件,其中指針(直接或間接)指向已知或已經(jīng)由不同文件和/或同一文件中的不同位置所共享的存儲(chǔ)塊。在圖示的實(shí)施例中,哈希值索引條目通過(guò)直接指向具有關(guān)聯(lián)元數(shù)據(jù)塊指針的池文件位置,可以間接指向共享存儲(chǔ)塊,其中關(guān)聯(lián)元數(shù)據(jù)塊指針直接指向共享存儲(chǔ)塊。 在另一實(shí)施例中,具有重定向文件指針的每個(gè)文件具有對(duì)應(yīng)的隱藏文件,該隱藏文件指示文件的哪部分正被共享,并且指向特殊的類池文件。所有讀取和寫入都經(jīng)過(guò)知道 這些隱藏文件的過(guò)濾層?;A(chǔ)文件系統(tǒng)以及這個(gè)過(guò)濾層的組合在功能上等同于圖示出的支 持指針改寫和cow的文件系統(tǒng)。實(shí)際上,過(guò)濾系統(tǒng)用做這樣的文件系統(tǒng),該文件系統(tǒng)使用另
一文件系統(tǒng)作為其存儲(chǔ)介質(zhì)而不是直接使用盤。本發(fā)明提供了對(duì)圖示實(shí)施例的這些以及其 它變化和修改。本發(fā)明的范圍由權(quán)利要求限定。 在一個(gè)或多個(gè)實(shí)施例中,提供了用于執(zhí)行上述方法與系統(tǒng)的程序指令。程序指令 存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)中。 考慮到上面的實(shí)施例,應(yīng)當(dāng)理解本發(fā)明的一個(gè)或多個(gè)實(shí)施例可以采用計(jì)算機(jī)實(shí)現(xiàn) 的包含存儲(chǔ)在計(jì)算機(jī)系統(tǒng)中的數(shù)據(jù)在內(nèi)的多種操作。這些操作需要對(duì)物理量的物理處理。 通常,盡管不是必須的,這些物理量采用能夠被存儲(chǔ)、傳送、合并、比較以及以其它方式處理 的電信號(hào)或磁信號(hào)的形式。此外,所執(zhí)行的處理通常指的是諸如產(chǎn)生、標(biāo)識(shí)、確定或比較之 類的術(shù)語(yǔ)。 這里描述的構(gòu)成本發(fā)明一個(gè)或多個(gè)實(shí)施例一部分的任何操作都是有用的機(jī)器操 作。本發(fā)明的一個(gè)或多個(gè)實(shí)施例還涉及用于執(zhí)行這些操作的設(shè)備或裝置。該裝置可以是為 所需目的特別構(gòu)造的,例如上面討論的載波網(wǎng)絡(luò),或者該裝置可以是由存儲(chǔ)在計(jì)算機(jī)上的 計(jì)算機(jī)程序有選擇地啟動(dòng)或配置的通用計(jì)算機(jī)。特別地,多種通用機(jī)器可以結(jié)合根據(jù)這里 的教導(dǎo)編寫的計(jì)算機(jī)程序一起使用,或者構(gòu)造專門的裝置來(lái)執(zhí)行需要的操作可能是更便利 的??梢允褂弥T如Flash、 JAVA 、 C++、 C、 C#、 Visual Basic、 JavaScript 、 PHP、 XML、
HTML等編程語(yǔ)言或者編程語(yǔ)言的組合來(lái)實(shí)現(xiàn)這里描述的編程模塊和軟件子系統(tǒng)??梢允?br>
用諸如SOAP/HTTP的通用協(xié)議來(lái)實(shí)現(xiàn)編程模塊之間的接口。如本領(lǐng)域普通技術(shù)人員所知曉
的,上面以及這里其它地方描述的組件和功能可以在任何桌面操作系統(tǒng)上實(shí)現(xiàn),在虛擬化
或非虛擬化環(huán)境中執(zhí)行,使用適合桌面軟件開(kāi)發(fā)的編程語(yǔ)言,其中所述桌面操作系統(tǒng)例如
是不同版本的Microsoft Windows 、 Apple Mac 、 Unix/X-Windows 、 Linux 等。 可以在計(jì)算機(jī)可讀介質(zhì)上存儲(chǔ)編程模塊和輔助軟件組件(包括配置文件)以及提
供用于在電信網(wǎng)絡(luò)上為用戶排除故障的裝置和方法和這里描述的相關(guān)的功能所需的安裝
文件。可以使用任何計(jì)算機(jī)介質(zhì)來(lái)存儲(chǔ)編程模塊和輔助軟件組件,所述計(jì)算機(jī)介質(zhì)例如是
閃存、CD-ROM盤、光盤、軟盤、硬驅(qū)動(dòng)、共享驅(qū)動(dòng)、以及適于從連接的計(jì)算機(jī)提供下載的存儲(chǔ)
裝置。本領(lǐng)域普通技術(shù)人員將知曉,任何存儲(chǔ)介質(zhì)都可以用來(lái)存儲(chǔ)這些軟件組件,只要該存
儲(chǔ)介質(zhì)可以被計(jì)算機(jī)系統(tǒng)讀取即可。 本發(fā)明的一個(gè)或多個(gè)實(shí)施例可以結(jié)合包括手持設(shè)備、微處理器系統(tǒng)、基于微處理 器或可編程的消費(fèi)電子設(shè)備、微機(jī)、大型機(jī)等在內(nèi)的其他計(jì)算機(jī)系統(tǒng)配置一起實(shí)施。本發(fā)明 還可以在分布式計(jì)算環(huán)境中實(shí)施,在分布式計(jì)算環(huán)境中,由通過(guò)網(wǎng)絡(luò)互連的遠(yuǎn)程處理設(shè)備 執(zhí)行任務(wù)。 本發(fā)明的一個(gè)或多個(gè)實(shí)施例還可以實(shí)現(xiàn)為計(jì)算機(jī)可讀介質(zhì)上的計(jì)算機(jī)可讀代碼。 計(jì)算機(jī)可讀介質(zhì)是能夠存儲(chǔ)數(shù)據(jù)的任何數(shù)據(jù)存儲(chǔ)設(shè)備,該設(shè)備之后可以被計(jì)算機(jī)系統(tǒng)讀 取。計(jì)算機(jī)可讀介質(zhì)的示例包括硬驅(qū)動(dòng)、網(wǎng)絡(luò)附接存儲(chǔ)(NAS)、只讀存儲(chǔ)器、隨機(jī)存取存儲(chǔ) 器、CD-R0M、CD-R或CD-RW、DVD、閃存、磁帶、以及其它光和非光數(shù)據(jù)存儲(chǔ)設(shè)備。計(jì)算機(jī)可讀 介質(zhì)還可以分布在網(wǎng)絡(luò)連接的計(jì)算機(jī)系統(tǒng)之上,從而計(jì)算機(jī)可讀代碼以分布的方式被存儲(chǔ)并被執(zhí)行。 盡管已經(jīng)描述了本發(fā)明的一個(gè)或多個(gè)實(shí)施例,但是本領(lǐng)域普通技術(shù)人員在閱讀說(shuō) 明書并研究附圖之后將意識(shí)到,可以實(shí)現(xiàn)對(duì)本發(fā)明的多種修改、添加、變換和等同更替。因 此本發(fā)明的實(shí)施例意在包括落在權(quán)利要求限定的本發(fā)明真實(shí)精神和范圍之內(nèi)的所有這些 修改、添加、變換和等同物。因此,本發(fā)明的范圍由權(quán)利要求限定,其包括本發(fā)明的所有等同 物覆蓋的范圍。
權(quán)利要求
一種數(shù)據(jù)中心,包括多個(gè)計(jì)算機(jī)主機(jī)以及所述主機(jī)外部的存儲(chǔ)系統(tǒng),所述存儲(chǔ)系統(tǒng)包括用于存儲(chǔ)有形編碼數(shù)據(jù)塊的存儲(chǔ)塊,所述主機(jī)中的每個(gè)包括去復(fù)制文件系統(tǒng),所述去復(fù)制文件系統(tǒng)用于標(biāo)識(shí)出相應(yīng)存儲(chǔ)塊中存儲(chǔ)的相同數(shù)據(jù)塊,并將所述相同數(shù)據(jù)塊合并成所述存儲(chǔ)塊中的一個(gè),從而由所述主機(jī)中的第一主機(jī)排他訪問(wèn)的第一文件和由所述主機(jī)中的第二主機(jī)排他訪問(wèn)的第二文件同時(shí)指向所述存儲(chǔ)塊中的同一個(gè)。
2. 如權(quán)利要求1所述的數(shù)據(jù)中心,其中所述存儲(chǔ)系統(tǒng)具有在其上有形編碼的共享塊文 件,所述共享塊文件包括指向所述存儲(chǔ)系統(tǒng)的存儲(chǔ)塊的元數(shù)據(jù)指針,其中所述存儲(chǔ)系統(tǒng)的 存儲(chǔ)塊被所述文件的不只一個(gè)元數(shù)據(jù)塊指針?biāo)赶?,所述主機(jī)的文件管理器合作更新所述 共享塊文件。
3. 如權(quán)利要求2所述的數(shù)據(jù)中心,其中所述文件管理器通過(guò)依次獲得對(duì)所述共享塊文 件的排他訪問(wèn)權(quán)來(lái)更新所述共享塊文件。
4. 如權(quán)利要求3所述的數(shù)據(jù)中心,其中所述存儲(chǔ)系統(tǒng)具有在其上有形編碼的哈希值索 引,所述哈希值索引包括將哈希值分配給文件和文件偏移的哈希值索引條目,所述哈希值 索引條目中的一些通過(guò)所述共享塊文件將所述數(shù)據(jù)塊的哈希值與包含那些數(shù)據(jù)塊的存儲(chǔ) 塊相關(guān)聯(lián),所述哈希值索引條目中的其它條目通過(guò)所述共享塊文件之外的文件將所述數(shù)據(jù) 塊的哈希值與包含那些數(shù)據(jù)塊的存儲(chǔ)塊相關(guān)聯(lián)。
5. 如權(quán)利要求1所述的數(shù)據(jù)中心,進(jìn)一步包括在所述存儲(chǔ)系統(tǒng)中有形編碼的計(jì)數(shù),所 述計(jì)數(shù)中的每個(gè)代表指向所述存儲(chǔ)塊中的相應(yīng)一個(gè)的多個(gè)元數(shù)據(jù)指針,所述文件管理器在 寫操作和合并操作期間合作更新所述計(jì)數(shù)。
6. —種包括計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)的制品,所述計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)編碼有計(jì)算機(jī)可執(zhí) 行指令的文件系統(tǒng),所述文件系統(tǒng)在宿主計(jì)算機(jī)系統(tǒng)上運(yùn)行時(shí)連接到存儲(chǔ)系統(tǒng)管理文件, 包括在所述存儲(chǔ)系統(tǒng)中編碼的共享塊文件,所述文件具有有形編碼的指向包含有形編碼數(shù) 據(jù)塊的存儲(chǔ)塊的元數(shù)據(jù)指針,所述共享塊文件具有指向由多個(gè)所述元數(shù)據(jù)指針指向的塊的 元數(shù)據(jù)指針,所述文件系統(tǒng)包括用于更新哈希值索引的寫日志處理器,所述哈希值索引具 有通過(guò)所述共享塊文件間接指向共享存儲(chǔ)塊的共享?xiàng)l目集,并且具有通過(guò)所述共享塊文件 之外的所述文件間接指向非共享存儲(chǔ)塊的非共享?xiàng)l目集,所述哈希值索引被有形編碼在所 述存儲(chǔ)系統(tǒng)上。
7. 如權(quán)利要求6所述的制品,其中所述文件系統(tǒng)包括合并請(qǐng)求處理器,并且所述寫日 志處理器包括合并請(qǐng)求生成器所述合并請(qǐng)求生成器,在執(zhí)行時(shí),創(chuàng)建與所述文件系統(tǒng)不能訪問(wèn)的編碼于所述存儲(chǔ)系 統(tǒng)上的文件相關(guān)聯(lián)的第一合并請(qǐng)求;以及所述合并請(qǐng)求處理器,在執(zhí)行時(shí),通過(guò)確定數(shù)據(jù)塊是否相同以及如果確定所述數(shù)據(jù)塊 是相同的則將他們合并成單個(gè)存儲(chǔ)塊,來(lái)處理與所述文件系統(tǒng)能夠訪問(wèn)的文件相關(guān)聯(lián)的第 二合并請(qǐng)求。
8. 如權(quán)利要求7所述的制品,其中所述合并請(qǐng)求處理器,在執(zhí)行時(shí),通過(guò)比較所述文件 管理器不能訪問(wèn)的文件所指向的存儲(chǔ)塊的塊內(nèi)容的哈希值和所述文件管理器能夠訪問(wèn)的 文件所指向的存儲(chǔ)塊的第二塊內(nèi)容的哈希值,來(lái)處理所述第二合并請(qǐng)求。
9. 如權(quán)利要求6所述的制品,進(jìn)一步包括創(chuàng)建寫操作的寫日志事件的寫事件記錄器,所述寫事件記錄器將它們存儲(chǔ)在所述存儲(chǔ)系統(tǒng)上,所述寫操作中的每一個(gè)包括將數(shù)據(jù)塊寫入存儲(chǔ)塊,所述寫日志事件中的每一個(gè)指向相應(yīng)的存儲(chǔ)塊并且包含相應(yīng)數(shù)據(jù)塊的哈希值。
10. 如權(quán)利要求9所述的制品,其中所述索引合并器,在更新所述合并索引時(shí),嘗試將 存儲(chǔ)在寫日志事件中的哈希值與所述索引中預(yù)先表示的哈希值相匹配。
11. 一種方法,包括第一文件系統(tǒng)在第一宿主計(jì)算機(jī)系統(tǒng)上執(zhí)行,所述第一文件系統(tǒng)通過(guò)以下操作來(lái)管理 向存儲(chǔ)系統(tǒng)上的第一文件的第一寫操作將第一數(shù)據(jù)塊寫入所述存儲(chǔ)系統(tǒng)的第一存儲(chǔ)塊并 使所述第一文件的第一元數(shù)據(jù)指針指向所述第一存儲(chǔ)塊;第二文件系統(tǒng)在第二宿主計(jì)算機(jī)系統(tǒng)上執(zhí)行,所述第二文件系統(tǒng)通過(guò)以下操作來(lái)管理 向存儲(chǔ)系統(tǒng)上的第二文件的第二寫操作將第二內(nèi)容寫入所述存儲(chǔ)系統(tǒng)的第二塊并使所述 第二文件的第二元數(shù)據(jù)指針指向所述第二塊;并且所述第二文件管理器確定所述第二內(nèi)容是否與所述第一 內(nèi)容相同;以及如果所述第二內(nèi)容與所述第一 內(nèi)容相同,那么所述第二文件管理器使得所述第二元數(shù) 據(jù)指針指向所述第一塊。
12. 如權(quán)利要求11所述的方法,其中所述第二文件系統(tǒng)至少部分通過(guò)比較所述第一數(shù) 據(jù)塊的第一哈希值和所述第二數(shù)據(jù)塊的第二哈希值,來(lái)確定所述第二數(shù)據(jù)塊是否與所述第 一數(shù)據(jù)塊相同。
13. 如權(quán)利要求11所述的方法,其中所述第二文件管理器在所述第二寫操作期間生成 所述第二哈希值。
14. 如權(quán)利要求11所述的方法,其中所述第一文件管理器生成指向所述第一和第二塊的合并請(qǐng)求,并且將所述合并請(qǐng)求寫 入所述存儲(chǔ)系統(tǒng);以及所述第二文件管理器從所述存儲(chǔ)系統(tǒng)讀取所述合并請(qǐng)求并且處理所述合并請(qǐng)求,所述 處理包括在生成了所述合并請(qǐng)求之后生成所述第二哈希值。
15. 如權(quán)利要求11所述的方法,其中所述確定步驟包括逐位比較所述塊。
16. —種用于對(duì)文件系統(tǒng)中的第一存儲(chǔ)塊進(jìn)行去復(fù)制操作的方法,所述方法包括 確定第二存儲(chǔ)塊是否包含與所述文件系統(tǒng)中的所述第一存儲(chǔ)塊相同的內(nèi)容,所述第二存儲(chǔ)塊的尺寸與所述第一存儲(chǔ)塊的尺寸相同,其中指向所述第一存儲(chǔ)塊的指針被存儲(chǔ)在與所述第一存儲(chǔ)塊相關(guān)聯(lián)的文件的Inode節(jié)點(diǎn)中;將所述Inode節(jié)點(diǎn)中的所述第一存儲(chǔ)塊的元數(shù)據(jù)改變成包括寫時(shí)拷貝機(jī)制;以及清理所述第二存儲(chǔ)塊并將指向所述第二存儲(chǔ)塊的指針改變?yōu)橹赶蛩龅谝淮鎯?chǔ)塊,其中,如果所述第一存儲(chǔ)塊的尺寸大于或等于第一塊尺寸,那么所述第一存儲(chǔ)塊和所述第二存儲(chǔ)塊被邏輯細(xì)分為多個(gè)塊,所述多個(gè)塊每個(gè)具有第二塊尺寸,所述第一塊尺寸大于所述第二塊尺寸。
17. 如權(quán)利要求16所述的方法,其中所述第一塊尺寸為l兆字節(jié),并且所述第二塊尺寸 為4千字節(jié)。
18. 如權(quán)利要求16所述的方法,其中對(duì)所述第一存儲(chǔ)塊的邏輯細(xì)分包括在指針塊中存 儲(chǔ)指向每個(gè)細(xì)分塊的指針以及用指向所述指針塊的指針代替所述Inode節(jié)點(diǎn)中指向所述 第一存儲(chǔ)塊的指針。
19. 如權(quán)利要求18所述的方法,進(jìn)一步包括在Inode節(jié)點(diǎn)中設(shè)置標(biāo)志以指示所述Inode節(jié)點(diǎn)包含指向所述指針塊的指針。
全文摘要
本發(fā)明公開(kāi)了一種包括多個(gè)計(jì)算機(jī)主機(jī)和所述主機(jī)外部的存儲(chǔ)系統(tǒng)的數(shù)據(jù)中心。存儲(chǔ)系統(tǒng)包括用于存儲(chǔ)有形編碼數(shù)據(jù)塊的存儲(chǔ)塊。每個(gè)所述主機(jī)包括去復(fù)制文件系統(tǒng),該去復(fù)制文件系統(tǒng)標(biāo)識(shí)出存儲(chǔ)在相應(yīng)存儲(chǔ)塊中的相同數(shù)據(jù)塊,并將這些相同數(shù)據(jù)塊合并成所述存儲(chǔ)塊之一,使得由所述主機(jī)中的第一主機(jī)排他訪問(wèn)的第一文件和所述主機(jī)中的第二主機(jī)排他訪問(wèn)的第二文件同時(shí)指向相同的存儲(chǔ)塊。
文檔編號(hào)G06F17/30GK101710323SQ20091015745
公開(kāi)日2010年5月19日 申請(qǐng)日期2009年7月30日 優(yōu)先權(quán)日2008年9月11日
發(fā)明者克萊門斯·奧斯汀, 李金源, 維拉亞紐爾·莫拉里, 艾哈邁德·伊凡 申請(qǐng)人:威睿公司