一種磁盤空間管理方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及磁盤空間管理技術(shù)領(lǐng)域,更具體地說,涉及一種磁盤空間管理方法及
目.0
【背景技術(shù)】
[0002]磁盤空間管理是一種負(fù)責(zé)存儲中磁盤上chunk的分配、回收等的機(jī)制,通過磁盤空間管理,可以查詢磁盤中chunk的使用情況,數(shù)據(jù)的排布情況等,通過磁盤空間管理可以很好的利用磁盤中的chunk。為了防止磁盤空間過度使用導(dǎo)致數(shù)據(jù)丟失或崩潰,現(xiàn)有的文件系統(tǒng)、操作系統(tǒng)可以支持磁盤空間的配額管理,即設(shè)定用戶的磁盤空間配額,對用戶的空間進(jìn)行限制,用戶在給定的磁盤空間配額下自由使用,系統(tǒng)根據(jù)用戶擁有的所有文件所占用的磁盤空間來計(jì)算用戶磁盤空間的使用情況,當(dāng)用戶使用的磁盤空間達(dá)到配額限制時(shí),系統(tǒng)會提示磁盤空間已滿,不允許用戶再繼續(xù)上傳數(shù)據(jù)。但是現(xiàn)有技術(shù)中對磁盤的所有操作都會直接訪問磁盤,頻繁的訪問磁盤不僅效率低下,也會影響磁盤的性能。
[0003]因此,如何減少操作中直接訪問磁盤的次數(shù),增加訪問磁盤的效率,減少對磁盤的性能的影響是現(xiàn)在需要解決的問題。
【發(fā)明內(nèi)容】
[0004]本發(fā)明的目的在于提供一種磁盤空間管理方法及裝置,以實(shí)現(xiàn)減少操作中直接訪問磁盤的次數(shù),增加訪問磁盤的效率,減少對磁盤的性能的影響。
[0005]為實(shí)現(xiàn)上述目的,本發(fā)明實(shí)施例提供了如下技術(shù)方案:
[0006]一種磁盤空間管理方法,包括:
[0007]接收將目標(biāo)數(shù)據(jù)寫入磁盤的寫入指令;
[0008]根據(jù)所述寫入指令,在磁盤中查找與所述寫入指令相對應(yīng)的目標(biāo)存儲空間的位置;
[0009]將所述目標(biāo)存儲空間中的內(nèi)容數(shù)據(jù)映射到內(nèi)存中;
[0010]根據(jù)所述目標(biāo)數(shù)據(jù),對所述內(nèi)存中的所述內(nèi)容數(shù)據(jù)進(jìn)行修改;
[0011 ]將所述內(nèi)存中修改后的內(nèi)容數(shù)據(jù),刷寫到所述目標(biāo)存儲空間中。
[0012]優(yōu)選的,所述接收將目標(biāo)數(shù)據(jù)寫入磁盤的寫入指令之后,還包括:
[0013]判斷所述磁盤中空閑存儲空間的數(shù)量是否小于空閑存儲空間的閾值;
[0014]若是,則觸發(fā)回調(diào)函數(shù),對所述磁盤進(jìn)行擴(kuò)容處理,和/或刪除所述磁盤中的過期數(shù)據(jù)。
[0015]優(yōu)選的,將所述內(nèi)存中修改后的內(nèi)容數(shù)據(jù),刷寫到所述目標(biāo)存儲空間中之后,還包括:
[0016]判斷所述磁盤中空閑存儲空間的數(shù)量是否小于I/O端口大??;
[0017]若是,則觸發(fā)回調(diào)函數(shù),對所述磁盤進(jìn)行擴(kuò)容處理,和/或刪除所述磁盤中的過期數(shù)據(jù)。
[0018]優(yōu)選的,根據(jù)所述寫入指令,在磁盤中查找與所述寫入指令相對應(yīng)的目標(biāo)存儲空間的位置,包括:
[0019]根據(jù)所述寫入指令,通過B+樹在磁盤中查找與所述寫入指令相對應(yīng)的目標(biāo)存儲空間的位置。
[0020]優(yōu)選的,將所述內(nèi)存中修改后的內(nèi)容數(shù)據(jù),刷寫到所述目標(biāo)存儲空間中之后,包括:
[0021]將所述目標(biāo)存儲空間的位圖標(biāo)記為I。
[0022]—種磁盤空間管理裝置,包括:
[0023]接收模塊,用于接收將目標(biāo)數(shù)據(jù)寫入磁盤的寫入指令;
[0024]查找模塊,用于根據(jù)所述寫入指令,在磁盤中查找與所述寫入指令相對應(yīng)的目標(biāo)存儲空間的位置;
[0025]映射模塊,用于將所述目標(biāo)存儲空間中的內(nèi)容數(shù)據(jù)映射到內(nèi)存中;
[0026]修改模塊,用于根據(jù)所述目標(biāo)數(shù)據(jù),對所述內(nèi)存中的所述內(nèi)容數(shù)據(jù)進(jìn)行修改;
[0027]刷寫模塊,用于將所述內(nèi)存中修改后的內(nèi)容數(shù)據(jù),刷寫到所述目標(biāo)存儲空間中。
[0028]優(yōu)選的,還包括:
[0029]第一判斷模塊,用于接收將目標(biāo)數(shù)據(jù)寫入磁盤的寫入指令之后,判斷所述磁盤中空閑存儲空間的數(shù)量是否小于空閑存儲空間的閾值;
[0030]若是,則觸發(fā)擴(kuò)容模塊,所述擴(kuò)容模塊用于對所述磁盤進(jìn)行擴(kuò)容處理,和/或刪除所述磁盤中的過期數(shù)據(jù)。
[0031]優(yōu)選的,還包括:
[0032]第二判斷模塊,用于將所述內(nèi)存中修改后的內(nèi)容數(shù)據(jù),刷寫到所述目標(biāo)存儲空間中之后,判斷所述磁盤中空閑存儲空間的數(shù)量是否小于I/O端口大??;
[0033]若是,則觸發(fā)所述擴(kuò)容模塊。
[0034]優(yōu)選的,所述查找模塊包括:
[0035]根據(jù)所述寫入指令,通過B+樹在磁盤中查找與所述寫入指令相對應(yīng)的目標(biāo)存儲空間的位置。
[0036]優(yōu)選的,所述刷寫模塊,包括:將所述目標(biāo)存儲空間的位圖標(biāo)記為I。
[0037]通過以上方案可知,本發(fā)明實(shí)施例提供的一種磁盤空間管理方法及裝置,包括:接收將目標(biāo)數(shù)據(jù)寫入磁盤的寫入指令;根據(jù)所述寫入指令,在磁盤中查找與所述寫入指令相對應(yīng)的目標(biāo)存儲空間的位置;將所述目標(biāo)存儲空間中的內(nèi)容數(shù)據(jù)映射到內(nèi)存中;根據(jù)所述目標(biāo)數(shù)據(jù),對所述內(nèi)存中的所述內(nèi)容數(shù)據(jù)進(jìn)行修改;將所述內(nèi)存中修改后的內(nèi)容數(shù)據(jù),刷寫到所述目標(biāo)存儲空間中,本實(shí)施例這種通過對映射到內(nèi)存中的數(shù)據(jù)進(jìn)行修改,再將修改后的數(shù)據(jù)刷寫道對應(yīng)位置的磁盤中的方式,減少了操作中直接訪問磁盤的次數(shù),增加了訪問磁盤的效率,減少了對磁盤性能的影響。
【附圖說明】
[0038]為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0039]圖1為本發(fā)明實(shí)施例公開的一種磁盤空間管理方法流程示意圖;
[0040]圖2為本發(fā)明實(shí)施例公開的一種磁盤chunk結(jié)構(gòu)圖;
[0041]圖3為本發(fā)明實(shí)施例公開的一種磁盤空間管理裝置示意圖。
【具體實(shí)施方式】
[0042]下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0043]本發(fā)明實(shí)施例公開了一種磁盤空間管理方法及裝置,以實(shí)現(xiàn)減少操作中直接訪問磁盤的次數(shù),增加訪問磁盤的效率,減少對磁盤的性能的影響。
[0044]參見圖1,本發(fā)明實(shí)施例提供的一種磁盤空間管理方法,包括:
[0045]S101、接收將目標(biāo)數(shù)據(jù)寫入磁盤的寫入指令;
[0046]具體的,若對磁盤進(jìn)行讀操作時(shí),同樣也是通過B+樹查找到需要讀取的chunk塊在磁盤上的位置進(jìn)行讀取。
[0047]S102、根據(jù)所述寫入指令,在磁盤中查找與所述寫入指令相對應(yīng)的目標(biāo)存儲空間的位置;
[0048]優(yōu)選的,根據(jù)所述寫入指令,在磁盤中查找與所述寫入指令相對應(yīng)的目標(biāo)存儲空間的位置,包括:
[0049]根據(jù)所述寫入指令,通過B+樹在磁盤中查找與所述寫入指令相對應(yīng)的目標(biāo)存儲空間的位置。
[0050]具體的,在本實(shí)施例中,通過位圖及B+樹對磁盤上的chunk進(jìn)行組織管理,將磁盤chunk映射到內(nèi)存中,當(dāng)磁盤有I/O訪問時(shí),直接操作內(nèi)存中的數(shù)據(jù),減少了訪問磁盤的次數(shù),以提高磁盤chunk的訪問效率
[0051]S103、將所述目標(biāo)存儲空間中的內(nèi)容數(shù)據(jù)映射到內(nèi)存中;
[0052]S104、根據(jù)所述目標(biāo)數(shù)據(jù),對所述內(nèi)存中的所述內(nèi)容數(shù)據(jù)進(jìn)行修改;
[0053]S105、將所述內(nèi)存中修改后的內(nèi)容數(shù)據(jù),刷寫到所述目標(biāo)存儲空間中。
[0054]具體的,在對磁盤進(jìn)行寫操作的時(shí)候,采用的方法是將磁盤chunk(即本實(shí)施例中的存儲空間)的內(nèi)容拷貝到內(nèi)存中,對磁盤的操作轉(zhuǎn)化為對內(nèi)存的操作,在對內(nèi)存中的chunk塊操作完成后,再將發(fā)生變化的chunk塊中的數(shù)據(jù)刷寫到磁盤相應(yīng)的位置,以提高訪問磁盤的效率。
[0055]具體的,本實(shí)施例提供的B+樹結(jié)構(gòu)為B-樹的變型樹,一棵m階的B+樹和m階的B-樹的差異在于:
[0056]1、有η棵子樹的結(jié)點(diǎn)中含有η個(gè)關(guān)鍵字,每個(gè)關(guān)鍵字不保存數(shù)據(jù),只用來索引,所有數(shù)據(jù)都保存在葉子節(jié)點(diǎn)。
[0057]2、所有的葉子結(jié)點(diǎn)中包含了全部關(guān)鍵字的信息,及指向含這些關(guān)鍵字記錄的指針,且葉子結(jié)點(diǎn)本身依關(guān)鍵字的大小自小而大順序鏈接。
[0058]3、所有的非終端結(jié)點(diǎn)可以看成是索引部分,結(jié)點(diǎn)中僅含其子樹(根結(jié)點(diǎn))中的最大(或最小)關(guān)鍵字。
[0059]參見圖2為本實(shí)施例提供的一種磁盤chunk結(jié)構(gòu)圖,具體來說每一個(gè)chunk被分為三部分。第一部分為固定大小的node-header,第二部分