一種文件擴(kuò)展屬性的存儲(chǔ)方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種文件屬性存儲(chǔ)方法,具體涉及一種文件擴(kuò)展屬性的存儲(chǔ)方法。
【背景技術(shù)】
[0002]在分布式系統(tǒng)中,inode大小是固定的,由于inode是文件系統(tǒng)的核心結(jié)構(gòu)之一,每個(gè)用戶文件及目錄在文件系統(tǒng)中都有一個(gè)inode記錄其元數(shù)據(jù)信息,出于空間、傳統(tǒng)inode信息及大部分應(yīng)用需要,inode中不可能為屬性保留太多字段。當(dāng)某個(gè)用戶文件及目錄有基本屬性之外的其他屬性(如哪個(gè)用戶、組具有哪些權(quán)限等),就需要用到擴(kuò)展屬性。
[0003]擴(kuò)展屬性最容易想到的實(shí)現(xiàn)方法是如果一個(gè)用戶文件或者目錄有擴(kuò)展屬性,則單獨(dú)建立一個(gè)后端文件用于存儲(chǔ)其擴(kuò)展屬性。
[0004]為每個(gè)用戶文件或目錄創(chuàng)建一個(gè)后端文件存儲(chǔ)擴(kuò)展屬性存在以下缺點(diǎn):首先,目前擴(kuò)展屬性用得最多的是權(quán)限控制,而權(quán)限控制大多數(shù)具有繼承性,即一個(gè)目錄下的所有子文件及目錄擴(kuò)展屬性與該目錄相同,這樣相同的數(shù)據(jù)就會(huì)被存放多次,造成空間浪費(fèi);由于后端文件系統(tǒng)每個(gè)目錄下inode數(shù)目有一定限制,并且目錄下inode越多,檢索速度就會(huì)越慢,所以這種實(shí)現(xiàn)方法對(duì)后端文件系統(tǒng)也造成一定壓力。
【發(fā)明內(nèi)容】
[0005]為了克服上述現(xiàn)有技術(shù)的不足,本發(fā)明提供一種文件屬性的存儲(chǔ)方法,該方法用一批獨(dú)立的文件存放擴(kuò)展屬性,每個(gè)文件含有I個(gè)位圖存放1024個(gè)比特位和1024個(gè)擴(kuò)展屬性塊,一個(gè)擴(kuò)展屬性塊有多個(gè)inode指向,節(jié)省了底層文件系統(tǒng)的文件個(gè)數(shù),降低了底層壓力。
[0006]為了實(shí)現(xiàn)上述發(fā)明目的,本發(fā)明采取如下技術(shù)方案:
[0007]一種文件擴(kuò)展屬性的存儲(chǔ)方法,所述方法的步驟如下:
[0008](I)創(chuàng)建一批存放擴(kuò)展屬性的獨(dú)立文件xfile ;
[0009](2)將文件的擴(kuò)展屬性存放到xfile文件中的擴(kuò)展屬性塊中。
[0010]本發(fā)明提供的優(yōu)選技術(shù)方案中,每個(gè)所述xfile文件包含位圖和擴(kuò)展屬性塊,每個(gè)擴(kuò)展屬性塊長(zhǎng)度設(shè)為4k。
[0011]本發(fā)明提供的第二優(yōu)選技術(shù)方案中,所述位圖中包含1024個(gè)比特位,每位對(duì)應(yīng)一個(gè)擴(kuò)展屬性塊,比特位為I表示對(duì)應(yīng)的擴(kuò)展屬性塊已被分配使用,為O表示對(duì)應(yīng)的擴(kuò)展屬性塊空閑。
[0012]本發(fā)明提供的第三優(yōu)選技術(shù)方案中,所述擴(kuò)展屬性塊有一個(gè)引用計(jì)數(shù)字段,用于記錄inode指向該擴(kuò)展屬性塊的的個(gè)數(shù)。
[0013]本發(fā)明提供的第四優(yōu)選技術(shù)方案中,所述inode為文件系統(tǒng)中保存元數(shù)據(jù)信息的一種磁盤結(jié)構(gòu),inode中包含有文件對(duì)應(yīng)的擴(kuò)展屬性塊號(hào)blkid。
[0014]本發(fā)明提供的第五優(yōu)選技術(shù)方案中,所述步驟(2)的步驟如下:
[0015]A、將每個(gè)xfile文件的位圖鏈表頭放入控制結(jié)構(gòu)的xfile鏈表中;
[0016]B、將擴(kuò)展屬性塊的塊id和塊內(nèi)容的hash表頭分別放入控制結(jié)構(gòu)的blkid_hhead和 content_hhead 中;
[0017]C、利用要添加的擴(kuò)展屬性構(gòu)造臨時(shí)塊,以塊內(nèi)容的hash值為索引在content_hhead中查找擴(kuò)展屬性塊;
[0018]D、若沒(méi)有查找到則從xfile鏈表中查找比特位為O的位圖;
[0019]D-1、若沒(méi)有查到則創(chuàng)建新的xfile文件,xfile文件的位圖初值為0,將xfile文件的位圖鏈表頭放入控制結(jié)構(gòu)的xfile鏈表中;
[0020]D-2、若查到則置該比特位為1,根據(jù)該比特位所屬的xfile文件的id和比特位的偏移量計(jì)算blkid,分配新塊,賦值blkid及塊內(nèi)容,并將新塊的塊id和塊內(nèi)容的hash表頭分別放入控制結(jié)構(gòu)的blkid_hhead和content_hhead中;
[0021]E、將該塊的引用計(jì)數(shù)加1,設(shè)置inode的blkid為該塊的id,若inode原有擴(kuò)展屬性則將原來(lái)塊對(duì)應(yīng)的引用計(jì)數(shù)減I。
[0022]與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果在于:
[0023]該方法將所有擴(kuò)展屬性相同的文件及目錄指向相同的擴(kuò)展屬性塊,在擴(kuò)展屬性的應(yīng)用場(chǎng)景中大大節(jié)省了存儲(chǔ)空間,一個(gè)底層文件存放多個(gè)擴(kuò)展屬性塊,一個(gè)擴(kuò)展屬性塊由多個(gè)inode指向,大大節(jié)省了底層文件系統(tǒng)的文件個(gè)數(shù),降低了底層壓力。
【附圖說(shuō)明】
[0024]圖1是擴(kuò)展屬性磁盤結(jié)構(gòu)
[0025]圖2是擴(kuò)展屬性內(nèi)存結(jié)構(gòu)
[0026]圖3是添加擴(kuò)展屬性的流程圖
【具體實(shí)施方式】
[0027]下面結(jié)合附圖對(duì)本發(fā)明作進(jìn)一步詳細(xì)說(shuō)明。
[0028]如圖1所示,用一批獨(dú)立的文件xfile存放擴(kuò)展屬性,每個(gè)xfile文件前面存放位圖,位圖中包含1024個(gè)比特位,位圖之后存放擴(kuò)展屬性塊,每塊長(zhǎng)度可設(shè)為4k,每個(gè)比特位對(duì)應(yīng)一個(gè)擴(kuò)展屬性塊;比特位為I表示該塊已被分配使用,為O表示該塊空閑。整個(gè)分布式系統(tǒng)擴(kuò)展屬性塊統(tǒng)一編號(hào),每個(gè)擴(kuò)展屬性塊有一個(gè)引用計(jì)數(shù)字段,用于記錄有多少inode指向該塊,當(dāng)引用計(jì)數(shù)為O時(shí)表示該塊沒(méi)有inode使用,可以回收。
[0029]如圖2所示,將每個(gè)xfile文件的位圖鏈表頭放入控制結(jié)構(gòu)的xfile鏈表中,方便進(jìn)行塊分配和回收;將擴(kuò)展屬性塊的塊id和塊內(nèi)容的hash表頭分別放入控制結(jié)構(gòu)的blkid_hhead和content_hhead中,以滿足多種查詢需要。
[0030]如圖3所示,擴(kuò)展屬性的存儲(chǔ)方法,具體步驟如下:
[0031]A、將每個(gè)xfile文件的位圖鏈表頭放入控制結(jié)構(gòu)的xfile鏈表中;
[0032]B、將擴(kuò)展屬性塊的塊id和塊內(nèi)容的hash表頭分別放入控制結(jié)構(gòu)的blkid_hhead和 content_hhead 中;
[0033]C、利用要添加的擴(kuò)展屬性構(gòu)造臨時(shí)塊,以塊內(nèi)容的hash值為索引在content_hhead中查找擴(kuò)展屬性塊;
[0034]D、若沒(méi)有查找到則從xfile鏈表中查找比特位為O的位圖;
[0035]D-1、若沒(méi)有查到則創(chuàng)建新的xfile文件,xfile文件的位圖初值為0,將xfile文件的位圖鏈表頭放入控制結(jié)構(gòu)的xfile鏈表中;
[0036]D-2、若查到則置該比特位為1,根據(jù)該比特位所屬的xfile文件的id和比特位的偏移量計(jì)算blkid,分配新塊,賦值blkid及塊內(nèi)容,并將新塊的塊id和塊內(nèi)容的hash表頭分別放入控制結(jié)構(gòu)的blkid_hhead和content_hhead中;
[0037]E、將該塊的引用計(jì)數(shù)加1,設(shè)置inode的blkid為該塊的id,若inode原有擴(kuò)展屬性則將原來(lái)塊對(duì)應(yīng)的引用計(jì)數(shù)減I。
[0038]擴(kuò)展屬性的回收方法,具體步驟如下:
[0039](I)將所有擴(kuò)展屬性塊讀入內(nèi)存;
[0040](2)以hash表為入口掃描所有內(nèi)存塊;
[0041](3)將內(nèi)存塊引用計(jì)數(shù)為0(沒(méi)有線程使用該塊)且磁盤引用計(jì)數(shù)為O (沒(méi)有inode指向該塊)的塊對(duì)應(yīng)的位圖清0,并釋放內(nèi)存塊;
[0042](4)若磁盤引用計(jì)數(shù)不為O且內(nèi)存塊引用計(jì)數(shù)為O的內(nèi)存塊達(dá)到1024個(gè),則回收該內(nèi)存塊。
[0043]最后應(yīng)當(dāng)說(shuō)明的是:以上實(shí)施例僅用以說(shuō)明本發(fā)明的技術(shù)方案而非對(duì)其限制,盡管參照上述實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)的說(shuō)明,所屬領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:依然可以對(duì)本發(fā)明的【具體實(shí)施方式】進(jìn)行修改或者等同替換,而未脫離本發(fā)明精神和范圍的任何修改或者等同替換,其均應(yīng)涵蓋在本發(fā)明的權(quán)利要求范圍當(dāng)中。
【主權(quán)項(xiàng)】
1.一種文件擴(kuò)展屬性的存儲(chǔ)方法,其特征在于,所述方法包括如下步驟: (1)創(chuàng)建存放擴(kuò)展屬性的獨(dú)立文件Xfile; (2)將文件的擴(kuò)展屬性存放到xfile文件中的擴(kuò)展屬性塊中。
2.根據(jù)權(quán)利要求1所述文件擴(kuò)展屬性的存儲(chǔ)方法,其特征在于,每個(gè)所述xfile文件包含位圖和擴(kuò)展屬性塊,每個(gè)擴(kuò)展屬性塊長(zhǎng)度設(shè)為4k。
3.根據(jù)權(quán)利要求2所述文件擴(kuò)展屬性的存儲(chǔ)方法,其特征在于,所述位圖中包含1024個(gè)比特位,每位對(duì)應(yīng)一個(gè)擴(kuò)展屬性塊,比特位為I表示對(duì)應(yīng)的擴(kuò)展屬性塊已被分配使用,為O表不對(duì)應(yīng)的擴(kuò)展屬性塊空閑。
4.根據(jù)權(quán)利要求1所述文件擴(kuò)展屬性的存儲(chǔ)方法,其特征在于,所述擴(kuò)展屬性塊有一個(gè)引用計(jì)數(shù)字段,用于記錄inode指向該擴(kuò)展屬性塊的的個(gè)數(shù)。
5.根據(jù)權(quán)利要求4所述文件擴(kuò)展屬性的存儲(chǔ)方法,其特征在于,所述inode為文件系統(tǒng)中保存元數(shù)據(jù)信息的一種磁盤結(jié)構(gòu),inode中包含有文件對(duì)應(yīng)的擴(kuò)展屬性塊號(hào)blkid。
6.根據(jù)權(quán)利要求5所述文件擴(kuò)展屬性的存儲(chǔ)方法,其特征在于,所述步驟(2)的步驟如下: A、將每個(gè)xfile文件的位圖鏈表頭放入控制結(jié)構(gòu)的xfile鏈表中; B、將擴(kuò)展屬性塊的塊id和塊內(nèi)容的hash表頭分別放入控制結(jié)構(gòu)的blkid_hhead和content_hhead 中; C、利用要添加的擴(kuò)展屬性構(gòu)造臨時(shí)塊,以塊內(nèi)容的hash值為索引在content_hhead中查找擴(kuò)展屬性塊; D、若沒(méi)有查找到則從xfile鏈表中查找比特位為O的位圖; D-1、若沒(méi)有查到則創(chuàng)建新的xfile文件,xfile文件的位圖初值為0,將xfile文件的位圖鏈表頭放入控制結(jié)構(gòu)的xfile鏈表中; D-2、若查到則置該比特位為1,根據(jù)該比特位所屬的xfile文件的id和比特位的偏移量計(jì)算blkid,分配新塊,賦值blkid及塊內(nèi)容,并將新塊的塊id和塊內(nèi)容的hash表頭分別放入控制結(jié)構(gòu)的blkid_hhead和content_hhead中; E、將該塊的引用計(jì)數(shù)加1,設(shè)置inode的blkid為該塊的id,若inode原有擴(kuò)展屬性則將原來(lái)塊對(duì)應(yīng)的引用計(jì)數(shù)減I。
【專利摘要】本發(fā)明提供一種文件擴(kuò)展屬性的存儲(chǔ)方法,該方法首先創(chuàng)建一批存放擴(kuò)展屬性的獨(dú)立文件xfile;然后將文件的擴(kuò)展屬性存放到xfile文件中的擴(kuò)展屬性塊中。使用該方法將所有擴(kuò)展屬性相同的文件及目錄指向相同的擴(kuò)展屬性塊,在擴(kuò)展屬性的應(yīng)用場(chǎng)景中大大節(jié)省了存儲(chǔ)空間,并且一個(gè)底層文件存放多個(gè)擴(kuò)展屬性塊,一個(gè)擴(kuò)展屬性塊由多個(gè)inode指向,大大節(jié)省了底層文件系統(tǒng)的文件個(gè)數(shù),降低了底層壓力。
【IPC分類】G06F17-30
【公開(kāi)號(hào)】CN104598533
【申請(qǐng)?zhí)枴緾N201410837840
【發(fā)明人】馬照云, 楊浩, 張攀勇
【申請(qǐng)人】曙光云計(jì)算技術(shù)有限公司
【公開(kāi)日】2015年5月6日
【申請(qǐng)日】2014年12月29日