欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種文件系統(tǒng)中實(shí)時(shí)刪除重復(fù)數(shù)據(jù)的方法

文檔序號(hào):6607666閱讀:177來源:國知局
專利名稱:一種文件系統(tǒng)中實(shí)時(shí)刪除重復(fù)數(shù)據(jù)的方法
技術(shù)領(lǐng)域
本發(fā)明涉及一種文件系統(tǒng)中實(shí)時(shí)刪除重復(fù)數(shù)據(jù)的方法,屬于計(jì)算機(jī)數(shù)據(jù)存儲(chǔ)技術(shù) 領(lǐng)域。
背景技術(shù)
隨著數(shù)碼設(shè)備日新月異的發(fā)展,人類社會(huì)正全面在進(jìn)入數(shù)字化時(shí)代,需要存儲(chǔ)的 數(shù)據(jù)量也正呈現(xiàn)出爆炸式增長的態(tài)勢(shì)。在此背景下,為了降低存儲(chǔ)成本和提高存儲(chǔ)系統(tǒng)的 可擴(kuò)展性,如何能以盡可能少的空間儲(chǔ)存盡可能多的數(shù)據(jù)就成為存儲(chǔ)領(lǐng)域最炙手可熱的問 題。重復(fù)數(shù)據(jù)刪除技術(shù)興起于本世紀(jì)初期,近年來得到廣泛普及和應(yīng)用。重復(fù)數(shù)據(jù)刪 除的基本思想可概述如下首先將存儲(chǔ)系統(tǒng)中的文件都切分成若干數(shù)據(jù)塊,用數(shù)據(jù)塊內(nèi)容 的哈希值為數(shù)據(jù)塊集合建立索引,每個(gè)哈希值對(duì)應(yīng)的數(shù)據(jù)塊內(nèi)容都僅被存儲(chǔ)一份;然后,存 儲(chǔ)系統(tǒng)并不是直接記錄每個(gè)文件的具體內(nèi)容,而是記錄每個(gè)文件由那些數(shù)據(jù)塊組成,以及 這些數(shù)據(jù)塊在每個(gè)文件中的位置信息;根據(jù)這些信息,存儲(chǔ)系統(tǒng)就能由適當(dāng)?shù)臄?shù)據(jù)塊內(nèi)容 重構(gòu)出每個(gè)文件的內(nèi)容。目前,重復(fù)數(shù)據(jù)刪除技術(shù)主要被應(yīng)用于數(shù)據(jù)的同步、備份或歸檔階段,典型的代表 有同步備份工具Dropbox以及EMC公司的磁盤備份、歸檔和災(zāi)難恢復(fù)產(chǎn)品Data Domain系 統(tǒng)等。在上述這些方法中,重復(fù)數(shù)據(jù)刪除都不是實(shí)時(shí)進(jìn)行的。在Dropbox中,只有當(dāng)每個(gè) 文件被關(guān)閉后,才會(huì)對(duì)整個(gè)文件進(jìn)行切塊,然后再將變化的數(shù)據(jù)塊傳輸?shù)椒?wù)器端。而在 DataDomain系統(tǒng)中,由于每次重復(fù)數(shù)據(jù)刪除都需要掃描整個(gè)磁盤,因此只能以較低的頻率 周期性進(jìn)行。不難理解,這種非實(shí)時(shí)的重復(fù)數(shù)據(jù)刪除方法存在以下明顯缺點(diǎn)一、重復(fù)數(shù)據(jù) 刪除與數(shù)據(jù)的讀、寫操作在不同階段各自獨(dú)立進(jìn)行,存儲(chǔ)系統(tǒng)為了支持隨機(jī)讀寫文件中的 數(shù)據(jù),必須在第一級(jí)存儲(chǔ)階段保存全部完整數(shù)據(jù),而僅能在備份和歸檔的第二級(jí)存儲(chǔ)階段 發(fā)揮節(jié)省存儲(chǔ)空間的作用;二、切塊效率低下,即使只修改極小一部分?jǐn)?shù)據(jù),也需要對(duì)一個(gè) 文件甚至磁盤中的全部數(shù)據(jù)都重新進(jìn)行切塊。

