專利名稱:文件系統(tǒng)中有效文件內(nèi)容搜索的系統(tǒng)和方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機系統(tǒng),尤其涉及存儲系統(tǒng)。
背景技術(shù):
計算機系統(tǒng)經(jīng)常處理大量信息,包括應(yīng)用數(shù)據(jù)和用來處理這些數(shù)據(jù)的可執(zhí)行代碼。在很多實施方式中,計算機系統(tǒng)提供了用來存儲數(shù)據(jù)的各種類型的大容量存儲設(shè)備,比如,磁盤和光盤驅(qū)動器、磁帶驅(qū)動器等。為了提供可以訪問所存儲數(shù)據(jù)的正規(guī)和系統(tǒng)的接口,常常通過軟件(如操作系統(tǒng))將這些存儲設(shè)備編排成文件的分層結(jié)構(gòu)。通常,一個文件規(guī)定了用戶在存儲設(shè)備內(nèi)能操作的最小數(shù)據(jù)粒度,盡管各種應(yīng)用和操作系統(tǒng)過程可以以比整個文件更低的粒度對文件中的數(shù)據(jù)進行操作。
在許多常規(guī)的基于文件的計算機系統(tǒng)中,所感興趣的數(shù)據(jù)可能分布在位于存儲系統(tǒng)的完全不同的邏輯和物理區(qū)域中的許多文件中。不同的計算平臺通常提供了各種類型的搜索應(yīng)用,用戶通過這些搜索應(yīng)用可以判斷哪些文件含有特定數(shù)據(jù)模式(比如文本串)。例如,代碼開發(fā)者可以利用這種搜索應(yīng)用來識別大規(guī)模復(fù)雜的代碼庫(codebase)中哪些文件含有特定修訂串,從而可以選擇這些文件進行操作。
然而,典型的搜索應(yīng)用需要讀取文件的全部內(nèi)容才能判斷該文件中是否有給定數(shù)據(jù)模式,盡管在大多數(shù)情況下,給定數(shù)據(jù)模式包括整個文件內(nèi)容的一小部分(如果給定文件中確實有給定數(shù)據(jù)模式的話)。此外,許多典型的搜索應(yīng)用沒有歷史記錄,因此,如果重復(fù)搜索給定文件中的給定數(shù)據(jù)模式,那么在搜索過程中可能要再檢查文件的全部內(nèi)容。這種冗余的文件訪問會大大降低經(jīng)常執(zhí)行文件內(nèi)容搜索的系統(tǒng)的性能。
發(fā)明內(nèi)容
本文公開了文件系統(tǒng)中用于有效文件內(nèi)容搜索的系統(tǒng)和方法的各種實施方式。在一種實施方式中,該系統(tǒng)可以包括用來存儲數(shù)據(jù)的存儲設(shè)備和用來管理對存儲設(shè)備的訪問的文件系統(tǒng)。該文件系統(tǒng)可以用來檢測搜索操作以判斷存儲設(shè)備中所存儲的第一文件中給定數(shù)據(jù)模式的存在性,并將給定數(shù)據(jù)模式的標(biāo)記和搜索操作的結(jié)果數(shù)據(jù)的標(biāo)記存儲在與第一文件有關(guān)的第一記錄中。
在該系統(tǒng)的一種具體實施方式
中,在檢測到搜索操作后,文件系統(tǒng)還可以用來掃描第一記錄以判斷其中是否存儲有給定數(shù)據(jù)模式的標(biāo)記,并且如果判定其中存儲有標(biāo)記,則只訪問第一文件的一部分。
在該系統(tǒng)的另一種具體實施方式
中,如果第一文件中沒有給定數(shù)據(jù)模式,那么文件系統(tǒng)還可以用來將給定數(shù)據(jù)模式的標(biāo)記存儲在第一記錄中。另一方面,如果第一文件中有給定數(shù)據(jù)模式,那么文件系統(tǒng)還可以用來將給定數(shù)據(jù)模式的標(biāo)記和模式位置信息存儲在第二記錄中。
此外,還設(shè)想了一種方法,在一種實施方式中,該方法包括存儲多個文件、檢測搜索操作以判斷第一文件中給定數(shù)據(jù)模式的存在性,和將給定數(shù)據(jù)模式的標(biāo)記和搜索操作的結(jié)果數(shù)據(jù)的標(biāo)記存儲在與第一文件有關(guān)的第一記錄中。
圖1是說明存儲系統(tǒng)的一種實施方式的框圖。
圖2是說明操作系統(tǒng)體系結(jié)構(gòu)及其與存儲設(shè)備的接口的一種實施方式的框圖。
圖3是說明用來檢測對文件的搜索操作和存儲相應(yīng)記錄的文件系統(tǒng)的一種實施方式的框圖。
圖4是說明檢測對文件的搜索操作和存儲相應(yīng)記錄的方法的一種圖5是說明保持與搜索操作相應(yīng)的所存儲記錄的參照完整性的方法的一種實施方式的流程圖。
盡管本發(fā)明可以有各種修改和可選擇形式,不過,這里利用附圖中的例子來說明其特定實施方式,并將詳述這些實施方式。然而,應(yīng)當(dāng)理解,這些附圖及其詳細描述并不是要將本發(fā)明局限于所公開的特殊形式,相反,在附屬權(quán)利要求書所規(guī)定的本發(fā)明思想和范圍內(nèi),本發(fā)明可以涉及所有修改方式、等價方式和可選方式。
具體實施例方式
存儲系統(tǒng)和文件系統(tǒng)綜述下面,回到圖1,圖中示出了存儲系統(tǒng)的一種實施方式的框圖。在舉例實施方式中,存儲系統(tǒng)10包括多個主設(shè)備20a和20b,這些主設(shè)備通過系統(tǒng)互連40與多個存儲設(shè)備30a和30b連接。此外,在舉例實施方式中,主設(shè)備20b包括系統(tǒng)存儲器25。為了便于說明,這里用跟有字母的標(biāo)號所表示的單元可以統(tǒng)一用單獨標(biāo)號來表示。例如,主機設(shè)備20a和20b以及存儲設(shè)備30a和30b可以統(tǒng)一用主設(shè)備20和存儲設(shè)備30來表示。
在存儲系統(tǒng)10的各種實施方式中,主設(shè)備20可以用來存取一個或多個存儲設(shè)備30上所存儲的數(shù)據(jù)。在一種實施方式中,存儲系統(tǒng)10可以在單一計算機系統(tǒng)內(nèi)實現(xiàn),比如實現(xiàn)為一個綜合存儲服務(wù)器。在這種實施方式中,例如,主設(shè)備20可以是單獨處理器,系統(tǒng)存儲器25可以是高速緩沖存儲器(比如靜態(tài)RAM(SRAM)),存儲設(shè)備30可以是大容量存儲設(shè)備(比如硬盤驅(qū)動器或者其他可寫或可重寫媒介),而系統(tǒng)互連40可以包括外圍總線互連(比如外設(shè)部件接口(PCI)總線)。在某些這樣的實施方式中,系統(tǒng)互連40可以包括主設(shè)備20與存儲設(shè)備30之間的若干種互連。例如,系統(tǒng)互連40可以包括一條或多條用來與主設(shè)備20連接的處理器總線(未示出);一個或多個用來使處理器總線與一條或多條外圍總線連接的總線橋(未示出);和一個或多個用來使外圍總線與存儲設(shè)備30連接的存儲設(shè)備接口(未示出)。存儲設(shè)備接口類型在不同的實施方式中可以包括例如小型計算機系統(tǒng)接口(SCSI)、AT附屬包接口(ATAPI)、法爾(Firewire)總線和/或通用串行總線(USB),盡管許多包括其他接口類型的其他實施方式也是可行和可預(yù)期的。
按照在單一計算機系統(tǒng)內(nèi)實現(xiàn)的存儲系統(tǒng)10的一種實施方式,存儲系統(tǒng)10可以用來為一個或多個其他計算機系統(tǒng)(未示出)提供大多數(shù)數(shù)據(jù)存儲需要,并可以用來與這些其他計算機系統(tǒng)通信。在另一種實施方式中,存儲系統(tǒng)10可以例如配置成分布式存儲系統(tǒng)(比如存儲區(qū)域網(wǎng)絡(luò)(SAN))。在這種實施方式中,主設(shè)備20可以例如是單獨計算機系統(tǒng)(比如服務(wù)器系統(tǒng)),系統(tǒng)存儲器25可以由一種或多種動態(tài)RAM(DRAM)構(gòu)成,存儲設(shè)備30可以是獨立存儲節(jié)點(每個節(jié)點都包括一個或多個硬盤驅(qū)動器或其他類型的存儲器),而系統(tǒng)互連40可以是通信網(wǎng)絡(luò)(比如以太網(wǎng)或光纖信道)。存儲系統(tǒng)10的分布式存儲配置可以有利于定標(biāo)存儲系統(tǒng)容量以及主機與存儲設(shè)備之間的數(shù)據(jù)帶寬。
在又一種實施方式中,存儲系統(tǒng)10可以例如配置成混合存儲系統(tǒng),其中,一些存儲設(shè)備30集成在與一些主設(shè)備20相同的計算機系統(tǒng)中,而其他存儲設(shè)備30配置成通過網(wǎng)絡(luò)與其他主設(shè)備20連接的獨立設(shè)備。在這種混合存儲系統(tǒng)中,系統(tǒng)互連40可以包括多種互連機制(比如上述外圍總線和網(wǎng)絡(luò)互連)。
應(yīng)當(dāng)注意,盡管圖1中示出了兩個主設(shè)備20和兩個存儲設(shè)備30,然而,在其他實施方式中,可以設(shè)想存儲系統(tǒng)10可以有任意多個每種這些類型的設(shè)備。此外,在存儲系統(tǒng)10的某些實施方式中,可以例如在其他主設(shè)備20或存儲設(shè)備30中使用一個以上的系統(tǒng)存儲器25。再者,在某些實施方式中,給定系統(tǒng)存儲器25可以置于主設(shè)備20和存儲設(shè)備30之外,并且可以與給定主設(shè)備20或存儲設(shè)備30直接連接或者通過系統(tǒng)互連40間接連接。
在存儲系統(tǒng)10的許多實施方式中,一個或多個主設(shè)備20可以用來執(zhí)行程序指令和用來存取數(shù)據(jù),從而完成計算功能。在某些實施方式中,系統(tǒng)存儲器25可以是用來存儲這些程序指令和數(shù)據(jù)的計算機可存取媒介的一種實施方式。然而,在其他實施方式中,可以根據(jù)計算機可存取媒介的不同類型來接收、發(fā)送或存儲程序指令和/或數(shù)據(jù)。一般而言,計算機可存取媒介可以包括諸如磁或光媒介的存儲媒介或存儲器媒介,例如,作為存儲設(shè)備30包含在存儲系統(tǒng)10中的磁盤或CD-ROM。計算機可存取媒介還可以包括易失性或非易失性媒介,比如RAM(如SDRAM、DDR SDRAM、RDRAM、SRAM等)、ROM等,這些媒介可以作為系統(tǒng)存儲器25包含在存儲系統(tǒng)10的某些實施方式中。再者,計算機可存取媒介可以包括通過通信媒介(比如網(wǎng)絡(luò)和/或無線鏈路)傳送的信號(比如電、電磁或數(shù)字信號)的傳輸媒介,這些通信媒介可以作為系統(tǒng)互連40包含有在存儲系統(tǒng)10的某些實施方式中。
在某些實施方式中,上述計算機可存取媒介中所存儲的程序指令和數(shù)據(jù)可以實現(xiàn)操作系統(tǒng),而操作系統(tǒng)反過來又提供了各種應(yīng)用程序的運行環(huán)境。例如,給定主設(shè)備20可以用來運行一種MicrosoftWindows操作系統(tǒng)、Unix操作系統(tǒng)、Apple操作系統(tǒng)或其他合適的操作系統(tǒng)。另外,給定主設(shè)備可以用來執(zhí)行應(yīng)用程序,比如字處理器、web瀏覽器和/或服務(wù)器、電子郵件客戶機和/或服務(wù)器和多媒體應(yīng)用以及許多其他可能的應(yīng)用。
在給定主設(shè)備20上的運行期間,操作系統(tǒng)或給定應(yīng)用可以產(chǎn)生數(shù)據(jù)要由給定存儲設(shè)備30裝載或存儲到給定存儲設(shè)備30中的請求。例如,與操作系統(tǒng)或其本身應(yīng)用的部分相應(yīng)的代碼可以存儲在給定存儲設(shè)備30上,因此,如果調(diào)用所需操作系統(tǒng)例程或應(yīng)用程序,則可以檢索所執(zhí)行的相應(yīng)代碼。同樣,操作系統(tǒng)或應(yīng)用運行可能產(chǎn)生所要存儲的數(shù)據(jù)。
許多操作系統(tǒng)實施方式提供了數(shù)據(jù)和控制結(jié)構(gòu),用于將存儲設(shè)備30所提供的存儲空間編排成文件。在不同的實施方式中,數(shù)據(jù)結(jié)構(gòu)可以包括一個或多個表,用來存儲諸如每一文件的身份、它在存儲設(shè)備30中的位置(比如變換到特定存儲設(shè)備內(nèi)的特定物理位置)的信息以及關(guān)于如下詳述的每一文件的其他信息。此外,在不同的實施方式中,控制結(jié)構(gòu)可以包括用于操作文件的可執(zhí)行例程,比如,如下所詳述的用于改變文件身份和用于修改文件內(nèi)容的功能調(diào)用。這些數(shù)據(jù)和控制結(jié)構(gòu)在此可以統(tǒng)稱為文件系統(tǒng),而給定文件系統(tǒng)所執(zhí)行的特定數(shù)據(jù)格式和協(xié)議在此可以統(tǒng)稱為文件系統(tǒng)的格式。
在某些實施方式中,文件系統(tǒng)可以集成到操作系統(tǒng)中,這樣,對存儲設(shè)備30中所存儲的數(shù)據(jù)的任何訪問由文件系統(tǒng)的控制和數(shù)據(jù)結(jié)構(gòu)來管理。不同的操作系統(tǒng)可以利用不同的格式執(zhí)行不同的本機文件系統(tǒng),但在某些實施方式中,給定操作系統(tǒng)可以包括支持多個不同類型的文件系統(tǒng)格式(包括屬于其他操作系統(tǒng)的文件系統(tǒng)格式)的文件系統(tǒng)。在這樣一些實施方式中,文件系統(tǒng)所支持的不同文件系統(tǒng)格式在此可以稱為本地文件系統(tǒng)。另外,在某些實施方式中,文件系統(tǒng)可以利用分層結(jié)構(gòu)中所安排的多層功能性來實現(xiàn),如圖2中所示。
圖2示出了操作系統(tǒng)體系結(jié)構(gòu)及其與存儲設(shè)備的接口的一種實施方式。在舉例實施方式中,操作系統(tǒng)200包括用戶空間210和內(nèi)核空間220。用戶空間210包括多個進程(process)212A-C,其中每一進程都可以對應(yīng)于給定用戶應(yīng)用。在某些實施方式中,用戶空間210內(nèi)的一些應(yīng)用進程212可以不同于操作系統(tǒng)200。這些進程可以被認為是在操作系統(tǒng)200所提供的環(huán)境中進行操作,或者是在操作系統(tǒng)200“之上”進行操作。每一進程212都可以通過調(diào)用應(yīng)用編碼接口(API)214來訪問存儲設(shè)備230A-C。API 214為進程212提供用于在內(nèi)核空間220內(nèi)進行操作的文件系統(tǒng)205的入口。在一種實施方式中,存儲設(shè)備230可以代表圖1中的存儲設(shè)備230。此外,在一種實施方式中,操作系統(tǒng)200、其任一部件和/或任一進程212可以用來在圖1的一個或多個主設(shè)備20上執(zhí)行例如在計算機可存取媒介(比如圖1中的系統(tǒng)存儲器25)中所存儲的程序指令和數(shù)據(jù)。
如上關(guān)于圖1的存儲系統(tǒng)10所述,給定主機設(shè)備20可以位于與給定存儲設(shè)備30不同的計算機系統(tǒng)中,并可以通過網(wǎng)絡(luò)訪問該存儲設(shè)備。同樣,關(guān)于操作系統(tǒng)200,在一種實施方式中,給定進程(比如進程212A)可以通過網(wǎng)絡(luò)遠程執(zhí)行和訪問存儲設(shè)備230。在舉例實施方式中,文件系統(tǒng)200包括網(wǎng)絡(luò)協(xié)議225,以支持通過遠程進程對文件系統(tǒng)的訪問。在某些實施方式中,網(wǎng)絡(luò)協(xié)議225可以包括對例如網(wǎng)絡(luò)文件系統(tǒng)(NFS)協(xié)議或通用因特網(wǎng)文件系統(tǒng)(CIFS)協(xié)議的支持,盡管可以設(shè)想可以使用任意合適的網(wǎng)絡(luò)協(xié)議,和在某些實施方式中可以支持多個這樣的協(xié)議。
文件系統(tǒng)205可以用來支持多種本地文件系統(tǒng)。在舉例實施方式中,文件系統(tǒng)205包括VERITAS(VxFS)專有格式本地文件系統(tǒng)240A、Berkeley快速文件系統(tǒng)(FFS)格式本地文件系統(tǒng)240B和不同的專有(X)格式本地文件系統(tǒng)240X。然而,可以設(shè)想,在其他實施方式中,文件系統(tǒng)205可以支持任意多個本地文件系統(tǒng)格式或其組合。為了向各種本地文件系統(tǒng)240提供通用接口,文件系統(tǒng)205具有一個虛擬文件系統(tǒng)222。在一種實施方式中,虛擬文件系統(tǒng)222可以用來將來自進程212的文件系統(tǒng)操作轉(zhuǎn)換為可適用于每一操作所對應(yīng)的特定本地文件系統(tǒng)240的格式。此外,在舉例實施方式中,操作系統(tǒng)200包括設(shè)備驅(qū)動器224,本地文件系統(tǒng)240可以通過它來訪問存儲設(shè)備230。設(shè)備驅(qū)動器224可以執(zhí)行存儲設(shè)備230所用的接口類型所特有的數(shù)據(jù)傳送協(xié)議。例如,在一種實施方式中,設(shè)備驅(qū)動器224可以提供對通過SCSI和ATAPI接口傳送數(shù)據(jù)的支持,盡管在其他實施方式中設(shè)備驅(qū)動器224可能支持其他接口類型和接口組合。
在舉例實施方式中,文件系統(tǒng)205還包括過濾驅(qū)動器221。在某些實施方式中,過濾驅(qū)動器221可以用來監(jiān)控輸入文件系統(tǒng)205的每一操作,并在檢測到特定類型的操作后,執(zhí)行附加操作或者改變所檢測操作的特性。例如,在一種實施方式中,過濾驅(qū)動器221可以用來將多個寫操作合并成單個寫操作,以改善文件系統(tǒng)性能。在另一種實施方式中,過濾驅(qū)動器221可以在檢測到對文件的寫操作后用來計算出該文件的簽名。在又一種實施方式中,過濾驅(qū)動器221可以在檢測到對一些特定文件的某些類型的操作后用來存儲與這些特定文件有關(guān)的信息(比如記錄)??梢栽O(shè)想,在某些實施方式中,過濾驅(qū)動器221可以用來執(zhí)行上述操作的一種或多種組合(包括未明確提到的其他過濾操作)。
應(yīng)當(dāng)注意,過濾驅(qū)動器221是文件系統(tǒng)205的一部分,而不是用戶空間210中的應(yīng)用或進程。因此,過濾驅(qū)動器221可以與用戶空間210中的應(yīng)用或進程獨立地進行操作。此外,除了上述操作之外,過濾驅(qū)動器221還可以在從用戶空間210中的應(yīng)用或進程中接收到的請求后用來執(zhí)行操作。
還應(yīng)當(dāng)注意,在某些實施方式中,與用戶空間進程212類似,內(nèi)核空間220可以包括產(chǎn)生對存儲設(shè)備230的訪問的進程(未示出)。在這樣一些實施方式中,內(nèi)核空間220中執(zhí)行的進程可以用來以與用戶空間進程212類似的方式通過內(nèi)核模式的API(未示出)訪問文件系統(tǒng)205。因此,在某些實施方式中,所有對存儲設(shè)備230的訪問都可以由文件系統(tǒng)205來處理,而與發(fā)出這種訪問操作的進程的類型或空間無關(guān)。
操作系統(tǒng)200和文件系統(tǒng)205的許多其他實施方式也是可行和可預(yù)期的。例如,文件系統(tǒng)205可以支持不同數(shù)量和格式的本地文件系統(tǒng)240或只支持單個本地文件系統(tǒng)240。在某些實施方式中,網(wǎng)絡(luò)協(xié)議225可以省略或集成到操作系統(tǒng)200的在文件系統(tǒng)205之外的一部分中。同樣,在某些實施方式中,例如如果只有單個本地文件系統(tǒng)240在使用,那么虛擬文件系統(tǒng)222也可以省略或不用。另外,在某些實施方式中,過濾驅(qū)動器221可以在文件系統(tǒng)205的不同層中實現(xiàn)。例如,在一種實施方式中,過濾驅(qū)動器221可以集成到虛擬文件系統(tǒng)222中,而在另一實施方式中,過濾驅(qū)動器221的一個實例可以在本地文件系統(tǒng)240的每一個中實現(xiàn)。
優(yōu)化文件搜索操作如上所述,文件系統(tǒng)205可以用來管理對存儲設(shè)備230中所儲存的多個文件的訪問。在某些實施方式中,操作系統(tǒng)200和/或進程212可以用來搜索一個或多個文件以判斷所搜索文件是否含有特定數(shù)據(jù)模式。例如,可以調(diào)用諸如Unix“grep”、“egrep”或“fgrep”命令或者Microsoft Windows“文件搜索”實用程序等應(yīng)用程序來判斷一組文件中是否有特定文本串。在某些實施方式中,搜索應(yīng)用可能例如能夠規(guī)定任意復(fù)雜度的數(shù)據(jù)模式(比如正則表達式)。此外,在某些實施方式中,搜索應(yīng)用除了處理文本模式和文件之外還可以用來處理二進制數(shù)據(jù)模式和文件。
一旦被調(diào)用,搜索應(yīng)用可以執(zhí)行比如進程212之一,并可以產(chǎn)生對文件系統(tǒng)205的讀操作,以便檢索指定文件的內(nèi)容。取決于搜索應(yīng)用,通過向搜索應(yīng)用提供作為變元的多個文件名、利用通配符、指定文件夾或目錄名或者通過其他任何適合的方式,可以將多個文件指定為搜索操作的目標(biāo)。當(dāng)通過文件系統(tǒng)205檢索到來自每一指定文件的數(shù)據(jù)時,搜索應(yīng)用可以通過利用任何合適的搜索算法檢查所檢索數(shù)據(jù)來判斷它是否含有所指定的搜索數(shù)據(jù)模式。取決于搜索應(yīng)用的實現(xiàn)方式,給定文件的搜索可以在檢測到搜索數(shù)據(jù)模式的第一匹配或指定個數(shù)的匹配(如果有的話)后終止,或者一直進行到該文件搜索結(jié)束為止,從而報告所有檢測到的匹配。在某些實施方式中,這些或其他方面的搜索應(yīng)用功能性可以由用戶通過命令行變元、菜單或類似的方式來選擇。
在某些常規(guī)實施方式中,搜索應(yīng)用將會導(dǎo)致讀取每一指定文件的全部內(nèi)容,即使已經(jīng)執(zhí)行了完全相同的搜索(即指定相同的數(shù)據(jù)模式和目標(biāo)文件組)。在這樣的環(huán)境下的冗余訪問文件可能會增加文件系統(tǒng)的活動性而降低總體系統(tǒng)性能。例如,在這樣一些實施方式中,同一文件中的同一模式的兩個連續(xù)搜索可能各自導(dǎo)致讀取所有相應(yīng)的文件數(shù)據(jù)并搜索兩次,這可能會比執(zhí)行單次搜索耗費長得多的處理時間。
在一種實施方式中,文件系統(tǒng)205可以用來檢測對文件的搜索操作,并將這些搜索操作所指定的數(shù)據(jù)模式以及搜索結(jié)構(gòu)數(shù)據(jù)存儲在與所搜索文件相應(yīng)的記錄中。圖3示出了文件系統(tǒng)的一種這樣的實施方式。圖3中所示的文件系統(tǒng)205的這種實施方式可以包括圖2的實施方式中所示的那些單元;不過,為簡明起見,這些單元中的某些單元未示出。在舉例實施方式中,文件系統(tǒng)205包括過濾驅(qū)動器221、任意多個文件310a-n以及與每一文件310a-n有關(guān)的各自元數(shù)據(jù)命名流320a-n。文件系統(tǒng)205還包括與每一文件310a-n有關(guān)的各自否定搜索命名流330a-n和各自肯定搜索命名流340a-n。應(yīng)當(dāng)注意,文件310a-n或者命名流320a-n、330a-n或340a-n之一的通用例子可以分別稱為文件310或者命名流320、330或340,而文件310a-n和命名流320a-n、330a-n或340a-n可以分別統(tǒng)稱為文件310和命名流320、330或340。
文件310可以代表文件系統(tǒng)205所管理的文件。每一文件310都有相應(yīng)的元數(shù)據(jù)命名流320(簡稱為元數(shù)據(jù)320)。每一元數(shù)據(jù)命名流320都可以用來存儲關(guān)于其相應(yīng)文件的信息(在此可以稱為元數(shù)據(jù))。在不同的實施方式中,元數(shù)據(jù)可以包括諸如文件身份、大小、所有權(quán)和文件訪問權(quán)限等(但并不局限于此)信息以及與所檢測搜索操作相應(yīng)的記錄等,如下所述。在舉例實施方式中,過濾驅(qū)動器221可以用來協(xié)調(diào)文件310的文件數(shù)據(jù)以及相應(yīng)的元數(shù)據(jù)流320的文件元數(shù)據(jù)的讀和寫。
此外,在舉例實施方式中,每一文件310都有相應(yīng)的否定搜索命名流330(簡稱為否定流330)和相應(yīng)的肯定搜索命名流340(簡稱為肯定流340)。每一否定流330和肯定流340可以用來存儲與相應(yīng)文件310上所執(zhí)行的搜索操作有關(guān)的信息,如下所詳述。在舉例實施方式中,過濾驅(qū)動器221可以用來協(xié)調(diào)否定流330和肯定流340的這些搜索操作記錄的讀和寫。
應(yīng)當(dāng)注意,文件310、元數(shù)據(jù)320、否定流330和肯定流340實際上可以存儲在一個或多個存儲設(shè)備(比如圖2的存儲設(shè)備230)中。不過,為了說明,這些單元中的每一個在概念上都示為位于文件系統(tǒng)205中。
存儲文件操作的記錄和檢測搜索操作在文件系統(tǒng)205的某些實施方式中,過濾驅(qū)動器221可以用來檢測各種操作,比如對文件系統(tǒng)205從各種應(yīng)用中接收到的給定文件的讀或?qū)懖僮?。在檢測到指定給特定文件310的操作后,過濾驅(qū)動器221可以用來將所檢測操作的記錄存儲在與目標(biāo)文件310相應(yīng)的元數(shù)據(jù)320中。在不同的實施方式中,在檢測到文件操作后,過濾驅(qū)動器221所存儲的記錄可以包括關(guān)于目標(biāo)文件310和所檢測操作的各種信息,比如文件身份、文件類型、操作類型、文件大小、文件內(nèi)容簽名(如散列或消息摘要5(MD5)簽名)、文件擁有者和/或文件權(quán)限等。此外,該記錄還可以包括關(guān)于發(fā)出操作的進程或應(yīng)用的信息,比如應(yīng)用名稱、調(diào)用變元、進程ID或其他可用的信息。
在一種特殊實施方式中,文件系統(tǒng)205可以用來檢測搜索操作,以判斷在一個或多個文件中是否有給定數(shù)據(jù)模式。例如,過濾驅(qū)動器221可以通過檢查發(fā)出操作的應(yīng)用的名稱和/或調(diào)用該應(yīng)用所用的變元,用來檢測出是由搜索應(yīng)用產(chǎn)生了特定文件讀操作。在某些實施方式中,過濾驅(qū)動器221可以配置以搜索應(yīng)用的名稱目錄,并可以確定從所列出的應(yīng)用之一中接收到的文件讀操作是搜索操作。在這樣一些實施方式中,應(yīng)當(dāng)注意,過濾驅(qū)動器221可能無需搜索應(yīng)用的任何特定動作或修改就能夠檢測出搜索操作;也就是說,搜索操作的檢測對搜索應(yīng)用來說可以是透明的。在其他實施方式中,過濾驅(qū)動器221可以提供一種便利,比如注冊應(yīng)用編碼接口(API),通過這些接口,應(yīng)用可以將它們自己注冊為搜索應(yīng)用,從而使得過濾驅(qū)動器221可以通過名稱或其他識別數(shù)據(jù)識別出任意搜索應(yīng)用。在又一些實施方式中,過濾驅(qū)動器221可以通過以下方式用來提供搜索應(yīng)用特有的API比如通過提供用于調(diào)用文件操作的另一組功能調(diào)用,或者通過利用與特定搜索相關(guān)的語義來提供用于使標(biāo)準(zhǔn)文件操作功能調(diào)用超載的一個或多個機制。在這樣一些實施方式中,當(dāng)執(zhí)行與搜索有關(guān)的文件操作時,給定搜索應(yīng)用可以利用與特定搜索相關(guān)的API來與文件系統(tǒng)205進行交互,并且過濾驅(qū)動器221可以檢測通過API接收到的作為搜索操作的操作。文件系統(tǒng)205可用來檢測搜索應(yīng)用的許多其他機制也是可行和可預(yù)期的。
一旦檢測到指定給特定文件310的搜索操作,過濾驅(qū)動器221可以用來將搜索操作的記錄存儲在相應(yīng)的元數(shù)據(jù)命名流320中??梢栽O(shè)想,在檢測到相關(guān)操作后隨時可以進行這種記錄的存儲。例如,在一種實施方式中,記錄的存儲可以延遲到對文件310a的操作完成后進行,而在另一實施方式中,記錄的存儲可以在該操作完成之前進行。在后一種情況下,如果操作不能保證完成(即不確定),那么,過濾驅(qū)動器221可以提供一種機制,以便萬一操作不能完成就刪除其相應(yīng)操作的事先存儲的記錄。
在一種實施方式中,在檢測到搜索操作之后,過濾驅(qū)動器221所存儲的記錄可以以擴展標(biāo)記語言(XML)格式來產(chǎn)生和存儲,盡管可以設(shè)想,在其他實施方式中,還可以使用任何合適的格式。XML格式的記錄的一個例子如下<record sequence="3">
<path>/test1/foo.txt</path>
<type>ascii</type>
<user id=1598>username</user>
<group id=119>groupname</group>
<perm>rw-r--r--</perm>
<md5>d41d8cd98f00b204e9800998ecf8427e</md5>
<size>58937</size>
<process>
<name>grep</name>
<args>grep release4/test1/*,txt</args>
<pid>7168</pid>
<ppid>409</ppid>
<pgrpid>409</pgrpid>
</process>
</record>
這種記錄可以附加到與文件(比如文件310a)有關(guān)的元數(shù)據(jù)命名流(比如元數(shù)據(jù)320a)中,在搜索應(yīng)用“grep”用變元“greprelease4/test1/*.txt”調(diào)用后,該文件具有文件身份“/test1/foo.pdf”。如上所述,在一種實施方式中,過濾驅(qū)動器221可以通過檢測作為發(fā)出進程名稱的“grep”用來檢測作為搜索操作的這一操作,而在其他實施方式中,可以利用不同的方法進行這種檢測?!癵rep”搜索應(yīng)用的這一特定調(diào)用可以搜索具有擴展名“.txt”的每一文件,該擴展名位于文本模式“release4”的“/test1”目錄中。在一種實施方式中,在文件系統(tǒng)205接收與特定文件(比如“test1/foo.txt”)相應(yīng)的搜索操作之前,可以通過預(yù)處理器(比如shell環(huán)境或命令處理器)將通配符表達式“/test1/*.txt”擴展到符合該表達式的文件的顯式目錄中。在另一實施方式中,文件系統(tǒng)205可以用來內(nèi)部擴展通配符表達式。
針對這一例子,與“record sequence”字段有關(guān)的編號表示這一記錄是與文件310a有關(guān)的第三記錄?!皃ath”字段包括文件身份,而“type”字段表示文件類型,文件類型在一種實施方式中可以由發(fā)出文件建立操作的進程所提供,而在其他實施方式中可以例如根據(jù)文件名的擴展名或根據(jù)文件中的標(biāo)題信息來確定?!皍ser id”字段記錄了數(shù)字用戶id和與發(fā)出文件建立操作的進程有關(guān)的用戶的文本用戶名,而“groupid”字段記錄了數(shù)字組id和該用戶的文本組名?!皃erm”字段以文件系統(tǒng)205和/或操作系統(tǒng)特有的格式記錄了與文件310a有關(guān)的文件權(quán)限。“md5”字段記錄了與文件內(nèi)容相應(yīng)的MD5簽名,而“size”字段記錄了文件310a的字節(jié)長度。
此外,“process”字段可以包括一些子字段,記錄有關(guān)執(zhí)行內(nèi)容訪問操作的進程的信息?!皀ame”子字段記錄了發(fā)出該操作的進程或應(yīng)用的名稱,而“args”子字段記錄了調(diào)用指定進程時給定的變元。“pid”、“ppid”和“pgrpid”子字段分別記錄了進程ID、進程的父進程的ID和進程的組ID??梢栽O(shè)想,在其他實施方式中,過濾驅(qū)動器221可以存儲與所檢測搜索操作相應(yīng)的記錄,包括更多或更少的字段以及具有不同定義或內(nèi)容的字段。還可以設(shè)想,在某些實施方式中,過濾驅(qū)動器221可以檢測搜索操作并按如下所述對它進行處理,而無需如上所述形成元數(shù)據(jù)流320中的記錄。
處理文件系統(tǒng)中的搜索操作在舉例實施方式中,文件系統(tǒng)205可以利用否定流330和肯定流340中所存儲的信息來優(yōu)化處理所檢測到的對相應(yīng)文件310的搜索操作。具體地說,否定流330可以用來存儲一些記錄(比如如下所述的XML記錄),這些記錄指示是否知道給定搜索數(shù)據(jù)模式不在其相應(yīng)的文件310中。同樣,肯定流340可以用來存儲一些記錄,這些記錄指示知道給定搜索數(shù)據(jù)模式在相應(yīng)的文件310中以及在文件310中找到該搜索數(shù)據(jù)模式的位置。
一旦檢測到如上所述的搜索操作,在一種實施方式中,過濾驅(qū)動器221可以用來確定該搜索操作所指定的數(shù)據(jù)模式。例如,過濾驅(qū)動器221可以檢查調(diào)用發(fā)出該搜索操作的應(yīng)用所用的變元,并根據(jù)該應(yīng)用的語法對這些變元進行分析。參照上述例子,過濾驅(qū)動器221可以確定為“grep”操作所指定的數(shù)據(jù)模式是文本串“release4”。如前面所述,在某些實施方式中,數(shù)據(jù)模式可以包括通配符、正則表達式語法或其他摘要模式匹配的語法。
在確定了搜索操作所指定的數(shù)據(jù)模式后,在一種實施方式中,過濾驅(qū)動器221可以用來掃描否定流330和肯定流340,以判斷這兩種流中是否存儲有所指定數(shù)據(jù)模式的標(biāo)記。在某些實施方式中,過濾驅(qū)動器221可以用來照字義將所指定數(shù)據(jù)模式與否定流330和肯定流340的內(nèi)容進行對照。在所指定數(shù)據(jù)模式可能包括摘要語法的實施方式中,過濾驅(qū)動器221可以用來評估該語法以及流330和340的內(nèi)容的語法,以判斷這兩種流中是否存儲有所指定數(shù)據(jù)模式的標(biāo)記。例如,評估時兩種字義不同的正則表達式可以識別相同的數(shù)據(jù)模式。
如果這兩種流中沒有所指定數(shù)據(jù)模式的標(biāo)記,那么,在一種實施方式中,過濾驅(qū)動器221可以用來檢測搜索操作所指向的文件310,以判斷其中是否有所指定數(shù)據(jù)模式。例如,在一種實施方式中,文件系統(tǒng)205中的過濾驅(qū)動器221或另一模塊可以實現(xiàn)在圖2的內(nèi)核空間220中可執(zhí)行的搜索算法。在另一實施方式中,過濾驅(qū)動器221可以用來調(diào)用在圖2的用戶空間210中可執(zhí)行的外部搜索應(yīng)用。在某些這樣的實施方式中,在文件系統(tǒng)205被初始化時或者由程序員或系統(tǒng)管理員需要時可以選擇所要調(diào)用的外部搜索應(yīng)用,比如通過API。
如果在過濾驅(qū)動器221搜索文件310后沒有找到所指定數(shù)據(jù)模式的匹配,那么,在一種實施方式中,過濾驅(qū)動器221可以用來將該數(shù)據(jù)模式的標(biāo)記存儲到否定流330中。在一種實施方式中,過濾驅(qū)動器221可以將該數(shù)據(jù)模式作為XML記錄存儲到否定流330中。例如,如果在過濾驅(qū)動器221搜索文件“foo.txt”后沒有找到如上所述的例子中所提到的模式“release4”,那么過濾驅(qū)動器221可以將如下記錄<pattern>release4</pattern>
存儲到相應(yīng)的否定流330中。
同樣,如果在過濾驅(qū)動器221搜索文件310后找到了所指定數(shù)據(jù)模式的匹配,那么,在一種實施方式中,過濾驅(qū)動器221可以用來將該數(shù)據(jù)模式的標(biāo)記以及關(guān)于在文件310中何處找到該模式的信息存儲到肯定流340中。在一種實施方式中,過濾驅(qū)動器221可以將該數(shù)據(jù)模式作為XML記錄存儲到肯定流340中。例如,如上所述的例子中所提到的模式“release4”可能在文件“foo.txt”中出現(xiàn)在文件的第20行和第485行。此外,第20行可能位于文件的第2塊中而第485行可能位于文件第4塊中,其中塊尺寸和分界線由文件系統(tǒng)205所確定(例如,文件系統(tǒng)205可以利用1024字節(jié)的塊來編排和操作文件內(nèi)容)。在這種情況下,在搜索到文件“foo.txt”中的模式“release4”后,過濾驅(qū)動器221可以將下列XML記錄存儲到相應(yīng)的肯定流340中<occurs>
<pattern>release4</pattern>
<record>
<linenumber>20</linenumber>
<blocknumber>2</blocknumber>
</record>
<record>
<linenumber>485</linenumber>
<blocknumber>4</blocknumber>
</record>
</occurs>
除了行和塊編號之外(或代替行和塊編號),可以用任何合適的索引來索引文件的相應(yīng)部分。例如,在某些實施方式中,可以用偏離文件起點的字節(jié)偏移量來代替比如剛剛提到的記錄中的行和塊編號。此外,可以設(shè)想,在其他實施方式中,可以用不同的XML標(biāo)記來界定和構(gòu)造否定流330和肯定流340中所存儲的記錄,或者可以用不同于XML的語法來構(gòu)造記錄。此外,還可以設(shè)想,在某些實施方式中,搜索操作的目標(biāo)文件310可能未被格式化為文本文件(比如文件310可以是二進制文件)。在某些這樣的實施方式中,如果給定目標(biāo)文件310不是文本文件,那么行編號可能不適合于索引文件,并且可以從相應(yīng)肯定流340中的記錄中省略這些行編號。
如上所述,在一種實施方式中,過濾驅(qū)動器221在接收到搜索操作后可以用來掃描否定流330和肯定流340,以判斷這兩種流中是否存儲有所指定數(shù)據(jù)模式的標(biāo)記。針對使用剛剛提到的舉例記錄的格式的一種實施方式,過濾驅(qū)動器221可以用來掃描每種流中所記錄的“模式”字段。如果所指定數(shù)據(jù)模式與否定流330中所存儲的模式匹配,那么,過濾驅(qū)動器221可以用來向發(fā)出搜索操作的應(yīng)用返回一個否定搜索標(biāo)記,而無需訪問相應(yīng)文件310的內(nèi)容。例如,過濾驅(qū)動器221可以通過將文件結(jié)束標(biāo)記發(fā)送到始發(fā)應(yīng)用(無需任何文件數(shù)據(jù))的方式來間接和透明地向始發(fā)應(yīng)用返回一個否定搜索標(biāo)記;也就是說,過濾驅(qū)動器221可以使文件310對始發(fā)應(yīng)用而言好象具有零長度。在這種情況下,始發(fā)應(yīng)用可以嘗試在文件系統(tǒng)205所返回的空文件數(shù)據(jù)中搜索所指定搜索數(shù)據(jù)模式,假如空模式不是該搜索數(shù)據(jù)模式的有效匹配,那么嘗試失敗。在另一實施方式中,過濾驅(qū)動器221可以通過返回與文件310相同長度的數(shù)據(jù)的方式來間接和透明地向始發(fā)應(yīng)用返回一個否定搜索標(biāo)記,但其中所返回的文件數(shù)據(jù)只含有空白符(比如空格符、制表符)和/或換行符。
在文件系統(tǒng)205實現(xiàn)如上所述的與特定搜索相關(guān)的API的一些實施方式中,過濾驅(qū)動器221可以例如通過功能調(diào)用或其他規(guī)定的接口而不是通過返回文件結(jié)束標(biāo)記來直接向始發(fā)應(yīng)用指示否定搜索結(jié)果。應(yīng)當(dāng)注意,不管向始發(fā)搜索應(yīng)用指示否定搜索結(jié)果所用的具體機制,都可以無需實際訪問目標(biāo)文件310的內(nèi)容來指示這些否定搜索結(jié)果,從而潛在地降低了文件系統(tǒng)活動性。
如果所指定數(shù)據(jù)模式與肯定流340中所存儲的模式匹配,那么,過濾驅(qū)動器221可以用來只訪問文件310中的由肯定流340中的匹配記錄所指示的那些部分,并向始發(fā)應(yīng)用返回那些部分的文件數(shù)據(jù)。在一種實施方式中,過濾驅(qū)動器221可以用來通過以下方式透明地返回那些特定的文件部分在肯定流340中的匹配記錄中所指示的行或塊之前返回空白符(比如空格符、制表符)和/或換行符,然后讀取相應(yīng)文件310中的所指示塊,并只將該塊的文件數(shù)據(jù)返回到始發(fā)應(yīng)用。如果給定數(shù)據(jù)模式在給定文件310中多次匹配,正如與如上所述的數(shù)據(jù)模式相應(yīng)的多個記錄所指示,那么,過濾驅(qū)動器221可以利用附加的空白和/或換行符來跟蹤給定的返回數(shù)據(jù)塊直到到達記錄所指示的下一行或塊為止。例如,如果搜索操作指定數(shù)據(jù)模式“release4”而肯定流340含有如上所述的“occurs”記錄,那么,過濾驅(qū)動器221可以用來只訪問和返回相應(yīng)文件310的第2塊和第4塊,其中用適當(dāng)數(shù)量的空白和/或換行符來散置這些塊。始發(fā)搜索應(yīng)用可以嘗試在文件系統(tǒng)205所返回的空白/換行填充的文件數(shù)據(jù)中搜索所指定數(shù)據(jù)模式,但是,假如用于代替未讀部分的字符不是有效的搜索模式數(shù)據(jù),那么可能只匹配文件系統(tǒng)205實際返回的目標(biāo)文件310的部分中的那種數(shù)據(jù)模式。
在文件系統(tǒng)205實現(xiàn)如上所述的與特定搜索相關(guān)的API的一些實施方式中,過濾驅(qū)動器221可以用來直接向始發(fā)應(yīng)用指示肯定搜索結(jié)果。例如,在一種這樣的實施方式中,過濾驅(qū)動器221可以通過功能調(diào)用或其他規(guī)定的接口而不是通過返回嵌入在空白符的流中的特定部分的方式,來返回文件310的那些特定部分以及關(guān)于這些特定部分位于文件310中的何處的信息。正如上述否定搜索結(jié)果的情況一樣,應(yīng)當(dāng)注意,不管向始發(fā)搜索應(yīng)用指示肯定搜索結(jié)果所用的具體機制,都可以在實際只訪問目標(biāo)文件310的部分的同時指示這些肯定搜索結(jié)果,從而潛在地降低了文件系統(tǒng)活動性。
如果例如通過文件寫操作修改了給定文件310的內(nèi)容,那么,相應(yīng)否定流330和肯定流340中所存儲的數(shù)據(jù)模式可能不再準(zhǔn)確地反映所修改的文件內(nèi)容。也就是說,所存儲的數(shù)據(jù)模式可能不再展現(xiàn)關(guān)于給定文件310的修改內(nèi)容的參照完整性,因為在存儲數(shù)據(jù)模式時所存儲數(shù)據(jù)模式所涉及的信息可能已改變。在某些實施方式中,過濾驅(qū)動器221可以用來在對相應(yīng)文件310進行寫后,通過例如將流330和340縮短到零長度來清除否定流330和肯定流340中所存儲的記錄。在其他實施方式中,過濾驅(qū)動器221可以用來對所存儲數(shù)據(jù)模式和所修改內(nèi)容進行對照檢查,以確定文件內(nèi)容修改后每一所存儲記錄的有效性。例如,在一種這樣的實施方式中,過濾驅(qū)動器221可以在文件310中搜索否定流330和肯定流340中所存儲的每一數(shù)據(jù)模式,相應(yīng)地可以更新這些流。此外,在某些實施方式中,過濾驅(qū)動器221可以用來從否定流330和肯定流340中除去一些記錄,以減小這些流所需的存儲量。例如,如果給定流的長度超出了某一閾值或者某段時間過后,過濾驅(qū)動器221可以用來從給定流中除去較舊的記錄。
應(yīng)當(dāng)注意,在不同的實施方式中,搜索索否定流330和肯定流340的次序可以變化。在一種實施方式中,在檢測到搜索操作后,過濾驅(qū)動器221可以用來首先搜索索否定流330中的指定數(shù)據(jù)模式。如果沒有找到該模式,那么過濾驅(qū)動器221可以接著搜索索肯定流340,最后可以搜索指定文件310本身。在另一實施方式中,過濾驅(qū)動器211可以用來并行或者按不同次序搜索否定流330、肯定流340和文件310中的一些或所有。此外,在提供與特定搜索相關(guān)的API的文件系統(tǒng)205的某些實施方式中,可以由搜索應(yīng)用來規(guī)定搜索這些項目的次序和并發(fā)度。例如,這種規(guī)定可以根據(jù)這樣的啟示來進行,這種啟示可以提出在給定文件中有可能找到有可能找不到給定數(shù)據(jù)模式,從而可能在肯定流中或在否定流中,或者是否知道最近已進行還是未進行給定搜索,相應(yīng)地數(shù)據(jù)模式是否可能在這兩種流中。
還應(yīng)當(dāng)注意,在某些實施方式中,文件系統(tǒng)205可以支持否定流330或肯定流340之一,而不支持另一個,或者可以在非過濾驅(qū)動器221的其他模塊中管理上述否定流330和/或肯定流340。此外,在某些實施方式中,否定流330和/或肯定流340還可以完全省去,與否定和肯定搜索結(jié)果相應(yīng)的記錄可以直接存儲在元數(shù)據(jù)流320或另一命名流中。在這樣一些實施方式中,這些記錄可以用與如上所述不同的XML標(biāo)記來界定,以便區(qū)分肯定搜索記錄和否定搜索記錄。
最后,可以設(shè)想,各種類型的索引都可適用于給定否定流330或肯定流340的內(nèi)容,或者總體上可適應(yīng)文件系統(tǒng)205的與搜索有關(guān)的內(nèi)容。例如,在一種實施方式中,文件系統(tǒng)205可以用來通過以下方式索引給定否定流330或肯定流340中所存儲的記錄比如通過對其中所存儲的記錄的語法進行預(yù)分析并以分析格式(比如二進制格式)來存儲記錄數(shù)據(jù),從而減少搜索給定流所需的時間。此外,在一種實施方式中,文件系統(tǒng)205可以用來產(chǎn)生和保留索引現(xiàn)有否定流330和肯定流340的附加命名流或文件。例如,文件系統(tǒng)205可以用來產(chǎn)生含有特定否定流330的記錄的否定索引流(確定其中有給定的搜索數(shù)據(jù)模式)以及類似的肯定索引流。為適應(yīng)搜索活動性,文件系統(tǒng)205還可以利用這些索引流來減少對否定流330和肯定流340的訪問次數(shù),其方式與如上所述的給定否定流330和給定肯定流340可以減少對其相應(yīng)文件310的訪問的方式類似。
圖4表示檢測對文件的搜索操作和存儲與該搜索操作相應(yīng)的記錄的方法的一種實施方式。共同參照圖1至圖4,操作從塊400開始,在該塊中,檢測對給定文件中的數(shù)據(jù)模式的搜索操作。例如,在一種實施方式中,過濾驅(qū)動器221可以檢測對給定文件310的文件讀操作,該操作發(fā)自其名稱與已知搜索應(yīng)用相應(yīng)的應(yīng)用。在其他實施方式中,文件系統(tǒng)205可以提供API,搜索應(yīng)用從而可以向文件系統(tǒng)205發(fā)出搜索操作。
當(dāng)檢測到搜索操作時,在一種實施方式中,可以掃描否定流330,以判斷其中是否存儲有該搜索操作所指定的數(shù)據(jù)模式的標(biāo)記(塊402、404)。如果其中存儲有所指定數(shù)據(jù)模式的標(biāo)記,那么,可以將否定標(biāo)記返回到始發(fā)應(yīng)用,而無需訪問相應(yīng)文件310(塊406)。例如,在這種情況下,過濾驅(qū)動器221可以用來將文件結(jié)束標(biāo)記返回到始發(fā)應(yīng)用,或者可以通過API指示否定搜索狀態(tài)。
如果在否定流330中沒有檢測到所指定數(shù)據(jù)模式的標(biāo)記,那么,在一種實施方式中,可以掃描肯定流340,以判斷其中的記錄中是否存儲有這種標(biāo)記(塊408、410)。如果找到這種標(biāo)記,那么,可以只訪問該記錄所指示的文件310的數(shù)據(jù)塊(塊412)。可以將這些數(shù)據(jù)塊返回到始發(fā)應(yīng)用(塊414)。例如,在一種實施方式中,這些數(shù)據(jù)塊可以通過嵌入到過濾驅(qū)動器221所產(chǎn)生的空白符中以一種對始發(fā)應(yīng)用透明的方式來返回。在另一實施方式中,這些數(shù)據(jù)塊可以比如通過API與關(guān)于其在文件中的位置的信息一起直接返回到始發(fā)應(yīng)用。
如果在肯定流340中沒有檢測到所指定數(shù)據(jù)模式的標(biāo)記,那么,可以搜索相應(yīng)的文件310,以判斷其中是否存儲有該數(shù)據(jù)模式,并可以根據(jù)搜索結(jié)果將適當(dāng)?shù)挠涗洿鎯υ诜穸?30或肯定流340中(塊416)。
應(yīng)當(dāng)注意,在該方法的某些實施方式中,可以以不同的次序或并發(fā)地搜索否定流330、肯定流340和文件310。還應(yīng)當(dāng)注意,在該方法的某些實施方式中,可以只實現(xiàn)否定流330和肯定流340中的一種流或另一種流,或者可以將這兩種記錄合并到單個命名流中。
圖5表示保持與搜索操作相應(yīng)的所存儲記錄的參照完整性的方法的一種實施方式。共同參照圖1-3和圖5,操作從塊500開始,在該塊中,存儲與文件搜索操作相應(yīng)的記錄。例如,可以檢測搜索操作,并可以將含有搜索數(shù)據(jù)模式的相應(yīng)記錄存儲到否定流330或肯定流340中,如以上結(jié)合圖3和4的描述情況所述。
在存儲了文件搜索操作的記錄之后,可以檢測對相應(yīng)文件的內(nèi)容的修改操作(塊502)。例如,在一種實施方式中,過濾驅(qū)動器221可以檢測對在相應(yīng)否定流330或肯定流340中存儲有記錄的文件的文件寫操作。
一旦檢測到對文件的內(nèi)容修改操作,就可以清除與該文件相應(yīng)的所存儲搜索記錄(塊504)。例如,在一種實施方式中,當(dāng)檢測到對相應(yīng)文件310的內(nèi)容修改操作(比如文件寫操作)時,過濾驅(qū)動器221可以用來將否定流330和肯定340縮短到零長度。在另一實施方式中,可以設(shè)想,例如可以通過過濾驅(qū)動器221來檢查每一所存儲搜索記錄,以便在檢測到內(nèi)容修改操作后評估其參照完整性。在這種實施方式中,可以只清除其完整性受到內(nèi)容修改操作影響的那些記錄。
盡管非常詳細地描述了以上實施方式,然而,對熟練技術(shù)人員而言,一旦徹底了解上述公開內(nèi)容,顯然可以想到許多變化和修改方式。因此,目的在于認為附屬權(quán)利要求書包括了所有這些變化和修改方式。
權(quán)利要求
1.一種系統(tǒng),包括用來存儲數(shù)據(jù)的存儲設(shè)備;和被配置為用來管理對所述存儲設(shè)備的訪問的文件系統(tǒng),其中,所述文件系統(tǒng)被配置用于檢測搜索操作以判斷所述存儲設(shè)備中所存儲的第一文件中給定數(shù)據(jù)模式的存在;和將所述給定數(shù)據(jù)模式的標(biāo)記和所述搜索操作的結(jié)果數(shù)據(jù)的標(biāo)記存儲在與所述第一文件有關(guān)的第一記錄中。
2.如權(quán)利要求1所述的系統(tǒng),其中,在檢測到所述搜索操作后,所述文件系統(tǒng)還被配置為用來掃描所述第一記錄以判斷其中是否存儲有所述給定數(shù)據(jù)模式的所述標(biāo)記;并且其中,根據(jù)判定其中存儲有所述標(biāo)記,則所述文件系統(tǒng)還被配置為只訪問所述第一文件的一部分。
3.如權(quán)利要求2所述的系統(tǒng),其中,結(jié)果數(shù)據(jù)的所述標(biāo)記包括與所述第一文件中出現(xiàn)所述給定數(shù)據(jù)模式的一個或多個部分相應(yīng)的索引;并且其中,根據(jù)判定所述第一記錄中存儲有所述給定數(shù)據(jù)模式的所述標(biāo)記,則所述文件系統(tǒng)還被配置為用來只訪問所述第一文件中與所述索引相應(yīng)的一個或多個部分。
4.如權(quán)利要求1所述的系統(tǒng),其中,在檢測到所述搜索操作后,所述文件系統(tǒng)還被配置為用來掃描所述第一記錄以判斷其中是否存儲有所述給定數(shù)據(jù)模式的所述標(biāo)記,并且如果所述第一記錄中存儲有所述給定數(shù)據(jù)模式的所述標(biāo)記,則返回否定標(biāo)記而無需訪問所述第一文件。
5.如權(quán)利要求1所述的系統(tǒng),其中,如果所述第一文件中有所述給定數(shù)據(jù)模式,那么所述文件系統(tǒng)還被配置為用來將所述給定數(shù)據(jù)模式的所述標(biāo)記和模式位置信息存儲在所述第一記錄中;并且其中,如果所述第一文件中沒有所述給定數(shù)據(jù)模式,那么所述文件系統(tǒng)還被配置為用來將所述給定數(shù)據(jù)模式的所述標(biāo)記存儲在第二記錄中。
6.如權(quán)利要求5所述的系統(tǒng),其中,所述第一記錄和所述第二記錄被存儲在各自的命名流中,每一命名流都與所述第一文件相應(yīng)。
7.如權(quán)利要求1所述的系統(tǒng),其中,根據(jù)檢測對所述第一文件中所存儲數(shù)據(jù)的修改操作,所述文件系統(tǒng)還被配置為用來清除與所述第一文件有關(guān)的所述記錄。
8.如權(quán)利要求1所述的系統(tǒng),其中,所述文件系統(tǒng)還被配置為用來檢測搜索操作,以判斷在所述存儲設(shè)備中所存儲的多個文件中的一個或多個中給定數(shù)據(jù)模式的存在,并將所述給定數(shù)據(jù)模式的標(biāo)記和所述搜索操作的結(jié)果數(shù)據(jù)的標(biāo)記存儲在與所述多個文件中的所述一個或多個中的每一個有關(guān)的相應(yīng)記錄中。
9.一種方法,包括存儲多個文件;檢測搜索操作以判斷第一文件中給定數(shù)據(jù)模式的存在;和將所述給定數(shù)據(jù)模式的標(biāo)記和所述搜索操作的結(jié)果數(shù)據(jù)的標(biāo)記存儲在與所述第一文件有關(guān)的第一記錄中。
10.如權(quán)利要求9所述的方法,還包括在檢測所述搜索操作后,掃描所述第一記錄以判斷其中是否存儲有所述給定數(shù)據(jù)模式的所述標(biāo)記;和根據(jù)判定其中存儲有所述標(biāo)記,則只訪問所述第一文件的一部分。
11.如權(quán)利要求10所述的方法,其中,結(jié)果數(shù)據(jù)的所述標(biāo)記包括與所述第一文件中出現(xiàn)所述給定數(shù)據(jù)模式的一個或多個部分相應(yīng)的索引;并且其中,該方法還包括根據(jù)判定所述第一記錄中存儲有所述給定數(shù)據(jù)模式的所述標(biāo)記,則只訪問所述第一文件中與所述索引相應(yīng)的一個或多個部分。
12.如權(quán)利要求9所述的方法,還包括在檢測所述搜索操作后,掃描所述第一記錄以判斷其中是否存儲有所述給定數(shù)據(jù)模式的所述標(biāo)記;和如果所述第一記錄中存儲有所述給定數(shù)據(jù)模式的所述標(biāo)記,則返回否定標(biāo)記而無需訪問所述第一文件。
13.如權(quán)利要求9所述的方法,還包括如果所述第一文件中有所述給定數(shù)據(jù)模式,那么將所述給定數(shù)據(jù)模式的所述標(biāo)記和模式位置信息存儲在所述第一記錄中;和如果所述第一文件中沒有所述給定數(shù)據(jù)模式,那么將所述給定數(shù)據(jù)模式的所述標(biāo)記存儲在第二記錄中。
14.如權(quán)利要求13所述的方法,其中,所述第一記錄和所述第二記錄被存儲在各自的命名流中,每一命名流都與所述第一文件相對應(yīng)。
15.如權(quán)利要求9所述的方法,還包括根據(jù)檢測對所述第一文件中所存儲數(shù)據(jù)的修改操作,清除與所述第一文件有關(guān)的所述記錄。
16.一種含有程序指令的計算機可存取媒介,其中,這些程序指令是計算機可執(zhí)行的,用于存儲多個文件;檢測搜索操作以判斷第一文件中給定數(shù)據(jù)模式的存在;和將所述給定數(shù)據(jù)模式的標(biāo)記和所述搜索操作的結(jié)果數(shù)據(jù)的標(biāo)記存儲在與所述第一文件有關(guān)的第一記錄中。
17.如權(quán)利要求16所述的計算機可存取媒介,其中,這些程序指令是計算機可執(zhí)行的,以用于在檢測所述搜索操作后,掃描所述第一記錄以判斷其中是否存儲有所述給定數(shù)據(jù)模式的所述標(biāo)記;和根據(jù)判定其中存儲有所述標(biāo)記,則只訪問所述第一文件的一部分。
18.如權(quán)利要求17所述的計算機可存取媒介,其中,結(jié)果數(shù)據(jù)的所述標(biāo)記包括與所述第一文件中出現(xiàn)所述給定數(shù)據(jù)模式的一個或多個部分相應(yīng)的索引;并且其中,程序指令是計算機可執(zhí)行的,以用于根據(jù)判定所述第一記錄中存儲有所述給定數(shù)據(jù)模式的所述標(biāo)記,則只訪問所述第一文件中與所述索引相應(yīng)的一個或多個部分。
19.如權(quán)利要求16所述的計算機可存取媒介,其中,這些程序指令是計算機可執(zhí)行的,以用于在檢測所述搜索操作后,掃描所述第一記錄以判斷其中是否存儲有所述給定數(shù)據(jù)模式的所述標(biāo)記;和如果所述第一記錄中存儲有所述給定數(shù)據(jù)模式的所述標(biāo)記,則返回否定標(biāo)記而無需訪問所述第一文件。
20.如權(quán)利要求16所述的計算機可存取媒介,其中,這些程序指令是計算機可執(zhí)行的,還用于如果所述第一文件中有所述給定數(shù)據(jù)模式,那么將所述給定數(shù)據(jù)模式的所述標(biāo)記和模式位置信息存儲在所述第一記錄中;和如果所述第一文件中沒有所述給定數(shù)據(jù)模式,那么將所述給定數(shù)據(jù)模式的所述標(biāo)記存儲在第二記錄中。
21.如權(quán)利要求20所述的計算機可存取媒介,其中,所述第一記錄和所述第二記錄被存儲在相應(yīng)的命名流中,每一命名流都與所述第一文件相應(yīng)。
22.如權(quán)利要求16所述的計算機可存取媒介,其中,這些程序指令是計算機可執(zhí)行的,以用于根據(jù)檢測到對所述第一文件中所存儲數(shù)據(jù)的修改操作,那么清除與所述第一文件有關(guān)的所述記錄。
全文摘要
文件系統(tǒng)中用于有效文件內(nèi)容搜索的系統(tǒng)和方法。在一種實施方式中,該系統(tǒng)可以包括用來存儲數(shù)據(jù)的存儲設(shè)備和用來管理對存儲設(shè)備的訪問的文件系統(tǒng)。該文件系統(tǒng)可以用來檢測搜索操作以判斷存儲設(shè)備中所存儲的第一文件中給定數(shù)據(jù)模式的存在性,并將給定數(shù)據(jù)模式的標(biāo)記和搜索操作的結(jié)果數(shù)據(jù)的標(biāo)記存儲在與第一文件有關(guān)的第一記錄中。
文檔編號G06F17/30GK1947119SQ200580012759
公開日2007年4月11日 申請日期2005年3月4日 優(yōu)先權(quán)日2004年3月4日
發(fā)明者杜拉巴加尤蒂·波薩庫爾, 納爾·普萊默, 克雷格·K·漢默 申請人:維瑞泰斯操作公司