本發(fā)明涉及計(jì)算機(jī)領(lǐng)域,尤其涉及一種多磁盤(pán)聚合式數(shù)據(jù)存儲(chǔ)系統(tǒng)及其實(shí)現(xiàn)方法與應(yīng)用方法。
背景技術(shù):
存儲(chǔ)系統(tǒng)有das(直連附加存儲(chǔ):directattachedstorage)、nas(網(wǎng)絡(luò)附加存儲(chǔ):networkattachedstorage)和san(存儲(chǔ)局域網(wǎng)絡(luò):storageareanetwork)等多種類型。為了實(shí)現(xiàn)大容量的存儲(chǔ),以及防止存儲(chǔ)器件如磁盤(pán)或固態(tài)盤(pán)損壞而丟失數(shù)據(jù),上述各類存儲(chǔ)系統(tǒng)中普遍使用raid(冗余磁盤(pán)陣列:redundantarraysofindependentdisks)技術(shù)來(lái)組織多個(gè)磁盤(pán)。雖然raid能提高可靠性,但存在如下不足或問(wèn)題:
●存儲(chǔ)系統(tǒng)管理復(fù)雜。raid中所有磁盤(pán)必須具有相同容量和性能,創(chuàng)建以后就不能再修改,讓存儲(chǔ)系統(tǒng)的容量規(guī)劃和擴(kuò)容變得困難;
●容錯(cuò)級(jí)別在創(chuàng)建raid時(shí)設(shè)定,無(wú)法針對(duì)數(shù)據(jù)本身的特性或要求支持不同的容錯(cuò)級(jí)別;
●創(chuàng)建raid的時(shí)間高達(dá)數(shù)小時(shí),數(shù)據(jù)重建時(shí)間更長(zhǎng);
●當(dāng)訪問(wèn)數(shù)據(jù)流增加時(shí),raid讀寫(xiě)性能會(huì)大幅下降;在極端情形下多張磁盤(pán)組成的raid的性能甚至低于單個(gè)磁盤(pán)的性能。
dualfs【dualfs:anewjournalingfilesystemforlinux】對(duì)存儲(chǔ)系統(tǒng)的結(jié)構(gòu)進(jìn)行了探索優(yōu)化,將文件系統(tǒng)的元數(shù)據(jù)(metadata)保存到一個(gè)獨(dú)立的磁盤(pán)設(shè)備中,將數(shù)據(jù)存儲(chǔ)到raid中。這種方法能夠有效提高元數(shù)據(jù)訪問(wèn)的性能,如遍歷目錄,但raid面臨的問(wèn)題在dualfs中依然存在。
技術(shù)實(shí)現(xiàn)要素:
鑒于目前存在的上述不足,本發(fā)明提供一種多磁盤(pán)聚合式數(shù)據(jù)存儲(chǔ)系統(tǒng)及其實(shí)現(xiàn)方法與應(yīng)用方法,不再依賴于raid,可支持存儲(chǔ)容量擴(kuò)展、數(shù)據(jù)容錯(cuò),能夠簡(jiǎn)化存儲(chǔ)系統(tǒng)管理,提高可擴(kuò)展性,并提升存儲(chǔ)系統(tǒng)數(shù)據(jù)訪問(wèn)性能。
為達(dá)到上述目的,本發(fā)明采用如下技術(shù)方案:
一種多磁盤(pán)聚合式數(shù)據(jù)存儲(chǔ)系統(tǒng)實(shí)現(xiàn)方法,所述多磁盤(pán)聚合式數(shù)據(jù)存儲(chǔ)系統(tǒng)實(shí)現(xiàn)方法包括以下步驟:
以松耦合方式聚合多個(gè)存儲(chǔ)單元形成存儲(chǔ)系統(tǒng);
選取任一存儲(chǔ)單元存儲(chǔ)命名空間和存儲(chǔ)數(shù)據(jù)的元數(shù)據(jù);
存儲(chǔ)數(shù)據(jù)以不同的布局方式存儲(chǔ)在其它多個(gè)存儲(chǔ)單元中;
分別創(chuàng)建元數(shù)據(jù)管理模塊和數(shù)據(jù)管理模塊來(lái)管理元數(shù)據(jù)和存儲(chǔ)數(shù)據(jù);
對(duì)外提供統(tǒng)一命名空間模塊以管理命名空間和元數(shù)據(jù)管理模塊,并支持面向目錄、文件或?qū)ο蟮臄?shù)據(jù)訪問(wèn)。
依照本發(fā)明的一個(gè)方面,所述存儲(chǔ)數(shù)據(jù)的元數(shù)據(jù)保存在索引節(jié)點(diǎn)中,索引節(jié)點(diǎn)內(nèi)容包括該文件的數(shù)據(jù)布局方式和數(shù)據(jù)所在磁盤(pán)的標(biāo)識(shí)號(hào)。
依照本發(fā)明的一個(gè)方面,以存儲(chǔ)在元數(shù)據(jù)磁盤(pán)上的索引節(jié)點(diǎn)號(hào)作為文件數(shù)據(jù)在相應(yīng)數(shù)據(jù)磁盤(pán)上的名。
依照本發(fā)明的一個(gè)方面,每個(gè)目錄或文件可以獨(dú)立選擇數(shù)據(jù)布局方式,數(shù)據(jù)布局方式包括單體、鏡像和條帶化。
依照本發(fā)明的一個(gè)方面,所述統(tǒng)一命名空間模塊對(duì)上層軟件提供文件或?qū)ο笤L問(wèn)接口,屏蔽存儲(chǔ)系統(tǒng)的內(nèi)部結(jié)構(gòu),根據(jù)文件讀寫(xiě)請(qǐng)求訪問(wèn)相應(yīng)的元數(shù)據(jù)管理模塊和數(shù)據(jù)管理模塊。
依照本發(fā)明的一個(gè)方面,所述元數(shù)據(jù)管理模塊管理元數(shù)據(jù),包括目錄層次結(jié)構(gòu),每個(gè)目錄下的文件名,以及文件的元數(shù)據(jù)。
依照本發(fā)明的一個(gè)方面,所述數(shù)據(jù)管理模塊管理存儲(chǔ)數(shù)據(jù),每個(gè)數(shù)據(jù)管理模塊是完整獨(dú)立的存儲(chǔ)單元,記錄有磁盤(pán)的空間分配狀態(tài),所存儲(chǔ)的數(shù)據(jù),數(shù)據(jù)的磁盤(pán)塊地址。
依照本發(fā)明的一個(gè)方面,在數(shù)據(jù)存儲(chǔ)單元上,所有數(shù)據(jù)為扁平結(jié)構(gòu),在邏輯上無(wú)層次目錄結(jié)構(gòu)。
一種多磁盤(pán)聚合式數(shù)據(jù)存儲(chǔ)系統(tǒng),包括硬件部分和管理數(shù)據(jù)的軟件;該硬件部分包括處理器、內(nèi)存、用于存儲(chǔ)數(shù)據(jù)的若干個(gè)磁盤(pán),磁盤(pán)通過(guò)i/o總線接入到系統(tǒng)中;所述管理數(shù)據(jù)的軟件包括統(tǒng)一命名空間模塊、元數(shù)據(jù)管理模塊和數(shù)據(jù)管理模塊,其中:
統(tǒng)一命名空間模塊管理命名空間和元數(shù)據(jù),對(duì)上層軟件提供文件 或?qū)ο笤L問(wèn)接口,屏蔽存儲(chǔ)系統(tǒng)的內(nèi)部結(jié)構(gòu),根據(jù)文件讀寫(xiě)請(qǐng)求訪問(wèn)相應(yīng)的元數(shù)據(jù)管理模塊和數(shù)據(jù)管理模塊;
元數(shù)據(jù)管理模塊管理元數(shù)據(jù),包括目錄層次結(jié)構(gòu),每個(gè)目錄下的文件名,以及文件的元數(shù)據(jù);
數(shù)據(jù)管理模塊管理存儲(chǔ)數(shù)據(jù),每個(gè)數(shù)據(jù)管理模塊是完整獨(dú)立的存儲(chǔ)單元,記錄有磁盤(pán)的空間分配狀態(tài),所存儲(chǔ)的數(shù)據(jù),數(shù)據(jù)的磁盤(pán)塊地址。
一種多磁盤(pán)聚合式數(shù)據(jù)存儲(chǔ)系統(tǒng)的數(shù)據(jù)存取方法,所述數(shù)據(jù)存取方法包括:數(shù)據(jù)讀取方法和數(shù)據(jù)寫(xiě)入方法;其中:
數(shù)據(jù)讀取方法包括以下步驟:
1)上層軟件模塊調(diào)用統(tǒng)一命名空間模塊的open函數(shù),參數(shù)包括文件名和讀寫(xiě)模式;
2)統(tǒng)一命名空間模塊模塊將請(qǐng)求轉(zhuǎn)交個(gè)元數(shù)據(jù)管理模塊模塊;
3)元數(shù)據(jù)管理模塊對(duì)文件名、訪問(wèn)權(quán)限進(jìn)行檢查,如失敗,則返回錯(cuò)誤;
4)元數(shù)據(jù)管理模塊將文件的inode編號(hào)和內(nèi)容返回給統(tǒng)一命名空間模塊模塊;
5)統(tǒng)一命名空間模塊為該文件分配文件描述符fd,建立fd和inode的映射;
6)統(tǒng)一命名空間模塊給上層軟件模塊返回文件描述符fd;
7)上層軟件調(diào)用統(tǒng)一命名空間模塊的read函數(shù),參數(shù)包括fd,偏移量和數(shù)據(jù)大小等;
8)統(tǒng)一命名空間模塊模塊查找fd到inode的映射表,得到該文件的inode;
9)統(tǒng)一命名空間模塊根據(jù)inode中保存的數(shù)據(jù)布局模式,以及數(shù)據(jù)所在磁盤(pán)的數(shù)據(jù)管理模塊標(biāo)識(shí),以inode作為對(duì)象名,調(diào)用相應(yīng)數(shù)據(jù)管理模塊的讀接口,來(lái)讀取數(shù)據(jù);
10)統(tǒng)一命名空間模塊將讀到的數(shù)據(jù)返回給上層軟件。
數(shù)據(jù)寫(xiě)入方法包括以下步驟:
1)上層軟件調(diào)用統(tǒng)一命名空間模塊的open函數(shù),參數(shù)包括文件 名、讀寫(xiě)模式,和文件權(quán)限等;
2)統(tǒng)一命名空間模塊調(diào)用元數(shù)據(jù)管理模塊的open函數(shù);
3)元數(shù)據(jù)管理模塊對(duì)文件名、訪問(wèn)權(quán)限進(jìn)行檢查,如失敗,則返回錯(cuò)誤;
4)元數(shù)據(jù)管理模塊為該文件分配inode,將inodeid和內(nèi)容返回給統(tǒng)一命名空間模塊模塊;
5)統(tǒng)一命名空間模塊根據(jù)每個(gè)數(shù)據(jù)管理模塊磁盤(pán)的空閑容量大小和當(dāng)前讀寫(xiě)負(fù)載情況,選擇一個(gè)空閑容量較大、負(fù)載較輕的數(shù)據(jù)管理模塊;
6)統(tǒng)一命名空間模塊在選擇的數(shù)據(jù)管理模塊上以inode作為對(duì)象名創(chuàng)建一個(gè)新的數(shù)據(jù)對(duì)象;
7)統(tǒng)一命名空間模塊模塊在inode中保存該文件的布局模式,和數(shù)據(jù)所在磁盤(pán)的數(shù)據(jù)管理模塊id;
8)統(tǒng)一命名空間模塊為該文件分配文件描述符fd,在內(nèi)存中建立fd到inode的映射;
9)統(tǒng)一命名空間模塊向應(yīng)用軟件返回文件描述符fd;
10)上層軟件調(diào)用統(tǒng)一命名空間模塊模塊的write函數(shù),參數(shù)包括文件描述符fd,數(shù)據(jù)緩沖區(qū)地址和數(shù)據(jù)長(zhǎng)度等;
11)統(tǒng)一命名空間模塊根據(jù)fd查找其對(duì)應(yīng)的inode;
12)統(tǒng)一命名空間模塊讀取inode內(nèi)容,得到該文件的數(shù)據(jù)布局方式和數(shù)據(jù)所在的數(shù)據(jù)管理模塊id;
13)統(tǒng)一命名空間模塊向數(shù)據(jù)管理模塊中寫(xiě)入數(shù)據(jù);
14)統(tǒng)一命名空間模塊向上層軟件返回寫(xiě)入的字節(jié)數(shù);
15)上層軟件調(diào)用統(tǒng)一命名空間模塊的close函數(shù)關(guān)閉文件,參數(shù)包括fd;
16)統(tǒng)一命名空間模塊根據(jù)fd查找文件對(duì)應(yīng)的inode;
17)統(tǒng)一命名空間模塊向元數(shù)據(jù)管理模塊更新inode中的文件大小和修改時(shí)間;
18)統(tǒng)一命名空間模塊關(guān)閉文件,釋放文件描述符;
19)統(tǒng)一命名空間模塊返回結(jié)果給上層軟件。
本發(fā)明實(shí)施的優(yōu)點(diǎn):本發(fā)明所述的技術(shù)方案將命名空間/元數(shù)據(jù)、文件本身的數(shù)據(jù)分開(kāi)管理,保存在不同的磁盤(pán)中;每個(gè)磁盤(pán)為獨(dú)立的存儲(chǔ)單元,具有獨(dú)立的磁盤(pán)空間管理和數(shù)據(jù)管理,不同磁盤(pán)之間完全獨(dú)立;存儲(chǔ)系統(tǒng)可支持多個(gè)磁盤(pán),不同磁盤(pán)的容量不要求完全相同;系統(tǒng)在運(yùn)行過(guò)程中可在線加入新的磁盤(pán),可以只加入一塊磁盤(pán),不要求成組加入,新添加磁盤(pán)后,無(wú)強(qiáng)制性數(shù)據(jù)遷移。文件的元數(shù)據(jù)保存在索引節(jié)點(diǎn)中;索引節(jié)點(diǎn)內(nèi)容包括該文件的數(shù)據(jù)布局方式和數(shù)據(jù)所在磁盤(pán)的標(biāo)識(shí)號(hào);數(shù)據(jù)布局方式支持單體、鏡像、條帶化等多種方式;每個(gè)目錄和文件的布局方式可以獨(dú)立設(shè)置;以文件在元數(shù)據(jù)磁盤(pán)上的索引節(jié)點(diǎn)編號(hào)作為文件數(shù)據(jù)在相應(yīng)數(shù)據(jù)磁盤(pán)上的名,在數(shù)據(jù)磁盤(pán)上,所有數(shù)據(jù)為扁平結(jié)構(gòu),在邏輯上無(wú)層次目錄結(jié)構(gòu),支持存儲(chǔ)容量擴(kuò)展、數(shù)據(jù)容錯(cuò),能夠簡(jiǎn)化存儲(chǔ)系統(tǒng)管理,提高可擴(kuò)展性,并提升存儲(chǔ)系統(tǒng)數(shù)據(jù)訪問(wèn)性能。
附圖說(shuō)明
為了更清楚地說(shuō)明本發(fā)明實(shí)施例中的技術(shù)方案,下面將對(duì)實(shí)施例中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明所述的一種多磁盤(pán)聚合式數(shù)據(jù)存儲(chǔ)系統(tǒng)實(shí)現(xiàn)方法示意圖;
圖2為本發(fā)明所述存儲(chǔ)系統(tǒng)的硬件組成圖;
圖3為本發(fā)明所述軟件部分的結(jié)構(gòu)示意圖;
圖4為本發(fā)明inode字段的示意圖;
圖5為發(fā)明數(shù)據(jù)結(jié)構(gòu)示意圖;
圖6為本發(fā)明讀打開(kāi)文件流程圖;
圖7為本發(fā)明讀文件流程圖;
圖8為本發(fā)明寫(xiě)打開(kāi)文件流程圖;
圖9為本發(fā)明寫(xiě)文件流程圖;
圖10為本發(fā)明關(guān)閉文件流程圖。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方 案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
實(shí)施例一
如圖1-5所示,一種多磁盤(pán)聚合式數(shù)據(jù)存儲(chǔ)系統(tǒng)實(shí)現(xiàn)方法,所述多磁盤(pán)聚合式數(shù)據(jù)存儲(chǔ)系統(tǒng)實(shí)現(xiàn)方法包括以下步驟:
步驟s1:以松耦合方式聚合多個(gè)存儲(chǔ)單元形成存儲(chǔ)系統(tǒng);
所述步驟s1以松耦合方式聚合多個(gè)存儲(chǔ)單元形成存儲(chǔ)系統(tǒng)的具體實(shí)施方式可為:存儲(chǔ)系統(tǒng)可包括多個(gè)磁盤(pán);不同磁盤(pán)的容量不要求完全相同;每個(gè)磁盤(pán)為獨(dú)立數(shù)據(jù)存儲(chǔ)單元,具有獨(dú)立的磁盤(pán)空間管理和數(shù)據(jù)管理,不同磁盤(pán)之間完全獨(dú)立;系統(tǒng)在運(yùn)行過(guò)程中可在線加入新的磁盤(pán),可以只加入一塊磁盤(pán),不要求成組加入;新添加磁盤(pán)后,無(wú)強(qiáng)制性數(shù)據(jù)遷移;不同磁盤(pán)可算不同的存儲(chǔ)單元,多個(gè)存儲(chǔ)單元以松耦合方式協(xié)同工作。
步驟s2:選取任一存儲(chǔ)單元存儲(chǔ)命名空間和存儲(chǔ)數(shù)據(jù)的元數(shù)據(jù);
所述步驟s2選取任一存儲(chǔ)單元存儲(chǔ)命名空間和存儲(chǔ)數(shù)據(jù)的元數(shù)據(jù)的具體實(shí)施方式可為:將存儲(chǔ)數(shù)據(jù)的元數(shù)據(jù)與數(shù)據(jù)分開(kāi),并將元數(shù)據(jù)保存在索引節(jié)點(diǎn)中,索引節(jié)點(diǎn)內(nèi)容包括該文件的數(shù)據(jù)布局方式和數(shù)據(jù)所在磁盤(pán)的標(biāo)識(shí)號(hào);以存儲(chǔ)在元數(shù)據(jù)磁盤(pán)上的索引節(jié)點(diǎn)號(hào)作為文件數(shù)據(jù)在相應(yīng)數(shù)據(jù)磁盤(pán)上的名;將元數(shù)據(jù)與命名空間存儲(chǔ)在存儲(chǔ)系統(tǒng)中選取的任一存儲(chǔ)單元中存儲(chǔ),以與存儲(chǔ)數(shù)據(jù)獨(dú)立開(kāi)來(lái)。
步驟s3:存儲(chǔ)數(shù)據(jù)以不同的布局方式存儲(chǔ)在其它多個(gè)存儲(chǔ)單元中;
所述步驟s3存儲(chǔ)數(shù)據(jù)以不同的布局方式存儲(chǔ)在其它多個(gè)存儲(chǔ)單元中的具體實(shí)施方式可為:存儲(chǔ)數(shù)據(jù)如文件或?qū)ο笠詥味喾N布局方式寫(xiě)入到多個(gè)存儲(chǔ)單元中,每個(gè)目錄或文件可以獨(dú)立選擇數(shù)據(jù)布局方式;數(shù)據(jù)布局方式包括mono(單體)、mirror(鏡像)或者stripe(條帶化)等多種方式。
步驟s4:分別創(chuàng)建元數(shù)據(jù)管理模塊和數(shù)據(jù)管理模塊來(lái)管理元數(shù)據(jù)和存儲(chǔ)數(shù)據(jù);
所述步驟s4分別創(chuàng)建元數(shù)據(jù)管理模塊和數(shù)據(jù)管理模塊來(lái)管理元數(shù) 據(jù)和存儲(chǔ)數(shù)據(jù)具體可包括:
創(chuàng)建元數(shù)據(jù)管理模塊(metadatamanagementmodule)以下可簡(jiǎn)稱mdm,mdm管理元數(shù)據(jù),包括目錄層次結(jié)構(gòu),每個(gè)目錄下的文件名,以及文件的元數(shù)據(jù),如大小、訪問(wèn)權(quán)限、時(shí)間戳等。mdm不管理文件本身的數(shù)據(jù)。系統(tǒng)中有1個(gè)磁盤(pán)或磁盤(pán)分區(qū)專門(mén)用于存儲(chǔ)mdm的數(shù)據(jù),該磁盤(pán)中也存儲(chǔ)了其它數(shù)據(jù)磁盤(pán)的信息。
創(chuàng)建數(shù)據(jù)管理模塊(datamanagementmodule)以下可簡(jiǎn)稱dmm,dmm用于管理文件的數(shù)據(jù)。存儲(chǔ)系統(tǒng)中除了安裝操作系統(tǒng)的磁盤(pán)和存儲(chǔ)mdm數(shù)據(jù)的磁盤(pán)外,其它所有磁盤(pán)都用于存儲(chǔ)文件的數(shù)據(jù),每個(gè)磁盤(pán)都唯一對(duì)應(yīng)于一個(gè)dmm,不同的dmm之間完全獨(dú)立。每個(gè)dmm是完整獨(dú)立的存儲(chǔ)單元,記錄有磁盤(pán)的空間分配狀態(tài),所存儲(chǔ)的數(shù)據(jù),數(shù)據(jù)的磁盤(pán)塊地址。
步驟s5:對(duì)外提供統(tǒng)一命名空間模塊以管理命名空間和元數(shù)據(jù)管理模塊,并支持面向目錄、文件或?qū)ο蟮臄?shù)據(jù)訪問(wèn)。
所述步驟s5具體可包括:建立統(tǒng)一命名空間模塊(unifiednamespacemodule)以下可簡(jiǎn)稱unsm,unsm模塊對(duì)上層軟件提供文件或?qū)ο笤L問(wèn)接口,如應(yīng)用層的posix訪問(wèn)接口,或操作系統(tǒng)層的vfs(虛擬文件系統(tǒng):virtualfilesystem),屏蔽存儲(chǔ)系統(tǒng)的內(nèi)部結(jié)構(gòu);根據(jù)文件讀寫(xiě)請(qǐng)求訪問(wèn)相應(yīng)的mdm和dmm。
unsm管理命名空間和元數(shù)據(jù)。命名空間主要由目錄組成。一個(gè)目錄文件包括多個(gè)目錄項(xiàng),目錄項(xiàng)的內(nèi)容包括如下字段:
目錄/文件名、類型、對(duì)應(yīng)的inode(索引節(jié)點(diǎn))編號(hào)。
類型字段表明該目錄項(xiàng)為目錄還是普通文件。
每個(gè)文件/目錄在存儲(chǔ)系統(tǒng)中具有唯一的數(shù)據(jù)結(jié)構(gòu)inode(索引節(jié)點(diǎn))存儲(chǔ)其元數(shù)據(jù)。
inode包括的字段見(jiàn)圖4。
mode:文件權(quán)限,分為讀、寫(xiě)、執(zhí)行,共9個(gè)比特位,對(duì)別對(duì)應(yīng)于owner、group、other三種角色對(duì)該文件擁有的權(quán)限;
owners:所有者和組標(biāo)識(shí)號(hào);
timestamps:文件創(chuàng)建、修改、最后訪問(wèn)時(shí)間;
count:文件引用計(jì)數(shù);
size:文件大小;
stripe:文件布局方式,可以為mono(單體)、mirror(鏡像)、stripe(條帶化);
dmmids:該文件的數(shù)據(jù)所在數(shù)據(jù)磁盤(pán)的標(biāo)識(shí)號(hào)。
存儲(chǔ)系統(tǒng)支持多種數(shù)據(jù)布局方式。在mono方式中,一個(gè)文件的數(shù)據(jù)只存儲(chǔ)到一個(gè)dmm磁盤(pán)中;在mirror方式中,一個(gè)文件的數(shù)據(jù)同時(shí)保持到2個(gè)不同的dmm磁盤(pán)中,以實(shí)現(xiàn)容錯(cuò);stripe方式中,一個(gè)文件的數(shù)據(jù)以條帶化方式寫(xiě)入到多個(gè)不同的dmm磁盤(pán)中,其中1~2個(gè)磁盤(pán)中存儲(chǔ)該條帶化數(shù)據(jù)的冗余編碼,以實(shí)現(xiàn)容錯(cuò)。
其中,在數(shù)據(jù)存儲(chǔ)單元上,所有數(shù)據(jù)為扁平結(jié)構(gòu),在邏輯上無(wú)層次目錄結(jié)構(gòu)。
本發(fā)明實(shí)施例將命名空間/元數(shù)據(jù)、文件本身的數(shù)據(jù)分開(kāi)管理,保存在不同的磁盤(pán)中;每個(gè)磁盤(pán)為獨(dú)立的存儲(chǔ)單元,具有獨(dú)立的磁盤(pán)空間管理和數(shù)據(jù)管理,不同磁盤(pán)之間完全獨(dú)立;存儲(chǔ)系統(tǒng)可支持多個(gè)磁盤(pán),不同磁盤(pán)的容量不要求完全相同;系統(tǒng)在運(yùn)行過(guò)程中可在線加入新的磁盤(pán),可以只加入一塊磁盤(pán),不要求成組加入,新添加磁盤(pán)后,無(wú)強(qiáng)制性數(shù)據(jù)遷移。文件的元數(shù)據(jù)保存在索引節(jié)點(diǎn)中;索引節(jié)點(diǎn)內(nèi)容包括該文件的數(shù)據(jù)布局方式和數(shù)據(jù)所在磁盤(pán)的標(biāo)識(shí)號(hào);數(shù)據(jù)布局方式支持單體、鏡像、條帶化等多種方式;每個(gè)目錄和文件的布局方式可以獨(dú)立設(shè)置;以文件在元數(shù)據(jù)磁盤(pán)上的索引節(jié)點(diǎn)編號(hào)作為文件數(shù)據(jù)在相應(yīng)數(shù)據(jù)磁盤(pán)上的名,在數(shù)據(jù)磁盤(pán)上,所有數(shù)據(jù)為扁平結(jié)構(gòu),在邏輯上無(wú)層次目錄結(jié)構(gòu),支持存儲(chǔ)容量擴(kuò)展、數(shù)據(jù)容錯(cuò),能夠簡(jiǎn)化存儲(chǔ)系統(tǒng)管理,提高可擴(kuò)展性,并提升存儲(chǔ)系統(tǒng)數(shù)據(jù)訪問(wèn)性能。
實(shí)施例二
如圖1-5所示,一種多磁盤(pán)聚合式數(shù)據(jù)存儲(chǔ)系統(tǒng),其硬件部分如圖2所示,包括處理器(cpu)、內(nèi)存(dram),用于存儲(chǔ)數(shù)據(jù)的多個(gè)磁盤(pán)或固態(tài)盤(pán)。處理器(cpu),為所述存儲(chǔ)系統(tǒng)執(zhí)行各種計(jì)算和處理程序;磁盤(pán)通過(guò)i/o總線,如sata接入到系統(tǒng)中,存儲(chǔ)系統(tǒng)也可以包括1個(gè)或多個(gè)網(wǎng)絡(luò)接口,以支持通過(guò)網(wǎng)絡(luò)方式,如fc(光纖通道)、以太網(wǎng)、infiniband等來(lái)訪問(wèn)存儲(chǔ)系統(tǒng)中的數(shù)據(jù)。
存儲(chǔ)系統(tǒng)中運(yùn)行有管理數(shù)據(jù)的軟件,參見(jiàn)圖3,所述管理數(shù)據(jù)的軟件包括以下3個(gè)組件:
●unsm(統(tǒng)一命名空間模塊:unifiednamespacemodule)
●mdm(元數(shù)據(jù)管理模塊:metadatamanagementmodule)
●dmm(數(shù)據(jù)管理模塊:datamanagementmodule)
unsm模塊對(duì)上層軟件提供文件或?qū)ο笤L問(wèn)接口,如應(yīng)用層的posix訪問(wèn)接口,或操作系統(tǒng)層的vfs(虛擬文件系統(tǒng):virtualfilesystem),屏蔽存儲(chǔ)系統(tǒng)的內(nèi)部結(jié)構(gòu);根據(jù)文件讀寫(xiě)請(qǐng)求訪問(wèn)相應(yīng)的mdm和dmm。
unsm管理命名空間和元數(shù)據(jù),參見(jiàn)圖4和圖5,命名空間主要由目錄組成,一個(gè)目錄文件包括多個(gè)目錄項(xiàng),目錄項(xiàng)的內(nèi)容包括如下字段:目錄/文件名、類型、對(duì)應(yīng)的inode(索引節(jié)點(diǎn))編號(hào);文件的元數(shù)據(jù)保存在索引節(jié)點(diǎn)中,所述索引節(jié)點(diǎn)包括文件的數(shù)據(jù)布局方式和數(shù)據(jù)所在磁盤(pán)的標(biāo)識(shí)號(hào)。類型字段表明該目錄項(xiàng)為目錄還是普通文件,每個(gè)目錄/文件名在存儲(chǔ)系統(tǒng)中具有唯一的數(shù)據(jù)結(jié)構(gòu)inode(索引節(jié)點(diǎn))存儲(chǔ)其元數(shù)據(jù)。
inode包括的字段見(jiàn)圖4,其中:
mode:文件權(quán)限,分為讀、寫(xiě)、執(zhí)行,共9個(gè)比特位,分別對(duì)應(yīng)于owner、group、other三種角色對(duì)該文件擁有的權(quán)限;
owners:所有者和組標(biāo)識(shí)號(hào);
timestamps:文件創(chuàng)建、修改、最后訪問(wèn)時(shí)間;
count:文件引用計(jì)數(shù);
size:文件大??;
stripe:文件的數(shù)據(jù)布局方式;
dmmids:該文件的數(shù)據(jù)所在數(shù)據(jù)磁盤(pán)的標(biāo)識(shí)號(hào)。
mdm管理元數(shù)據(jù),包括目錄層次結(jié)構(gòu),每個(gè)目錄下的文件名,以及文件的元數(shù)據(jù),如大小、訪問(wèn)權(quán)限、時(shí)間戳等。mdm不管理文件本身的數(shù)據(jù)。系統(tǒng)中有1個(gè)磁盤(pán)或磁盤(pán)分區(qū)專門(mén)用于存儲(chǔ)mdm的數(shù)據(jù),該磁盤(pán)中也存儲(chǔ)了其它數(shù)據(jù)磁盤(pán)的信息。
dmm用于管理文件本身的數(shù)據(jù),存儲(chǔ)系統(tǒng)中除了安裝操作系統(tǒng)的磁盤(pán)和存儲(chǔ)mdm數(shù)據(jù)的磁盤(pán)外,其它所有磁盤(pán)都用于存儲(chǔ)文件的數(shù)據(jù),每個(gè)磁盤(pán)都唯一對(duì)應(yīng)于一個(gè)dmm,不同的dmm之間完全獨(dú)立。每個(gè)dmm是完整獨(dú)立的存儲(chǔ)單元,記錄有磁盤(pán)的空間分配狀態(tài),所存儲(chǔ)的數(shù)據(jù),數(shù)據(jù)的磁盤(pán)塊地址。
訪問(wèn)文件時(shí)首先從存儲(chǔ)元數(shù)據(jù)管理模塊的磁盤(pán)中獲得該文件的數(shù)據(jù)布局方式與數(shù)據(jù)所在磁盤(pán)的的信息,然后從相應(yīng)的磁盤(pán)中讀取文件的數(shù)據(jù)。
存儲(chǔ)系統(tǒng)支持多種數(shù)據(jù)布局方式,文件的數(shù)據(jù)布局方式為單體、鏡像或者條帶化,每個(gè)目錄或文件可以獨(dú)立選擇數(shù)據(jù)布局方式。在mono方式中,一個(gè)文件的數(shù)據(jù)只存儲(chǔ)到一個(gè)dmm磁盤(pán)中;在mirror方式中,一個(gè)文件的數(shù)據(jù)同時(shí)保持到2個(gè)不同的dmm磁盤(pán)中,以實(shí)現(xiàn)容錯(cuò);stripe方式中,一個(gè)文件的數(shù)據(jù)以條帶化方式寫(xiě)入到多個(gè)不同的dmm磁盤(pán)中,其中1~2個(gè)磁盤(pán)中存儲(chǔ)該條帶化數(shù)據(jù)的冗余編碼,以實(shí)現(xiàn)容錯(cuò)。
實(shí)施例三
如圖6-10所示,一種多磁盤(pán)聚合式數(shù)據(jù)存儲(chǔ)系統(tǒng)的數(shù)據(jù)存取方法,所述數(shù)據(jù)存取方法包括:數(shù)據(jù)讀取方法和數(shù)據(jù)寫(xiě)入方法;其中:
數(shù)據(jù)讀取方法包括以下步驟:
1)上層軟件模塊調(diào)用統(tǒng)一命名空間模塊的open函數(shù),參數(shù)包括文件名和讀寫(xiě)模式;
2)統(tǒng)一命名空間模塊模塊將請(qǐng)求轉(zhuǎn)交個(gè)元數(shù)據(jù)管理模塊模塊;
3)元數(shù)據(jù)管理模塊對(duì)文件名、訪問(wèn)權(quán)限進(jìn)行檢查,如失敗,則返回錯(cuò)誤;
4)元數(shù)據(jù)管理模塊將文件的inode編號(hào)和內(nèi)容返回給統(tǒng)一命名空間模塊模塊;
5)統(tǒng)一命名空間模塊為該文件分配文件描述符fd,建立fd和inode的映射;
6)統(tǒng)一命名空間模塊給上層軟件模塊返回文件描述符fd;
7)上層軟件調(diào)用統(tǒng)一命名空間模塊的read函數(shù),參數(shù)包括fd,偏移量和數(shù)據(jù)大小等;
8)統(tǒng)一命名空間模塊模塊查找fd到inode的映射表,得到該文件的inode;
9)統(tǒng)一命名空間模塊根據(jù)inode中保存的數(shù)據(jù)布局模式,以及數(shù)據(jù)所在磁盤(pán)的數(shù)據(jù)管理模塊標(biāo)識(shí),以inode作為對(duì)象名,調(diào)用相應(yīng)數(shù)據(jù)管理模塊的讀接口,來(lái)讀取數(shù)據(jù);
10)統(tǒng)一命名空間模塊將讀到的數(shù)據(jù)返回給上層軟件。
數(shù)據(jù)寫(xiě)入方法包括以下步驟:
1)上層軟件調(diào)用統(tǒng)一命名空間模塊的open函數(shù),參數(shù)包括文件名、讀寫(xiě)模式,和文件權(quán)限等;
2)統(tǒng)一命名空間模塊調(diào)用元數(shù)據(jù)管理模塊的open函數(shù);
3)元數(shù)據(jù)管理模塊對(duì)文件名、訪問(wèn)權(quán)限進(jìn)行檢查,如失敗,則返回錯(cuò)誤;
4)元數(shù)據(jù)管理模塊為該文件分配inode,將inodeid和內(nèi)容返回給統(tǒng)一命名空間模塊模塊;
5)統(tǒng)一命名空間模塊根據(jù)每個(gè)數(shù)據(jù)管理模塊磁盤(pán)的空閑容量大小和當(dāng)前讀寫(xiě)負(fù)載情況,選擇一個(gè)空閑容量較大、負(fù)載較輕的數(shù)據(jù)管理模塊;
6)統(tǒng)一命名空間模塊在選擇的數(shù)據(jù)管理模塊上以inode作為對(duì)象名創(chuàng)建一個(gè)新的數(shù)據(jù)對(duì)象;
7)統(tǒng)一命名空間模塊模塊在inode中保存該文件的布局模式,和數(shù)據(jù)所在磁盤(pán)的數(shù)據(jù)管理模塊id;
8)統(tǒng)一命名空間模塊為該文件分配文件描述符fd,在內(nèi)存中建立fd到inode的映射;
9)統(tǒng)一命名空間模塊向應(yīng)用軟件返回文件描述符fd;
10)上層軟件調(diào)用統(tǒng)一命名空間模塊模塊的write函數(shù),參數(shù)包括文件描述符fd,數(shù)據(jù)緩沖區(qū)地址和數(shù)據(jù)長(zhǎng)度等;
11)統(tǒng)一命名空間模塊根據(jù)fd查找其對(duì)應(yīng)的inode;
12)統(tǒng)一命名空間模塊讀取inode內(nèi)容,得到該文件的數(shù)據(jù)布局方式和數(shù)據(jù)所在的數(shù)據(jù)管理模塊id;
13)統(tǒng)一命名空間模塊向數(shù)據(jù)管理模塊中寫(xiě)入數(shù)據(jù);
14)統(tǒng)一命名空間模塊向上層軟件返回寫(xiě)入的字節(jié)數(shù);
15)上層軟件調(diào)用統(tǒng)一命名空間模塊的close函數(shù)關(guān)閉文件,參數(shù)包括fd;
16)統(tǒng)一命名空間模塊根據(jù)fd查找文件對(duì)應(yīng)的inode;
17)統(tǒng)一命名空間模塊向元數(shù)據(jù)管理模塊更新inode中的文件大 小和修改時(shí)間;
18)統(tǒng)一命名空間模塊關(guān)閉文件,釋放文件描述符;
19)統(tǒng)一命名空間模塊返回結(jié)果給上層軟件。
本發(fā)明實(shí)施的優(yōu)點(diǎn):本發(fā)明所述的技術(shù)方案將命名空間/元數(shù)據(jù)、文件本身的數(shù)據(jù)分開(kāi)管理,保存在不同的磁盤(pán)中;每個(gè)磁盤(pán)為獨(dú)立的存儲(chǔ)單元,具有獨(dú)立的磁盤(pán)空間管理和數(shù)據(jù)管理,不同磁盤(pán)之間完全獨(dú)立;存儲(chǔ)系統(tǒng)可支持多個(gè)磁盤(pán),不同磁盤(pán)的容量不要求完全相同;系統(tǒng)在運(yùn)行過(guò)程中可在線加入新的磁盤(pán),可以只加入一塊磁盤(pán),不要求成組加入,新添加磁盤(pán)后,無(wú)強(qiáng)制性數(shù)據(jù)遷移。文件的元數(shù)據(jù)保存在索引節(jié)點(diǎn)中;索引節(jié)點(diǎn)內(nèi)容包括該文件的數(shù)據(jù)布局方式和數(shù)據(jù)所在磁盤(pán)的標(biāo)識(shí)號(hào);數(shù)據(jù)布局方式支持單體、鏡像、條帶化等多種方式;每個(gè)目錄和文件的布局方式可以獨(dú)立設(shè)置;以文件在元數(shù)據(jù)磁盤(pán)上的索引節(jié)點(diǎn)編號(hào)作為文件數(shù)據(jù)在相應(yīng)數(shù)據(jù)磁盤(pán)上的名,在數(shù)據(jù)磁盤(pán)上,所有數(shù)據(jù)為扁平結(jié)構(gòu),在邏輯上無(wú)層次目錄結(jié)構(gòu),支持存儲(chǔ)容量擴(kuò)展、數(shù)據(jù)容錯(cuò),能夠簡(jiǎn)化存儲(chǔ)系統(tǒng)管理,提高可擴(kuò)展性,并提升存儲(chǔ)系統(tǒng)數(shù)據(jù)訪問(wèn)性能。
以上所述,僅為本發(fā)明的具體實(shí)施方式,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本領(lǐng)域技術(shù)的技術(shù)人員在本發(fā)明公開(kāi)的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)以所述權(quán)利要求的保護(hù)范圍為準(zhǔn)。