發(fā)明內(nèi)容
本發(fā)明的目的是提出一種文件系統(tǒng)中實(shí)時(shí)刪除重復(fù)數(shù)據(jù)的方法,通過文件系統(tǒng)驅(qū) 動(dòng)模塊截獲來自應(yīng)用程序的創(chuàng)建文件和向文件中寫入數(shù)據(jù)的操作命令,然后根據(jù)操作命令 提供的信息和數(shù)據(jù),實(shí)時(shí)進(jìn)行數(shù)據(jù)切塊和重復(fù)數(shù)據(jù)刪除,并只將新產(chǎn)生的數(shù)據(jù)塊存儲(chǔ)到磁 盤上,從而在根本上實(shí)現(xiàn)以數(shù)據(jù)塊為基本存儲(chǔ)單元的文件系統(tǒng)及其存儲(chǔ)和組織結(jié)構(gòu),達(dá)到 節(jié)省存儲(chǔ)空間的目的。本發(fā)明提出的文件系統(tǒng)中實(shí)時(shí)刪除重復(fù)數(shù)據(jù)的方法,包括以下步驟(1)采用嵌入式數(shù)據(jù)庫存儲(chǔ)文件系統(tǒng)中的元數(shù)據(jù)信息,在該嵌入式數(shù)據(jù)庫中設(shè)置 文件元數(shù)據(jù)表、數(shù)據(jù)塊索引表和文件組成表;所述的文件元數(shù)據(jù)表記錄文件系統(tǒng)中每個(gè)文 件的元數(shù)據(jù),該元數(shù)據(jù)包括文件標(biāo)識(shí)、文件名、文件所在文件夾的標(biāo)識(shí)、文件大小、文件類型、訪問權(quán)限以及文件的創(chuàng)建、修改和訪問時(shí)間;所述的數(shù)據(jù)塊索引表記錄文件系統(tǒng)中文件 的數(shù)據(jù)塊的標(biāo)識(shí)以及與標(biāo)識(shí)相對(duì)應(yīng)的數(shù)據(jù)塊的引用次數(shù),其中數(shù)據(jù)塊的標(biāo)識(shí)為該數(shù)據(jù)塊內(nèi) 容的哈希值;所述的文件組成表記錄組成文件系統(tǒng)中的文件的數(shù)據(jù)塊的信息,包括上述文 件標(biāo)識(shí)、數(shù)據(jù)塊起始位置、數(shù)據(jù)塊大小和數(shù)據(jù)塊標(biāo)識(shí),由其中的數(shù)據(jù)塊起始位置和數(shù)據(jù)塊大 小決定數(shù)據(jù)區(qū)域;(2)通過文件系統(tǒng)的驅(qū)動(dòng)模塊,接收和響應(yīng)應(yīng)用程序?qū)ξ募到y(tǒng)發(fā)起的操作命令, 該操作命令包括創(chuàng)建新文件、向已有文件寫入數(shù)據(jù)、從已有文件讀取數(shù)據(jù)和刪除已有文件, 具體過程如下(2-1)當(dāng)文件系統(tǒng)的驅(qū)動(dòng)模塊接收到來自應(yīng)用程序的創(chuàng)建新文件的操作命令時(shí), 在文件元數(shù)據(jù)表中記錄被創(chuàng)建文件的元數(shù)據(jù);(2-2)當(dāng)文件系統(tǒng)的驅(qū)動(dòng)模塊接收到來自應(yīng)用程序的向已有文件寫入數(shù)據(jù)的操作 命令時(shí),進(jìn)行以下操作(2-2-1)根據(jù)操作命令中被寫文件的文件標(biāo)識(shí)、寫入位置和寫入數(shù)據(jù)大小,從上述 文件組成表中檢索屬于該被寫文件的兩個(gè)數(shù)據(jù)塊標(biāo)識(shí),且滿足與該兩個(gè)數(shù)據(jù)塊標(biāo)識(shí)相對(duì)應(yīng) 的兩個(gè)數(shù)據(jù)塊為與被寫入數(shù)據(jù)區(qū)域相互重疊的首、尾兩個(gè)數(shù)據(jù)塊;(2-2-2)根據(jù)檢索到的數(shù)據(jù)塊標(biāo)識(shí),從存儲(chǔ)設(shè)備中讀取與該數(shù)據(jù)塊標(biāo)識(shí)相對(duì)應(yīng)的 數(shù)據(jù)塊內(nèi)容;(2-2-3)將讀出的數(shù)據(jù)塊內(nèi)容中與被寫入數(shù)據(jù)區(qū)域不重疊的數(shù)據(jù)拼接到被寫入數(shù) 據(jù)的兩側(cè),得到拼接后的數(shù)據(jù)及數(shù)據(jù)區(qū)域;(2-2-4)從上述文件組成表中檢索與屬于該被寫文件、且數(shù)據(jù)塊起始位置位于上 述步驟(2-2-3)數(shù)據(jù)區(qū)域之內(nèi)的數(shù)據(jù)塊相對(duì)應(yīng)的數(shù)據(jù)塊標(biāo)識(shí);(2-2-5)將與從上述數(shù)據(jù)塊索引表中檢索到的數(shù)據(jù)塊標(biāo)識(shí)相對(duì)應(yīng)的數(shù)據(jù)塊的引用 次數(shù)減1,當(dāng)引用次數(shù)不為O時(shí),進(jìn)行步驟(2-2-6),當(dāng)引用次數(shù)成為0時(shí),從數(shù)據(jù)塊索引表 中刪除該數(shù)據(jù)塊標(biāo)識(shí)及與該數(shù)據(jù)塊標(biāo)識(shí)相對(duì)應(yīng)的數(shù)據(jù)塊引用次數(shù),并從存儲(chǔ)設(shè)備上刪除該 數(shù)據(jù)塊內(nèi)容,進(jìn)行步驟(2-2-6);(2-2-6)將上述步驟(2-2-3)拼接后的數(shù)據(jù)切分成一組新數(shù)據(jù)塊;(2-2-7)從上述數(shù)據(jù)塊索引表中分別搜索與上述一組新數(shù)據(jù)塊相對(duì)應(yīng)的每個(gè)數(shù)據(jù) 塊標(biāo)識(shí)若該數(shù)據(jù)塊標(biāo)識(shí)已存在,則在數(shù)據(jù)塊索引表中將與該數(shù)據(jù)塊標(biāo)識(shí)相對(duì)應(yīng)的數(shù)據(jù)塊 的引用次數(shù)加1,若該數(shù)據(jù)塊標(biāo)識(shí)為新標(biāo)識(shí),則在數(shù)據(jù)塊索引表中添加該新數(shù)據(jù)塊標(biāo)識(shí),并 將與該新數(shù)據(jù)塊標(biāo)識(shí)相對(duì)應(yīng)的數(shù)據(jù)塊的引用次數(shù)設(shè)置為1,并將與該新數(shù)據(jù)塊標(biāo)識(shí)相對(duì)應(yīng) 的新數(shù)據(jù)塊內(nèi)容存儲(chǔ)到存儲(chǔ)設(shè)備上;在上述文件組成表中記錄被寫文件的文件標(biāo)識(shí)、該新 數(shù)據(jù)塊的起始位置、該新數(shù)據(jù)塊的大小以及該新數(shù)據(jù)塊的標(biāo)識(shí);(2-2-8)根據(jù)向已有文件寫入數(shù)據(jù)的操作命令更新上述文件元數(shù)據(jù)表中被寫文件 的元數(shù)據(jù);(2-3)當(dāng)文件系統(tǒng)的驅(qū)動(dòng)模塊接收到來自應(yīng)用程序的從文件系統(tǒng)中的已有文件中 讀取數(shù)據(jù)的操作命令時(shí),進(jìn)行以下操作(2-3-1)根據(jù)操作命令,在計(jì)算機(jī)內(nèi)存中分配與待讀取數(shù)據(jù)的大小相等的內(nèi)存空 間,并將該內(nèi)存空間初始化為空白;(2-3-2)根據(jù)操作命令中的被讀文件的文件標(biāo)識(shí)和讀取位置,從上述文件組成表
5中檢索屬于該被讀文件的數(shù)據(jù)塊標(biāo)識(shí),且滿足與該數(shù)據(jù)塊標(biāo)識(shí)相對(duì)應(yīng)的數(shù)據(jù)塊是起始位置 處于讀取位置之前的最后一個(gè)數(shù)據(jù)塊,若檢索到該數(shù)據(jù)塊標(biāo)識(shí),且該數(shù)據(jù)塊區(qū)域與待讀取 數(shù)據(jù)區(qū)域存在重疊,則讀取該數(shù)據(jù)塊內(nèi)容,并將該讀取的內(nèi)容與待讀取數(shù)據(jù)區(qū)域的重疊部 分寫入上述步驟(2-3-1)的內(nèi)存空間的頭部,進(jìn)行步驟(2-3-3),若檢索不到該數(shù)據(jù)塊標(biāo) 識(shí),或者與檢索到的數(shù)據(jù)標(biāo)識(shí)相對(duì)應(yīng)的數(shù)據(jù)塊區(qū)域與待讀取數(shù)據(jù)區(qū)域不存在重疊,則進(jìn)行 步驟(2-3-3);(2-3-3)根據(jù)操作命令,從上述文件組成表中檢索屬于該被讀文件的數(shù)據(jù)塊標(biāo)識(shí), 且滿足與該數(shù)據(jù)塊標(biāo)識(shí)相對(duì)應(yīng)的數(shù)據(jù)塊的起始位置處于待讀取數(shù)據(jù)區(qū)域內(nèi);讀取與檢索到 的所有數(shù)據(jù)塊標(biāo)識(shí)相對(duì)應(yīng)的數(shù)據(jù)塊的內(nèi)容,并將讀出的數(shù)據(jù)塊內(nèi)容中與待讀取數(shù)據(jù)區(qū)域的 重疊部分寫入上述步驟(2-3-1)的內(nèi)存空間中;(2-3-4)根據(jù)操作命令,更新上述文件元數(shù)據(jù)表中被讀文件的元數(shù)據(jù);(2-3-5)將上述步驟(2-3-1)的內(nèi)存空間中的數(shù)據(jù)通過文件系統(tǒng)的驅(qū)動(dòng)模塊返回 給應(yīng)用程序;(2-4)當(dāng)文件系統(tǒng)的驅(qū)動(dòng)模塊接收到來自應(yīng)用程序的刪除文件系統(tǒng)中的已有文件 的操作命令時(shí),進(jìn)行以下操作(2-4-1)從上述文件組成表中檢索屬于被刪除文件的數(shù)據(jù)塊標(biāo)識(shí);(2-4-2)在上述數(shù)據(jù)塊索引表中將與檢索到的每個(gè)數(shù)據(jù)塊標(biāo)識(shí)相對(duì)應(yīng)的數(shù)據(jù)塊的 引用次數(shù)減1,當(dāng)引用次數(shù)變?yōu)?時(shí),從數(shù)據(jù)塊索引表中刪除該數(shù)據(jù)塊標(biāo)識(shí)及與該數(shù)據(jù)塊標(biāo) 識(shí)相對(duì)應(yīng)的數(shù)據(jù)塊引用次數(shù),從存儲(chǔ)設(shè)備上刪除該數(shù)據(jù)塊內(nèi)容,并進(jìn)行步驟(2-4-3),當(dāng)引 用次數(shù)未變?yōu)?時(shí),進(jìn)行步驟(2-4-3);(2-4-3)從上述文件組成表中刪除被刪除文件的所有記錄;(2-4-4)從上述文件元數(shù)據(jù)表中刪除被刪除文件的元數(shù)據(jù)。本發(fā)明提出的文件系統(tǒng)中實(shí)時(shí)刪除重復(fù)數(shù)據(jù)的方法,具備以下優(yōu)點(diǎn)1、利用本發(fā)明的方法,可以刪除文件系統(tǒng)中的重復(fù)數(shù)據(jù),因此節(jié)省存儲(chǔ)空間。2、利用本發(fā)明的方法,將在進(jìn)行文件讀取、寫入的同時(shí),對(duì)被修改的文件數(shù)據(jù)進(jìn)行 切塊與拼接操作,而無須處理未被修改的數(shù)據(jù),因此極大提高了文件處理的效率。3、本發(fā)明方法同時(shí)支持定長和不定長的文件分塊方法,能夠顯著改善重復(fù)數(shù)據(jù)的 去除效果,提高存儲(chǔ)空間的利用效率。4、與已有技術(shù)相比,本發(fā)明方法使得重復(fù)數(shù)據(jù)的刪除過程對(duì)應(yīng)用程序和用戶完全 透明,對(duì)新打開的文件可立即實(shí)現(xiàn)隨機(jī)讀、寫操作,無須等候拼接臨時(shí)文件,因此能夠無縫 兼容現(xiàn)有各種應(yīng)用程序的文件操作,幾乎不會(huì)對(duì)用戶感受造成任何負(fù)面影響。5、由于本方法能夠刪除文件系統(tǒng)中的重復(fù)數(shù)據(jù),因此能夠在備份文件系統(tǒng)中的數(shù) 據(jù)時(shí),能夠減少需要復(fù)制的數(shù)據(jù)量,縮短備份時(shí)間,并節(jié)省備份計(jì)算和存儲(chǔ)資源開銷。


