本發(fā)明涉及存儲設(shè)備技術(shù)領(lǐng)域,尤其涉及一種文件系統(tǒng)的空間分配方法及裝置。
背景技術(shù):
在存儲系統(tǒng)實(shí)現(xiàn)文件系統(tǒng)功能的時候,在采用ROW機(jī)制的文件系統(tǒng)中,對文件再次寫入時,將不會寫入到原文件所存儲的位置,而是隨機(jī)的為寫入的文件分配空間。
現(xiàn)有的文件系統(tǒng)中,通過一個位圖來表示一個數(shù)據(jù)塊的使用情況。以數(shù)據(jù)塊大小為4MB為例,位圖中的一位表示4KB數(shù)據(jù)塊空間,所以一個數(shù)據(jù)塊的位圖需要256byte。對數(shù)據(jù)塊進(jìn)行分配時,需要優(yōu)先分配大數(shù)據(jù)塊。為了優(yōu)先使用大數(shù)據(jù)塊,需要讀取所有數(shù)據(jù)塊的位圖,對所有的數(shù)據(jù)塊的位圖進(jìn)行容量統(tǒng)計,找到剩余空間最大的數(shù)據(jù)塊,然后將其分配出去。隨著文件系統(tǒng)的使用,表示空間使用情況的位圖會越來越多。如果每個I/O請求,都需要把所有的位圖取出來,并找到最大空間,在時延上是無法接受的。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明實(shí)施例提供了一種文件系統(tǒng)的空間分配方法及裝置??梢詫?shí)現(xiàn)方便的為需要寫入的數(shù)據(jù)分配數(shù)據(jù)寫入地址。
一方面,本發(fā)明具體實(shí)施例提供一種空間分配方法,所述方法包括,接收寫數(shù)據(jù)請求,所述寫數(shù)據(jù)請求包括待寫入數(shù)據(jù)以及所述待寫入數(shù)據(jù)的長度。根據(jù)所述待寫入數(shù)據(jù)的長度,從所述存儲設(shè)備包含的多個數(shù)據(jù)塊組中確定一個目標(biāo)數(shù)據(jù)塊組,所述目標(biāo)數(shù)據(jù)塊組包括一個或多個數(shù)據(jù)塊,每個數(shù)據(jù)塊的空閑空間的大小對應(yīng)同一個大小區(qū)間,所述待寫入數(shù)據(jù)的長度在所述大小區(qū)間以內(nèi)。從所述多個數(shù)據(jù)塊中確定一個目標(biāo)數(shù)據(jù)塊。以將所述待寫入數(shù)據(jù)寫入所述目標(biāo)數(shù)據(jù)塊的空閑空間中。由此實(shí)現(xiàn)了,根據(jù)數(shù)據(jù)塊的大小劃分?jǐn)?shù)據(jù)塊組。對數(shù)據(jù)塊分組時,僅需獲取數(shù)據(jù)塊大小的信息,減小了確定數(shù)據(jù)塊寫入地址時,獲取的數(shù)據(jù)塊信息占用緩存空間的大小,提高了設(shè)備的性能。
在一個可能的設(shè)計中,所述方法還包括獲取所述存儲設(shè)備包括的多個數(shù)據(jù)塊的信息,所述信息包括每個數(shù)據(jù)塊的空閑空間的大小。根據(jù)每個數(shù)據(jù)塊的空閑空間的大小,將所述存儲設(shè)備包括的多個數(shù)據(jù)塊劃分為所述多個數(shù)據(jù)塊組,每個數(shù)據(jù)塊組對應(yīng)一個大小區(qū)間。對數(shù)據(jù)塊分組時,僅需獲取數(shù)據(jù)塊大小的信息,減小了確定數(shù)據(jù)塊寫入地址時,獲取的數(shù)據(jù)塊信息占用緩存空間的大小,提高了設(shè)備的性能。
在一個可能的設(shè)計中,所述根據(jù)每個數(shù)據(jù)塊的空閑空間的大小,將所述存儲設(shè)備包括的多個數(shù)據(jù)塊劃分為所述多個數(shù)據(jù)塊組包括。根據(jù)所述每個數(shù)據(jù)塊空閑空間的大小和每個數(shù)據(jù)塊的總?cè)萘?,確定每個數(shù)據(jù)塊的空閑容量占每個數(shù)據(jù)塊的總?cè)萘康谋壤?,根?jù)所述每個數(shù)據(jù)塊的空閑容量占每個數(shù)據(jù)塊的總?cè)萘康谋壤龑⑺龆鄠€數(shù)據(jù)塊劃分為所述多個數(shù)據(jù)塊組。根據(jù)每個數(shù)據(jù)塊的空閑空間占每個數(shù)據(jù)塊的總?cè)萘康谋壤姆绞絹泶_定數(shù)據(jù)塊數(shù)據(jù)塊的剩余容量,使數(shù)據(jù)塊剩余容量的計算更加方便。
在一個可能的設(shè)計中,所述每個數(shù)據(jù)塊中包括多個子數(shù)據(jù)塊。所述根據(jù)每個數(shù)據(jù)塊的空閑空間的大小,將所述存儲設(shè)備包括的多個數(shù)據(jù)塊劃分為所述多個數(shù)據(jù)塊組包括,根據(jù)所述每個數(shù)據(jù)塊中空閑的子數(shù)據(jù)塊與每個數(shù)據(jù)塊中包括的所有的子數(shù)據(jù)塊的個數(shù),確定每個數(shù)據(jù)塊中空閑的子數(shù)據(jù)塊占每個數(shù)據(jù)塊的所有的子數(shù)據(jù)塊的比例,根據(jù)所述每個數(shù)據(jù)塊中空閑的子數(shù)據(jù)塊占每個數(shù)據(jù)塊的所有的子數(shù)據(jù)塊的比例將所述多個數(shù)據(jù)塊劃分為所述多個數(shù)據(jù)塊組。根據(jù)每個數(shù)據(jù)塊中空閑的子數(shù)據(jù)塊占每個數(shù)據(jù)塊的所有的子數(shù)據(jù)塊的比例來確定數(shù)據(jù)塊數(shù)據(jù)塊的剩余容量,使數(shù)據(jù)塊剩余容量的計算更加方便。
在一個可能的設(shè)計中,所述方法還包括,對所述目標(biāo)數(shù)據(jù)塊中存儲的數(shù)據(jù)進(jìn)行釋放。對所述目標(biāo)數(shù)據(jù)塊生成新的信息,所述新的信息包括當(dāng)前目標(biāo)數(shù)據(jù)塊的空閑空間的大小。通過數(shù)據(jù)釋放時產(chǎn)生新的數(shù)據(jù)塊信息,使新的數(shù)據(jù)在存放時能夠獲取新的數(shù)據(jù)塊信息。
在一個可能的設(shè)計中,所述對所述目標(biāo)數(shù)據(jù)塊生成新的數(shù)據(jù)塊信息具體包括,所述目標(biāo)數(shù)據(jù)塊中包括多個子數(shù)據(jù)塊,確定所述目標(biāo)數(shù)據(jù)塊中的多個子數(shù)據(jù)塊包括一個或多個空閑子數(shù)據(jù)塊和一個或多個非空閑子數(shù)據(jù)塊。根據(jù)所述多個子數(shù)據(jù)塊中空閑子數(shù)據(jù)塊和/或非空閑子數(shù)據(jù)塊的數(shù)量,確定所述目標(biāo)數(shù)據(jù)塊生成新的數(shù)據(jù)塊信息。通過統(tǒng)計標(biāo)記的空閑子數(shù)據(jù)塊和非空閑子數(shù)據(jù)塊的數(shù)量,來確定數(shù)據(jù)塊信息,使的數(shù)據(jù)塊信息更新更加的方便。
另一方面,本發(fā)明具體實(shí)施例提供一種服務(wù)器,所述服務(wù)器包括用于數(shù)據(jù)存儲,包括:接收單元和處理單元。接收單元,用于接收寫數(shù)據(jù)請求,所述寫數(shù)據(jù)請求包括待寫入數(shù)據(jù)以及所述待寫入數(shù)據(jù)的長度。處理單元,用于根據(jù)所述待寫入數(shù)據(jù)的長度,從所述存儲設(shè)備包含的多個數(shù)據(jù)塊組中確定一個目標(biāo)數(shù)據(jù)塊組,所述目標(biāo)數(shù)據(jù)塊組包括一個或多個數(shù)據(jù)塊,每個數(shù)據(jù)塊的空閑空間的大小對應(yīng)同一個大小區(qū)間,所述待寫入數(shù)據(jù)的長度在所述大小區(qū)間以內(nèi)。所述處理單元,還用于從所述多個數(shù)據(jù)塊中確定一個目標(biāo)數(shù)據(jù)塊;以將所述待寫入數(shù)據(jù)寫入所述目標(biāo)數(shù)據(jù)塊的空閑空間中。由此實(shí)現(xiàn)了,根據(jù)數(shù)據(jù)塊的大小劃分?jǐn)?shù)據(jù)塊組。對數(shù)據(jù)塊分組時,僅需獲取數(shù)據(jù)塊大小的信息,減小了確定數(shù)據(jù)塊寫入地址時,獲取的數(shù)據(jù)塊信息占用緩存空間的大小,提高了設(shè)備的性能。
在一個可能的設(shè)計中,接收單元,獲取所述存儲設(shè)備包括的多個數(shù)據(jù)塊的信息,所述信息包括每個數(shù)據(jù)塊的空閑空間的大小。處理單元,根據(jù)每個數(shù)據(jù)塊的空閑空間的大小,將所述存儲設(shè)備包括的多個數(shù)據(jù)塊劃分為所述多個數(shù)據(jù)塊組,每個數(shù)據(jù)塊組對應(yīng)一個大小區(qū)間。對數(shù)據(jù)塊分組時,僅需獲取數(shù)據(jù)塊大小的信息,減小了確定數(shù)據(jù)塊寫入地址時,獲取的數(shù)據(jù)塊信息占用緩存空間的大小,提高了設(shè)備的性能。
在一個可能的設(shè)計中,處理單元根據(jù)每個數(shù)據(jù)塊的空閑空間的大小,將所述存儲設(shè)備包括的多個數(shù)據(jù)塊劃分為所述多個數(shù)據(jù)塊組包括,根據(jù)所述每個數(shù)據(jù)塊空閑空間的大小和每個數(shù)據(jù)塊的總?cè)萘?,確定每個數(shù)據(jù)塊的空閑容量占每個數(shù)據(jù)塊的總?cè)萘康谋壤鶕?jù)所述每個數(shù)據(jù)塊的空閑容量占每個數(shù)據(jù)塊的總?cè)萘康谋壤龑⑺龆鄠€數(shù)據(jù)塊劃分為所述多個數(shù)據(jù)塊組。根據(jù)每個數(shù)據(jù)塊的空閑空間占每個數(shù)據(jù)塊的總?cè)萘康谋壤姆绞絹泶_定數(shù)據(jù)塊數(shù)據(jù)塊的剩余容量,使數(shù)據(jù)塊剩余容量的計算更加方便。
在一個可能的設(shè)計中,所述每個數(shù)據(jù)塊中包括多個子數(shù)據(jù)塊,處理單元根據(jù)每個數(shù)據(jù)塊的空閑空間的大小,將所述存儲設(shè)備包括的多個數(shù)據(jù)塊劃分為所述多個數(shù)據(jù)塊組包括,根據(jù)所述每個數(shù)據(jù)塊中空閑的子數(shù)據(jù)塊與每個數(shù)據(jù)塊中包括的所有的子數(shù)據(jù)塊的個數(shù),確定每個數(shù)據(jù)塊中空閑的子數(shù)據(jù)塊占每個數(shù)據(jù)塊的所有的子數(shù)據(jù)塊的比例,根據(jù)所述每個數(shù)據(jù)塊中空閑的子數(shù)據(jù)塊占每個數(shù)據(jù)塊的所有的子數(shù)據(jù)塊的比例將所述多個數(shù)據(jù)塊劃分為所述多個數(shù)據(jù)塊組。根據(jù)每個數(shù)據(jù)塊中空閑的子數(shù)據(jù)塊占每個數(shù)據(jù)塊的所有的子數(shù)據(jù)塊的比例來確定數(shù)據(jù)塊數(shù)據(jù)塊的剩余容量,使數(shù)據(jù)塊剩余容量的計算更加方便。
在一個可能的設(shè)計中,所述處理器,還對所述目標(biāo)數(shù)據(jù)塊中存儲的數(shù)據(jù)進(jìn)行釋放。所述處理器,對所述目標(biāo)數(shù)據(jù)塊生成新的數(shù)據(jù)塊信息,所述新的數(shù)據(jù)塊信息包括當(dāng)前目標(biāo)數(shù)據(jù)塊的空閑空間的大小。通過數(shù)據(jù)釋放時產(chǎn)生新的數(shù)據(jù)塊信息,使新的數(shù)據(jù)在存放時能夠獲取新的數(shù)據(jù)塊信息。
在一個可能的設(shè)計中,所述處理器對所述目標(biāo)數(shù)據(jù)塊生成新的數(shù)據(jù)塊信息具體包括,所述目標(biāo)數(shù)據(jù)塊中包括多個子數(shù)據(jù)塊,確定所述目標(biāo)數(shù)據(jù)塊中的多個子數(shù)據(jù)塊包括一個或多個空閑子數(shù)據(jù)塊和一個或多個非空閑子數(shù)據(jù)塊。根據(jù)所述多個子數(shù)據(jù)塊中空閑子數(shù)據(jù)塊和/或非空閑子數(shù)據(jù)塊的數(shù)量,確定所述目標(biāo)數(shù)據(jù)塊生成新的數(shù)據(jù)塊信息。通過統(tǒng)計標(biāo)記的空閑子數(shù)據(jù)塊和非空閑子數(shù)據(jù)塊的數(shù)量,來確定數(shù)據(jù)塊信息,使的數(shù)據(jù)塊信息更新更加的方便。
再一方面,本發(fā)明具體實(shí)施例提供一種服務(wù)器,包括:處理器、存儲器、通信接口和總線,其中,所述處理器、所述存儲器和所述通信接口通過所述總線通信。所述通信接口用于與所述存儲控制設(shè)備連接。所述存儲器用于存儲程序。當(dāng)所述裝置運(yùn)行時,所述處理器用于執(zhí)行所述存儲器存儲的所述程序,以執(zhí)行權(quán)利要求1至6任一項所述的方法。
本發(fā)明實(shí)施例提供了一種文件系統(tǒng)的空間分配方法及裝置。根據(jù)待寫入數(shù)據(jù)的長度,從數(shù)據(jù)塊組中確定一個目標(biāo)數(shù)據(jù)塊,并在目標(biāo)數(shù)據(jù)塊組中確定一個數(shù)據(jù)塊,將待寫入數(shù)據(jù)寫入確定的數(shù)據(jù)塊中。由此實(shí)現(xiàn)了,根據(jù)數(shù)據(jù)塊的大小劃分?jǐn)?shù)據(jù)塊組。對數(shù)據(jù)塊分組時,僅需獲取數(shù)據(jù)塊大小的信息,減小了確定數(shù)據(jù)塊寫入地址時,獲取的數(shù)據(jù)塊信息占用緩存空間的大小,提高了設(shè)備的性能。
附圖說明
圖1為本發(fā)明實(shí)施例提供的存儲系統(tǒng)的組成圖;
圖2是本發(fā)明實(shí)施例控制器的結(jié)構(gòu)示意圖;
圖3為本發(fā)明具體實(shí)施例提供的一種數(shù)據(jù)存儲方法;
圖4為本發(fā)明具體實(shí)施例中提供的一種存儲器中存儲的數(shù)據(jù)塊信息;
圖5為本發(fā)明具體實(shí)施例提供的一種按照數(shù)據(jù)塊可用空間比例分組的間接層數(shù)據(jù)信息;
圖6為本發(fā)明實(shí)施例提供的一種數(shù)據(jù)塊更新的示意圖;
圖7為本發(fā)明具體實(shí)施例提供的一種服務(wù)器。
具體實(shí)施方式
下面通過附圖和實(shí)施例,對本發(fā)明實(shí)施例的技術(shù)方案做進(jìn)一步的詳細(xì)描述。
圖1為本發(fā)明實(shí)施例提供的存儲系統(tǒng)的組成圖。如圖1所示,存儲系統(tǒng)包括至少一個應(yīng)用服務(wù)器10和至少一個存儲設(shè)備20。所述應(yīng)用服務(wù)器10可以包括當(dāng)前技術(shù)已知的任何計算設(shè)備,如主機(jī)、服務(wù)器、臺式計算機(jī)等等。應(yīng)用服務(wù)器10中運(yùn)行有應(yīng)用程序(application)11,用戶可以通過應(yīng)用程序11向存儲設(shè)備20發(fā)送各種文件處理請求。
所述存儲設(shè)備20與所述應(yīng)用服務(wù)器11之間可以通過網(wǎng)絡(luò)中的NFS(Net File System,網(wǎng)絡(luò)文件系統(tǒng))/CIFS(Common Internet File System,普通網(wǎng)絡(luò)文件系統(tǒng))協(xié)議進(jìn)行數(shù)據(jù)傳輸,它可以是當(dāng)前技術(shù)已知的任何包含文件系統(tǒng)的存儲設(shè)備,如存儲陣列、存儲服務(wù)器等。
存儲設(shè)備20包括控制器21和存儲介質(zhì)31。控制器21可以包括當(dāng)前技術(shù)已知的任何計算設(shè)備,如服務(wù)器、臺式計算機(jī)等等。在控制器內(nèi)部,包括有文件系統(tǒng)210以及其他應(yīng)用程序??刂破?1用于執(zhí)行文件處理請求的各種操作,例如創(chuàng)建文件操作、打開文件操作、讀文件操作、寫文件操作等等。存儲設(shè)備20包含提供存儲空間保存文件的存儲介質(zhì)31。
下面介紹控制器21的硬件組成結(jié)構(gòu),請參考圖2,圖2是本發(fā)明實(shí)施例控制器21的結(jié)構(gòu)示意圖。如圖2所示,控制器21主要包括處理器(processor)118、緩存(cache)120、存儲器(memory)122、通信總線(簡稱總線)126以及通信接口(Communication Interface)128。處理器118、緩存120、存儲器122以及通信接口128通過通信總線126完成相互間的通信。
通信接口128,用于與應(yīng)用服務(wù)器10或存儲介質(zhì)31通信。
存儲器122,用于存放程序124,存儲器122可能包含高速RAM存儲器,也可能還包括非易失性存儲器(non-volatile memory),例如至少一個磁盤存儲器??梢岳斫獾氖?,存儲器122可以為隨機(jī)存儲器(Random-Access Memory,RAM)、磁碟、硬盤、光盤、固態(tài)硬盤(Solid State Disk,SSD)或者非易失性存儲器等各種可以存儲程序代碼的非短暫性的(non-transitory)機(jī)器可讀介質(zhì)。
程序124可以包括程序代碼,所述程序代碼包括文件系統(tǒng)210以及其他程序代碼。
緩存120(Cache)用于緩存從應(yīng)用服務(wù)器10接收的數(shù)據(jù)或從存儲介質(zhì)31中讀取的數(shù)據(jù)。緩存120可以是RAM、ROM、閃存(Flash memory)或固態(tài)硬盤(Solid State Disk,SSD)等各種可以存儲數(shù)據(jù)的非短暫性的(non-transitory)機(jī)器可讀介質(zhì),在此不做限定。
另外,存儲器122和緩存120可以合設(shè)或者分開設(shè)置,本發(fā)明實(shí)施例對此不做限定。
處理器118可能是一個中央處理器CPU,或者是特定集成電路ASIC(Application Specific Integrated Circuit),或者是被配置成實(shí)施本發(fā)明實(shí)施例的一個或多個集成電路。在本發(fā)明實(shí)施例中,處理器118可以用于接收來自應(yīng)用服務(wù)器10的各種文件處理請求,并且通過文件系統(tǒng)210執(zhí)行所述文件處理請求的各種操作,例如文件遷移操作、讀文件操作、寫文件操作等。
所述存儲介質(zhì)31可以是陣列,所述陣列包括由多個磁盤和/或SSD(solid-state drive,固態(tài)硬盤)等組成。
將文件寫入磁盤時,應(yīng)用服務(wù)器通過應(yīng)用程序向存儲設(shè)備發(fā)送IO請求。所述存儲設(shè)備的控制器根據(jù)IO請求確定數(shù)據(jù)寫入的地址。存儲設(shè)備根據(jù)數(shù)據(jù)寫入的地址將數(shù)據(jù)進(jìn)行存儲。
所述通信接口128接收的數(shù)據(jù)寫入請求,所述數(shù)據(jù)寫入請求包括需要寫入的數(shù)據(jù)和需要寫入的數(shù)據(jù)的長度。處理器118對所述寫入請求進(jìn)行處理,根據(jù)需要寫入的數(shù)據(jù)的長度來確定數(shù)據(jù)寫入地址。
處理器118在確定對一個需要寫入的數(shù)據(jù)分配空間時,還需要從存儲器122中獲取多個數(shù)據(jù)塊信息。所述處理器118根據(jù)獲取的數(shù)據(jù)塊信息,確定出一個數(shù)據(jù)塊。將需要寫入的數(shù)據(jù)寫入確定的數(shù)據(jù)塊。
其中,存儲器122中包括存儲了多個數(shù)據(jù)塊信息。所述多個數(shù)據(jù)塊信息中的每個數(shù)據(jù)塊信息用于表示該數(shù)據(jù)塊當(dāng)前可用于數(shù)據(jù)存儲的信息。所述每個數(shù)據(jù)塊信息包括位圖信息和間接層數(shù)據(jù)信息。所述位圖信息用于表示數(shù)據(jù)塊中每個子數(shù)據(jù)塊可否用于數(shù)據(jù)的存儲。所述間接層數(shù)據(jù)信息包括當(dāng)前數(shù)據(jù)塊可用于數(shù)據(jù)存儲的空間的大小和數(shù)據(jù)塊的標(biāo)識。所述處理器118根據(jù)間接層數(shù)據(jù)確定將數(shù)據(jù)存儲至哪個數(shù)據(jù)塊,根據(jù)位圖信息確定將需要寫入的數(shù)據(jù)寫入確定的數(shù)據(jù)塊的哪些子數(shù)據(jù)塊中。
所述處理器118在確定需要寫入的數(shù)據(jù)寫入哪個數(shù)據(jù)塊時,獲取多個數(shù)據(jù)塊的信息是獲取多個數(shù)據(jù)塊中每個數(shù)據(jù)塊的間接層數(shù)據(jù)。并根據(jù)每個間接層數(shù)據(jù)中數(shù)據(jù)塊的大小確定出一個數(shù)據(jù)塊。其中,處理器118在獲取數(shù)據(jù)塊信息時,獲取的多個數(shù)據(jù)塊的間接層數(shù)據(jù)信息。獲取的多個數(shù)據(jù)塊的間接層數(shù)據(jù)進(jìn)行統(tǒng)計,將多個數(shù)據(jù)塊根據(jù)間接層數(shù)據(jù)分為多個數(shù)據(jù)塊組。所述處理器118將多個數(shù)據(jù)塊分為多個數(shù)據(jù)塊組并存儲在緩存120中。從多個數(shù)據(jù)塊組中確定一個可用于存儲需要寫入的數(shù)據(jù)的目標(biāo)數(shù)據(jù)塊組。并且在確定的一個目標(biāo)數(shù)據(jù)塊組中選擇一個數(shù)據(jù)塊,獲取該數(shù)據(jù)塊的標(biāo)識。
在一個數(shù)據(jù)塊分組方法中,處理器118根據(jù)多個數(shù)據(jù)塊的間接層數(shù)據(jù),將多個數(shù)據(jù)塊分為多個組可以是,將多個間接層數(shù)據(jù)按照可用空間占數(shù)據(jù)塊總空間的比例、可用子數(shù)據(jù)塊占總子數(shù)據(jù)塊的比例等多種具體的方法進(jìn)行確定,本發(fā)明對此不作任何限定。
在另一種數(shù)據(jù)塊分組方法中,處理器118將多個數(shù)據(jù)塊的間接層數(shù)據(jù)分為多個數(shù)據(jù)塊組可以是,將多個間接層數(shù)據(jù)按照可用空間占數(shù)據(jù)塊總空間的比例、可用子數(shù)據(jù)塊占總子數(shù)據(jù)塊的比例等多種具體的方法進(jìn)行確定,本發(fā)明對此不作任何限定。
在本發(fā)明的另一種具體實(shí)施例中,所述磁盤中存儲的間接層數(shù)據(jù)是對多個數(shù)據(jù)塊按照一定的規(guī)則分組后的間接層數(shù)據(jù)。處理器118在從磁盤中獲取數(shù)據(jù)塊信息時,根據(jù)需要寫入的數(shù)據(jù)的長度確定一個與寫入數(shù)據(jù)相對應(yīng)的目標(biāo)數(shù)據(jù)塊組。處理器118從獲取的一個數(shù)據(jù)塊組中確定一個數(shù)據(jù)塊,獲取該數(shù)據(jù)塊的標(biāo)識。在本發(fā)明的具體實(shí)施例中,所述獲取一個與需要寫入的數(shù)據(jù)的長度相對應(yīng)的數(shù)據(jù)塊組可以是確定一個,數(shù)據(jù)塊組中可能存在的最小容量的數(shù)據(jù)塊的容量大于需要寫入的數(shù)據(jù)所占用的空間。
在確定寫入的數(shù)據(jù)將要寫入的數(shù)據(jù)塊后,所述處理器118還根據(jù)確定的數(shù)據(jù)塊的標(biāo)識,從存儲器122中獲取數(shù)據(jù)塊中的位圖信息。通過獲取與確定的數(shù)據(jù)塊具有相同標(biāo)識的位圖信息。根據(jù)位圖信息,確定需要寫入的數(shù)據(jù)寫入該數(shù)據(jù)塊的哪些子數(shù)據(jù)塊。將需要寫入的數(shù)據(jù)寫入確定的數(shù)據(jù)塊中確定的子數(shù)據(jù)塊。
在將需要寫入的數(shù)據(jù)寫入后,還對寫入了數(shù)據(jù)的數(shù)據(jù)塊的數(shù)據(jù)塊信息進(jìn)行更新。確定數(shù)據(jù)塊中哪些子數(shù)據(jù)可以用于存儲,從而確定新的位圖信息和間接層數(shù)據(jù)信息。將新的位圖信息、和數(shù)據(jù)塊信息覆蓋原來的信息。
所述存儲器122中還包括數(shù)據(jù)存儲信息,所述數(shù)據(jù)存儲信息包括數(shù)據(jù)塊標(biāo)識和數(shù)據(jù)寫入地址。通過在數(shù)據(jù)讀取、更新和刪除的過程中,通過數(shù)據(jù)存儲信息對已存儲的數(shù)據(jù)進(jìn)行操作。
本發(fā)明的具體實(shí)施例還包括用于對磁盤中的數(shù)據(jù)進(jìn)行刪除。處理器118接收應(yīng)用服務(wù)器10中包括的應(yīng)用程序11發(fā)送的數(shù)據(jù)刪除請求。所述數(shù)據(jù)刪除請求包括需要刪除的數(shù)據(jù)的標(biāo)識信息。所述控制器21的通信接口128接收所述請求。處理器118根據(jù)標(biāo)識信息獲取數(shù)據(jù)存儲信息,通過數(shù)據(jù)存儲信息確定該數(shù)據(jù)所存儲的數(shù)據(jù)塊及子數(shù)據(jù)塊。根據(jù)獲取的該數(shù)據(jù)所存儲的數(shù)據(jù)塊及子數(shù)據(jù)塊信息,將相應(yīng)的子數(shù)據(jù)塊所占用的空間進(jìn)行釋放。所述處理器118在釋放空間后,所述處理器118將對該數(shù)據(jù)塊的數(shù)據(jù)塊信息進(jìn)行更新。根據(jù)新的數(shù)據(jù)塊信息中包括的位圖信息和間接層數(shù)據(jù),覆蓋原來的數(shù)據(jù)塊信息。在新寫入數(shù)據(jù)時,通過獲取間接層數(shù)據(jù),根據(jù)間接層數(shù)據(jù)中每個數(shù)據(jù)塊可用空間的大小和寫入文件的大小確定所要存儲的數(shù)據(jù)塊,并將數(shù)據(jù)存儲到磁盤的相應(yīng)數(shù)據(jù)塊中。
圖3為本發(fā)明具體實(shí)施例提供的一種數(shù)據(jù)存儲方法。如圖3所述,所述方法包括:
S301接收寫數(shù)據(jù)請求,所述寫數(shù)據(jù)請求包括待寫入數(shù)據(jù)以及所述待寫入數(shù)據(jù)的長度。
接收數(shù)據(jù)寫入請求。所述數(shù)據(jù)寫入請求中包括的需要寫入的數(shù)據(jù)以及所述需要寫入數(shù)據(jù)的長度。其中,可以通過圖2所示的應(yīng)用程序發(fā)送數(shù)據(jù)寫入請求,并通過通信接口118來接收所述數(shù)據(jù)寫入請求。
S302根據(jù)所述待寫入數(shù)據(jù)的長度,從所述存儲設(shè)備包含的多個數(shù)據(jù)塊組中確定一個目標(biāo)數(shù)據(jù)塊組。
接收數(shù)據(jù)寫入請求后,處理器118獲取數(shù)據(jù)塊信息中包括的間接層數(shù)據(jù),以根據(jù)獲取的間接層數(shù)據(jù)確定需要寫入的數(shù)據(jù)寫入的數(shù)據(jù)塊。
所述設(shè)備中還包括多個數(shù)據(jù)塊信息,所述多個數(shù)據(jù)塊信息中的每個數(shù)據(jù)塊信息用于表示該數(shù)據(jù)塊當(dāng)前可用于數(shù)據(jù)存儲的信息,所述數(shù)據(jù)塊信息存儲在存儲器122中。所述多個數(shù)據(jù)塊信息包括間接層數(shù)據(jù)和位圖信息。所述間接層數(shù)據(jù)信息用于表示可用于數(shù)據(jù)存儲的空間大小,所述位圖信息用于表示數(shù)據(jù)塊中哪些子數(shù)據(jù)塊可用于數(shù)據(jù)存儲。
在一個例子中,當(dāng)一個子數(shù)據(jù)塊可以用于存儲數(shù)據(jù)時,該數(shù)據(jù)塊在位圖中用一個數(shù)表示(例如1);當(dāng)一個子數(shù)據(jù)塊不能用于存儲數(shù)據(jù)是,該數(shù)據(jù)塊在位圖中用另一個數(shù)表示(例如0)。所述間接層數(shù)據(jù)中包括當(dāng)前數(shù)據(jù)塊的標(biāo)識和當(dāng)前數(shù)據(jù)塊的可用空間的大小。
在一個例子中,圖4為本發(fā)明具體實(shí)施例中提供的一種存儲器中存儲的數(shù)據(jù)塊信息。如圖4所示,數(shù)據(jù)塊信息中包括存儲位圖信息和間接層數(shù)據(jù)信息。其中,位圖信息包括16個位圖信息,每個位圖信息對應(yīng)一個數(shù)據(jù)塊。每個位圖信息中包括一個數(shù)據(jù)塊的標(biāo)識和該數(shù)據(jù)塊中包括的多個子數(shù)據(jù)塊的信息。一個標(biāo)識為“id1”的數(shù)據(jù)塊的位圖信息為“1110110101”。一個標(biāo)識為“id2”的數(shù)據(jù)塊的位圖信息為“0001001010”。一個標(biāo)識為“id3”的數(shù)據(jù)塊的位圖信息為“0111101111”。為了描述的方便,剩余13個數(shù)據(jù)塊的標(biāo)識和位圖信息不一一列出,具體如圖4中的位圖信息所示。所述數(shù)據(jù)塊信息包括數(shù)據(jù)塊的標(biāo)識和所述數(shù)據(jù)塊剩余可用空間的比例。其中,標(biāo)識為“id1”的數(shù)據(jù)塊可用空間比例為“70%”;標(biāo)識為“id2”的數(shù)據(jù)塊可用空間比例為“30%”;標(biāo)識為“id3”的數(shù)據(jù)塊可用空間比例為“80%”。為了描述的方便,剩余13個數(shù)據(jù)塊的間接層數(shù)據(jù)信息不一一列出,具體如圖4所示的間接層數(shù)據(jù)信息所示。
需要說明的是,通過0、1標(biāo)識子數(shù)據(jù)塊是否可用和通過剩余可用空間比例占數(shù)據(jù)塊總空的比例來標(biāo)識間接層數(shù)據(jù)信息僅為舉例時的一種具體方法,不能用于對本發(fā)明的限定。在本發(fā)明中,可以用任意兩個不同的標(biāo)識標(biāo)記子數(shù)據(jù)塊是否可用。
在本發(fā)明的具體實(shí)施例中,所述處理器118獲取多個數(shù)據(jù)塊的信息是獲取多個數(shù)據(jù)塊中每個數(shù)據(jù)塊的間接層數(shù)據(jù),根據(jù)每個間接層數(shù)據(jù)中數(shù)據(jù)塊的大小確定出一個數(shù)據(jù)塊。在獲取間接層數(shù)據(jù)后,處理器118還將獲取的間接層數(shù)據(jù)分為多個數(shù)據(jù)塊組。從多個數(shù)據(jù)塊組中確定一個可用于存儲需要寫入的數(shù)據(jù)的數(shù)據(jù)塊組。
所述處理器118將多個數(shù)據(jù)塊的間接層數(shù)據(jù)分為多個數(shù)據(jù)塊組可以是將多個間接層數(shù)據(jù)按照可用空間占數(shù)據(jù)塊總空間的比例、可用子數(shù)據(jù)塊占總子數(shù)據(jù)塊的比例等多種具體的方法進(jìn)行確定,本發(fā)明對此不作任何限定。
所述處理器118在獲取間接層數(shù)據(jù)時,根據(jù)需要存儲的數(shù)據(jù)的長度獲取一個與需要寫入的數(shù)據(jù)的長度相對應(yīng)的數(shù)據(jù)塊組。所述獲取的一個數(shù)據(jù)塊組是獲取一個與需要寫入的數(shù)據(jù)的長度相對應(yīng)的組。
圖5為本發(fā)明具體實(shí)施例提供的一種按照數(shù)據(jù)塊可用空間比例分組的間接層數(shù)據(jù)信息。如圖5所示,可用空間為0%-40%、40%-60%、60%-80%、80%-100%的分組情況。其中,0%-40%分組中包括id2、id4、id6、id10、id13,即id2、id4、id6、id10、id13當(dāng)前可用空間的容量為0%-40%。40%-60%分組中包括id9、id14、id15,即id9、id14、id15當(dāng)前可用空間的容量為40%-60%。60%-80%分組中包括id1、id7、id8,即id1、id7、id8當(dāng)前可用空間的容量為60%-80%。8%-100%分組中包括id3、id5、id11、id12、id16,即id3、id5、id11、id12、id16當(dāng)前可用空間的容量為8%-100%。
需要說明的是,上述數(shù)據(jù)塊組的劃分情況僅為本發(fā)明的一種舉例,在具體的實(shí)施過程中,可以以任意的方式,分為任意數(shù)量的組。
在本發(fā)明的具體實(shí)施例中,所述存儲器122中可以是存儲了如圖4所示的數(shù)據(jù)塊信息,所述數(shù)據(jù)塊信息中包括間接層數(shù)據(jù)。處理器118獲取如圖4中所示的數(shù)據(jù)塊信息中包括的間接層數(shù)據(jù),并將獲取的間接層數(shù)據(jù)進(jìn)行分組,分為如圖5所示的分組。從如圖5所示的間接層數(shù)據(jù)中確定一個與需要寫入的數(shù)據(jù)相對應(yīng)的分組
在本發(fā)明的另一種具體實(shí)施例中,所述存儲器122中存儲的數(shù)據(jù)塊信息中包括存儲間接層數(shù)據(jù),所述間接層數(shù)據(jù)可以如圖5所示。所述數(shù)據(jù)塊信息中的間接層數(shù)據(jù)分為多個數(shù)據(jù)塊組,將多個數(shù)據(jù)塊分為多個數(shù)據(jù)塊組可以是將多個間接層數(shù)據(jù)按照可用空間占數(shù)據(jù)塊總空間的比例、可用子數(shù)據(jù)塊占總子數(shù)據(jù)塊的比例等多種具體的方法進(jìn)行確定,本發(fā)明對此不作任何限定。所述處理器118根據(jù)需要寫入的數(shù)據(jù)的長度,從存儲器122中獲取一個與需要寫入的數(shù)據(jù)相對應(yīng)的數(shù)據(jù)塊組。
S303、從所述多個數(shù)據(jù)塊中確定一個目標(biāo)數(shù)據(jù)塊。
處理器118在確定獲取一個數(shù)據(jù)塊組后,所述方法還包括在所述數(shù)據(jù)塊組中包括的多個數(shù)據(jù)塊中確定一個用于寫入需要寫入數(shù)據(jù)的數(shù)據(jù)塊。
在本發(fā)明的具體實(shí)施例中,所述一個與需要寫入的數(shù)據(jù)相對應(yīng)的數(shù)據(jù)塊組是一組容量大于或等于需要寫入的數(shù)據(jù)的數(shù)據(jù)塊。例如,整個數(shù)據(jù)塊的大小為4Mb,對多個數(shù)據(jù)塊進(jìn)行分組將數(shù)據(jù)塊分為等于0%-小于40%、等于40%-小于60%、等于60%-小于80%、等于80%-小于100%和等于100%五組。當(dāng)需要寫入的數(shù)據(jù)的大小為2Mb時,選擇等于60%-小于80%的數(shù)據(jù)塊組。從等于60%-小于80%的數(shù)據(jù)塊組中任意選擇一個數(shù)據(jù)塊,均能夠滿足該數(shù)據(jù)的存儲。
因此,在本發(fā)明的具體實(shí)施例中,可以從確定的數(shù)據(jù)塊組中任意確定一個數(shù)據(jù)塊。所任意選擇的數(shù)據(jù)塊能夠用于需要寫入的數(shù)據(jù)的存儲。
S304、將所述待寫入數(shù)據(jù)寫入所述目標(biāo)數(shù)據(jù)塊的空閑空間中。
所述在確定一個數(shù)據(jù)塊時,獲取該數(shù)據(jù)塊的標(biāo)識信息。并根據(jù)所述數(shù)據(jù)塊的標(biāo)識信息,從所述數(shù)據(jù)塊信息中獲取與該標(biāo)識信息對應(yīng)的位圖信息。
所述位圖信息用于表示數(shù)據(jù)塊中每個子數(shù)據(jù)塊可否用于數(shù)據(jù)的存儲。在一個例子中,當(dāng)一個子數(shù)據(jù)塊可以用于存儲數(shù)據(jù)時,該數(shù)據(jù)塊在位圖中用一個數(shù)表示(例如1);當(dāng)一個子數(shù)據(jù)塊不能用于存儲數(shù)據(jù)是,該數(shù)據(jù)塊在位圖中用另一個數(shù)表示(例如0)。
所述處理器118在獲取一個數(shù)據(jù)塊的可用情況信息后,根據(jù)所述位圖信息中包括的一個數(shù)據(jù)塊中的每個子數(shù)據(jù)塊的可用情況信息,確定將需要寫入的數(shù)據(jù)寫入哪些子數(shù)據(jù)塊中。處理器118將處理的結(jié)果返回至存儲設(shè)備,通過存儲設(shè)備將需要寫入的數(shù)據(jù)寫入確定的子數(shù)據(jù)塊中。將確定需要寫入數(shù)據(jù)的子數(shù)據(jù)塊,以及子數(shù)據(jù)塊中寫入的數(shù)據(jù)的標(biāo)識進(jìn)行存儲。
在本發(fā)明的具體實(shí)施例中,還包括將磁盤中存儲的數(shù)據(jù)釋放并對存儲器122中存儲的數(shù)據(jù)塊信息進(jìn)行更新,以使新寫入的數(shù)據(jù)能夠在釋放的子數(shù)據(jù)塊中寫入新的數(shù)據(jù)。
將數(shù)據(jù)釋放時,存儲設(shè)備接收主機(jī)或應(yīng)用服務(wù)器中包括的應(yīng)用程序發(fā)送的數(shù)據(jù)刪除請求。所述數(shù)據(jù)刪除請求包括需要刪除的數(shù)據(jù)的標(biāo)識,獲取所述存儲器122中存儲的關(guān)于已存儲數(shù)據(jù)的信息。所述處理器118根據(jù)需要刪除的數(shù)據(jù)的標(biāo)識確定該數(shù)據(jù)存儲在哪個數(shù)據(jù)塊以及數(shù)據(jù)塊中的哪些子數(shù)據(jù)塊。所述處理器118根據(jù)需要刪除的數(shù)據(jù)所在的數(shù)據(jù)塊及數(shù)據(jù)塊中的子數(shù)據(jù)塊。所述處理器118從存儲器122中獲取相應(yīng)數(shù)據(jù)塊的位圖信息,根據(jù)數(shù)據(jù)塊中存儲需要刪除的數(shù)據(jù)的子數(shù)據(jù)塊對位圖進(jìn)行更新。所述處理器118對位圖進(jìn)行更新是在位圖信息中將需要刪除的數(shù)據(jù)的子數(shù)據(jù)塊由不可進(jìn)行數(shù)據(jù)存儲修改為可進(jìn)行存儲。
在一個例子中,圖6為本發(fā)明實(shí)施例提供的一種數(shù)據(jù)塊更新的示意圖。如圖6所示,包括更新前部分和更新后部分。數(shù)據(jù)塊的標(biāo)識為“id13”,數(shù)據(jù)塊中包括10個子數(shù)據(jù)塊。在對數(shù)據(jù)塊更新前,第四個子數(shù)據(jù)塊可以用于數(shù)據(jù)的存儲,其余數(shù)據(jù)塊不能夠用于數(shù)據(jù)的存儲。當(dāng)IO適配層接到一個標(biāo)識為“001100”的數(shù)據(jù)的刪除請求時,根據(jù)所述標(biāo)識確定該數(shù)據(jù)存儲在標(biāo)識為“id13”的數(shù)據(jù)塊中,并具體存儲在第一個、第三個、第五個、第七個、第八個、第十個子數(shù)據(jù)塊中。塊分配器將位圖信息進(jìn)行更新,對數(shù)據(jù)塊更新后,第一個、第三個、第四個、第五個、第七個、第八個、第十個子數(shù)據(jù)塊可以用于新寫入數(shù)據(jù)的存儲,其余數(shù)據(jù)塊不能用于對新寫入數(shù)據(jù)的存儲
在對位圖進(jìn)行更新后,還對該數(shù)據(jù)塊的間接層數(shù)據(jù)進(jìn)行更新,所述對間接層數(shù)據(jù)進(jìn)行更新可以是根據(jù)更新后的位圖的信息進(jìn)行確定。在對數(shù)據(jù)塊信息更新后,將更新后的數(shù)據(jù)進(jìn)行存儲。
圖7為本發(fā)明具體實(shí)施例提供的一種服務(wù)器。如圖7所示,所述方法具體包括:
接收單元701,用于接收寫數(shù)據(jù)請求,所述寫數(shù)據(jù)請求包括待寫入數(shù)據(jù)以及所述待寫入數(shù)據(jù)的長度。
處理單元702,用于根據(jù)所述待寫入數(shù)據(jù)的長度,從所述存儲設(shè)備包含的多個數(shù)據(jù)塊組中確定一個目標(biāo)數(shù)據(jù)塊組,所述目標(biāo)數(shù)據(jù)塊組包括一個或多個數(shù)據(jù)塊,每個數(shù)據(jù)塊的空閑空間的大小對應(yīng)同一個大小區(qū)間,所述待寫入數(shù)據(jù)的長度在所述大小區(qū)間以內(nèi);
所述處理單元702,還用于從所述多個數(shù)據(jù)塊中確定一個目標(biāo)數(shù)據(jù)塊;以將所述待寫入數(shù)據(jù)寫入所述目標(biāo)數(shù)據(jù)塊的空閑空間中。
專業(yè)人員應(yīng)該還可以進(jìn)一步意識到,結(jié)合本文中所公開的實(shí)施例描述的各示例的單元及算法步驟,能夠以電子硬件、計算機(jī)軟件或者二者的結(jié)合來實(shí)現(xiàn),為了清楚地說明硬件和軟件的可互換性,在上述說明中已經(jīng)按照功能一般性地描述了各示例的組成及步驟。這些功能究竟以硬件還是軟件方式來執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計約束條件。專業(yè)技術(shù)人員可以對每個特定的應(yīng)用來使用不同方法來實(shí)現(xiàn)所描述的功能,但是這種實(shí)現(xiàn)不應(yīng)認(rèn)為超出本發(fā)明的范圍。
結(jié)合本文中所公開的實(shí)施例描述的方法或算法的步驟可以用硬件、處理器執(zhí)行的軟件模塊,或者二者的結(jié)合來實(shí)施。軟件模塊可以置于隨機(jī)存儲器(RAM)、內(nèi)存、只讀存儲器(ROM)、電可編程ROM、電可擦除可編程ROM、寄存器、硬盤、可移動磁盤、CD-ROM、或技術(shù)領(lǐng)域內(nèi)所公知的任意其它形式的存儲介質(zhì)中。
以上所述的具體實(shí)施方式,對本發(fā)明的目的、技術(shù)方案和有益效果進(jìn)行了進(jìn)一步詳細(xì)說明,所應(yīng)理解的是,以上所述僅為本發(fā)明的具體實(shí)施方式而已,并不用于限定本發(fā)明的保護(hù)范圍,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。