專(zhuān)利名稱(chēng):用于文件克隆的數(shù)據(jù)共享的制作方法
技術(shù)領(lǐng)域:
本發(fā)明總體上涉及數(shù)據(jù)處理系統(tǒng),并且具體地,涉及數(shù)據(jù)處理系統(tǒng)中的數(shù)據(jù)和文件。更具體地,本發(fā)明涉及一種用于實(shí)施不可變數(shù)據(jù)共享文件克隆的改進(jìn)方法。
背景技術(shù):
包括來(lái)自IBM公司的通用并行文件系統(tǒng)(GPFS)的許多文件系統(tǒng)支持文件系統(tǒng)快照。文件系統(tǒng)快照是文件系統(tǒng)的邏輯時(shí)間點(diǎn)拷貝??煺湛梢杂糜谖募到y(tǒng)備份。備份來(lái)自快照的數(shù)據(jù)確保在一致?tīng)顟B(tài)中保留文件系統(tǒng)內(nèi)容??煺盏牧硪怀R?jiàn)使用是創(chuàng)建定期快照,并且也通過(guò)保持某一數(shù)目的近來(lái)快照在線,用戶可以取回意外刪除或者改寫(xiě)的文件的先前拷貝。通常使用“寫(xiě)入時(shí)拷貝”(copy-onirite)機(jī)制來(lái)實(shí)施快照。在寫(xiě)入時(shí)拷貝推遲快照中的文件分配盤(pán)空間直至修改或者刪除原文件。這具有的優(yōu)點(diǎn)在于快照創(chuàng)建很快(在創(chuàng)建快照時(shí)未拷貝數(shù)據(jù))并且快照占用的盤(pán)空間限于自從創(chuàng)建快照起修改或者刪除的數(shù)據(jù)量。GPFS使用稱(chēng)為“復(fù)本(ditto)”的邏輯引用來(lái)實(shí)施在寫(xiě)入時(shí)拷貝。復(fù)本存儲(chǔ)于快照中的索引節(jié)點(diǎn)(inode)和間接文件塊中(而不是對(duì)物理盤(pán)空間的引用)以指示尚未修改原文件中的對(duì)應(yīng)數(shù)據(jù)或者元數(shù)據(jù)。當(dāng)修改原文件時(shí),快照中的復(fù)本替換為對(duì)原數(shù)據(jù)的拷貝的引用。GPFS目前僅允許創(chuàng)建整個(gè)文件系統(tǒng)的快照。然而在GPFS中創(chuàng)建的快照為只讀。因此,盡管用戶可以讀取快照文件,但是用戶不能修改或者刪除快照中的文件。此外,可以部署數(shù)據(jù)管理應(yīng)用編程接口(DMAPI),該DMAPI允許第三方應(yīng)用輔助文件系統(tǒng)中的盤(pán)空間管理。DMAPI應(yīng)用通過(guò)向離線儲(chǔ)存器移動(dòng)不頻繁訪問(wèn)的數(shù)據(jù)來(lái)工作。繼而,不頻繁使用的數(shù)據(jù)可以盡在需要時(shí)被恢復(fù)。典型DMAPI應(yīng)用將不識(shí)別快照。因此,當(dāng)快照移向文件系統(tǒng)的離線儲(chǔ)存器時(shí),管理該文件系統(tǒng)的快照遇到大量困難,因?yàn)榭赡苄枰亟煺?,這是由已經(jīng)從原文件移動(dòng)或者去關(guān)聯(lián)快照。此外,恢復(fù)移動(dòng)的快照需要大量附加盤(pán)空間,因?yàn)槿缓髮⑿薷目煺找园ǜ碌臄?shù)據(jù)。
發(fā)明內(nèi)容
公開(kāi)一種用于創(chuàng)建和實(shí)施文件克隆的方法、系統(tǒng)和計(jì)算機(jī)程序產(chǎn)品??寺∷饕?jié)點(diǎn)被創(chuàng)建以作為原索引節(jié)點(diǎn)的拷貝??寺∷饕?jié)點(diǎn)和原索引節(jié)點(diǎn)是最終用戶不可區(qū)分的。所創(chuàng)建的每個(gè)附加文件克隆產(chǎn)生克隆索引節(jié)點(diǎn)。不可變的克隆父代索引節(jié)點(diǎn)被創(chuàng)建,其包含盤(pán)塊地址,而可寫(xiě)的克隆索引節(jié)點(diǎn)則包含將克隆索引節(jié)點(diǎn)鏈接到克隆父代索引節(jié)點(diǎn)中所引用的數(shù)據(jù)塊的復(fù)本。由此,原索引節(jié)點(diǎn)中的數(shù)據(jù)塊地址鏈接被移至新克隆父代索引節(jié)點(diǎn),并且復(fù)本替換原索引節(jié)點(diǎn)中的原數(shù)據(jù)塊地址鏈接。當(dāng)克隆文件被更新時(shí),新數(shù)據(jù)被寫(xiě)入新盤(pán)位置,并且克隆索引節(jié)點(diǎn)中的對(duì)應(yīng)復(fù)本被替換為數(shù)據(jù)塊鏈接地址,保持克隆父代索引節(jié)點(diǎn)的數(shù)據(jù)不變。
現(xiàn)在將參照以下附圖僅通過(guò)示例描述
具體實(shí)施例方式圖1是本發(fā)明可以實(shí)施于其中的數(shù)據(jù)處理系統(tǒng)的框圖。圖2是根據(jù)一個(gè)實(shí)施例的包含對(duì)盤(pán)文件上的示例數(shù)據(jù)塊的物理引用的索引節(jié)點(diǎn)和索引節(jié)點(diǎn)關(guān)聯(lián)方案的框示。圖3是根據(jù)一個(gè)實(shí)施例的包括圖2的原索引節(jié)點(diǎn)的克隆方案的框示。圖4是圖示了根據(jù)一個(gè)實(shí)施例的創(chuàng)建克隆父代索引節(jié)點(diǎn)的新克隆索引節(jié)點(diǎn)的框圖。圖5是圖示了根據(jù)一個(gè)實(shí)施例的圖示了克隆父代索引節(jié)點(diǎn)、現(xiàn)在作為克隆父代索引節(jié)點(diǎn)的克隆索引節(jié)點(diǎn)來(lái)工作的原索引節(jié)點(diǎn)、克隆父代索引節(jié)點(diǎn)的克隆和克隆父代索引節(jié)點(diǎn)的克隆的兩個(gè)克隆索引節(jié)點(diǎn)的關(guān)系的框圖。圖6是根據(jù)一個(gè)實(shí)施例的用于創(chuàng)建原索引節(jié)點(diǎn)的克隆父代索引節(jié)點(diǎn)的示例過(guò)程的高級(jí)邏輯流程圖。圖7是根據(jù)一個(gè)實(shí)施例的初始化克隆索引節(jié)點(diǎn)的高級(jí)邏輯流程圖。圖8是根據(jù)一個(gè)實(shí)施例的用于創(chuàng)建克隆父代索引節(jié)點(diǎn)的新(第三)克隆索引節(jié)點(diǎn)的過(guò)程的高級(jí)邏輯流程圖。圖9是根據(jù)一個(gè)實(shí)施例的用于初始化新克隆索引節(jié)點(diǎn)的過(guò)程的高級(jí)邏輯流程圖。圖10是根據(jù)一個(gè)實(shí)施例的用于刪除所選索引節(jié)點(diǎn)的過(guò)程的高級(jí)邏輯流程圖。
具體實(shí)施例方式示例實(shí)施例提供根據(jù)一個(gè)實(shí)施例的一種用于使用反向復(fù)本引用來(lái)實(shí)施數(shù)據(jù)共享文件克隆的方法、系統(tǒng)和計(jì)算機(jī)程序產(chǎn)品。在對(duì)本發(fā)明的示例實(shí)施例的下文具體描述中,以充分細(xì)節(jié)描述可以實(shí)現(xiàn)本發(fā)明的具體示例實(shí)施例以使本領(lǐng)域技術(shù)人員能夠?qū)崿F(xiàn)本發(fā)明,并且將理解可以利用其它實(shí)施例并且可以進(jìn)行邏輯、架構(gòu)、程序、機(jī)械、電和其它改變而未脫離本發(fā)明的精神實(shí)質(zhì)和范圍。因此不會(huì)在限制意義上理解下文具體描述,并且本發(fā)明的范圍僅由所附權(quán)利要求限定。理解具體部件、設(shè)備和/或參數(shù)名稱(chēng)的使用僅為舉例而并非為了暗示對(duì)本發(fā)明的任何限制。因此可以用不同命名/術(shù)語(yǔ)實(shí)施本發(fā)明而不限于此,這些命名/術(shù)語(yǔ)這里用來(lái)描述部件/設(shè)備/參數(shù)。將向這里利用的每個(gè)術(shù)語(yǔ)給予它在利用該術(shù)語(yǔ)的上下文給定時(shí)的最廣義解釋。另外,盡管一般描述為適用于文件系統(tǒng),但是與描述的實(shí)施例關(guān)聯(lián)的功能適用于任何種類(lèi)的文件系統(tǒng)或者存儲(chǔ)文件式對(duì)象的任何存儲(chǔ)系統(tǒng)、例如數(shù)據(jù)庫(kù)或者對(duì)象存儲(chǔ)庫(kù)。這些系統(tǒng)一般可以稱(chēng)為計(jì)算機(jī)實(shí)施的文件存儲(chǔ)和/或管理設(shè)施?,F(xiàn)在參照?qǐng)D1,描繪本發(fā)明可以實(shí)施于其中的數(shù)據(jù)處理系統(tǒng)(DPS) 102的框圖。DPS102包括耦合到系統(tǒng)總線106的處理器104。處理器104可以是單個(gè)處理器、多芯處理器或者多處理器陣列。耦合到系統(tǒng)總線106的視頻接口 108允許顯示器130由DPS 102的用戶連接到DPS 102從而實(shí)現(xiàn)顯示用戶接口(包括文字和圖形)。系統(tǒng)總線106還實(shí)現(xiàn)與基于硬件的可讀存儲(chǔ)介質(zhì)112 (例如緊致盤(pán)-只讀存儲(chǔ)器(CD-ROM)、快閃驅(qū)動(dòng)存儲(chǔ)器)的通信。輸入/輸出(I/O)接口 114同樣連接到系統(tǒng)總線106,它允許用戶與DPS 102的交互、例如經(jīng)由鍵盤(pán)116或者鼠標(biāo)117的數(shù)據(jù)錄入。DPS 102還包括連接到系統(tǒng)總線106的系統(tǒng)存儲(chǔ)器118。在系統(tǒng)存儲(chǔ)器118內(nèi)圖示了多個(gè)軟件/固件/邏輯部件,這些部件包括操作系統(tǒng)(OS) 124 (例如 MicrosoftWindows ⑧一這是 Microsoft Corp 的注冊(cè)商標(biāo)一或者 GNU /Linux~ 這是Free Software Foundation和 Linux Mark Institute 的注冊(cè)商標(biāo)一以及應(yīng)用122。系統(tǒng)存儲(chǔ)器118也可以包括數(shù)據(jù)管理應(yīng)用編程接口(DMAPI)或者DMAPI應(yīng)用126,該DMAPI或者DMAPI應(yīng)用使另一第三方應(yīng)用(例如應(yīng)用122)能夠輔助文件系統(tǒng)中的盤(pán)空間管理。在一個(gè)實(shí)施例中,DMAPI 126允許第三方應(yīng)用將不頻繁訪問(wèn)的數(shù)據(jù)移向離線儲(chǔ)存器。然后可以僅在需要時(shí)恢復(fù)不頻繁使用的數(shù)據(jù)。如圖所示,系統(tǒng)存儲(chǔ)器118也包括用于實(shí)施圖2-10中描述的過(guò)程的文件克隆數(shù)據(jù)共享(FCDS)邏輯120。在一個(gè)實(shí)施例中,如下文在圖2-10中更具體描述的那樣,DPS 102能夠利用TODS邏輯120的可執(zhí)行代碼以便使用反向復(fù)本引用來(lái)實(shí)施不可變文件克隆。在一個(gè)實(shí)施例中,可以在儲(chǔ)存器適配器145內(nèi)提供FCDS邏輯。當(dāng)文件集及其關(guān)聯(lián)內(nèi)部索引存儲(chǔ)于內(nèi)部?jī)?chǔ)存器150或者外部存儲(chǔ)文件系統(tǒng)165 (其通過(guò)在存儲(chǔ)適配器145中執(zhí)行的代碼而可被訪問(wèn))上時(shí)或者在這樣的情況下,該實(shí)施例可被實(shí)現(xiàn)。DPS 102還包括經(jīng)由對(duì)應(yīng)儲(chǔ)存器適配器145耦合的系統(tǒng)儲(chǔ)存器150。系統(tǒng)儲(chǔ)存器150存儲(chǔ)用于一個(gè)或者多個(gè)應(yīng)用的數(shù)據(jù)/指令/代碼。如圖所示,系統(tǒng)儲(chǔ)存器150包含經(jīng)由對(duì)應(yīng)索引節(jié)點(diǎn)/索引節(jié)點(diǎn)塊可訪問(wèn)的一個(gè)或者多個(gè)文件集存儲(chǔ)于其內(nèi)的文件系統(tǒng)155。在一個(gè)實(shí)施例中,在通用并行文件系統(tǒng)(GPFS)中格式化文件系統(tǒng)155。此外,DPS 102也可以連接到外部存儲(chǔ)文件系統(tǒng)165,該外部存儲(chǔ)文件系統(tǒng)提供與內(nèi)部系統(tǒng)儲(chǔ)存器150相似的外部?jī)?chǔ)存器、但是代之以經(jīng)由儲(chǔ)存器適配器145或者經(jīng)由網(wǎng)絡(luò)142連接到DPS 102。還圖示了 DPS 102具有網(wǎng)絡(luò)接口 110,DPS可以通過(guò)該網(wǎng)絡(luò)接口連接到一個(gè)或者多個(gè)網(wǎng)絡(luò)可訪問(wèn)設(shè)備、例如外部?jī)?chǔ)存器165或者服務(wù)器162。經(jīng)由一個(gè)或者多個(gè)網(wǎng)絡(luò)142訪問(wèn)這些設(shè)備。網(wǎng)絡(luò)接口 110可以被配置成經(jīng)由與網(wǎng)絡(luò)142的接入點(diǎn)的有線和/或無(wú)線連接操作。網(wǎng)絡(luò)142可以是外部網(wǎng)絡(luò)如因特網(wǎng)或者廣域網(wǎng)(WAN)或者內(nèi)部網(wǎng)絡(luò)如以太網(wǎng)(局域網(wǎng)-LAN)或者虛擬專(zhuān)用網(wǎng)(VPN)。在一個(gè)實(shí)施例中,當(dāng)網(wǎng)絡(luò)12是內(nèi)部網(wǎng)絡(luò)、例如LAN時(shí),可以用一個(gè)或者多個(gè)服務(wù)器(162)建立與外部網(wǎng)絡(luò)(因特網(wǎng))的連接,該一個(gè)或者多個(gè)服務(wù)器也可以提供用于由DPS 102使用或者在DPS 102上執(zhí)行的數(shù)據(jù)/指令/代碼。在一個(gè)實(shí)施例中,與TODS邏輯120關(guān)聯(lián)的某些特征可以經(jīng)由軟件部署服務(wù)器(例如服務(wù)器162)獲得,并且DPS 102使用網(wǎng)絡(luò)接口 110經(jīng)由網(wǎng)絡(luò)142與軟件部署服務(wù)器(162)通信。然后可以經(jīng)由軟件部署服務(wù)器(162)從網(wǎng)絡(luò)/在網(wǎng)絡(luò)上/跨越網(wǎng)絡(luò)部署FCDS邏輯120。利用這一配置,軟件部署服務(wù)器(162)可以執(zhí)行與F⑶S邏輯120的執(zhí)行關(guān)聯(lián)的功能中的所有功能。因而無(wú)需DPS 102利用DPS102的內(nèi)部計(jì)算資源以執(zhí)行TODS邏輯120。備選地,軟件部署服務(wù)器可以使DPS 102能夠下載為了實(shí)施描述的實(shí)施例的各種特征而需要的可執(zhí)行代碼。如這里圖示和描述的那樣,DPS 102可以是具有所需硬件部件并且用TODS邏輯120編程的計(jì)算機(jī)或者計(jì)算設(shè)備,該FCDS邏輯在處理器上執(zhí)行以提供描述的實(shí)施例的功能。在DPS 102中描繪的硬件單元并非旨在于窮舉而實(shí)際上作為代表以突出可以用來(lái)實(shí)施本發(fā)明的基本部件。例如可以利用數(shù)據(jù)處理系統(tǒng)/設(shè)備的不同配置,這些配置包含除了描繪的硬件之外或者備選地也可以使用的其它設(shè)備/部件。描繪的示例并非為了暗示關(guān)于當(dāng)前描述的實(shí)施例和/或一般的本發(fā)明的架構(gòu)或者其它限制。圖1中描繪的數(shù)據(jù)處理系統(tǒng)可以例如是運(yùn)行高級(jí)交互執(zhí)行(AIX)操作系統(tǒng)或者LINUX操作系統(tǒng)的IBMeServer pSeries系統(tǒng),這是位于紐約州Armonk的國(guó)際商務(wù)機(jī)器公司的產(chǎn)品?,F(xiàn)在參照?qǐng)D2,描繪了根據(jù)本發(fā)明一個(gè)實(shí)施例的示例數(shù)據(jù)文件和索引節(jié)點(diǎn)關(guān)聯(lián)方案的圖示。如圖2中所示,原索引節(jié)點(diǎn)(il) 202在其中具有關(guān)聯(lián)的與存儲(chǔ)于DPS 102的存儲(chǔ)器中的文件對(duì)應(yīng)的數(shù)據(jù)塊地址鏈接204a-204n。數(shù)據(jù)塊地址鏈接204a_204n將原索引節(jié)點(diǎn)(il)202鏈接到數(shù)據(jù)塊206a-n。數(shù)據(jù)塊206a_n包含原索引節(jié)點(diǎn)(il) 202的目標(biāo)數(shù)據(jù)并且可以在任何時(shí)間由處理器104(圖1)調(diào)用。現(xiàn)在參照?qǐng)D3,描繪了根據(jù)本發(fā)明一個(gè)實(shí)施例的包括圖2的原索引節(jié)點(diǎn)的克隆方案的圖示。如圖所示,克隆方案提供已經(jīng)創(chuàng)建克隆索引節(jié)點(diǎn)(i0) 302為原索引節(jié)點(diǎn)(il)202的快照克隆父代??寺∷饕?jié)點(diǎn)(iO) 302作為不可變文件快照(克隆父代索引節(jié)點(diǎn))而操作,其充當(dāng)后續(xù)文件克隆的基礎(chǔ)。為了創(chuàng)建克隆索引節(jié)點(diǎn)(i0)302, DPS 102的邏輯(例如FCDS邏輯120)首先選擇或者接收與原文件對(duì)應(yīng)的所選索引節(jié)點(diǎn)(原索引節(jié)點(diǎn)(il) 202),并且創(chuàng)建克隆索引節(jié)點(diǎn)(i0)302。所記錄的克隆索引節(jié)點(diǎn)(i0)302的創(chuàng)建時(shí)間可以從原索引節(jié)點(diǎn)(il)202拷貝,或者可以基于創(chuàng)建克隆索引節(jié)點(diǎn)(iO) 302時(shí)的當(dāng)前時(shí)間而被設(shè)置。在分配克隆索引節(jié)點(diǎn)
(10)302時(shí),克隆索引節(jié)點(diǎn)(iO)302的狀態(tài)被設(shè)置為已創(chuàng)建。繼而可以插入用于新克隆索引節(jié)點(diǎn)(i0)302的名稱(chēng)。用于克隆索引節(jié)點(diǎn)(iO) 302的名稱(chēng)可以由DPS 102的用戶錄入或者可以由在DPS 102上運(yùn)行的邏輯(例如作為T(mén)ODS邏輯120)自治地分配。在備選實(shí)施例中,用于克隆索引節(jié)點(diǎn)(i0)302的名稱(chēng)可以由經(jīng)由網(wǎng)絡(luò)142連接到DPS 102的計(jì)算機(jī)160a_n提供。目標(biāo)目錄也可以由DPS 102的用戶提供或者可以由在DPS 102上運(yùn)行的邏輯(例如作為FCDS邏輯120)自治地分配。響應(yīng)于接收名稱(chēng)條目和目標(biāo)目錄,克隆索引節(jié)點(diǎn)(i0)302被插入所選目標(biāo)目錄,并且被分配以指定的名稱(chēng)條目。在克隆索引節(jié)點(diǎn)(i0)302已在目標(biāo)目錄中被創(chuàng)建并且被賦予名稱(chēng)之后,將克隆索引節(jié)點(diǎn)(i0)302初始化為用于原索引節(jié)點(diǎn)(il)202的克隆父代。一旦被初始化為克隆父代,克隆父代索引節(jié)點(diǎn)變成原索引節(jié)點(diǎn)的不可變拷貝。初始化過(guò)程包括以下步驟(I)向克隆索引節(jié)點(diǎn)(i0)302拷貝數(shù)據(jù)塊地址鏈接204a-n和原索引節(jié)點(diǎn)(il)202的首部,(2)將克隆索引節(jié)點(diǎn)(iO) 302中的鏈接計(jì)數(shù)設(shè)置成2,(3)向克隆索引節(jié)點(diǎn)(i0)302拷貝原索引節(jié)點(diǎn)
(11)202的索引節(jié)點(diǎn)時(shí)間戳和許可位,(4)確定克隆索引節(jié)點(diǎn)(i0)302的所有者證書(shū),以及
(5)基于確定的所有者證書(shū)設(shè)置克隆索引節(jié)點(diǎn)(i0)302的所有者字段。在一個(gè)實(shí)施例中,步驟1-5可以被保存以使得每個(gè)步驟是原子的。鏈接計(jì)數(shù)是依賴(lài)于該具體索引節(jié)點(diǎn)的索引節(jié)點(diǎn)數(shù)目的計(jì)數(shù)。例如,本身無(wú)克隆的克隆子代索引節(jié)點(diǎn)將具有鏈接計(jì)數(shù)一,因?yàn)樗鼉H自依賴(lài)。具有兩個(gè)子代克隆的父代索引節(jié)點(diǎn)將具有鏈接計(jì)數(shù)三(一個(gè)計(jì)數(shù)為本身,兩個(gè)計(jì)數(shù)為兩個(gè)依賴(lài)子代索引節(jié)點(diǎn))。由于刪除父代索引節(jié)點(diǎn)可能引起文件系統(tǒng)中的大量問(wèn)題,所以如果請(qǐng)求的刪除操作以父代索引節(jié)點(diǎn)為目標(biāo),則可以拒絕索引節(jié)點(diǎn)刪除請(qǐng)求。由此,不可以刪除具有大于一的鏈接計(jì)數(shù)的索引節(jié)點(diǎn)(因?yàn)樽哟饕?jié)點(diǎn)仍然依賴(lài)于具有大于一的鏈接計(jì)數(shù)的索引節(jié)點(diǎn))。所有者證書(shū)提供用于索引節(jié)點(diǎn)的所有者的標(biāo)識(shí)信息。在一個(gè)實(shí)施例中,用于克隆索引節(jié)點(diǎn)(iO) 302的所有者證書(shū)可以從原索引節(jié)點(diǎn)(il) 202被簡(jiǎn)單地標(biāo)識(shí)和拷貝。在一個(gè)備選實(shí)施例中,可以基于DPS 102的當(dāng)前用戶或者基于DPS 102的執(zhí)行過(guò)程自治地創(chuàng)建所有者證書(shū)。此外,當(dāng)克隆索引節(jié)點(diǎn)(i0)302的所有者不同于原索引節(jié)點(diǎn)(il)202的所有者時(shí),原索引節(jié)點(diǎn)(il) 202的盤(pán)塊配額可被轉(zhuǎn)移給克隆索引節(jié)點(diǎn)(i0)302的所有者。響應(yīng)于完成對(duì)克隆索引節(jié)點(diǎn)(i0)302的初始化,更新原索引節(jié)點(diǎn)(il)202以反映該改變。由于克隆索引節(jié)點(diǎn)(i0)302是用于原索引節(jié)點(diǎn)(il)202的新的克隆父代,所以先前附著到原索引節(jié)點(diǎn)(il)202的數(shù)據(jù)塊地址鏈接204a-n已經(jīng)代之以被移至克隆索引節(jié)點(diǎn)(i0)302(圖示為數(shù)據(jù)塊地址鏈接204a-n)。原先與原索引節(jié)點(diǎn)(il) 202關(guān)聯(lián)的數(shù)據(jù)塊代之以替換為復(fù)本312a-n。每個(gè)復(fù)本312a_n對(duì)應(yīng)于數(shù)據(jù)塊地址鏈接204a_n之一。復(fù)本是在快照中的索引節(jié)點(diǎn)或者間接塊中存儲(chǔ)的引用,其通過(guò)將讀取請(qǐng)求重定向至不同文件而允許多個(gè)文件共享相同盤(pán)空間。復(fù)本指示尚未修改原文件中的對(duì)應(yīng)數(shù)據(jù)或者元數(shù)據(jù)。由于復(fù)本僅僅是對(duì)原盤(pán)空間的引用,所以直至修改原索引節(jié)點(diǎn)之前都不需要額外的系統(tǒng)儲(chǔ)存器。在一個(gè)實(shí)施例中,不可變文件(克隆父代)的地址鏈接包含盤(pán)塊地址,而可寫(xiě)入文件(克隆文件)中的地址鏈接包含復(fù)本。復(fù)本指向存儲(chǔ)于克隆父代中的盤(pán)塊地址鏈接。當(dāng)克隆文件被更新時(shí),新數(shù)據(jù)被寫(xiě)入新的盤(pán)位置,并且復(fù)本繼而被實(shí)際數(shù)據(jù)塊鏈接地址替換。在將數(shù)據(jù)塊地址鏈接204a_n中的每個(gè)數(shù)據(jù)塊地址鏈接替換為復(fù)本312a_n之后,將原索引節(jié)點(diǎn)(il) 202的塊計(jì)數(shù)設(shè)置成零。將原索引節(jié)點(diǎn)202更新為克隆索引節(jié)點(diǎn)(i0)302的子代,并且更新索引節(jié)點(diǎn)映射以將克隆索引節(jié)點(diǎn)(iO) 302標(biāo)識(shí)為使用中。索引節(jié)點(diǎn)的塊計(jì)數(shù)標(biāo)識(shí)存儲(chǔ)于該索引節(jié)點(diǎn)中的數(shù)據(jù)塊的數(shù)目。由于原索引節(jié)點(diǎn)(i I) 202現(xiàn)在僅包含復(fù)本312a-n,所以塊計(jì)數(shù)為零。當(dāng)修改原索引節(jié)點(diǎn)202時(shí),將受影響的復(fù)本替換為對(duì)原數(shù)據(jù)的拷貝的引用,并且針對(duì)被替換為數(shù)據(jù)塊的每個(gè)附加復(fù)本312a-n將塊計(jì)數(shù)遞增一。在一個(gè)實(shí)施例中,克隆索引節(jié)點(diǎn)(i0)302是新索引節(jié)點(diǎn)。然而克隆索引節(jié)點(diǎn)(i0)302也可以是已經(jīng)重設(shè)為原索引節(jié)點(diǎn)(il)202的克隆的現(xiàn)有索引節(jié)點(diǎn)。為了重設(shè)現(xiàn)有索引節(jié)點(diǎn),克隆屬性必須首先被存儲(chǔ)于現(xiàn)有索引節(jié)點(diǎn)中。繼而可以將現(xiàn)有索引節(jié)點(diǎn)標(biāo)識(shí)為克隆父代。在一個(gè)實(shí)施例中,DPS 102可以具有嵌入于其中的數(shù)據(jù)管理應(yīng)用編程接口(DMAPI)應(yīng)用(例如,DMAPI 126),用于將不頻繁訪問(wèn)的數(shù)據(jù)移至離線儲(chǔ)存器并且透明地恢復(fù)在需要時(shí)未配置成恰當(dāng)管理克隆文件的數(shù)據(jù)。由于克隆父代(例如克隆索引節(jié)點(diǎn)(i0)302)不可變,所以通過(guò)對(duì)復(fù)本的不可見(jiàn)寫(xiě)入而被恢復(fù)的數(shù)據(jù)應(yīng)當(dāng)與仍然在父代中的數(shù)據(jù)相同。這在克隆文件被向/從離線儲(chǔ)存器遷移時(shí)保留克隆文件。響應(yīng)于DMAPI應(yīng)用將一個(gè)或者多個(gè)克隆文件從數(shù)據(jù)處理系統(tǒng)的儲(chǔ)存器移向離線儲(chǔ)存器并且發(fā)出對(duì)任何克隆文件中的數(shù)據(jù)的讀取,在DPS 102上運(yùn)行的邏輯(例如,作為FCDS邏輯120)執(zhí)行對(duì)經(jīng)由克隆索引節(jié)點(diǎn)的復(fù)本而被間接鏈接的數(shù)據(jù)的不可見(jiàn)讀取。響應(yīng)于DMAPI應(yīng)用發(fā)出對(duì)任何克隆文件中的數(shù)據(jù)的寫(xiě)入,如果寫(xiě)入將使克隆索引節(jié)點(diǎn)的一個(gè)或者多個(gè)復(fù)本被改寫(xiě),則邏輯靜默地忽略寫(xiě)入。此外,響應(yīng)于DMAPI應(yīng)用基于上次訪問(wèn)時(shí)間向/從離線儲(chǔ)存器將一個(gè)或者多個(gè)克隆文件向數(shù)據(jù)處理系統(tǒng)的儲(chǔ)存器遷移,邏輯可以自治地更新克隆索引節(jié)點(diǎn)的上次訪問(wèn)時(shí)間以解析盤(pán)地址?,F(xiàn)在參照?qǐng)D4,描繪了根據(jù)一個(gè)實(shí)施例的原索引節(jié)點(diǎn)(il)202、克隆索引節(jié)點(diǎn)(i0)302和克隆索引節(jié)點(diǎn)(i0)302的新克隆、新索引節(jié)點(diǎn)(i2)402的圖示??寺∷饕?jié)點(diǎn)(iO) 302如圖3中呈現(xiàn)的那樣是原索引節(jié)點(diǎn)(il) 202的可變克隆父代。新索引節(jié)點(diǎn)(i2)404也已被創(chuàng)建以作為克隆索引節(jié)點(diǎn)(i0)302的新克隆。為了創(chuàng)建新索引節(jié)點(diǎn)(i2)402,新索引節(jié)點(diǎn)(i2)402必須被首先分配為新的克隆索引節(jié)點(diǎn)。應(yīng)用名稱(chēng)和目標(biāo)目錄也如上文所述被應(yīng)用。響應(yīng)于接收用于新索引節(jié)點(diǎn)(i2)402的新名稱(chēng)條目和目標(biāo)目錄,新索引節(jié)點(diǎn)(i2)402以新名稱(chēng)被插入以作為所選目標(biāo)目錄中的新條目。在新索引節(jié)點(diǎn)(i2)402已在目標(biāo)目錄中被創(chuàng)建并被賦予名稱(chēng)之后,新索引節(jié)點(diǎn)
(i2)402被初始化為克隆索引節(jié)點(diǎn)(i0)302的克隆。初始化過(guò)程包括步驟(I)向新索引節(jié)點(diǎn)(i2)402拷貝克隆父代(i0)302的首部,(2)設(shè)置與存儲(chǔ)于克隆索引節(jié)點(diǎn)(i0)302中的一個(gè)或者多個(gè)數(shù)據(jù)塊地址鏈接204a-n對(duì)應(yīng)的一個(gè)或者多個(gè)復(fù)本404a-n,(3)將新索引節(jié)點(diǎn)( 2)402中的鏈接計(jì)數(shù)設(shè)置成1,(4)將新索引節(jié)點(diǎn)(i2)402的塊計(jì)數(shù)設(shè)置成零,以及(5)將克隆索引節(jié)點(diǎn)(i0)302記錄為新索引節(jié)點(diǎn)(i2)402的克隆父代。在一個(gè)實(shí)施例中,步驟1-5還被保存以使每個(gè)步驟是原子的。一旦新索引節(jié)點(diǎn)(i2)402被初始化,將克隆索引節(jié)點(diǎn)(i0)302的鏈接計(jì)數(shù)遞增一,并且更新索引節(jié)點(diǎn)映射以將新索引節(jié)點(diǎn)(i2)402標(biāo)識(shí)為使用中??寺∷饕?jié)點(diǎn)(iO) 302鏈接計(jì)數(shù)的遞增將克隆索引節(jié)點(diǎn)(iO) 302標(biāo)識(shí)為另一索引節(jié)點(diǎn)(在這一情況下一新索引節(jié)點(diǎn)(i2 )402)的父代?,F(xiàn)在參照?qǐng)D5,描繪了以克隆父代索引節(jié)點(diǎn)(克隆索引節(jié)點(diǎn)(iO) 302)、現(xiàn)在作為克隆父代索引節(jié)點(diǎn)的克隆來(lái)工作的原索引節(jié)點(diǎn)(原索引節(jié)點(diǎn)(i I) 202)、克隆父代索引節(jié)點(diǎn)的克隆(新索引節(jié)點(diǎn)(i2)402)以及克隆父代索引節(jié)點(diǎn)的克隆的兩個(gè)克隆(第一克隆索引節(jié)點(diǎn)(i3) 522和第二克隆索引節(jié)點(diǎn)(i4)542)為特征的一個(gè)示例實(shí)施例的圖示。圖5圖示了可以如何個(gè)別讀取或者寫(xiě)入父代和克隆索引節(jié)點(diǎn)二者。新索引節(jié)點(diǎn)(i2)402還是兩個(gè)克隆子代索引節(jié)點(diǎn)——第一克隆索引節(jié)點(diǎn)(i3) 522和第二克隆索引節(jié)點(diǎn)(i4)542——的父代節(jié)點(diǎn)。第一克隆索引節(jié)點(diǎn)(i3) 522和第二克隆索引節(jié)點(diǎn)(i4)542 二者分別具有復(fù)本524a-d和復(fù)本544a-d。特別地,圖5圖示了原索引節(jié)點(diǎn)(il)202具有復(fù)本312a-d、克隆索引節(jié)點(diǎn)
(i0)302(原索引節(jié)點(diǎn)202的新克隆父代)具有數(shù)據(jù)塊地址鏈接204a-d,并且新索引節(jié)點(diǎn)( 2) 402)具有與數(shù)據(jù)塊地址鏈接204a-b對(duì)應(yīng)的兩個(gè)復(fù)本404a_b并且具有兩個(gè)數(shù)據(jù)塊地址鏈接508c-d。新索引節(jié)點(diǎn)(i2)402是克隆索引節(jié)點(diǎn)(i0)302的克隆。如上述例圖5中所示,新索引節(jié)點(diǎn)(i2)402具有與克隆索引節(jié)點(diǎn)(i0)302的數(shù)據(jù)塊地址鏈接204a-b對(duì)應(yīng)的兩個(gè)復(fù)本404a-b。此外,新索引節(jié)點(diǎn)(i2) 402還包括指向數(shù)據(jù)塊506c-d的數(shù)據(jù)塊地址鏈接508c-d。這是修改新索引節(jié)點(diǎn)(i2)402的目標(biāo)文件的結(jié)果,其中兩個(gè)復(fù)本受到影響。子代復(fù)本404c-d被替換為數(shù)據(jù)塊地址鏈接508c-d,而不是修改克隆索引節(jié)點(diǎn)(iO) 302,這些數(shù)據(jù)塊地址鏈接包含對(duì)在數(shù)據(jù)塊506c-d存儲(chǔ)的更新數(shù)據(jù)的引用。因此,數(shù)據(jù)塊地址鏈接204a-b的數(shù)據(jù)引用保持不變,保留了克隆快照。對(duì)新索引節(jié)點(diǎn)(i2)402鏈接的文件的任何修改將影響第一克隆索引節(jié)點(diǎn)(i3)522和第二克隆索引節(jié)點(diǎn)(i4)542各自的復(fù)本524a-d和復(fù)本544a-d。這種操作的結(jié)果是復(fù)本524a-d和復(fù)本544a_d仍然間接指向數(shù)據(jù)塊地址鏈接204a_b,而復(fù)本524c_d和復(fù)本544c_d參考數(shù)據(jù)塊地址鏈接508c-d。反之,原索引節(jié)點(diǎn)(il)202的復(fù)本312a-d仍然指向204a_d,因?yàn)樵饕?jié)點(diǎn)(il)202未被修改?,F(xiàn)在參照?qǐng)D6,描繪了根據(jù)本發(fā)明一個(gè)實(shí)施例的用于創(chuàng)建原索引節(jié)點(diǎn)的克隆父代索引節(jié)點(diǎn)的示例過(guò)程的高級(jí)邏輯流程圖。如圖所示,過(guò)程始于塊600繼而進(jìn)行到塊605,在此選擇原索引節(jié)點(diǎn)。一旦原索引節(jié)點(diǎn)被選擇,便創(chuàng)建克隆索引節(jié)點(diǎn),其意在作為原索引節(jié)點(diǎn)的新克隆父代索引節(jié)點(diǎn)(塊610)。在塊615,建立用于克隆索引節(jié)點(diǎn)的名稱(chēng)條目和狀態(tài)??寺∷饕?jié)點(diǎn)的狀態(tài)被設(shè)置為克隆父代。此外,為克隆索引節(jié)點(diǎn)建立期望的目標(biāo)目錄(塊617)。克隆索引節(jié)點(diǎn)繼而以所選的名稱(chēng)被插入所選目標(biāo)目錄以作為目錄條目(塊620)。在塊625,將克隆索引節(jié)點(diǎn)初始化為克隆父代。塊625中執(zhí)行的初始化子步驟在圖7中詳述。一旦克隆索引節(jié)點(diǎn)已被初始化為克隆父代,更新原索引節(jié)點(diǎn)(塊630)。更新克隆索引節(jié)點(diǎn)包括將原索引節(jié)點(diǎn)內(nèi)包含的一個(gè)或者多個(gè)數(shù)據(jù)塊地址鏈接中的每個(gè)數(shù)據(jù)塊地址鏈接設(shè)置成一個(gè)或者多個(gè)復(fù)本。復(fù)本對(duì)目前存儲(chǔ)于克隆索引節(jié)點(diǎn)(新克隆父代索引節(jié)點(diǎn))中的一個(gè)或者多個(gè)數(shù)據(jù)塊地址間接尋址。由于原索引節(jié)點(diǎn)現(xiàn)在不包含數(shù)據(jù)塊地址鏈接,所以原索引節(jié)點(diǎn)的塊計(jì)數(shù)被設(shè)置成零。在塊635,更新索引節(jié)點(diǎn)映射以將克隆索引節(jié)點(diǎn)反映為原索引節(jié)點(diǎn)的新克隆父代索引節(jié)點(diǎn)。過(guò)程繼而終止于塊690?,F(xiàn)在參照?qǐng)D7,描繪了根據(jù)本發(fā)明一個(gè)實(shí)施例的在圖6的塊625中參照的初始化克隆索引節(jié)點(diǎn)的高級(jí)邏輯流程圖。如圖所示,過(guò)程始于塊700繼而進(jìn)行到塊705,在此從原索引節(jié)點(diǎn)向克隆索引節(jié)點(diǎn)拷貝數(shù)據(jù)塊地址鏈接和首部信息??寺∷饕?jié)點(diǎn)現(xiàn)在包含先前存儲(chǔ)于原索引節(jié)點(diǎn)內(nèi)的數(shù)據(jù),并且遞增克隆索引節(jié)點(diǎn)的鏈接計(jì)數(shù)(或者設(shè)置成2),因?yàn)榭寺∷饕?jié)點(diǎn)和原索引節(jié)點(diǎn)現(xiàn)在都依賴(lài)于新克隆父代索引節(jié)點(diǎn)(克隆索引節(jié)點(diǎn))(塊710)。在塊715,向克隆索引節(jié)點(diǎn)拷貝來(lái)自原索引節(jié)點(diǎn)的時(shí)間戳和許可位,使克隆索引節(jié)點(diǎn)與克隆索引節(jié)點(diǎn)替換的原索引節(jié)點(diǎn)相同。在塊720,確定克隆索引節(jié)點(diǎn)的所有者證書(shū)。所有者證書(shū)可以與原索引節(jié)點(diǎn)的所有者證書(shū)相同,或者可以是當(dāng)前用戶或者執(zhí)行過(guò)程的所有者證書(shū)。在塊725,確定克隆索引節(jié)點(diǎn)的所有者是否與原索引節(jié)點(diǎn)的所有者不同。當(dāng)克隆索引節(jié)點(diǎn)的所有者與原索引節(jié)點(diǎn)的所有者不同時(shí),將原索引節(jié)點(diǎn)的盤(pán)塊份額轉(zhuǎn)移給克隆索引節(jié)點(diǎn)的所有者(塊750),并且過(guò)程繼續(xù)塊750。在塊750,基于先前標(biāo)識(shí)的所有者證書(shū)更新克隆索引節(jié)點(diǎn)的所有者字段。過(guò)程繼而終止于塊790。現(xiàn)在參照?qǐng)D8,描繪了根據(jù)一個(gè)實(shí)施例的用于創(chuàng)建克隆父代索引節(jié)點(diǎn)的新(第三)克隆索引節(jié)點(diǎn)的示例過(guò)程的高級(jí)邏輯流程圖。過(guò)程始于塊800,在此創(chuàng)建新克隆索引節(jié)點(diǎn)以作為克隆父代索引節(jié)點(diǎn)的克隆。在塊810,從用戶或者執(zhí)行過(guò)程接收用于新克隆索引節(jié)點(diǎn)的名稱(chēng)和目標(biāo)目錄條目。在塊815,設(shè)置用于新克隆索引節(jié)點(diǎn)的名稱(chēng)條目,并且在目標(biāo)目錄中插入新克隆索引節(jié)點(diǎn)。在塊820,將新克隆索引節(jié)點(diǎn)初始化為克隆父代索引節(jié)點(diǎn)的克隆。塊820中執(zhí)行的初始化子步驟在圖9中詳述。在塊825,遞增克隆父代索引節(jié)點(diǎn)的鏈接計(jì)數(shù),因?yàn)榭寺「复饕?jié)點(diǎn)現(xiàn)在具有新依賴(lài)索引節(jié)點(diǎn)(新克隆索引節(jié)點(diǎn))。在塊830,更新索引節(jié)點(diǎn)映射以將新可能索引節(jié)點(diǎn)的狀態(tài)反映為使用中。過(guò)程繼而終止于塊950?,F(xiàn)在參照?qǐng)D9,描繪了根據(jù)一個(gè)實(shí)施例的在塊820中執(zhí)行的初始化新克隆索引節(jié)點(diǎn)的高級(jí)邏輯流程圖。如圖所示,過(guò)程始于塊900,繼而進(jìn)行到塊905,在此向新克隆索引節(jié)點(diǎn)拷貝來(lái)自克隆父代索弓I節(jié)點(diǎn)的首部。在塊910,復(fù)本在新克隆索弓I節(jié)點(diǎn)中被創(chuàng)建并且被設(shè)置成指向克隆父代索引節(jié)點(diǎn)的數(shù)據(jù)塊地址鏈接。繼而將新克隆索引節(jié)點(diǎn)的鏈接計(jì)數(shù)設(shè)置成1,因?yàn)樾驴寺∷饕?jié)點(diǎn)僅依賴(lài)于自己(塊915)。在塊920,將新克隆索引節(jié)點(diǎn)的塊計(jì)數(shù)設(shè)置成O,因?yàn)樾驴寺∷饕?jié)點(diǎn)僅包含復(fù)本而尚未存儲(chǔ)任何數(shù)據(jù)塊地址鏈接。繼而,在新克隆索引節(jié)點(diǎn)內(nèi)將克隆父代索引節(jié)點(diǎn)記錄為新克隆索引節(jié)點(diǎn)的克隆父代,并且將新克隆索引節(jié)點(diǎn)的創(chuàng)建時(shí)間設(shè)置成當(dāng)前時(shí)間(塊925)。過(guò)程繼而終止于塊990?,F(xiàn)在參照?qǐng)D10,描繪了根據(jù)一個(gè)實(shí)施例的用于刪除所選索引節(jié)點(diǎn)的過(guò)程的高級(jí)邏輯流程圖。過(guò)程始于塊1000并且進(jìn)行到塊1005,在此接收針對(duì)所選索引節(jié)點(diǎn)的刪除指令。響應(yīng)于接收刪除指令,確定所選索引節(jié)點(diǎn)是否為克隆父代(塊1010)。當(dāng)所選索引節(jié)點(diǎn)不是克隆父代時(shí),過(guò)程繼續(xù)到塊1030。當(dāng)所選索引節(jié)點(diǎn)是克隆父代索引節(jié)點(diǎn)時(shí),過(guò)程繼續(xù)到塊1020,在此確定該克隆父代是否仍然是任何子代索引節(jié)點(diǎn)的父代。通過(guò)讀取所選索引節(jié)點(diǎn)的鏈接計(jì)數(shù)并且確定鏈接計(jì)數(shù)是否等于一(I)來(lái)執(zhí)行該確定。如果鏈接計(jì)數(shù)不等于一(I),則所選索引節(jié)點(diǎn)仍具有依賴(lài)的克隆子代,并且過(guò)程繼續(xù)到塊1025,在此拒絕刪除請(qǐng)求。過(guò)程繼而終止于塊1090。當(dāng)所選子代的鏈接計(jì)數(shù)等于一(I)時(shí),過(guò)程繼續(xù)塊1030。在塊1030,確定所選索引節(jié)點(diǎn)的父代。響應(yīng)于確定所選索引節(jié)點(diǎn)的父代,將所選索引節(jié)點(diǎn)的父代的鏈接計(jì)數(shù)遞減一(塊1035)。遞減所選索引節(jié)點(diǎn)的父代的鏈接計(jì)數(shù),因?yàn)樗x索引節(jié)點(diǎn)將要被刪除因此不再依賴(lài)于它的父代索引節(jié)點(diǎn)。在塊1040刪除所選索引節(jié)點(diǎn)。過(guò)程繼而終止于塊1090。在這里呈現(xiàn)和描述的各種圖中的流程圖和框示了根據(jù)本發(fā)明各種實(shí)施例的系統(tǒng)、方法和計(jì)算機(jī)程序產(chǎn)品的可能實(shí)施方式的架構(gòu)、功能和操作。就這一點(diǎn)而言,流程圖或者框圖中的每個(gè)塊可以代表代碼模塊、段或者部分,該代碼模塊、段或者部分包括用于實(shí)施指定邏輯功能的的一個(gè)或者多個(gè)可執(zhí)行指令。也應(yīng)當(dāng)注意在一些備選實(shí)施方式中,在塊中指出的功能可以不按圖中指出的順序出現(xiàn)。例如事實(shí)上根據(jù)涉及到的功能可以基本上并行執(zhí)行接連示出的兩個(gè)塊或者有時(shí)可以反序執(zhí)行這些塊。也將注意框圖和/或流程示的每個(gè)塊以及在框圖和/或流程示中的塊組合可以由執(zhí)行指定功能或者動(dòng)作的基于專(zhuān)用硬件的系統(tǒng)實(shí)施或者由專(zhuān)用硬件與計(jì)算機(jī)指令的組合實(shí)施。在上述流程圖中,在包含計(jì)算機(jī)可讀代碼的計(jì)算機(jī)可讀介質(zhì)中實(shí)現(xiàn)方法中的一種或者多種方法,從而當(dāng)(處理單元)在計(jì)算設(shè)備上執(zhí)行計(jì)算機(jī)可讀代碼時(shí)執(zhí)行系列步驟。在一些實(shí)施方式中,組合、同時(shí)或者按照不同順序執(zhí)行或者可能省略方法的某些過(guò)程而未脫離本發(fā)明的精神實(shí)質(zhì)和范圍。因此,盡管在特定序列中描述和圖示方法過(guò)程,但是使用具體過(guò)程序列并非為了暗示對(duì)本發(fā)明的任何限制??梢躁P(guān)于過(guò)程序列做出改變而未脫離本發(fā)明的精神實(shí)質(zhì)或者范圍。因此不會(huì)在限制意義上解釋使用特定序列,并且本發(fā)明的范圍延及所附權(quán)利要求及其等效含義。如本領(lǐng)域技術(shù)人員將理解的那樣,可以實(shí)現(xiàn)本發(fā)明的方面為系統(tǒng)、方法或者計(jì)算機(jī)程序產(chǎn)品。因而本發(fā)明的方面可以采用全硬件實(shí)施例、全軟件實(shí)施例(包括固件、常駐軟件、微代碼等)或者將軟件與硬件方面組合的實(shí)施例的形式,這些實(shí)施例可以在這里都通稱(chēng)為“電路”、“模塊”或者“系統(tǒng)”。另外,本發(fā)明的方面可以采用在一個(gè)或者多個(gè)計(jì)算機(jī)可讀介質(zhì)中實(shí)現(xiàn)的計(jì)算機(jī)程序產(chǎn)品的形式,該一個(gè)或者多個(gè)計(jì)算機(jī)可讀介質(zhì)具有在其上實(shí)現(xiàn)的計(jì)算機(jī)可讀程序代碼??梢岳靡粋€(gè)或者多個(gè)計(jì)算機(jī)可讀介質(zhì)的任何組合。計(jì)算機(jī)可讀介質(zhì)可以是計(jì)算機(jī)可讀信號(hào)介質(zhì)或者計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)。計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)可以例如是但不限于電子、磁、光學(xué)、電磁、紅外線或者半導(dǎo)體系統(tǒng)、裝置或者設(shè)備或者前述各項(xiàng)的任何適當(dāng)組合。計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)的更多具體示例(非窮舉列表)包括以下示例具有一個(gè)或者多個(gè)接線的電連接、便攜計(jì)算機(jī)盤(pán)、硬盤(pán)、隨機(jī)存取存儲(chǔ)器(RAM)、只讀存儲(chǔ)器(ROM)、可擦除可編程只讀存儲(chǔ)器(EPR0M或者閃存)、光纖、便攜光盤(pán)只讀存儲(chǔ)器(CD-ROM)、光學(xué)存儲(chǔ)設(shè)備、磁存儲(chǔ)設(shè)備或者前述各項(xiàng)的任何適當(dāng)組合。在本文的上下文中,計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)可以是任何有形介質(zhì),該有形介質(zhì)可以包含或者存儲(chǔ)用于由指令執(zhí)行系統(tǒng)、裝置或者設(shè)備使用的或者與指令執(zhí)行系統(tǒng)、裝置或者設(shè)備結(jié)合使用的程序。計(jì)算機(jī)可讀信號(hào)介質(zhì)可以包括例如基帶中或者作為載波的部分的傳播數(shù)據(jù)信號(hào),該傳播數(shù)據(jù)信號(hào)具有在其中實(shí)現(xiàn)的計(jì)算機(jī)可讀程序代碼。這樣的傳播信號(hào)可以采用包括但不限于電磁、光學(xué)或者其任何適當(dāng)組合的多種形式中的任何形式。計(jì)算機(jī)可讀信號(hào)介質(zhì)可以是任何計(jì)算機(jī)可讀介質(zhì),該計(jì)算機(jī)可讀介質(zhì)不是計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)并且可以傳達(dá)、傳播或者傳送用于由指令執(zhí)行系統(tǒng)、裝置或者設(shè)備使用的或者與指令執(zhí)行系統(tǒng)、裝置或者設(shè)備結(jié)合使用的程序??梢允褂萌魏芜m當(dāng)介質(zhì)來(lái)傳輸計(jì)算機(jī)可讀介質(zhì)上實(shí)現(xiàn)的程序代碼,該介質(zhì)包括但不限于無(wú)線、有線、光纖線纜、RF等或者前述介質(zhì)的任何適當(dāng)組合??梢杂靡环N或者多種編程語(yǔ)言的任何組合來(lái)編寫(xiě)用于實(shí)現(xiàn)用于本發(fā)明方面的操作的計(jì)算機(jī)程序代碼,該一種或者多種編程包括諸如Java、Smalltalk、C++等面向?qū)ο缶幊陶Z(yǔ)目和例如“C”編程語(yǔ)目或者相似編程語(yǔ)言這樣的常規(guī)過(guò)程編程語(yǔ)言。程序代碼可以完全在用戶的計(jì)算機(jī)上、部分在用戶的計(jì)算機(jī)上、作為獨(dú)立軟件包、部分在用戶的計(jì)算機(jī)上而部分在遠(yuǎn)程計(jì)算機(jī)上或者完全在遠(yuǎn)程計(jì)算機(jī)或者服務(wù)器上執(zhí)行。在后一種場(chǎng)景中,遠(yuǎn)程計(jì)算機(jī)可以通過(guò)包括局域網(wǎng)(LAN)或者廣域網(wǎng)(WAN)的任何類(lèi)型的網(wǎng)絡(luò)連接到用戶的計(jì)算機(jī),或者可以(例如通過(guò)使用因特網(wǎng)服務(wù)提供商的因特網(wǎng))產(chǎn)生與外部計(jì)算機(jī)的連接。下文參照根據(jù)本發(fā)明實(shí)施例的方法、裝置(系統(tǒng))和計(jì)算機(jī)程序產(chǎn)品的流程示和/或框圖描述本本發(fā)明的方面。將理解流程示和/或框圖的每個(gè)塊以及在流程示和/或框圖中的塊組合可以由計(jì)算機(jī)程序指令實(shí)施??梢韵蛲ㄓ糜?jì)算機(jī)、專(zhuān)用計(jì)算機(jī)或者其它可編程數(shù)據(jù)處理裝置的處理器提供這些計(jì)算機(jī)程序指令以產(chǎn)生機(jī)器,從而經(jīng)由計(jì)算機(jī)或者其它可編程數(shù)據(jù)處理裝置的處理器執(zhí)行的指令創(chuàng)建用于實(shí)施在流程圖和/或框圖的一個(gè)或者多個(gè)塊中指定的功能/動(dòng)作的裝置。這些計(jì)算機(jī)程序指令也可以存儲(chǔ)于計(jì)算機(jī)可讀介質(zhì)中,該計(jì)算機(jī)可讀介質(zhì)可以指引計(jì)算機(jī)、其它可編程數(shù)據(jù)處理裝置或者其它設(shè)備以特定方式工作,從而存儲(chǔ)于計(jì)算機(jī)可讀介質(zhì)中的指令產(chǎn)生包括指令的制造品,這些指令實(shí)施在流程圖和/或框圖的一個(gè)或者多個(gè)塊中指定的功能/動(dòng)作。也可以向計(jì)算機(jī)、其它可編程數(shù)據(jù)處理裝置或者其它設(shè)備上加載計(jì)算機(jī)程序指令以使系列操作步驟在計(jì)算機(jī)、其它可編程裝置或者其它設(shè)備上執(zhí)行以產(chǎn)生計(jì)算機(jī)實(shí)施的過(guò)程,從而在計(jì)算機(jī)或者其它可編程裝置上執(zhí)行的指令提供用于實(shí)施在流程圖和/或框圖的一個(gè)或者多個(gè)塊中指定的功能/動(dòng)作的過(guò)程。如將進(jìn)一步理解的那樣,可以使用軟件、固件或者硬件的任何組合來(lái)實(shí)施本發(fā)明實(shí)施例中的過(guò)程。作為在軟件中實(shí)現(xiàn)本發(fā)明的預(yù)備步驟,程序代碼(無(wú)論是軟件或者固件)將通常存儲(chǔ)于一個(gè)或者多個(gè)機(jī)器可讀存儲(chǔ)介質(zhì)、例如固定(硬)驅(qū)動(dòng)、盤(pán)、光盤(pán)、磁帶、半導(dǎo)體存儲(chǔ)器如R0M、PR0M等中、由此產(chǎn)生根據(jù)本發(fā)明的制造品。通過(guò)從存儲(chǔ)設(shè)備直接執(zhí)行編程代碼、通過(guò)從存儲(chǔ)設(shè)備向諸如硬盤(pán)、RAM等另一存儲(chǔ)設(shè)備中拷貝代碼或者通過(guò)使用傳輸型介質(zhì)、例如數(shù)字和模擬通信鏈路傳輸代碼用于遠(yuǎn)程執(zhí)行來(lái)使用包含代碼的制造品??梢酝ㄟ^(guò)組合包含根據(jù)本發(fā)明的代碼的一個(gè)或者多個(gè)機(jī)器可讀存儲(chǔ)設(shè)備與適當(dāng)處理硬件以執(zhí)行其中包含的代碼來(lái)實(shí)現(xiàn)本發(fā)明的方法。用于實(shí)現(xiàn)本發(fā)明的裝置可以是一個(gè)或者多個(gè)處理設(shè)備和存儲(chǔ)系統(tǒng),該一個(gè)或者多個(gè)處理設(shè)備和存儲(chǔ)系統(tǒng)包含根據(jù)本發(fā)明編碼的程序或者具有對(duì)該程序的網(wǎng)絡(luò)訪問(wèn)。因此重要的是盡管在具有安裝(或者執(zhí)行)的軟件的全功能計(jì)算機(jī)(服務(wù)器)系統(tǒng)的背景中描述本發(fā)明的一個(gè)示例實(shí)施例,但是本領(lǐng)域技術(shù)人員將理解能夠用多種形式分布本發(fā)明示例實(shí)施例的軟件方面為程序產(chǎn)品并且本發(fā)明的示例實(shí)施例無(wú)論用來(lái)實(shí)際實(shí)現(xiàn)分布的特定介質(zhì)類(lèi)型如何都同樣適用。盡管已經(jīng)參照示例實(shí)施例描述本發(fā)明,但是本領(lǐng)域技術(shù)人員將理解可以做出各種改變并且等效要素可以替換其要素而未脫離本發(fā)明的范圍。此外,可以做出許多修改以使特定系統(tǒng)、設(shè)備或者其部件適應(yīng)本發(fā)明的教導(dǎo)而未脫離其實(shí)質(zhì)范圍。因此旨在于本發(fā)明不限于公開(kāi)的用于實(shí)現(xiàn)本發(fā)明的具體實(shí)施例而是本發(fā)明將包括落入所附權(quán)利要求的范圍內(nèi)的所有實(shí)施例。另外,使用術(shù)語(yǔ)第一、第二等未表示任何順序或者重要性而實(shí)際上術(shù)語(yǔ)第一、第二等用來(lái)區(qū)分一個(gè)要素與另一要素。這里所用術(shù)語(yǔ)僅用于描述具體實(shí)施例而并非旨在于限制本發(fā)明。如這里所用,除非上下文另有明示,則單數(shù)形式“一(個(gè))”和“該(所述)”旨在于也包括復(fù)數(shù)形式。還將理解術(shù)語(yǔ)“包括”在使用于本說(shuō)明書(shū)中時(shí)指定存在陳述的特征、整件、步驟、操作、單元和/或部件、但是未排除存在或者添加一個(gè)或者多個(gè)其它特征、整件、步驟、操作、單元、部件和/或其組合。在所附權(quán)利要求中的所有裝置或者步驟加上功能單元的對(duì)應(yīng)結(jié)構(gòu)、材料、動(dòng)作和等效物旨在于包括如具體要求保護(hù)的用于與其它要求保護(hù)的單元組合執(zhí)行功能的任何結(jié)構(gòu)、材料或者動(dòng)作。本發(fā)明的描述已經(jīng)出于示例和描述的目的而加以呈現(xiàn)、但是并非旨在于窮舉本發(fā)明或者使本發(fā)明限于公開(kāi)的形式。許多修改和變化將為本領(lǐng)域普通技術(shù)人員所清楚而未脫離本發(fā)明的范圍和精神實(shí)質(zhì)。選擇和描述實(shí)施例以便最好地說(shuō)明本發(fā)明的原理和實(shí)際應(yīng)用并且使本領(lǐng)域其他普通技術(shù)人員能夠針對(duì)具有如與設(shè)想的特定使用相適合的各種修改的各種實(shí)施例來(lái)理解本發(fā)明。
權(quán)利要求
1.一種用于在數(shù)據(jù)處理系統(tǒng)中創(chuàng)建和實(shí)施文件克隆的方法,所述數(shù)據(jù)處理系統(tǒng)具有處理器和對(duì)文件存儲(chǔ)和文件管理設(shè)施的訪問(wèn),所述方法包括 選擇與原文件對(duì)應(yīng)的原索引節(jié)點(diǎn),所述原索引節(jié)點(diǎn)具有一個(gè)或者多個(gè)數(shù)據(jù)塊地址鏈接; 創(chuàng)建克隆索引節(jié)點(diǎn); 接收用于所述克隆索引節(jié)點(diǎn)的名稱(chēng)條目和目標(biāo)目錄; 響應(yīng)于接收所述名稱(chēng)條目,向所述目標(biāo)目錄中插入包含所述名稱(chēng)條目的目錄條目; 將所述克隆索引節(jié)點(diǎn)初始化為不可變克隆父代;以及 更新索引節(jié)點(diǎn)映射以將所述克隆索引節(jié)點(diǎn)標(biāo)識(shí)為使用中。
2.根據(jù)權(quán)利要求1所述的方法,其中將所述克隆索引節(jié)點(diǎn)初始化為克隆父代還包括 向所述克隆索引節(jié)點(diǎn)拷貝所述一個(gè)或者多個(gè)數(shù)據(jù)塊地址鏈接和所述原索引節(jié)點(diǎn)的首部; 將所述克隆索引節(jié)點(diǎn)的塊計(jì)數(shù)更新為等于所述數(shù)據(jù)塊地址鏈接的數(shù)目,其中所述克隆索引節(jié)點(diǎn)的所述塊計(jì)數(shù)是與所述原索引節(jié)點(diǎn)中存儲(chǔ)的相同的數(shù)據(jù)塊數(shù)目; 將所述克隆索引節(jié)點(diǎn)中的鏈接計(jì)數(shù)設(shè)置成二(2); 向所述克隆索引節(jié)點(diǎn)拷貝所述原索引節(jié)點(diǎn)的索引節(jié)點(diǎn)時(shí)間戳和許可位; 確定當(dāng)前執(zhí)行操作的所有者證書(shū); 基于所述當(dāng)前執(zhí)行操作的所述所有者證書(shū)來(lái)設(shè)置所述克隆索引節(jié)點(diǎn)的所有者字段;以及 保存一個(gè)或者多個(gè)所述初始化步驟作為原子事務(wù)。
3.根據(jù)權(quán)利要求1所述的方法,還包括 將所述原索引節(jié)點(diǎn)的所述一個(gè)或者多個(gè)數(shù)據(jù)塊地址鏈接中的每個(gè)數(shù)據(jù)塊地址鏈接更新成一個(gè)或者多個(gè)復(fù)本,其中所述一個(gè)或者多個(gè)復(fù)本對(duì)應(yīng)于所述一個(gè)或者多個(gè)數(shù)據(jù)塊地址鏈接,并且指示所述原文件中的對(duì)應(yīng)數(shù)據(jù)或者元數(shù)據(jù)尚未被修改; 將所述原索引節(jié)點(diǎn)的塊計(jì)數(shù)設(shè)置成零,其中所述原索引節(jié)點(diǎn)的所述塊計(jì)數(shù)代表所述原索引節(jié)點(diǎn)中存儲(chǔ)的數(shù)據(jù)塊地址鏈接的數(shù)目;以及 記錄所述克隆索引節(jié)點(diǎn)作為所述原索引節(jié)點(diǎn)的所述克隆父代。
4.根據(jù)權(quán)利要求1所述的方法,還包括 標(biāo)識(shí)所述克隆索引節(jié)點(diǎn)的所有者; 確定所述克隆索引節(jié)點(diǎn)的所述所有者與所述原索引節(jié)點(diǎn)的所有者是否不同;以及響應(yīng)于確定所述克隆索引節(jié)點(diǎn)的所述所有者與所述原索引節(jié)點(diǎn)的所述所有者不同,將所述原索引節(jié)點(diǎn)的盤(pán)塊配額轉(zhuǎn)移給所述克隆索引節(jié)點(diǎn)的所述所有者。
5.根據(jù)權(quán)利要求1所述的方法,其中所述分配的克隆索引節(jié)點(diǎn)指向現(xiàn)有文件,所述方法還包括 在所述現(xiàn)有文件中存儲(chǔ)克隆屬性;以及 將所述現(xiàn)有文件標(biāo)識(shí)為克隆父代。
6.根據(jù)權(quán)利要求1所述的方法,還包括 分配新索引節(jié)點(diǎn)作為新索引節(jié)點(diǎn); 接收用于所述新索引節(jié)點(diǎn)的新名稱(chēng)條目和目標(biāo)目錄;響應(yīng)于接收所述新索引節(jié)點(diǎn)的所述新名稱(chēng)條目和所述目標(biāo)目錄,向用于所述新索引節(jié)點(diǎn)的所述目標(biāo)目錄中插入包含所述新名稱(chēng)條目的目錄條目; 初始化所述新索引節(jié)點(diǎn),其中所述初始化還包括 向所述新索引節(jié)點(diǎn)拷貝所述克隆索引節(jié)點(diǎn)的所述首部; 設(shè)置用于所述克隆索引節(jié)點(diǎn)的所述一個(gè)或者多個(gè)數(shù)據(jù)塊地址鏈接的一個(gè)或者多個(gè)復(fù)本; 將所述新索引節(jié)點(diǎn)的鏈接計(jì)數(shù)設(shè)置成一(I); 將所述新索引節(jié)點(diǎn)的塊計(jì)數(shù)設(shè)置成零; 記錄所述克隆索引節(jié)點(diǎn)以作為所述新索引節(jié)點(diǎn)的所述克隆父代;以及 將所述新索引節(jié)點(diǎn)的創(chuàng)建時(shí)間設(shè)置成當(dāng)前時(shí)間; 遞增所述克隆索引節(jié)點(diǎn)的所述鏈接計(jì)數(shù);以及 更新所述索引節(jié)點(diǎn)映射以將所述新索引節(jié)點(diǎn)標(biāo)識(shí)為使用中。
7.根據(jù)權(quán)利要求1所述的方法,還包括響應(yīng)于接收對(duì)所述原文件的新數(shù)據(jù)更新 將所述源索引節(jié)點(diǎn)的所述復(fù)本替換為指向所述元數(shù)據(jù)塊的拷貝的鏈接; 用所述新數(shù)據(jù)更新來(lái)更新所述原索引節(jié)點(diǎn);以及 更新所述原索引節(jié)點(diǎn)的所述塊計(jì)數(shù)。
8.根據(jù)權(quán)利要求6所述的方法,還包括 響應(yīng)于接收針對(duì)所述新索引節(jié)點(diǎn)的刪除請(qǐng)求 讀取所述克隆索引節(jié)點(diǎn)的所述鏈接計(jì)數(shù); 響應(yīng)于所述克隆索引節(jié)點(diǎn)的所述鏈接計(jì)數(shù)等于一(I) 刪除所述新索引節(jié)點(diǎn);以及 遞減所述克隆索引節(jié)點(diǎn)的所述鏈接計(jì)數(shù);以及 響應(yīng)于所述克隆索引節(jié)點(diǎn)的所述鏈接計(jì)數(shù)不等于一(I),忽略所述刪除請(qǐng)求。
9.根據(jù)權(quán)利要求1所述的方法,還包括 響應(yīng)于數(shù)據(jù)管理應(yīng)用將所述一個(gè)或者多個(gè)克隆文件從所述數(shù)據(jù)處理系統(tǒng)的儲(chǔ)存器移至離線儲(chǔ)存器并且發(fā)出對(duì)任何克隆文件中的數(shù)據(jù)的讀取,執(zhí)行對(duì)經(jīng)由所述克隆索引節(jié)點(diǎn)的所述復(fù)本而被間接鏈接的數(shù)據(jù)的不可見(jiàn)讀??; 響應(yīng)于所述數(shù)據(jù)管理應(yīng)用發(fā)出對(duì)任何克隆文件中的數(shù)據(jù)的寫(xiě)入,如果所述寫(xiě)入將導(dǎo)致所述克隆索引節(jié)點(diǎn)的一個(gè)或者多個(gè)復(fù)本被改寫(xiě),則靜默地忽略所述寫(xiě)入;以及 響應(yīng)于所述數(shù)據(jù)管理應(yīng)用請(qǐng)求基于最后訪問(wèn)時(shí)間而將所述一個(gè)或者多個(gè)克隆文件從所述離線儲(chǔ)存器遷移至所述數(shù)據(jù)處理系統(tǒng)的所述儲(chǔ)存器,自治地更新所述克隆索引節(jié)點(diǎn)的所述最后訪問(wèn)時(shí)間。
10.一種數(shù)據(jù)處理系統(tǒng),包括 本地處理器; 所述本地處理器可訪問(wèn)的文件儲(chǔ)存器和文件管理設(shè)施;以及 在所述處理器上執(zhí)行的處理邏輯,用于使所述數(shù)據(jù)處理系統(tǒng)能夠執(zhí)行以下功能 選擇與原文件對(duì)應(yīng)的原索引節(jié)點(diǎn),所述原索引節(jié)點(diǎn)具有一個(gè)或者多個(gè)數(shù)據(jù)塊地址鏈接; 創(chuàng)建克隆索引節(jié)點(diǎn);接收用于所述克隆索引節(jié)點(diǎn)的名稱(chēng)條目和目標(biāo)目錄; 響應(yīng)于接收所述名稱(chēng)條目,向所述目標(biāo)目錄中插入包含所述名稱(chēng)條目的目錄條目; 將所述克隆索引節(jié)點(diǎn)初始化為不可變克隆父代;以及 更新索引節(jié)點(diǎn)映射以將所述克隆索引節(jié)點(diǎn)標(biāo)識(shí)為使用中。
11.根據(jù)權(quán)利要求10所述的數(shù)據(jù)處理系統(tǒng),其中將所述克隆索引節(jié)點(diǎn)初始化為克隆父代還包括用于以下的處理邏輯 向所述克隆索引節(jié)點(diǎn)拷貝所述一個(gè)或者多個(gè)數(shù)據(jù)塊地址鏈接和所述原索引節(jié)點(diǎn)的首部; 將所述克隆索引節(jié)點(diǎn)的塊計(jì)數(shù)更新為等于所述數(shù)據(jù)塊地址鏈接的數(shù)目,其中所述克隆索引節(jié)點(diǎn)的所述塊計(jì)數(shù)是與所述原索引節(jié)點(diǎn)中存儲(chǔ)的相同的數(shù)據(jù)塊數(shù)目; 將所述克隆索引節(jié)點(diǎn)中的鏈接計(jì)數(shù)設(shè)置成二(2); 向所述克隆索引節(jié)點(diǎn)拷貝所述原索引節(jié)點(diǎn)的索引節(jié)點(diǎn)時(shí)間戳和許可位; 確定當(dāng)前執(zhí)行操作的所有者證書(shū); 基于所述當(dāng)前執(zhí)行操作的所述所有者證書(shū)設(shè)置所述克隆索引節(jié)點(diǎn)的所有者字段;以及 保存一個(gè)或者多個(gè)所述初始化步驟作為原子事務(wù)。
12.根據(jù)權(quán)利要求10所述的數(shù)據(jù)處理系統(tǒng),所述處理邏輯還包括用于以下的邏輯 將所述原索引節(jié)點(diǎn)的所述一個(gè)或者多個(gè)數(shù)據(jù)塊地址鏈接中的每個(gè)數(shù)據(jù)塊地址鏈接更新成一個(gè)或者多個(gè)復(fù)本,其中所述一個(gè)或者多個(gè)復(fù)本對(duì)應(yīng)于所述一個(gè)或者多個(gè)數(shù)據(jù)塊地址鏈接,并且指示所述原文件中的對(duì)應(yīng)數(shù)據(jù)或者元數(shù)據(jù)尚未被修改; 將所述原索引節(jié)點(diǎn)的塊計(jì)數(shù)設(shè)置成零,其中所述原索引節(jié)點(diǎn)的所述塊計(jì)數(shù)代表所述原索引節(jié)點(diǎn)中存儲(chǔ)的數(shù)據(jù)塊地址鏈接的數(shù)目;以及 將所述克隆索引節(jié)點(diǎn)記錄為所述原索引節(jié)點(diǎn)的所述克隆父代。
13.根據(jù)權(quán)利要求10所述的數(shù)據(jù)處理系統(tǒng),所述處理邏輯還包括用于以下的邏輯 標(biāo)識(shí)所述克隆索引節(jié)點(diǎn)的所有者; 確定所述克隆索引節(jié)點(diǎn)的所述所有者與所述原索引節(jié)點(diǎn)的所有者是否不同;以及響應(yīng)于確定所述克隆索引節(jié)點(diǎn)的所述所有者與所述原索引節(jié)點(diǎn)的所述所有者不同,將所述原索引節(jié)點(diǎn)的盤(pán)塊配額轉(zhuǎn)移給所述克隆索引節(jié)點(diǎn)的所述所有者。
14.根據(jù)權(quán)利要求10所述的數(shù)據(jù)處理系統(tǒng),其中所述分配的克隆索引節(jié)點(diǎn)指向現(xiàn)有文件,所述處理邏輯還包括用于以下的邏輯 在所述現(xiàn)有文件中存儲(chǔ)克隆屬性;以及 將所述現(xiàn)有文件標(biāo)識(shí)為克隆父代。
15.根據(jù)權(quán)利要求10所述的數(shù)據(jù)處理系統(tǒng),所述處理邏輯還包括用于以下的邏輯 分配新索引節(jié)點(diǎn)作為新索引節(jié)點(diǎn); 接收用于所述新索引節(jié)點(diǎn)的新名稱(chēng)條目和目標(biāo)目錄; 響應(yīng)于接收所述新索引節(jié)點(diǎn)的所述新名稱(chēng)條目和所述目標(biāo)目錄,向用于所述新索引節(jié)點(diǎn)的所述目標(biāo)目錄中插入包含所述新名稱(chēng)條目的目錄條目; 初始化所述新索引節(jié)點(diǎn),其中所述初始化還包括 向所述新索引節(jié)點(diǎn)拷貝所述克隆索引節(jié)點(diǎn)的所述首部; 設(shè)置用于所述克隆索引節(jié)點(diǎn)的所述一個(gè)或者多個(gè)數(shù)據(jù)塊地址鏈接的一個(gè)或者多個(gè)復(fù)本; 將所述新索引節(jié)點(diǎn)的鏈接計(jì)數(shù)設(shè)置成一(I); 將所述新索引節(jié)點(diǎn)的塊計(jì)數(shù)設(shè)置成零; 將所述克隆索引節(jié)點(diǎn)記錄為所述新索引節(jié)點(diǎn)的所述克隆父代; 以及 將所述新索引節(jié)點(diǎn)的創(chuàng)建時(shí)間設(shè)置成當(dāng)前時(shí)間; 遞增所述克隆索引節(jié)點(diǎn)的所述鏈接計(jì)數(shù);以及 更新所述索引節(jié)點(diǎn)映射以將所述新索引節(jié)點(diǎn)標(biāo)識(shí)為使用中。
16.根據(jù)權(quán)利要求10所述的數(shù)據(jù)處理系統(tǒng),所述處理邏輯還包括用于以下的邏輯響應(yīng)于接收對(duì)所述原文件的新數(shù)據(jù)更新, 將所述源索引節(jié)點(diǎn)的所述復(fù)本替換為指向所述元數(shù)據(jù)塊的拷貝的鏈接; 用所述新數(shù)據(jù)更新來(lái)更新所述原索引節(jié)點(diǎn);以及 更新所述原索引節(jié)點(diǎn)的所述塊計(jì)數(shù)。
17.根據(jù)權(quán)利要求15所述的數(shù)據(jù)處理系統(tǒng),所述處理邏輯還包括用于以下的邏輯響應(yīng)于接收針對(duì)所述新索引節(jié)點(diǎn)的刪除請(qǐng)求 讀取所述克隆索引節(jié)點(diǎn)的所述鏈接計(jì)數(shù); 響應(yīng)于所述克隆索引節(jié)點(diǎn)的所述鏈接計(jì)數(shù)等于一(I) 刪除所述新索引節(jié)點(diǎn);以及 遞減所述克隆索引節(jié)點(diǎn)的所述鏈接計(jì)數(shù);以及 響應(yīng)于所述克隆索引節(jié)點(diǎn)的所述鏈接計(jì)數(shù)不等于一(I),忽略所述刪除請(qǐng)求。
18.根據(jù)權(quán)利要求10所述的數(shù)據(jù)處理系統(tǒng),所述處理邏輯還包括用于以下的邏輯 響應(yīng)于數(shù)據(jù)管理應(yīng)用將所述一個(gè)或者多個(gè)克隆文件從所述數(shù)據(jù)處理系統(tǒng)的儲(chǔ)存器移至離線儲(chǔ)存器并且發(fā)出對(duì)任何克隆文件中的數(shù)據(jù)的讀取,執(zhí)行對(duì)經(jīng)由所述克隆索引節(jié)點(diǎn)的所述復(fù)本而被間接鏈接的數(shù)據(jù)的不可見(jiàn)讀?。? 響應(yīng)于所述數(shù)據(jù)管理應(yīng)用發(fā)出對(duì)任何克隆文件中的數(shù)據(jù)的寫(xiě)入,如果所述寫(xiě)入將導(dǎo)致所述克隆索引節(jié)點(diǎn)的一個(gè)或者多個(gè)復(fù)本被改寫(xiě),則靜默地忽略所述寫(xiě)入;以及 響應(yīng)于所述數(shù)據(jù)管理應(yīng)用請(qǐng)求基于最后訪問(wèn)時(shí)間而將所述一個(gè)或者多個(gè)克隆文件從所述離線儲(chǔ)存器遷移至所述數(shù)據(jù)處理系統(tǒng)的所述儲(chǔ)存器,自治地更新所述克隆索引節(jié)點(diǎn)的所述最后訪問(wèn)時(shí)間。
19.一種數(shù)據(jù)處理系統(tǒng)計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),具有在其中實(shí)現(xiàn)的可由機(jī)器處理的多個(gè)指令,其中所述多個(gè)指令在由所述機(jī)器處理時(shí)使所述機(jī)器執(zhí)行根據(jù)權(quán)利要求1至9任一項(xiàng)所述的方法。
全文摘要
一種用于使用反向復(fù)本引用來(lái)創(chuàng)建和實(shí)施文件克隆的方法、系統(tǒng)和計(jì)算機(jī)程序產(chǎn)品??寺∷饕?jié)點(diǎn)被創(chuàng)建以作為原索引節(jié)點(diǎn)的拷貝??寺∷饕?jié)點(diǎn)和原索引節(jié)點(diǎn)是最終用戶不可區(qū)分的。所創(chuàng)建的每個(gè)附加文件克隆產(chǎn)生克隆索引節(jié)點(diǎn)。不可變的克隆父代索引節(jié)點(diǎn)被創(chuàng)建,其包含盤(pán)塊地址,而可寫(xiě)的克隆索引節(jié)點(diǎn)則包含將克隆索引節(jié)點(diǎn)鏈接到克隆父代索引節(jié)點(diǎn)中所引用的數(shù)據(jù)塊的復(fù)本。原索引節(jié)點(diǎn)中的數(shù)據(jù)塊地址鏈接被移至新克隆父代索引節(jié)點(diǎn),并且復(fù)本替換原索引節(jié)點(diǎn)中的原數(shù)據(jù)塊地址鏈接。當(dāng)克隆文件被更新時(shí),新數(shù)據(jù)被寫(xiě)入新盤(pán)位置,并且克隆索引節(jié)點(diǎn)中的對(duì)應(yīng)復(fù)本被數(shù)據(jù)塊鏈接地址替換,保持克隆父代索引節(jié)點(diǎn)的數(shù)據(jù)不變。
文檔編號(hào)G06F17/30GK103038767SQ201180036918
公開(kāi)日2013年4月10日 申請(qǐng)日期2011年7月20日 優(yōu)先權(quán)日2010年7月30日
發(fā)明者T·E·恩格爾塞彭, F·施穆克 申請(qǐng)人:國(guó)際商業(yè)機(jī)器公司