圖1是本發(fā)明方法的系統(tǒng)結(jié)構(gòu)圖。圖2是本發(fā)明方法中文件系統(tǒng)的驅(qū)動(dòng)模塊接收到來自應(yīng)用程序的向已有文件寫 入數(shù)據(jù)的操作命令時(shí)的流程框圖。圖3是本發(fā)明方法中向已有文件寫入數(shù)據(jù)的過程示意圖。
圖4是本發(fā)明方法中文件系統(tǒng)的驅(qū)動(dòng)模塊接收到來自應(yīng)用程序的從文件系統(tǒng)中 的已有文件中讀取數(shù)據(jù)的操作命令時(shí)的流程框圖。圖5是本發(fā)明方法中計(jì)算待讀取數(shù)據(jù)區(qū)域及計(jì)算向內(nèi)存空間的起始寫入位置示 意圖。圖6是本發(fā)明方法中從已有文件讀取數(shù)據(jù)的過程示意圖。圖7是本發(fā)明方法中文件系統(tǒng)的驅(qū)動(dòng)模塊接收到來自應(yīng)用程序的刪除文件系統(tǒng) 中的已有文件的操作命令時(shí)的流程框圖。
具體實(shí)施例方式下面結(jié)合附圖,詳細(xì)介紹本發(fā)明提出的文件系統(tǒng)中數(shù)據(jù)的實(shí)時(shí)去重和傳輸方法(1)如圖1所示,本方法通過在操作系統(tǒng)的文件系統(tǒng)虛擬層之下注冊(cè)文件系統(tǒng)驅(qū) 動(dòng)模塊,接收和響應(yīng)應(yīng)用程序?qū)ξ募到y(tǒng)發(fā)起的操作命令,由文件系統(tǒng)實(shí)時(shí)重復(fù)數(shù)據(jù)刪除 管理進(jìn)程負(fù)責(zé)將元數(shù)據(jù)信息和數(shù)據(jù)塊內(nèi)容存儲(chǔ)到存儲(chǔ)設(shè)備中。具體地,本方法在存儲(chǔ)設(shè)備 中采用嵌入式數(shù)據(jù)庫存儲(chǔ)文件系統(tǒng)中的元數(shù)據(jù)信息。在該嵌入式數(shù)據(jù)庫中設(shè)置文件元數(shù)據(jù) 表、數(shù)據(jù)塊索引表和文件組成表;所述的文件元數(shù)據(jù)表記錄文件系統(tǒng)中每個(gè)文件的元數(shù)據(jù), 該元數(shù)據(jù)包括文件標(biāo)識(shí)、文件名、文件所在文件夾的標(biāo)識(shí)、文件大小、文件類型、訪問權(quán)限以 及文件的創(chuàng)建、修改和訪問時(shí)間;所述的數(shù)據(jù)塊索引表記錄文件系統(tǒng)中文件的數(shù)據(jù)塊的標(biāo) 識(shí)以及與標(biāo)識(shí)相對(duì)應(yīng)的數(shù)據(jù)塊的引用次數(shù),其中數(shù)據(jù)塊的標(biāo)識(shí)為該數(shù)據(jù)塊內(nèi)容的哈希值; 所述的文件組成表記錄組成文件系統(tǒng)中的文件的數(shù)據(jù)塊的信息,包括上述文件標(biāo)識(shí)、數(shù)據(jù) 塊起始位置、數(shù)據(jù)塊大小和數(shù)據(jù)塊標(biāo)識(shí),由其中的數(shù)據(jù)塊起始位置和數(shù)據(jù)塊大小決定數(shù)據(jù) 區(qū)域。(2)通過文件系統(tǒng)的驅(qū)動(dòng)模塊,接收和響應(yīng)應(yīng)用程序?qū)ξ募到y(tǒng)發(fā)起的操作命令, 該操作命令包括創(chuàng)建新文件、向已有文件寫入數(shù)據(jù)、從已有文件讀取數(shù)據(jù)和刪除已有文件, 具體過程如下(2-1)當(dāng)文件系統(tǒng)的驅(qū)動(dòng)模塊接收到來自應(yīng)用程序的創(chuàng)建新文件的操作命令時(shí), 在文件元數(shù)據(jù)表中記錄被創(chuàng)建文件的元數(shù)據(jù)。(2-2)當(dāng)文件系統(tǒng)的驅(qū)動(dòng)模塊接收到來自應(yīng)用程序的向已有文件寫入數(shù)據(jù)的操作 命令時(shí),參見圖2所示的流程框圖,進(jìn)行以下操作(2-2-1)根據(jù)操作命令中被寫文件的文件標(biāo)識(shí)、寫入位置和寫入數(shù)據(jù)大小,從上述 文件組成表中檢索屬于該被寫文件的兩個(gè)數(shù)據(jù)塊標(biāo)識(shí),且滿足與該兩個(gè)數(shù)據(jù)塊標(biāo)識(shí)相對(duì)應(yīng) 的兩個(gè)數(shù)據(jù)塊為與被寫入數(shù)據(jù)區(qū)域相互重疊的首、尾兩個(gè)數(shù)據(jù)塊,具體過程可參見圖3。從 圖3中,可以看出,文件系統(tǒng)中存在文件標(biāo)識(shí)分別為1和2的兩個(gè)文件,文件標(biāo)識(shí)為1的文 件由5個(gè)數(shù)據(jù)塊組成,該5個(gè)數(shù)據(jù)塊對(duì)應(yīng)的數(shù)據(jù)塊標(biāo)識(shí)分別為A、B、C、D、E,文件標(biāo)識(shí)為2的 文件由3個(gè)數(shù)據(jù)塊組成,該3個(gè)數(shù)據(jù)塊對(duì)應(yīng)的數(shù)據(jù)塊標(biāo)識(shí)分貝為A、D、F,文件組成表中記錄 了文件的組成信息。上述兩個(gè)文件存在重復(fù)數(shù)據(jù),導(dǎo)致該兩個(gè)文件都含有數(shù)據(jù)塊標(biāo)識(shí)分別 為A和D的兩個(gè)數(shù)據(jù)塊,由于這兩個(gè)數(shù)據(jù)塊的內(nèi)容只被存儲(chǔ)一次,因此實(shí)現(xiàn)了數(shù)據(jù)去重的目 的。如圖3所示,操作命令中被寫文件的文件標(biāo)識(shí)為1,根據(jù)該文件標(biāo)識(shí),同時(shí)根據(jù)操作命令 中的寫入位置和寫入數(shù)據(jù)大小可計(jì)算出被寫入數(shù)據(jù)區(qū)域,在文件組成表中檢索屬于該被寫 文件的兩個(gè)數(shù)據(jù)塊標(biāo)識(shí),且滿足與該兩個(gè)數(shù)據(jù)塊標(biāo)識(shí)相對(duì)應(yīng)的兩個(gè)數(shù)據(jù)塊為與被寫入數(shù)據(jù)區(qū)域相互重疊的首、尾兩個(gè)數(shù)據(jù)塊,就會(huì)得到數(shù)據(jù)塊標(biāo)識(shí)B和數(shù)據(jù)塊標(biāo)識(shí)D。(2-2-2)根據(jù)檢索到的數(shù)據(jù)塊標(biāo)識(shí),從存儲(chǔ)設(shè)備中讀取與該數(shù)據(jù)塊標(biāo)識(shí)相對(duì)應(yīng)的 數(shù)據(jù)塊內(nèi)容;對(duì)應(yīng)圖3,就是讀出數(shù)據(jù)塊標(biāo)識(shí)分別為B和D的兩個(gè)數(shù)據(jù)塊的內(nèi)容。(2-2-3)將讀出的數(shù)據(jù)塊內(nèi)容中與被寫入數(shù)據(jù)區(qū)域相不重疊的數(shù)據(jù)拼接到被寫入 數(shù)據(jù)的兩側(cè),得到拼接后的數(shù)據(jù)及拼接后的數(shù)據(jù)區(qū)域;拼接過程、拼接后的數(shù)據(jù)及拼接后的 數(shù)據(jù)區(qū)域,如圖3所示。(2-2-4)從上述文件組成表中檢索與屬于該被寫文件、且數(shù)據(jù)塊起始位置位于上 述步驟(2-2-3)數(shù)據(jù)區(qū)域之內(nèi)的數(shù)據(jù)塊相對(duì)應(yīng)的數(shù)據(jù)塊標(biāo)識(shí);在如圖3所示例中,該檢索將 得到的3個(gè)數(shù)據(jù)塊標(biāo)識(shí),分別為B、C和D。(2-2-5)將與從上述數(shù)據(jù)塊索引表中檢索到的數(shù)據(jù)塊標(biāo)識(shí)相對(duì)應(yīng)的數(shù)據(jù)塊的引用 次數(shù)減1,當(dāng)引用次數(shù)不為0時(shí),進(jìn)行步驟(2-2-6),當(dāng)引用次數(shù)成為0時(shí),從數(shù)據(jù)塊索引表 中刪除該數(shù)據(jù)塊標(biāo)識(shí)及與該數(shù)據(jù)塊標(biāo)識(shí)相對(duì)應(yīng)的數(shù)據(jù)塊引用次數(shù),并從存儲(chǔ)設(shè)備上刪除該 數(shù)據(jù)塊內(nèi)容,進(jìn)行步驟(2-2-6)。(2-2-6)將上述步驟(2-2-3)拼接后的數(shù)據(jù)切分成一組新數(shù)據(jù)塊;數(shù)據(jù)切分的方 法可以使用基于用戶或系統(tǒng)設(shè)定的數(shù)據(jù)塊大小的定長切分和基于內(nèi)容指紋的不定長切分, 本發(fā)明的一個(gè)實(shí)施例中,使用了 Muthitacharoen等人提出的基于Rabin指紋的可變長切分 方法;如圖3所示,拼接后的數(shù)據(jù)被切分成兩個(gè)新的數(shù)據(jù)塊,根據(jù)數(shù)據(jù)塊內(nèi)容的哈希值,該 兩個(gè)數(shù)據(jù)塊的數(shù)據(jù)塊標(biāo)識(shí)分別為G和H。(2-2-7)從上述數(shù)據(jù)塊索引表中分別搜索與上述一組新數(shù)據(jù)塊相對(duì)應(yīng)的每個(gè)數(shù)據(jù) 塊標(biāo)識(shí)若該數(shù)據(jù)塊標(biāo)識(shí)已存在,則在數(shù)據(jù)塊索引表中將與該數(shù)據(jù)塊標(biāo)識(shí)相對(duì)應(yīng)的數(shù)據(jù)塊 的引用次數(shù)加1,若該數(shù)據(jù)塊標(biāo)識(shí)為新標(biāo)識(shí),則在數(shù)據(jù)塊索引表中添加該新數(shù)據(jù)塊標(biāo)識(shí),并 將與該新數(shù)據(jù)塊標(biāo)識(shí)相對(duì)應(yīng)的數(shù)據(jù)塊的引用次數(shù)設(shè)置為1,并將與該新數(shù)據(jù)塊標(biāo)識(shí)相對(duì)應(yīng) 的新數(shù)據(jù)塊內(nèi)容存儲(chǔ)到存儲(chǔ)設(shè)備上;在上述文件組成表中記錄被寫文件的文件標(biāo)識(shí)、該新 數(shù)據(jù)塊的起始位置、該新數(shù)據(jù)塊的大小以及該新數(shù)據(jù)塊的標(biāo)識(shí)。(2-2-8)根據(jù)向已有文件寫入數(shù)據(jù)的操作命令,更新上述文件元數(shù)據(jù)表中被寫文 件的元數(shù)據(jù)。(2-3)當(dāng)文件系統(tǒng)的驅(qū)動(dòng)模塊接收到來自應(yīng)用程序的從文件系統(tǒng)中的已有文件中 讀取數(shù)據(jù)的操作命令時(shí),參見圖4所示的流程框圖,進(jìn)行以下操作(2-3-1)根據(jù)操作命令,在計(jì)算機(jī)內(nèi)存中分配與待讀取數(shù)據(jù)的大小相等的內(nèi)存空 間,并將該內(nèi)存空間初始化為空白;如圖5所示。(2-3-2)根據(jù)操作命令中的被讀文件的文件標(biāo)識(shí)和讀取位置,從上述文件組成表 中檢索屬于該被讀文件的數(shù)據(jù)塊標(biāo)識(shí),且滿足與該數(shù)據(jù)塊標(biāo)識(shí)相對(duì)應(yīng)的數(shù)據(jù)塊是起始位置 處于讀取位置之前的最后一個(gè)數(shù)據(jù)塊,若檢索到該數(shù)據(jù)塊標(biāo)識(shí),且該數(shù)據(jù)塊區(qū)域與待讀取 數(shù)據(jù)區(qū)域存在重疊,則讀取該數(shù)據(jù)塊內(nèi)容,并將該讀取的內(nèi)容與待讀取數(shù)據(jù)區(qū)域的重疊部 分寫入上述步驟(2-3-1)的內(nèi)存空間的頭部,進(jìn)行步驟(2-3-3),具體過程可參見圖6。從圖 6中,可以看出,文件系統(tǒng)中存在文件標(biāo)識(shí)分別為1和2的兩個(gè)文件,文件標(biāo)識(shí)為1的文件由 5個(gè)數(shù)據(jù)塊組成,該5個(gè)數(shù)據(jù)塊對(duì)應(yīng)的數(shù)據(jù)塊標(biāo)識(shí)分別為A、B、C、D、E,文件標(biāo)識(shí)為2的文件 由3個(gè)數(shù)據(jù)塊組成,該3個(gè)數(shù)據(jù)塊對(duì)應(yīng)的數(shù)據(jù)塊標(biāo)識(shí)分貝為A、D、F,文件組成表中記錄了文 件的組成信息。在圖6中,操作命令中被讀文件的文件標(biāo)識(shí)為1,根據(jù)該文件標(biāo)識(shí),同時(shí)根據(jù)操作命令中的讀取位置,從文件組成表中檢索屬于該被讀文件的數(shù)據(jù)塊標(biāo)識(shí),且滿足與該 數(shù)據(jù)塊標(biāo)識(shí)相對(duì)應(yīng)的數(shù)據(jù)塊是起始位置處于讀取位置之前的最后一個(gè)數(shù)據(jù)塊,就會(huì)得到數(shù) 據(jù)塊標(biāo)識(shí)B,而且與數(shù)據(jù)塊標(biāo)識(shí)B相對(duì)應(yīng)的數(shù)據(jù)塊區(qū)域與待讀取數(shù)據(jù)區(qū)域存在重疊,因此, 就要從存儲(chǔ)設(shè)備中讀取與B相對(duì)應(yīng)的數(shù)據(jù)塊的內(nèi)容,并將讀取的數(shù)據(jù)塊內(nèi)容與待讀取數(shù)據(jù) 區(qū)域的重疊部分寫入圖6中所示的內(nèi)存空間的頭部。若檢索不到該數(shù)據(jù)塊標(biāo)識(shí),或者與檢 索到的數(shù)據(jù)標(biāo)識(shí)相對(duì)應(yīng)的數(shù)據(jù)塊區(qū)域與待讀取數(shù)據(jù)區(qū)域不存在重疊,則進(jìn)行步驟(2-3-3)。(2-3-3)根據(jù)操作命令,從上述文件組成表中檢索屬于該被讀文件的數(shù)據(jù)塊標(biāo)識(shí), 且滿足與該數(shù)據(jù)塊標(biāo)識(shí)相對(duì)應(yīng)的數(shù)據(jù)塊的起始位置處于待讀取數(shù)據(jù)區(qū)域內(nèi)。在圖5和圖6 所示例中,將會(huì)檢索得到數(shù)據(jù)塊標(biāo)識(shí)C和D。讀取與檢索到的所有數(shù)據(jù)塊標(biāo)識(shí)相對(duì)應(yīng)的數(shù)據(jù) 塊的內(nèi)容,并將讀出的數(shù)據(jù)塊內(nèi)容中與待讀取數(shù)據(jù)區(qū)域的重疊部分寫入上述步驟(2-3-1) 的內(nèi)存空間中。在該內(nèi)存空間的中的起始寫入位置等于該數(shù)據(jù)塊的起始位置減去讀取位置 等到的差,以圖6中將數(shù)據(jù)塊標(biāo)識(shí)為C的數(shù)據(jù)塊內(nèi)容寫入該內(nèi)存空間為例,由于讀取位置為 r,與C相對(duì)應(yīng)的數(shù)據(jù)塊的起始位置為b,因此,與C相對(duì)應(yīng)的數(shù)據(jù)塊內(nèi)容將以b-r為起始寫 入位置被寫入該內(nèi)存空間中。(2-3-4)根據(jù)操作命令,更新上述文件元數(shù)據(jù)表中被讀文件的元數(shù)據(jù),即修改被讀 文件的最近訪問時(shí)間。(2-3-5)將上述步驟(2-3-1)的內(nèi)存空間中的數(shù)據(jù)通過文件系統(tǒng)的驅(qū)動(dòng)模塊返回
給應(yīng)用程序。(2-4)當(dāng)文件系統(tǒng)的驅(qū)動(dòng)模塊接收到來自應(yīng)用程序的刪除文件系統(tǒng)中的已有文件 的操作命令時(shí),參見圖7所示的流程框圖,進(jìn)行以下操作(2-4-1)從上述文件組成表中檢索屬于被刪除文件的數(shù)據(jù)塊標(biāo)識(shí)。(2-4-2)在上述數(shù)據(jù)塊索引表中將與檢索到的每個(gè)數(shù)據(jù)塊標(biāo)識(shí)相對(duì)應(yīng)的數(shù)據(jù)塊的 引用次數(shù)減1,當(dāng)引用次數(shù)變?yōu)?時(shí),從數(shù)據(jù)塊索引表中刪除該數(shù)據(jù)塊標(biāo)識(shí)及與該數(shù)據(jù)塊標(biāo) 識(shí)相對(duì)應(yīng)的數(shù)據(jù)塊引用次數(shù),從存儲(chǔ)設(shè)備上刪除該數(shù)據(jù)塊內(nèi)容,并進(jìn)行步驟(2-4-3),當(dāng)引 用次數(shù)未變?yōu)?時(shí),進(jìn)行步驟(2-4-3)。(2-4-3)從上述文件組成表中刪除被刪除文件的所有記錄。(2-4-4)從上述文件元數(shù)據(jù)表中刪除被刪除文件的元數(shù)據(jù)。
9
權(quán)利要求
一種文件系統(tǒng)中實(shí)時(shí)刪除重復(fù)數(shù)據(jù)的方法,其特征在于該方法包括以下步驟(1)采用嵌入式數(shù)據(jù)庫存儲(chǔ)文件系統(tǒng)中的元數(shù)據(jù)信息,在該嵌入式數(shù)據(jù)庫中設(shè)置文件元數(shù)據(jù)表、數(shù)據(jù)塊索引表和文件組成表;所述的文件元數(shù)據(jù)表記錄文件系統(tǒng)中每個(gè)文件的元數(shù)據(jù),該元數(shù)據(jù)包括文件標(biāo)識(shí)、文件名、文件所在文件夾的標(biāo)識(shí)、文件大小、文件類型、訪問權(quán)限以及文件的創(chuàng)建、修改和訪問時(shí)間;所述的數(shù)據(jù)塊索引表記錄文件系統(tǒng)中文件的數(shù)據(jù)塊的標(biāo)識(shí)以及與標(biāo)識(shí)相對(duì)應(yīng)的數(shù)據(jù)塊的引用次數(shù),其中數(shù)據(jù)塊的標(biāo)識(shí)為該數(shù)據(jù)塊內(nèi)容的哈希值;所述的文件組成表記錄組成文件系統(tǒng)中的文件的數(shù)據(jù)塊的信息,包括上述文件標(biāo)識(shí)、數(shù)據(jù)塊起始位置、數(shù)據(jù)塊大小和數(shù)據(jù)塊標(biāo)識(shí),由其中的數(shù)據(jù)塊起始位置和數(shù)據(jù)塊大小決定數(shù)據(jù)區(qū)域;(2)通過文件系統(tǒng)的驅(qū)動(dòng)模塊,接收和響應(yīng)應(yīng)用程序?qū)ξ募到y(tǒng)發(fā)起的操作命令,該操作命令包括創(chuàng)建新文件、向已有文件寫入數(shù)據(jù)、從已有文件讀取數(shù)據(jù)和刪除已有文件,具體過程如下(2 1)當(dāng)文件系統(tǒng)的驅(qū)動(dòng)模塊接收到來自應(yīng)用程序的創(chuàng)建新文件的操作命令時(shí),在文件元數(shù)據(jù)表中記錄被創(chuàng)建文件的元數(shù)據(jù);(2 2)當(dāng)文件系統(tǒng)的驅(qū)動(dòng)模塊接收到來自應(yīng)用程序的向已有文件寫入數(shù)據(jù)的操作命令時(shí),進(jìn)行以下操作(2 2 1)根據(jù)操作命令中被寫文件的文件標(biāo)識(shí)、寫入位置和寫入數(shù)據(jù)大小,從上述文件組成表中檢索屬于該被寫文件的兩個(gè)數(shù)據(jù)塊標(biāo)識(shí),且滿足與該兩個(gè)數(shù)據(jù)塊標(biāo)識(shí)相對(duì)應(yīng)的兩個(gè)數(shù)據(jù)塊為與被寫入數(shù)據(jù)區(qū)域相互重疊的首、尾兩個(gè)數(shù)據(jù)塊;(2 2 2)根據(jù)檢索到的數(shù)據(jù)塊標(biāo)識(shí),從存儲(chǔ)設(shè)備中讀取與該數(shù)據(jù)塊標(biāo)識(shí)相對(duì)應(yīng)的數(shù)據(jù)塊內(nèi)容;(2 2 3)將讀出的數(shù)據(jù)塊內(nèi)容中與被寫入數(shù)據(jù)區(qū)域不重疊的數(shù)據(jù)拼接到被寫入數(shù)據(jù)的兩側(cè),得到拼接后的數(shù)據(jù)及數(shù)據(jù)區(qū)域;(2 2 4)從上述文件組成表中檢索與屬于該被寫文件、且數(shù)據(jù)塊起始位置位于上述步驟(2 2 3)數(shù)據(jù)區(qū)域之內(nèi)的數(shù)據(jù)塊相對(duì)應(yīng)的數(shù)據(jù)塊標(biāo)識(shí);(2 2 5)將與從上述數(shù)據(jù)塊索引表中檢索到的數(shù)據(jù)塊標(biāo)識(shí)相對(duì)應(yīng)的數(shù)據(jù)塊的引用次數(shù)減1,當(dāng)引用次數(shù)不為0時(shí),進(jìn)行步驟(2 2 6),當(dāng)引用次數(shù)成為0時(shí),從數(shù)據(jù)塊索引表中刪除該數(shù)據(jù)塊標(biāo)識(shí)及與該數(shù)據(jù)塊標(biāo)識(shí)相對(duì)應(yīng)的數(shù)據(jù)塊引用次數(shù),并從存儲(chǔ)設(shè)備上刪除該數(shù)據(jù)塊內(nèi)容,進(jìn)行步驟(2 2 6);(2 2 6)將上述步驟(2 2 3)拼接后的數(shù)據(jù)切分成一組新數(shù)據(jù)塊;(2 2 7)從上述數(shù)據(jù)塊索引表中分別搜索與上述一組新數(shù)據(jù)塊相對(duì)應(yīng)的每個(gè)數(shù)據(jù)塊標(biāo)識(shí)若該數(shù)據(jù)塊標(biāo)識(shí)已存在,則在數(shù)據(jù)塊索引表中將與該數(shù)據(jù)塊標(biāo)識(shí)相對(duì)應(yīng)的數(shù)據(jù)塊的引用次數(shù)加1,若該數(shù)據(jù)塊標(biāo)識(shí)為新標(biāo)識(shí),則在數(shù)據(jù)塊索引表中添加該新數(shù)據(jù)塊標(biāo)識(shí),并將與該新數(shù)據(jù)塊標(biāo)識(shí)相對(duì)應(yīng)的數(shù)據(jù)塊的引用次數(shù)設(shè)置為1,并將與該新數(shù)據(jù)塊標(biāo)識(shí)相對(duì)應(yīng)的新數(shù)據(jù)塊內(nèi)容存儲(chǔ)到存儲(chǔ)設(shè)備上;在上述文件組成表中記錄被寫文件的文件標(biāo)識(shí)、該新數(shù)據(jù)塊的起始位置、該新數(shù)據(jù)塊的大小以及該新數(shù)據(jù)塊的標(biāo)識(shí);(2 2 8)根據(jù)向已有文件寫入數(shù)據(jù)的操作命令更新上述文件元數(shù)據(jù)表中被寫文件的元數(shù)據(jù);(2 3)當(dāng)文件系統(tǒng)的驅(qū)動(dòng)模塊接收到來自應(yīng)用程序的從文件系統(tǒng)中的已有文件中讀取數(shù)據(jù)的操作命令時(shí),進(jìn)行以下操作(2 3 1)根據(jù)操作命令,在計(jì)算機(jī)內(nèi)存中分配與待讀取數(shù)據(jù)的大小相等的內(nèi)存空間,并將該內(nèi)存空間初始化為空白;(2 3 2)根據(jù)操作命令中的被讀文件的文件標(biāo)識(shí)和讀取位置,從上述文件組成表中檢索屬于該被讀文件的數(shù)據(jù)塊標(biāo)識(shí),且滿足與該數(shù)據(jù)塊標(biāo)識(shí)相對(duì)應(yīng)的數(shù)據(jù)塊是起始位置處于讀取位置之前的最后一個(gè)數(shù)據(jù)塊,若檢索到該數(shù)據(jù)塊標(biāo)識(shí),且該數(shù)據(jù)塊區(qū)域與待讀取數(shù)據(jù)區(qū)域存在重疊,則讀取該數(shù)據(jù)塊內(nèi)容,并將該讀取的內(nèi)容與待讀取數(shù)據(jù)區(qū)域的重疊部分寫入上述步驟(2 3 1)的內(nèi)存空間的頭部,進(jìn)行步驟(2 3 3),若檢索不到該數(shù)據(jù)塊標(biāo)識(shí),或者與檢索到的數(shù)據(jù)標(biāo)識(shí)相對(duì)應(yīng)的數(shù)據(jù)塊區(qū)域與待讀取數(shù)據(jù)區(qū)域不存在重疊,則進(jìn)行步驟(2 3 3);(2 3 3)根據(jù)操作命令,從上述文件組成表中檢索屬于該被讀文件的數(shù)據(jù)塊標(biāo)識(shí),且滿足與該數(shù)據(jù)塊標(biāo)識(shí)相對(duì)應(yīng)的數(shù)據(jù)塊的起始位置處于待讀取數(shù)據(jù)區(qū)域內(nèi);讀取與檢索到的所有數(shù)據(jù)塊標(biāo)識(shí)相對(duì)應(yīng)的數(shù)據(jù)塊的內(nèi)容,并將讀出的數(shù)據(jù)塊內(nèi)容中與待讀取數(shù)據(jù)區(qū)域的重疊部分寫入上述步驟(2 3 1)的內(nèi)存空間中;(2 3 4)根據(jù)操作命令,更新上述文件元數(shù)據(jù)表中被讀文件的元數(shù)據(jù);(2 3 5)將上述步驟(2 3 1)的內(nèi)存空間中的數(shù)據(jù)通過文件系統(tǒng)的驅(qū)動(dòng)模塊返回給應(yīng)用程序;(2 4)當(dāng)文件系統(tǒng)的驅(qū)動(dòng)模塊接收到來自應(yīng)用程序的刪除文件系統(tǒng)中的已有文件的操作命令時(shí),進(jìn)行以下操作(2 4 1)從上述文件組成表中檢索屬于被刪除文件的數(shù)據(jù)塊標(biāo)識(shí);(2 4 2)在上述數(shù)據(jù)塊索引表中將與檢索到的每個(gè)數(shù)據(jù)塊標(biāo)識(shí)相對(duì)應(yīng)的數(shù)據(jù)塊的引用次數(shù)減1,當(dāng)引用次數(shù)變?yōu)?時(shí),從數(shù)據(jù)塊索引表中刪除該數(shù)據(jù)塊標(biāo)識(shí)及與該數(shù)據(jù)塊標(biāo)識(shí)相對(duì)應(yīng)的數(shù)據(jù)塊引用次數(shù),從存儲(chǔ)設(shè)備上刪除該數(shù)據(jù)塊內(nèi)容,并進(jìn)行步驟(2 4 3),當(dāng)引用次數(shù)未變?yōu)?時(shí),進(jìn)行步驟(2 4 3);(2 4 3)從上述文件組成表中刪除被刪除文件的所有記錄;(2 4 4)從上述文件元數(shù)據(jù)表中刪除被刪除文件的元數(shù)據(jù)。
全文摘要
本發(fā)明涉及一種文件系統(tǒng)中實(shí)時(shí)刪除重復(fù)數(shù)據(jù)的方法,屬于計(jì)算機(jī)數(shù)據(jù)存儲(chǔ)技術(shù)領(lǐng)域。在文件系統(tǒng)創(chuàng)建階段,在嵌入式數(shù)據(jù)庫中設(shè)置文件元數(shù)據(jù)表、數(shù)據(jù)塊索引表和文件組成表;在文件系統(tǒng)使用階段,通過文件系統(tǒng)驅(qū)動(dòng)接收和響應(yīng)應(yīng)用程序?qū)ξ募到y(tǒng)發(fā)起的操作命令,包括創(chuàng)建新文件、向已有文件寫入數(shù)據(jù)、從已有文件讀取數(shù)據(jù)和刪除已有文件。本發(fā)明方法,同時(shí)支持定長和不定長的文件分塊方法,可實(shí)時(shí)刪除文件系統(tǒng)中的重復(fù)數(shù)據(jù),節(jié)省存儲(chǔ)空間,提高存儲(chǔ)設(shè)備的利用效率,而且重復(fù)數(shù)據(jù)的刪除過程對(duì)應(yīng)用程序和用戶完全透明,無縫兼容現(xiàn)有各種應(yīng)用程序的文件操作,幾乎不會(huì)對(duì)用戶感受造成任何負(fù)面影響。
文檔編號(hào)G06F17/30GK101908073SQ20101025273
公開日2010年12月8日 申請(qǐng)日期2010年8月13日 優(yōu)先權(quán)日2010年8月13日
發(fā)明者唐力, 汪東升 申請(qǐng)人:清華大學(xué)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
天全县| 西吉县| 永济市| 汝州市| 遵化市| 北安市| 高密市| 永年县| 巴东县| 格尔木市| 平阳县| 绥江县| 海晏县| 双流县| 江津市| 江都市| 民勤县| 都江堰市| 敖汉旗| 肇庆市| 大埔县| 邵阳县| 廉江市| 长寿区| 栾川县| 吴江市| 金坛市| 栾城县| 喀喇沁旗| 罗城| 小金县| 谷城县| 隆子县| 南召县| 榆社县| 淮滨县| 阜宁县| 湘阴县| 四会市| 深州市| 阳西县|