一種數(shù)據(jù)處理方法和裝置制造方法
【專(zhuān)利摘要】本發(fā)明實(shí)施例公開(kāi)了一種數(shù)據(jù)處理方法,應(yīng)用于存儲(chǔ)系統(tǒng)中,存儲(chǔ)系統(tǒng)的存儲(chǔ)空間被劃分為多個(gè)存儲(chǔ)區(qū)域,各存儲(chǔ)區(qū)域包含至少一個(gè)數(shù)據(jù)塊的集合,各數(shù)據(jù)塊的集合包括多個(gè)容量不同的數(shù)據(jù)塊,所述方法包括:接收主機(jī)發(fā)送的攜帶數(shù)據(jù)卷的標(biāo)識(shí)、邏輯地址和待寫(xiě)入數(shù)據(jù)的寫(xiě)數(shù)據(jù)請(qǐng)求;根據(jù)數(shù)據(jù)卷的標(biāo)識(shí)和邏輯地址確定增量數(shù)據(jù),增量數(shù)據(jù)是指待寫(xiě)入數(shù)據(jù)相對(duì)于邏輯地址中原來(lái)存儲(chǔ)的數(shù)據(jù)中發(fā)生變化的數(shù)據(jù);根據(jù)數(shù)據(jù)卷的標(biāo)識(shí)確定數(shù)據(jù)卷對(duì)應(yīng)的快照數(shù)據(jù)所在的目標(biāo)存儲(chǔ)區(qū)域;在目標(biāo)存儲(chǔ)區(qū)域中確定目標(biāo)數(shù)據(jù)塊的集合;在目標(biāo)數(shù)據(jù)塊的集合中確定目標(biāo)數(shù)據(jù)塊;將增量數(shù)據(jù)寫(xiě)入目標(biāo)數(shù)據(jù)塊中。本發(fā)明實(shí)施例將同一快照分配在盡可能集中的存儲(chǔ)空間,有利于提高讀取效率。
【專(zhuān)利說(shuō)明】一種數(shù)據(jù)處理方法和裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)領(lǐng)域,具體地涉及一種數(shù)據(jù)處理方法和裝置。
【背景技術(shù)】
[0002]隨著計(jì)算機(jī)技術(shù)的普及,人們?cè)絹?lái)越多地使用計(jì)算機(jī)進(jìn)行日常工作的處理,有時(shí)我們需要長(zhǎng)時(shí)間地做一項(xiàng)工作,不斷地更新其所對(duì)應(yīng)的數(shù)據(jù)。為了對(duì)數(shù)據(jù)進(jìn)行保護(hù),方便恢復(fù)操作的進(jìn)行,通常采用快照的方式對(duì)每次數(shù)據(jù)的更新進(jìn)行備份。
[0003]目前快照通常包括兩種方式,一種是全拷貝的快照方式,另一種是對(duì)增量數(shù)據(jù)進(jìn)行拷貝的快照方式。其中,全拷貝快照方式是指:當(dāng)待保存的數(shù)據(jù)更新時(shí),將待保存的數(shù)據(jù)的全部都保存,包括更新的部分和未更新的部分,每次保存對(duì)應(yīng)數(shù)據(jù)的一個(gè)全拷貝快照。由于全拷貝快照對(duì)未更新的數(shù)據(jù)部分也進(jìn)行了保存,所以全拷貝快照占用的空間比較多,尤其當(dāng)更新的數(shù)據(jù)比較小、而且待保存的數(shù)據(jù)更新頻繁時(shí),容易造成存儲(chǔ)空間的大量浪費(fèi)。
[0004]對(duì)增量數(shù)據(jù)進(jìn)行拷貝的快照方式是指:當(dāng)待保存的數(shù)據(jù)更新時(shí),只保存需要更新的那部分?jǐn)?shù)據(jù)即增量數(shù)據(jù),其余未更新數(shù)據(jù)不用保存,因此,采用對(duì)增量數(shù)據(jù)進(jìn)行拷貝的方式對(duì)數(shù)據(jù)進(jìn)行備份時(shí),可以節(jié)省存儲(chǔ)空間。
[0005]采用后一種快照方式頻繁對(duì)數(shù)據(jù)進(jìn)行備份時(shí),每次保存只需保存增量數(shù)據(jù)即可,當(dāng)進(jìn)行數(shù)據(jù)恢復(fù)時(shí),利用更新后的數(shù)據(jù)結(jié)合快照的增量數(shù)據(jù)進(jìn)行,當(dāng)刪除快照時(shí),釋放為快照的增量數(shù)據(jù)分配的存儲(chǔ)空間。
[0006]目前,采用的對(duì)增量數(shù)據(jù)進(jìn)行拷貝的快照方式,通常采用首次適配First-fit算法為快照對(duì)應(yīng)的增量數(shù)據(jù)分配存儲(chǔ)空間。First-fit算法分配存儲(chǔ)空間時(shí),將存儲(chǔ)空間中首個(gè)與增量數(shù)據(jù)容量相同的空閑區(qū)域分配給增量數(shù)據(jù),這種方法分配雖然簡(jiǎn)單,但是該方法不區(qū)分是為哪個(gè)快照分配的存儲(chǔ)空間,當(dāng)有多個(gè)快照需要分配存儲(chǔ)空間時(shí),采用First-fit算法分配存儲(chǔ)空間時(shí),不同的快照按照請(qǐng)求的時(shí)間順序分配連續(xù)的存儲(chǔ)空間,但是對(duì)于同一快照,為其分配的存儲(chǔ)空間比較分散、不連續(xù),讀取時(shí)效率低。
【發(fā)明內(nèi)容】
[0007]本發(fā)明實(shí)施例公開(kāi)了一種數(shù)據(jù)處理方法和裝置,能夠有效的提高快照的讀取效率。
[0008]本發(fā)明實(shí)施例第一方面提供了一種數(shù)據(jù)處理方法,所述方法應(yīng)用于存儲(chǔ)系統(tǒng)中,所述存儲(chǔ)系統(tǒng)的存儲(chǔ)空間被劃分為多個(gè)存儲(chǔ)區(qū)域,每個(gè)存儲(chǔ)區(qū)域包含至少一個(gè)數(shù)據(jù)塊的集合,每個(gè)數(shù)據(jù)塊的集合包括多個(gè)容量不同的數(shù)據(jù)塊,所述方法包括:
[0009]接收主機(jī)發(fā)送的寫(xiě)數(shù)據(jù)請(qǐng)求,所述寫(xiě)數(shù)據(jù)請(qǐng)求攜帶數(shù)據(jù)卷的標(biāo)識(shí)、邏輯地址和待寫(xiě)入數(shù)據(jù);
[0010]根據(jù)所述數(shù)據(jù)卷的標(biāo)識(shí)和所述邏輯地址確定增量數(shù)據(jù),所述增量數(shù)據(jù)是指所述待寫(xiě)入數(shù)據(jù)相對(duì)于所述邏輯地址中原來(lái)存儲(chǔ)的數(shù)據(jù)中發(fā)生變化的數(shù)據(jù);
[0011]根據(jù)所述數(shù)據(jù)卷的標(biāo)識(shí)確定所述數(shù)據(jù)卷對(duì)應(yīng)的快照數(shù)據(jù)所在的目標(biāo)存儲(chǔ)區(qū)域;[0012]在所述目標(biāo)存儲(chǔ)區(qū)域中確定目標(biāo)數(shù)據(jù)塊的集合;
[0013]在所述目標(biāo)數(shù)據(jù)塊的集合中確定目標(biāo)數(shù)據(jù)塊;
[0014]將所述增量數(shù)據(jù)寫(xiě)入所述目標(biāo)數(shù)據(jù)塊中。
[0015]在本發(fā)明實(shí)施例第一方面的第一種可能的實(shí)現(xiàn)方式中,所述目標(biāo)數(shù)據(jù)塊的集合是所述數(shù)據(jù)卷對(duì)應(yīng)的最近一次的快照數(shù)據(jù)所在的數(shù)據(jù)塊的集合。
[0016]在本發(fā)明實(shí)施例第一方面的第二種可能的實(shí)現(xiàn)方式中,所述目標(biāo)數(shù)據(jù)塊的集合是所述目標(biāo)存儲(chǔ)區(qū)域中存儲(chǔ)快照數(shù)據(jù)最多的數(shù)據(jù)塊的集合。
[0017]結(jié)合本發(fā)明實(shí)施例第一方面或者第一方面的第一種可能的實(shí)現(xiàn)方式或者第一方面的第二種可能的實(shí)現(xiàn)方式,在本發(fā)明實(shí)施例第一方面的第三種可能的實(shí)現(xiàn)方式中,將所述目標(biāo)數(shù)據(jù)塊的集合中包含的多個(gè)數(shù)據(jù)塊按照容量從小到大的規(guī)則進(jìn)行排序,其中,容量最小的兩個(gè)數(shù)據(jù)塊的容量相同,其余各個(gè)數(shù)據(jù)塊的容量是前一個(gè)數(shù)據(jù)塊的容量的兩倍;
[0018]所述在所述目標(biāo)數(shù)據(jù)塊的集合中確定目標(biāo)數(shù)據(jù)塊包括:
[0019]根據(jù)所述增量數(shù)據(jù)的大小在所述排序后的目標(biāo)數(shù)據(jù)塊的集合中包含的數(shù)據(jù)塊中查找所述目標(biāo)數(shù)據(jù)塊,所述目標(biāo)數(shù)據(jù)塊的容量大于等于所述增量數(shù)據(jù)的大小。
[0020]結(jié)合本發(fā)明實(shí)施例第一方面的第三種可能的實(shí)現(xiàn)方式,在本發(fā)明實(shí)施例第一方面的第四種可能的實(shí)現(xiàn)方式中,當(dāng)目標(biāo)數(shù)據(jù)塊的容量與所述容量最小的數(shù)據(jù)塊的容量相同,并且所述容量最小的兩個(gè)數(shù)據(jù)塊均已寫(xiě)入其他增量數(shù)據(jù)時(shí);
[0021]將與所述容量最小的兩個(gè)數(shù)據(jù)塊相鄰的數(shù)據(jù)塊拆分成第一子數(shù)據(jù)塊和第子二數(shù)據(jù)塊,其中,所述與所述容量最小的兩個(gè)數(shù)據(jù)塊相鄰的數(shù)據(jù)塊的容量是所述容量最小的數(shù)據(jù)塊的容量的兩倍,所述第一子數(shù)據(jù)塊和第二子數(shù)據(jù)塊的容量相同,所述目標(biāo)數(shù)據(jù)塊是所述第一子數(shù)據(jù)塊。
[0022]結(jié)合本發(fā)明實(shí)施例第一方面的,在本發(fā)明實(shí)施例第一方面的第五種可能的實(shí)現(xiàn)方式中,所述方法還包括:
[0023]接收所述主機(jī)發(fā)送的刪除快照請(qǐng)求,所述刪除快照請(qǐng)求用于指示刪除所述目標(biāo)數(shù)據(jù)塊中存儲(chǔ)的增量數(shù)據(jù);
[0024]根據(jù)所述刪除快照請(qǐng)求,刪除所述目標(biāo)數(shù)據(jù)塊中存儲(chǔ)的增量數(shù)據(jù)并釋放所述目標(biāo)數(shù)據(jù)塊中保存所述增量數(shù)據(jù)的空間為可用空間。
[0025]結(jié)合本發(fā)明實(shí)施例第一方面的第五種可能的實(shí)現(xiàn)方式,在本發(fā)明實(shí)施例第一方面的第六種可能的實(shí)現(xiàn)方式中,所述方法還包括:判斷所述目標(biāo)數(shù)據(jù)塊的容量是否和所述數(shù)據(jù)塊的集合中的其他空閑的數(shù)據(jù)塊的容量相同;
[0026]若是,則將所述釋放存儲(chǔ)空間后的目標(biāo)數(shù)據(jù)塊與所述數(shù)據(jù)塊的集合中與所述目標(biāo)數(shù)據(jù)塊容量相同的空閑的數(shù)據(jù)塊進(jìn)行合并;
[0027]判斷所述合并后的數(shù)據(jù)塊的容量是否和所述數(shù)據(jù)塊的集合中的其他空閑的數(shù)據(jù)塊的容量相同,如果是,則繼續(xù)進(jìn)行合并,依此類(lèi)推。
[0028]本發(fā)明實(shí)施例第二方面提供了一種數(shù)據(jù)處理裝置,所述數(shù)據(jù)處理裝置應(yīng)用在存儲(chǔ)系統(tǒng)中,所述存儲(chǔ)系統(tǒng)的存儲(chǔ)空間被劃分為多個(gè)存儲(chǔ)區(qū)域,每個(gè)存儲(chǔ)區(qū)域包含至少一個(gè)數(shù)據(jù)塊的集合,每個(gè)數(shù)據(jù)塊的集合包括多個(gè)容量不同的數(shù)據(jù)塊,所述數(shù)據(jù)處理裝置為主機(jī)的寫(xiě)數(shù)據(jù)請(qǐng)求分配數(shù)據(jù)塊,包括接收單元、分配單元、和寫(xiě)入單元,其中,
[0029]所述接收單元,用于接收主機(jī)發(fā)送的寫(xiě)數(shù)據(jù)請(qǐng)求,所述寫(xiě)數(shù)據(jù)請(qǐng)求攜帶數(shù)據(jù)卷的標(biāo)識(shí)、邏輯地址和待寫(xiě)入數(shù)據(jù);
[0030]所述分配單元,用于根據(jù)所述數(shù)據(jù)卷的標(biāo)識(shí)和所述邏輯地址確定增量數(shù)據(jù),所述增量數(shù)據(jù)是指所述待寫(xiě)入數(shù)據(jù)相對(duì)于所述邏輯地址中原來(lái)存儲(chǔ)的數(shù)據(jù)中發(fā)生變化的數(shù)據(jù);根據(jù)所述數(shù)據(jù)卷的標(biāo)識(shí)確定所述數(shù)據(jù)卷對(duì)應(yīng)的快照數(shù)據(jù)所在的目標(biāo)存儲(chǔ)區(qū)域;在所述目標(biāo)存儲(chǔ)區(qū)域中確定目標(biāo)數(shù)據(jù)塊的集合;在所述目標(biāo)數(shù)據(jù)塊的集合中確定目標(biāo)數(shù)據(jù)塊;
[0031]所述寫(xiě)入單元,用于將所述增量數(shù)據(jù)寫(xiě)入所述目標(biāo)數(shù)據(jù)塊中。
[0032]在本發(fā)明實(shí)施例第二方面的第一種可能的實(shí)現(xiàn)方式中,所述目標(biāo)數(shù)據(jù)塊的集合是所述數(shù)據(jù)卷對(duì)應(yīng)的最近一次的快照數(shù)據(jù)所在的數(shù)據(jù)塊的集合,或者是所述目標(biāo)存儲(chǔ)區(qū)域中存儲(chǔ)快照數(shù)據(jù)最多的數(shù)據(jù)塊的集合;
[0033]所述目標(biāo)數(shù)據(jù)塊的集合中包含的多個(gè)數(shù)據(jù)塊按照容量從小到大的規(guī)則進(jìn)行排序,其中,容量最小的兩個(gè)數(shù)據(jù)塊的容量相同,其余各個(gè)數(shù)據(jù)塊的容量是前一個(gè)數(shù)據(jù)塊的容量的兩倍;
[0034]所述分配單元用于根據(jù)所述增量數(shù)據(jù)的大小在所述排序后的目標(biāo)數(shù)據(jù)塊的集合中包含的數(shù)據(jù)塊中查找所述目標(biāo)數(shù)據(jù)塊,所述目標(biāo)數(shù)據(jù)塊的大小大于等于所述增量數(shù)據(jù)的大小。
[0035]結(jié)合本發(fā)明實(shí)施例第二方面的第一種可能的實(shí)現(xiàn)方式,在本發(fā)明實(shí)施例第二方面的第二種可能的實(shí)現(xiàn)方式中,所述分配單元,具體用于,當(dāng)目標(biāo)數(shù)據(jù)塊的容量與所述容量最小的數(shù)據(jù)塊的容量相同,并且所述容量最小的兩個(gè)數(shù)據(jù)塊均已寫(xiě)入其他增量數(shù)據(jù)時(shí);
[0036]將與所述容量最小的兩個(gè)數(shù)據(jù)塊相鄰的數(shù)據(jù)塊拆分成第一子數(shù)據(jù)塊和第子二數(shù)據(jù)塊,其中,所述與所述容量最小的兩個(gè)數(shù)據(jù)塊相鄰的數(shù)據(jù)塊的容量是所述容量最小的數(shù)據(jù)塊的容量的兩倍,所述第一子數(shù)據(jù)塊和第二子數(shù)據(jù)塊的容量相同,選取目標(biāo)數(shù)據(jù)塊為所述第一子數(shù)據(jù)塊。
[0037]結(jié)合本發(fā)明實(shí)施例第二方面的第二種可能的實(shí)現(xiàn)方式,在本發(fā)明實(shí)施例第二方面的第三種可能的實(shí)現(xiàn)方式中,所述數(shù)據(jù)處理裝置還包括:刪除模塊;
[0038]所述刪除模塊,用于接收所述主機(jī)發(fā)送的刪除快照請(qǐng)求,所述刪除快照請(qǐng)求用于指示刪除所述目標(biāo)數(shù)據(jù)塊中存儲(chǔ)的增量數(shù)據(jù);以及根據(jù)所述刪除快照請(qǐng)求,刪除所述目標(biāo)數(shù)據(jù)塊中存儲(chǔ)的增量數(shù)據(jù)并釋放所述目標(biāo)數(shù)據(jù)塊中保存所述增量數(shù)據(jù)的空間為可用空間。
[0039]結(jié)合本發(fā)明實(shí)施例第二方面的第三種可能的實(shí)現(xiàn)方式,在本發(fā)明實(shí)施例第二方面的第四種可能的實(shí)現(xiàn)方式中,所述刪除模塊,還用于判斷所述目標(biāo)數(shù)據(jù)塊的容量是否和所述數(shù)據(jù)塊的集合中的其他空閑的數(shù)據(jù)塊的容量相同;若是,則將所述釋放存儲(chǔ)空間后的目標(biāo)數(shù)據(jù)塊與所述數(shù)據(jù)塊的集合中與所述目標(biāo)數(shù)據(jù)塊容量相同的空閑的數(shù)據(jù)塊進(jìn)行合并;判斷所述合并后的數(shù)據(jù)塊的容量是否和所述數(shù)據(jù)塊的集合中的其他空閑的數(shù)據(jù)塊的容量相同,如果是,則繼續(xù)進(jìn)行合并,依此類(lèi)推。
[0040]在本發(fā)明實(shí)施例中,可以對(duì)同一快照分配盡可能集中的空間,有利于提高讀取效率。并且通過(guò)多次分配和釋放后,本發(fā)明實(shí)施例提供的方法可以減少碎片。
【專(zhuān)利附圖】
【附圖說(shuō)明】
[0041]為了更清楚地說(shuō)明本發(fā)明實(shí)施例中的技術(shù)方案,下面將對(duì)實(shí)施例中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0042]圖1是本發(fā)明實(shí)施例的應(yīng)用場(chǎng)景示意圖;
[0043]圖2是本發(fā)明實(shí)施例公開(kāi)的一種數(shù)據(jù)處理方法的流程圖;
[0044]圖3是本發(fā)明實(shí)施例公開(kāi)的一種存儲(chǔ)空間分配示意圖;
[0045]圖4是本發(fā)明實(shí)施例公開(kāi)的一種數(shù)據(jù)處理裝置的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0046]下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅是本發(fā)明的一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0047]本發(fā)明實(shí)施例公開(kāi)了一種數(shù)據(jù)處理方法,可以對(duì)同一快照分配盡可能集中的空間,有利于提聞讀取效率。
[0048]本發(fā)明實(shí)施例提供的數(shù)據(jù)處理方法可以在存儲(chǔ)系統(tǒng)上實(shí)現(xiàn),圖1為本發(fā)明實(shí)施例的一個(gè)應(yīng)用場(chǎng)景,該應(yīng)用場(chǎng)景是包括主機(jī)、存儲(chǔ)網(wǎng)關(guān)設(shè)備和存儲(chǔ)設(shè)備的存儲(chǔ)系統(tǒng)。
[0049]圖1中的主機(jī)可以包括當(dāng)前技術(shù)已知的任何計(jì)算設(shè)備,如服務(wù)器、臺(tái)式計(jì)算機(jī)等等。在主機(jī)內(nèi)部,安裝有操作系統(tǒng)以及其他應(yīng)用程序。
[0050]圖1中的存儲(chǔ)網(wǎng)關(guān)設(shè)備是指具有虛擬化的存儲(chǔ)網(wǎng)關(guān)設(shè)備,具有虛擬化的存儲(chǔ)網(wǎng)關(guān)設(shè)備是主機(jī)與存儲(chǔ)設(shè)備之間的中間設(shè)備,通過(guò)映射或者抽象的方式屏蔽了存儲(chǔ)設(shè)備中不同物理磁盤(pán)的復(fù)雜性和差異性,這樣用戶(hù)可以對(duì)所有存儲(chǔ)設(shè)備進(jìn)行統(tǒng)一管理和資源調(diào)度。
[0051]圖1中的存儲(chǔ)設(shè)備可以包括當(dāng)前技術(shù)已知的存儲(chǔ)設(shè)備,如獨(dú)立磁盤(pán)冗余陣列(Redundant Arrays of Inexpensive Disks, RAID)、磁盤(pán)族(Just a Bunch OfDisks, JBOD)、直接存取存儲(chǔ)器(Direct Access Storage Device, DASD)的一個(gè)或多個(gè)互連的磁盤(pán)驅(qū)動(dòng)器,諸如磁帶庫(kù)、一個(gè)或多個(gè)存儲(chǔ)單元的磁帶存儲(chǔ)設(shè)備等。
[0052]下面對(duì)本發(fā)明實(shí)施例數(shù)據(jù)處理方法進(jìn)行介紹。
[0053]如圖2所示,該數(shù)據(jù)處理方法可以包括以下步驟。
[0054]S101、接收主機(jī)發(fā)送的寫(xiě)數(shù)據(jù)請(qǐng)求,所述寫(xiě)數(shù)據(jù)請(qǐng)求攜帶數(shù)據(jù)卷的標(biāo)識(shí)、邏輯地址和待寫(xiě)入數(shù)據(jù)。
[0055]S102、確定目標(biāo)數(shù)據(jù)塊。具體地,根據(jù)數(shù)據(jù)卷的標(biāo)識(shí)和邏輯地址確定增量數(shù)據(jù),增量數(shù)據(jù)是指待寫(xiě)入數(shù)據(jù)相對(duì)于邏輯地址中原來(lái)存儲(chǔ)的數(shù)據(jù)中發(fā)生變化的數(shù)據(jù);根據(jù)數(shù)據(jù)卷的標(biāo)識(shí)確定數(shù)據(jù)卷對(duì)應(yīng)的快照數(shù)據(jù)所在的目標(biāo)存儲(chǔ)區(qū)域;在目標(biāo)存儲(chǔ)區(qū)域中確定目標(biāo)數(shù)據(jù)塊的集合;在目標(biāo)數(shù)據(jù)塊的集合中確定目標(biāo)數(shù)據(jù)塊。
[0056]數(shù)據(jù)卷是指由所述存儲(chǔ)設(shè)備的物理存儲(chǔ)空間映射而成的一段邏輯存儲(chǔ)空間,例如邏輯單元號(hào)(Logic Unit Number, LUN),每個(gè)數(shù)據(jù)卷都有一個(gè)唯一的標(biāo)識(shí),例如ID。根據(jù)所述數(shù)據(jù)卷的ID可以唯一確定一個(gè)數(shù)據(jù)卷。
[0057]邏輯地址是指所述待寫(xiě)入數(shù)據(jù)待寫(xiě)入所述數(shù)據(jù)卷的位置信息,例如邏輯塊地址(Logic Block Address, LBA)。
[0058]根據(jù)所述數(shù)據(jù)卷的ID以及LBA可以確定所述待寫(xiě)入數(shù)據(jù)待寫(xiě)入所述存儲(chǔ)設(shè)備的位置。此外,所述寫(xiě)數(shù)據(jù)請(qǐng)求中還可以包括所述待寫(xiě)入數(shù)據(jù)的長(zhǎng)度,在此不作限定。
[0059]增量數(shù)據(jù)是指待寫(xiě)入數(shù)據(jù)相對(duì)于邏輯地址中原來(lái)存儲(chǔ)的數(shù)據(jù)中發(fā)生變化的數(shù)據(jù)。
[0060]需要說(shuō)明的是,本實(shí)施例中,存儲(chǔ)空間被劃分為多個(gè)存儲(chǔ)區(qū)域,每個(gè)存儲(chǔ)區(qū)域包含至少一個(gè)數(shù)據(jù)塊的集合,每個(gè)數(shù)據(jù)塊的集合包括多個(gè)容量不同的數(shù)據(jù)塊。請(qǐng)參見(jiàn)圖3,圖3是存儲(chǔ)空間分配的一個(gè)示意圖。該存儲(chǔ)空間包括三個(gè)存儲(chǔ)區(qū)域,即第一存儲(chǔ)區(qū)域、第二存儲(chǔ)區(qū)域及第三存儲(chǔ)區(qū)域。每個(gè)存儲(chǔ)區(qū)域包括至少一個(gè)數(shù)據(jù)塊的集合,比如第一存儲(chǔ)區(qū)域包括三個(gè)數(shù)據(jù)塊的集合,分別是:第一數(shù)據(jù)塊的集合、第二數(shù)據(jù)塊的集合和第三數(shù)據(jù)塊的集合;每個(gè)數(shù)據(jù)塊的集合包括至少一個(gè)數(shù)據(jù)塊,如圖2所示,第一數(shù)據(jù)塊的集合包括四個(gè)數(shù)據(jù)塊,即第一數(shù)據(jù)塊、第二數(shù)據(jù)塊、第三數(shù)據(jù)塊和第四數(shù)據(jù)塊。假設(shè)第一數(shù)據(jù)塊及第二數(shù)據(jù)塊的容量都為Jl,Jl是第一數(shù)據(jù)塊及第二數(shù)據(jù)塊的容量大小,則第三數(shù)據(jù)塊的容量為2*J1,第四數(shù)據(jù)塊的容量為4*J1。當(dāng)然,存儲(chǔ)空間的分配不限于圖2中所示。
[0061]為了描述方便,在本發(fā)明實(shí)施例中,將所述增量數(shù)據(jù)將要寫(xiě)入的數(shù)據(jù)塊稱(chēng)為目標(biāo)數(shù)據(jù)塊,將所述目標(biāo)數(shù)據(jù)塊所在的數(shù)據(jù)塊的集合稱(chēng)為目標(biāo)數(shù)據(jù)塊的集合,將所述目標(biāo)數(shù)據(jù)的集合所在的存儲(chǔ)區(qū)域稱(chēng)為目標(biāo)存儲(chǔ)區(qū)域。
[0062]為了更合理地分配存儲(chǔ)空間,可以對(duì)一段時(shí)間內(nèi)的寫(xiě)數(shù)據(jù)請(qǐng)求進(jìn)行統(tǒng)計(jì),根據(jù)統(tǒng)計(jì)結(jié)果來(lái)設(shè)計(jì)磁盤(pán)空間的具體結(jié)構(gòu)。比如,當(dāng)某種容量的增量數(shù)據(jù)比較多時(shí),分配第一數(shù)據(jù)塊的容量與其匹配的數(shù)據(jù)塊集合的數(shù)量就多一些。
[0063]一種可選的實(shí)施方式是選取數(shù)據(jù)卷對(duì)應(yīng)的最近一次的快照數(shù)據(jù)所在的數(shù)據(jù)塊的集合作為目標(biāo)數(shù)據(jù)塊的集合。另一種可選的實(shí)施方式是選取目標(biāo)存儲(chǔ)區(qū)域中存儲(chǔ)快照數(shù)據(jù)最多的數(shù)據(jù)塊的集合作為目標(biāo)數(shù)據(jù)塊的集合。使得對(duì)同一快照集中分配存儲(chǔ)空間。
[0064]需要說(shuō)明的是,在本發(fā)明實(shí)施例中,快照是數(shù)據(jù)在某個(gè)時(shí)間點(diǎn)(拷貝開(kāi)始的時(shí)間點(diǎn))的映像??煺盏哪康氖菫閿?shù)據(jù)卷創(chuàng)建一個(gè)在特定時(shí)間點(diǎn)的狀態(tài)視圖,通過(guò)這個(gè)視圖只可以看到數(shù)據(jù)卷在創(chuàng)建時(shí)刻的數(shù)據(jù),在此時(shí)間點(diǎn)之后數(shù)據(jù)卷的修改(有新的數(shù)據(jù)寫(xiě)入),不會(huì)反映在快照視圖中。對(duì)存儲(chǔ)設(shè)備進(jìn)行快照處理時(shí)是以數(shù)據(jù)卷為單位實(shí)施的。例如,每隔一段預(yù)設(shè)的時(shí)間,對(duì)存儲(chǔ)設(shè)備中一個(gè)數(shù)據(jù)卷的數(shù)據(jù)進(jìn)行快照處理。因此,前面描述的數(shù)據(jù)卷對(duì)應(yīng)的最近一次的快照數(shù)據(jù)是指在最近一次時(shí)間間隔前對(duì)所述數(shù)據(jù)卷進(jìn)行的快照處理所得到的快照數(shù)據(jù)。
[0065]在目標(biāo)數(shù)據(jù)塊的集合中確定目標(biāo)數(shù)據(jù)塊包括:當(dāng)增量數(shù)據(jù)的大小與各數(shù)據(jù)塊的容量都不相同時(shí),選取容量大于增量數(shù)據(jù)的數(shù)據(jù)塊作為目標(biāo)數(shù)據(jù)塊。
[0066]當(dāng)目標(biāo)數(shù)據(jù)塊的容量為Jl即與容量最小的數(shù)據(jù)塊的容量相同,若容量最小的第一數(shù)據(jù)塊和第二數(shù)據(jù)塊均已寫(xiě)入其他增量數(shù)據(jù)時(shí),將與所述容量最小的兩個(gè)數(shù)據(jù)塊相鄰的數(shù)據(jù)塊即第三數(shù)據(jù)塊拆分成容量相同的第一子數(shù)據(jù)塊和第二子數(shù)據(jù)塊,第一子數(shù)據(jù)塊和第二子數(shù)據(jù)塊的容量都為J1,選取第一子數(shù)據(jù)塊作為確定的目標(biāo)數(shù)據(jù)塊。當(dāng)然如果第一數(shù)據(jù)塊未寫(xiě)入數(shù)據(jù),則選取第一數(shù)據(jù)塊作為確定的目標(biāo)數(shù)據(jù)塊;如果第一數(shù)據(jù)塊寫(xiě)入了數(shù)據(jù),第二數(shù)據(jù)塊未寫(xiě)入數(shù)據(jù),則選取第二數(shù)據(jù)塊作為確定的目標(biāo)數(shù)據(jù)塊。當(dāng)然如果第一數(shù)據(jù)塊、第二數(shù)據(jù)塊和第三數(shù)據(jù)塊都已寫(xiě)入了數(shù)據(jù),且第四數(shù)據(jù)塊沒(méi)有寫(xiě)入數(shù)據(jù),則將第四數(shù)據(jù)塊進(jìn)行如上拆分,選取拆分后的一個(gè)子數(shù)據(jù)塊作為確定的目標(biāo)數(shù)據(jù)塊。
[0067]如果目標(biāo)數(shù)據(jù)塊的集合中沒(méi)有足夠的剩余空間分配給目標(biāo)數(shù)據(jù),則在同一存儲(chǔ)區(qū)域中選取相鄰的存儲(chǔ)塊的集合作為目標(biāo)數(shù)據(jù)塊的集合,然后在新選取的目標(biāo)數(shù)據(jù)塊的集合中選取目標(biāo)數(shù)據(jù)塊。
[0068]在一種可選的實(shí)施方式中,可以采用鏈表的方式對(duì)目標(biāo)數(shù)據(jù)塊的集合中的可用空間進(jìn)行管理。每個(gè)存儲(chǔ)塊的集合具有個(gè)數(shù)與其數(shù)據(jù)塊個(gè)數(shù)相同的鏈表,按照序號(hào)依次命名各鏈表。其中,第一鏈表記錄所述目標(biāo)數(shù)據(jù)塊的集合中所有的容量等于第一數(shù)據(jù)塊的容量即Jl的可用空間,第二鏈表記錄所述目標(biāo)數(shù)據(jù)塊的集合中所有的容量為兩倍第一數(shù)據(jù)塊的容量即2*J1的可用空間,依此類(lèi)推,下一鏈表對(duì)應(yīng)所述目標(biāo)數(shù)據(jù)塊的集合中所有的容量為前一鏈表對(duì)應(yīng)的容量?jī)杀兜目捎每臻g。
[0069]在所述目標(biāo)數(shù)據(jù)塊的集合中選取目標(biāo)數(shù)據(jù)塊,包括如下步驟:
[0070]根據(jù)增量數(shù)據(jù)首先確定目標(biāo)數(shù)據(jù)塊的容量,如果目標(biāo)數(shù)據(jù)塊的集合中包括容量與增量數(shù)據(jù)的大小相同的數(shù)據(jù)塊時(shí),則目標(biāo)數(shù)據(jù)塊的容量為增量數(shù)據(jù)的大?。蝗绻繕?biāo)數(shù)據(jù)塊的集合中沒(méi)有容量與增量數(shù)據(jù)的大小相同的數(shù)據(jù)塊時(shí),則選取容量大于且最接近增量數(shù)據(jù)的大小的數(shù)據(jù)塊的容量作為目標(biāo)數(shù)據(jù)塊的容量,假設(shè)目標(biāo)數(shù)據(jù)塊的容量為A。
[0071]判斷容量與目標(biāo)數(shù)據(jù)塊的容量A相同的可用空間對(duì)應(yīng)的鏈表是否為空,
[0072]如果不為空,則將所述鏈表中最后一個(gè)節(jié)點(diǎn)從鏈表中刪除,并將所述節(jié)點(diǎn)對(duì)應(yīng)的可用空間A確定為保存增量數(shù)據(jù)的空間,該可用空間所在的數(shù)據(jù)塊為目標(biāo)數(shù)據(jù)塊;
[0073]如果為空,則檢索下一鏈表即對(duì)應(yīng)可用空間的大小為2A的鏈表,判斷下一鏈表是否為空,如果下一鏈表為空,則繼續(xù)檢索下一鏈表的下一鏈表即對(duì)應(yīng)可用空間的大小為4A的鏈表,依此類(lèi)推,直至檢索到某個(gè)鏈表不為空為止,該不為空的鏈表為被選取的鏈表,然后將所述被選取的鏈表的最后一個(gè)節(jié)點(diǎn)從被選取的鏈表中刪除,同時(shí),將所述被刪除的節(jié)點(diǎn)對(duì)應(yīng)的可用空間等分,分成第一子空間和第二子空間,然后在所述被選取的鏈表的上一鏈表中添加一個(gè)新節(jié)點(diǎn),所述添加的新節(jié)點(diǎn)對(duì)應(yīng)的可用空間為所述第二子空間;同時(shí)判斷所述第一子空間的容量與前面確定的目標(biāo)數(shù)據(jù)塊的容量是否相同,如果相同,則將第一子空間確定為保存增量數(shù)據(jù)的空間,該第一子空間所在的數(shù)據(jù)塊為目標(biāo)數(shù)據(jù)塊;如果第一子空間的容量大于前面確定的目標(biāo)數(shù)據(jù)塊的容量,則繼續(xù)等分所述第一子空間,分成第三子空間和第四子空間,然后在所述被選取的鏈表的上一鏈表的上一鏈表中添加一個(gè)新節(jié)點(diǎn),所述新添加的節(jié)點(diǎn)對(duì)應(yīng)的可用空間為所述第四子空間;同時(shí)判斷第三子空間的容量與前面確定的目標(biāo)數(shù)據(jù)塊的容量是否相同,如果相同,則將第三子空間確定為保存增量數(shù)據(jù)的空間,該第三子空間所在的數(shù)據(jù)塊為目標(biāo)數(shù)據(jù)塊;依此類(lèi)推,直至選取某個(gè)等分后的子空間的容量與前面確定的目標(biāo)數(shù)塊的大小相等的子空間作為保存增量數(shù)據(jù)的空間,同時(shí)在容量與前面確定的目標(biāo)數(shù)據(jù)塊的大小對(duì)應(yīng)鏈表中添加一個(gè)新的節(jié)點(diǎn),所述添加的新的節(jié)點(diǎn)對(duì)應(yīng)最后一次等分后的另一子空間。
[0074]S103、將增量數(shù)據(jù)寫(xiě)入所述目標(biāo)數(shù)據(jù)塊中。
[0075]本實(shí)施例可以為同一快照的各增量數(shù)據(jù)分配盡可能集中的存儲(chǔ)空間,有利于提高讀取的效率。
[0076]進(jìn)一步地,當(dāng)接收到主機(jī)發(fā)送的刪除快照請(qǐng)求時(shí),所述刪除快照請(qǐng)求用于指示刪除所述快照對(duì)應(yīng)的目標(biāo)數(shù)據(jù)塊中存儲(chǔ)的增量數(shù)據(jù);
[0077]根據(jù)所述刪除快照請(qǐng)求,刪除所述快照對(duì)應(yīng)的目標(biāo)數(shù)據(jù)塊中存儲(chǔ)的增量數(shù)據(jù)并釋放所述目標(biāo)數(shù)據(jù)塊中保存所述增量數(shù)據(jù)的空間為可用空間。
[0078]具體地,判斷所述目標(biāo)數(shù)據(jù)塊的容量是否和其所在的數(shù)據(jù)塊的集合中的其他數(shù)據(jù)塊的容量相同;若是,則將所述釋放存儲(chǔ)空間后的目標(biāo)數(shù)據(jù)塊與所述數(shù)據(jù)塊的集合中與所述目標(biāo)數(shù)據(jù)塊容量相同的數(shù)據(jù)塊進(jìn)行合并;
[0079]判斷所述合并后的數(shù)據(jù)塊的容量是否和所述數(shù)據(jù)塊的集合中的其他數(shù)據(jù)塊的容量相同,如果是,則繼續(xù)進(jìn)行合并,依此類(lèi)推。有利于為后續(xù)寫(xiě)數(shù)據(jù)請(qǐng)求提供大容量的可用空間。
[0080]在一種可選的實(shí)施方式中,可以采用鏈表的方式對(duì)目標(biāo)數(shù)據(jù)塊的集合中可用空間進(jìn)行管理。接收刪除所述虛擬快照的請(qǐng)求,
[0081]根據(jù)所述請(qǐng)求,釋放為所述增量數(shù)據(jù)分配的空間A。
[0082]所述釋放為所述增量數(shù)據(jù)分配的空間包括:
[0083]判斷對(duì)應(yīng)可用空間的容量大小為A的鏈表是否為空;
[0084]如果為空,在所述鏈表中添加一個(gè)節(jié)點(diǎn),該節(jié)點(diǎn)對(duì)應(yīng)的可用空間是為所述增量數(shù)據(jù)分配的空間;如果不為空,則繼續(xù)判斷所述為增量數(shù)據(jù)分配的空間與所述鏈表中最后一個(gè)節(jié)點(diǎn)對(duì)應(yīng)的可用空間在磁盤(pán)上是否為連續(xù);如果連續(xù),則將所述鏈表中最后一個(gè)節(jié)點(diǎn)從所述鏈表中刪除,在所述鏈表的下一鏈表即對(duì)應(yīng)可用空間的容量為2A的鏈表中添加一個(gè)新節(jié)點(diǎn),該添加的新節(jié)點(diǎn)對(duì)應(yīng)的可用空間是所述為增量數(shù)據(jù)分配的空間和前面所述鏈表的最后一個(gè)節(jié)點(diǎn)所對(duì)應(yīng)的可用空間合并后的區(qū)域,則繼續(xù)釋放該區(qū)域;如果不連續(xù),則在所述鏈表中添加一個(gè)新的節(jié)點(diǎn),該添加的新節(jié)點(diǎn)對(duì)應(yīng)的可用空間為所述為增量數(shù)據(jù)分配的空間;依此類(lèi)推,直至某個(gè)下一鏈表中不存在某個(gè)節(jié)點(diǎn),該節(jié)點(diǎn)對(duì)應(yīng)的可用空間與待釋放的區(qū)域的容量相同且地址連續(xù)為止,在容量與需要釋放的區(qū)域的容量相同的對(duì)應(yīng)鏈表中添加一個(gè)新節(jié)點(diǎn),該添加的新節(jié)點(diǎn)對(duì)應(yīng)的可用空間為所述需要釋放的區(qū)域。
[0085]本發(fā)明實(shí)施例提供的方法由于為同一快照分配的空間比較集中,釋放時(shí)又將容量相同的空間進(jìn)行了合并,所以該方法還可以減少磁盤(pán)碎片。
[0086]請(qǐng)參閱圖4,圖4是本發(fā)明實(shí)施例公開(kāi)的一種數(shù)據(jù)處理裝置的結(jié)構(gòu)示意圖。包括接收模塊,分配模塊和寫(xiě)入模塊。
[0087]其中,接收單元,用于接收主機(jī)發(fā)送的寫(xiě)數(shù)據(jù)請(qǐng)求,所述寫(xiě)數(shù)據(jù)請(qǐng)求攜帶數(shù)據(jù)卷的標(biāo)識(shí)、邏輯地址和待寫(xiě)入數(shù)據(jù);
[0088]分配單元,用于根據(jù)所述數(shù)據(jù)卷的標(biāo)識(shí)和所述邏輯地址確定增量數(shù)據(jù),所述增量數(shù)據(jù)是指所述待寫(xiě)入數(shù)據(jù)相對(duì)于所述邏輯地址中原來(lái)存儲(chǔ)的數(shù)據(jù)中發(fā)生變化的數(shù)據(jù);根據(jù)所述數(shù)據(jù)卷的標(biāo)識(shí)確定所述數(shù)據(jù)卷對(duì)應(yīng)的快照數(shù)據(jù)所在的目標(biāo)存儲(chǔ)區(qū)域;在所述目標(biāo)存儲(chǔ)區(qū)域中確定目標(biāo)數(shù)據(jù)塊的集合;在所述目標(biāo)數(shù)據(jù)塊的集合中確定目標(biāo)數(shù)據(jù)塊;在一種可選的實(shí)施方式中,分配單元采用鏈表的方式對(duì)目標(biāo)數(shù)據(jù)塊的集合中的可用空間進(jìn)行管理。每個(gè)存儲(chǔ)塊的集合具有個(gè)數(shù)與其數(shù)據(jù)塊個(gè)數(shù)相同的鏈表,按照序號(hào)依次命名各鏈表。其中,第一鏈表記錄所述目標(biāo)數(shù)據(jù)塊的集合中所有的容量等于第一數(shù)據(jù)塊的容量即Jl的可用空間,第二鏈表記錄所述目標(biāo)數(shù)據(jù)塊的集合中所有的容量為兩倍第一數(shù)據(jù)塊的容量即2*J1的可用空間,依此類(lèi)推,下一鏈表對(duì)應(yīng)所述目標(biāo)數(shù)據(jù)塊的集合中所有的容量為前一鏈表對(duì)應(yīng)的容量?jī)杀兜目捎每臻g。
[0089]在所述目標(biāo)數(shù)據(jù)塊的集合中選取目標(biāo)數(shù)據(jù)塊,包括如下步驟:
[0090]根據(jù)增量數(shù)據(jù)首先確定目標(biāo)數(shù)據(jù)塊的容量,如果目標(biāo)數(shù)據(jù)塊的集合中包括容量與增量數(shù)據(jù)的大小相同的數(shù)據(jù)塊時(shí),則目標(biāo)數(shù)據(jù)塊的容量為增量數(shù)據(jù)的大?。蝗绻繕?biāo)數(shù)據(jù)塊的集合中沒(méi)有容量與增量數(shù)據(jù)的大小相同的數(shù)據(jù)塊時(shí),則選取容量大于且最接近增量數(shù)據(jù)的大小的數(shù)據(jù)塊的容量作為目標(biāo)數(shù)據(jù)塊的容量,假設(shè)目標(biāo)數(shù)據(jù)塊的容量為A。
[0091]判斷容量與目標(biāo)數(shù)據(jù)塊的容量A相同的可用空間對(duì)應(yīng)的鏈表是否為空,
[0092]如果不為空,則將所述鏈表中最后一個(gè)節(jié)點(diǎn)從鏈表中刪除,并將所述節(jié)點(diǎn)對(duì)應(yīng)的可用空間A確定為保存增量數(shù)據(jù)的空間,該可用空間所在的數(shù)據(jù)塊為目標(biāo)數(shù)據(jù)塊;
[0093]如果為空,則檢索下一鏈表即對(duì)應(yīng)可用空間的大小為2A的鏈表,判斷下一鏈表是否為空,如果下一鏈表為空,則繼續(xù)檢索下一鏈表的下一鏈表即對(duì)應(yīng)可用空間的大小為4A的鏈表,依此類(lèi)推,直至檢索到某個(gè)鏈表不為空為止,該不為空的鏈表為被選取的鏈表,然后將所述被選取的鏈表的最后一個(gè)節(jié)點(diǎn)從被選取的鏈表中刪除,同時(shí),將所述被刪除的節(jié)點(diǎn)對(duì)應(yīng)的可用空間等分,分成第一子空間和第二子空間,然后在所述被選取的鏈表的上一鏈表中添加一個(gè)新節(jié)點(diǎn),所述添加的新節(jié)點(diǎn)對(duì)應(yīng)的可用空間為所述第二子空間;同時(shí)判斷所述第一子空間的容量與前面確定的目標(biāo)數(shù)據(jù)塊的容量是否相同,如果相同,則將第一子空間確定為保存增量數(shù)據(jù)的空間,該第一子空間所在的數(shù)據(jù)塊為目標(biāo)數(shù)據(jù)塊;如果第一子空間的容量大于前面確定的目標(biāo)數(shù)據(jù)塊的容量,則繼續(xù)等分所述第一子空間,分成第三子空間和第四子空間,然后在所述被選取的鏈表的上一鏈表的上一鏈表中添加一個(gè)新節(jié)點(diǎn),所述新添加的節(jié)點(diǎn)對(duì)應(yīng)的可用空間為所述第四子空間;同時(shí)判斷第三子空間的容量與前面確定的目標(biāo)數(shù)據(jù)塊的容量是否相同,如果相同,則將第三子空間確定為保存增量數(shù)據(jù)的空間,該第三子空間所在的數(shù)據(jù)塊為目標(biāo)數(shù)據(jù)塊;依此類(lèi)推,直至選取某個(gè)等分后的子空間的容量與前面確定的目標(biāo)數(shù)塊的大小相等的子空間作為保存增量數(shù)據(jù)的空間,同時(shí)在容量與前面確定的目標(biāo)數(shù)據(jù)塊的大小對(duì)應(yīng)鏈表中添加一個(gè)新的節(jié)點(diǎn),所述添加的新的節(jié)點(diǎn)對(duì)應(yīng)最后一次等分后的另一子空間。
[0094]寫(xiě)入單元,用于將所述增量數(shù)據(jù)寫(xiě)入所述目標(biāo)數(shù)據(jù)塊中。
[0095]在一種可選的實(shí)施方式中,所述目標(biāo)數(shù)據(jù)塊的集合是所述數(shù)據(jù)卷對(duì)應(yīng)的最近一次的快照數(shù)據(jù)所在的數(shù)據(jù)塊的集合,另一種可選的實(shí)施方式是,目標(biāo)存儲(chǔ)區(qū)域中存儲(chǔ)快照數(shù)據(jù)最多的數(shù)據(jù)塊的集合作為目標(biāo)數(shù)據(jù)塊的集合。
[0096]所述目標(biāo)數(shù)據(jù)塊的集合中包含的多個(gè)數(shù)據(jù)塊按照容量從小到大的規(guī)則進(jìn)行排序,其中,容量最小的兩個(gè)數(shù)據(jù)塊的容量相同,其余各個(gè)數(shù)據(jù)塊的容量是前一個(gè)數(shù)據(jù)塊的容量的兩倍;
[0097]所述分配單元用于根據(jù)所述增量數(shù)據(jù)的大小在所述排序后的目標(biāo)數(shù)據(jù)塊的集合中包含的數(shù)據(jù)塊中查找所述目標(biāo)數(shù)據(jù)塊,所述目標(biāo)數(shù)據(jù)塊的容量大于等于所述增量數(shù)據(jù)的大小。
[0098]在本發(fā)明的另一實(shí)施例中,數(shù)據(jù)處理裝置還包括刪除模塊,用于接收所述主機(jī)發(fā)送的刪除快照請(qǐng)求,所述刪除快照請(qǐng)求用于指示刪除所述目標(biāo)數(shù)據(jù)塊中存儲(chǔ)的增量數(shù)據(jù);以及根據(jù)所述刪除快照請(qǐng)求,刪除所述目標(biāo)數(shù)據(jù)塊中存儲(chǔ)的增量數(shù)據(jù)并釋放所述目標(biāo)數(shù)據(jù)塊中保存所述增量數(shù)據(jù)的空間為可用空間。刪除模塊,還用于判斷所述目標(biāo)數(shù)據(jù)塊的容量是否和所述數(shù)據(jù)塊的集合中的其他空閑的數(shù)據(jù)塊的容量相同;若是,則將所述釋放存儲(chǔ)空間后的目標(biāo)數(shù)據(jù)塊與所述數(shù)據(jù)塊的集合中與所述目標(biāo)數(shù)據(jù)塊容量相同的空閑的數(shù)據(jù)塊進(jìn)行合并;判斷所述合并后的數(shù)據(jù)塊的容量是否和所述數(shù)據(jù)塊的集合中的其他空閑的數(shù)據(jù)塊的容量相同,如果是,則繼續(xù)進(jìn)行合并,依此類(lèi)推。[0099]—種可選的實(shí)施方式是在一種可選的實(shí)施方式中,可以米用鏈表的方式對(duì)目標(biāo)數(shù)據(jù)塊的集合中可用空間進(jìn)行管理。接收刪除所述虛擬快照的請(qǐng)求,
[0100]根據(jù)所述請(qǐng)求,釋放為所述增量數(shù)據(jù)分配的空間A。
[0101]所述釋放為所述增量數(shù)據(jù)分配的空間包括:
[0102]判斷對(duì)應(yīng)可用空間的容量大小為A的鏈表是否為空;
[0103]如果為空,在所述鏈表中添加一個(gè)節(jié)點(diǎn),該節(jié)點(diǎn)對(duì)應(yīng)的可用空間是為所述增量數(shù)據(jù)分配的空間;
[0104]如果不為空,則繼續(xù)判斷所述為增量數(shù)據(jù)分配的空間與所述鏈表中最后一個(gè)節(jié)點(diǎn)對(duì)應(yīng)的可用空間在磁盤(pán)上是否為連續(xù);如果連續(xù),則將所述鏈表中最后一個(gè)節(jié)點(diǎn)從所述鏈表中刪除,在所述鏈表的下一鏈表即對(duì)應(yīng)可用空間的容量為2A的鏈表中添加一個(gè)新節(jié)點(diǎn),該添加的新節(jié)點(diǎn)對(duì)應(yīng)的可用空間是所述為增量數(shù)據(jù)分配的空間和前面所述鏈表的最后一個(gè)節(jié)點(diǎn)所對(duì)應(yīng)的可用空間合并后的區(qū)域,則繼續(xù)釋放該區(qū)域;如果不連續(xù),則在所述鏈表中添加一個(gè)新的節(jié)點(diǎn),該添加的新節(jié)點(diǎn)對(duì)應(yīng)的可用空間為所述為增量數(shù)據(jù)分配的空間;依此類(lèi)推,直至某個(gè)下一鏈表中不存在某個(gè)節(jié)點(diǎn),該節(jié)點(diǎn)對(duì)應(yīng)的可用空間與待釋放的區(qū)域的容量相同且地址連續(xù)為止,在容量與需要釋放的區(qū)域的容量相同的對(duì)應(yīng)鏈表中添加一個(gè)新節(jié)點(diǎn),該添加的新節(jié)點(diǎn)對(duì)應(yīng)的可用空間為所述需要釋放的區(qū)域。
[0105]本發(fā)明實(shí)施例提供的方法由于為同一快照分配的空間比較集中,釋放時(shí)又將容量相同的空間進(jìn)行了合并,所以該方法還可以減少磁盤(pán)碎片。
[0106]本發(fā)明實(shí)施例進(jìn)一步公開(kāi)了一種計(jì)算機(jī)存儲(chǔ)介質(zhì),該計(jì)算機(jī)存儲(chǔ)介質(zhì)存儲(chǔ)有程序,該程序執(zhí)行時(shí)包括如圖2所示方法的全部步驟。
[0107]本領(lǐng)域普通技術(shù)人員可以理解上述實(shí)施例的各種方法中的全部或部分步驟是可以通過(guò)程序來(lái)指令服務(wù)器、虛擬化網(wǎng)關(guān)、桌面操作系統(tǒng)或者其他操作系統(tǒng)以及存儲(chǔ)設(shè)備等相關(guān)的硬件來(lái)完成,該程序可以存儲(chǔ)于服務(wù)器、虛擬化網(wǎng)關(guān)、磁盤(pán)空間管理裝置等具有的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,并被服務(wù)器、虛擬化網(wǎng)關(guān)、磁盤(pán)空間管理裝置中的至少一個(gè)處理器來(lái)執(zhí)行,以實(shí)現(xiàn)為快照的增量數(shù)據(jù)分配或釋放空間。其中,所述存儲(chǔ)介質(zhì)可以包括:閃存盤(pán)、只讀存儲(chǔ)器(Read-Only Memory, ROM)、隨機(jī)存取器(Random Access Memory, RAM)、磁盤(pán)或光
舟坐
Im -rf- o
[0108]以上對(duì)本發(fā)明實(shí)施例公開(kāi)的數(shù)據(jù)處理方法、裝置和系統(tǒng)進(jìn)行了詳細(xì)介紹,本文中應(yīng)用了具體個(gè)例對(duì)本發(fā)明的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說(shuō)明只是用于幫助理解本發(fā)明的方法及其核心思想;同時(shí),對(duì)于本領(lǐng)域的一般技術(shù)人員,依據(jù)本發(fā)明的思想,在【具體實(shí)施方式】及應(yīng)用范圍上均會(huì)有改變之處,綜上所述,本說(shuō)明書(shū)內(nèi)容不應(yīng)理解為對(duì)本發(fā)明的限制。
【權(quán)利要求】
1.一種數(shù)據(jù)處理方法,其特征在于,所述方法應(yīng)用于存儲(chǔ)系統(tǒng)中,所述存儲(chǔ)系統(tǒng)的存儲(chǔ)空間被劃分為多個(gè)存儲(chǔ)區(qū)域,每個(gè)存儲(chǔ)區(qū)域包含至少一個(gè)數(shù)據(jù)塊的集合,每個(gè)數(shù)據(jù)塊的集合包括多個(gè)容量不同的數(shù)據(jù)塊,所述方法包括: 接收主機(jī)發(fā)送的寫(xiě)數(shù)據(jù)請(qǐng)求,所述寫(xiě)數(shù)據(jù)請(qǐng)求攜帶數(shù)據(jù)卷的標(biāo)識(shí)、邏輯地址和待寫(xiě)入數(shù)據(jù); 根據(jù)所述數(shù)據(jù)卷的標(biāo)識(shí)和所述邏輯地址確定增量數(shù)據(jù),所述增量數(shù)據(jù)是指所述待寫(xiě)入數(shù)據(jù)相對(duì)于所述邏輯地址中原來(lái)存儲(chǔ)的數(shù)據(jù)中發(fā)生變化的數(shù)據(jù); 根據(jù)所述數(shù)據(jù)卷的標(biāo)識(shí)確定所述數(shù)據(jù)卷對(duì)應(yīng)的快照數(shù)據(jù)所在的目標(biāo)存儲(chǔ)區(qū)域; 在所述目標(biāo)存儲(chǔ)區(qū)域中確定目標(biāo)數(shù)據(jù)塊的集合; 在所述目標(biāo)數(shù)據(jù)塊的集合中確定目標(biāo)數(shù)據(jù)塊; 將所述增量數(shù)據(jù)寫(xiě)入所述目標(biāo)數(shù)據(jù)塊中。
2.根據(jù)權(quán)利要求1所述的數(shù)據(jù)處理方法,其特征在于,所述目標(biāo)數(shù)據(jù)塊的集合是所述數(shù)據(jù)卷對(duì)應(yīng)的最近一次的快照數(shù)據(jù)所在的數(shù)據(jù)塊的集合。
3.根據(jù)權(quán)利要求1所述的數(shù)據(jù)處理方法,其特征在于,所述目標(biāo)數(shù)據(jù)塊的集合是所述目標(biāo)存儲(chǔ)區(qū)域中存儲(chǔ)快照數(shù)據(jù)最多的數(shù)據(jù)塊的集合。
4.根據(jù)權(quán)利要求1-3任一所述的數(shù)據(jù)處理方法,其特征在于,還包括:將所述目標(biāo)數(shù)據(jù)塊的集合中包含的多個(gè)數(shù)據(jù)塊按照容量從小到大的規(guī)則進(jìn)行排序,其中,容量最小的兩個(gè)數(shù)據(jù)塊的容量相同,其余各個(gè)數(shù)據(jù)塊的容量是前一個(gè)數(shù)據(jù)塊的容量的兩倍; 所述在所述目標(biāo)數(shù)據(jù)塊的集合中確定目標(biāo)數(shù)據(jù)塊包括: 根據(jù)所述增量數(shù)據(jù)的大小在所述排序后的目標(biāo)數(shù)據(jù)塊的集合中包含的數(shù)據(jù)塊中查找所述目標(biāo)數(shù)據(jù)塊,所述目標(biāo)數(shù)據(jù)塊的容量大于等于所述增量數(shù)據(jù)的大小。
5.根據(jù)權(quán)利要求4所述的數(shù)據(jù)處理方法,其特征在于,還包括: 當(dāng)目標(biāo)數(shù)據(jù)塊的容量與所述容量最小的數(shù)據(jù)塊的容量相同,并且所述容量最小的兩個(gè)數(shù)據(jù)塊均已寫(xiě)入其他增量數(shù)據(jù)時(shí); 將與所述容量最小的兩個(gè)數(shù)據(jù)塊相鄰的數(shù)據(jù)塊拆分成第一子數(shù)據(jù)塊和第子二數(shù)據(jù)塊,其中,所述與所述容量最小的兩個(gè)數(shù)據(jù)塊相鄰的數(shù)據(jù)塊的容量是所述容量最小的數(shù)據(jù)塊的容量的兩倍,所述第一子數(shù)據(jù)塊和第二子數(shù)據(jù)塊的容量相同,所述目標(biāo)數(shù)據(jù)塊是所述第一子數(shù)據(jù)塊。
6.根據(jù)權(quán)利要求1所述的數(shù)據(jù)處理方法,其特征在于,還包括: 接收所述主機(jī)發(fā)送的刪除快照請(qǐng)求,所述刪除快照請(qǐng)求用于指示刪除所述目標(biāo)數(shù)據(jù)塊中存儲(chǔ)的增量數(shù)據(jù); 根據(jù)所述刪除快照請(qǐng)求,刪除所述目標(biāo)數(shù)據(jù)塊中存儲(chǔ)的增量數(shù)據(jù)并釋放所述目標(biāo)數(shù)據(jù)塊中保存所述增量數(shù)據(jù)的空間為可用空間。
7.根據(jù)權(quán)利要求6所述的數(shù)據(jù)處理方法,其特征在于,還包括: 判斷所述目標(biāo)數(shù)據(jù)塊的容量是否和所述數(shù)據(jù)塊的集合中的其他空閑的數(shù)據(jù)塊的容量相同; 若是,則將所述釋放存儲(chǔ)空間后的目標(biāo)數(shù)據(jù)塊與所述數(shù)據(jù)塊的集合中與所述目標(biāo)數(shù)據(jù)塊容量相同的空閑的數(shù)據(jù)塊進(jìn)行合并; 判斷所述合并后的數(shù)據(jù)塊的容量是否和所述數(shù)據(jù)塊的集合中的其他空閑的數(shù)據(jù)塊的容量相同,如果是,則繼續(xù)進(jìn)行合并,依此類(lèi)推。
8.一種數(shù)據(jù)處理裝置,其特征在于,所述數(shù)據(jù)處理裝置應(yīng)用在存儲(chǔ)系統(tǒng)中,所述存儲(chǔ)系統(tǒng)的存儲(chǔ)空間被劃分為多個(gè)存儲(chǔ)區(qū)域,每個(gè)存儲(chǔ)區(qū)域包含至少一個(gè)數(shù)據(jù)塊的集合,每個(gè)數(shù)據(jù)塊的集合包括多個(gè)容量不同的數(shù)據(jù)塊,所述數(shù)據(jù)處理裝置為主機(jī)的寫(xiě)數(shù)據(jù)請(qǐng)求分配數(shù)據(jù)塊,所述數(shù)據(jù)處理裝置包括接收單元、分配單元、和寫(xiě)入單元,其中, 所述接收單元,用于接收主機(jī)發(fā)送的寫(xiě)數(shù)據(jù)請(qǐng)求,所述寫(xiě)數(shù)據(jù)請(qǐng)求攜帶數(shù)據(jù)卷的標(biāo)識(shí)、邏輯地址和待寫(xiě)入數(shù)據(jù); 所述分配單元,用于根據(jù)所述數(shù)據(jù)卷的標(biāo)識(shí)和所述邏輯地址確定增量數(shù)據(jù),所述增量數(shù)據(jù)是指所述待寫(xiě)入數(shù)據(jù)相對(duì)于所述邏輯地址中原來(lái)存儲(chǔ)的數(shù)據(jù)中發(fā)生變化的數(shù)據(jù);根據(jù)所述數(shù)據(jù)卷的標(biāo)識(shí)確定所述數(shù)據(jù)卷對(duì)應(yīng)的快照數(shù)據(jù)所在的目標(biāo)存儲(chǔ)區(qū)域;在所述目標(biāo)存儲(chǔ)區(qū)域中確定目標(biāo)數(shù)據(jù)塊的集合;在所述目標(biāo)數(shù)據(jù)塊的集合中確定目標(biāo)數(shù)據(jù)塊; 所述寫(xiě)入單元,用于將所述增量數(shù)據(jù)寫(xiě)入所述目標(biāo)數(shù)據(jù)塊中。
9.根據(jù)權(quán)利要去8所述的數(shù)據(jù)處理裝置,其特征在于,所述目標(biāo)數(shù)據(jù)塊的集合是所述數(shù)據(jù)卷對(duì)應(yīng)的最近一次的快照數(shù)據(jù)所在的數(shù)據(jù)塊的集合,或者是所述目標(biāo)存儲(chǔ)區(qū)域中存儲(chǔ)快照數(shù)據(jù)最多的數(shù)據(jù)塊的集合; 所述目標(biāo)數(shù)據(jù)塊的集合中包含的多個(gè)數(shù)據(jù)塊按照容量從小到大的規(guī)則進(jìn)行排序,其中,容量最小的兩個(gè)數(shù)據(jù)塊的容量相同,其余各個(gè)數(shù)據(jù)塊的容量是前一個(gè)數(shù)據(jù)塊的容量的兩倍; 所述分配單元用于根據(jù)所述增量數(shù)據(jù)的大小在所述排序后的目標(biāo)數(shù)據(jù)塊的集合中包含的數(shù)據(jù)塊中查找所述目標(biāo)數(shù)據(jù)塊,所述目標(biāo)數(shù)據(jù)塊的容量大于等于所述增量數(shù)據(jù)的大小。
10.根據(jù)權(quán)利要求9所述的數(shù)據(jù)處理裝置,其特征在于,` 所述分配單元,具體用于,當(dāng)目標(biāo)數(shù)據(jù)塊的容量與所述容量最小的數(shù)據(jù)塊的容量相同,并且所述容量最小的兩個(gè)數(shù)據(jù)塊均已寫(xiě)入其他增量數(shù)據(jù)時(shí); 將與所述容量最小的兩個(gè)數(shù)據(jù)塊相鄰的數(shù)據(jù)塊拆分成第一子數(shù)據(jù)塊和第子二數(shù)據(jù)塊,其中,所述與所述容量最小的兩個(gè)數(shù)據(jù)塊相鄰的數(shù)據(jù)塊的容量是所述容量最小的數(shù)據(jù)塊的容量的兩倍,所述第一子數(shù)據(jù)塊和第二子數(shù)據(jù)塊的容量相同,選取目標(biāo)數(shù)據(jù)塊是所述第一子數(shù)據(jù)塊。
11.根據(jù)權(quán)利要求10所述的數(shù)據(jù)處理裝置,其特征在于,所述數(shù)據(jù)處理裝置還包括:刪除豐吳塊; 所述刪除模塊,用于接收所述主機(jī)發(fā)送的刪除快照請(qǐng)求,所述刪除快照請(qǐng)求用于指示刪除所述目標(biāo)數(shù)據(jù)塊中存儲(chǔ)的增量數(shù)據(jù);以及根據(jù)所述刪除快照請(qǐng)求,刪除所述目標(biāo)數(shù)據(jù)塊中存儲(chǔ)的增量數(shù)據(jù)并釋放所述目標(biāo)數(shù)據(jù)塊中保存所述增量數(shù)據(jù)的空間為可用空間。
12.根據(jù)權(quán)利要求11所述的數(shù)據(jù)處理裝置,其特征在于, 所述刪除模塊,還用于判斷所述目標(biāo)數(shù)據(jù)塊的容量是否和所述數(shù)據(jù)塊的集合中的其他空閑的數(shù)據(jù)塊的容量相同;若是,則將所述釋放存儲(chǔ)空間后的目標(biāo)數(shù)據(jù)塊與所述數(shù)據(jù)塊的集合中與所述目標(biāo)數(shù)據(jù)塊容量相同的空閑的數(shù)據(jù)塊進(jìn)行合并;判斷所述合并后的數(shù)據(jù)塊的容量是否和所述數(shù)據(jù)塊的集合中的其他空閑的數(shù)據(jù)塊的容量相同,如果是,則繼續(xù)進(jìn)行合并,依此類(lèi)推。
【文檔編號(hào)】G06F12/06GK103761053SQ201310744146
【公開(kāi)日】2014年4月30日 申請(qǐng)日期:2013年12月30日 優(yōu)先權(quán)日:2013年12月30日
【發(fā)明者】閆東亮, 付亮亮, 李華 申請(qǐng)人:華為技術(shù)有限公司