專利名稱:一種基于動態(tài)raid系統(tǒng)的擴(kuò)容方法
技術(shù)領(lǐng)域:
本發(fā)明屬于數(shù)據(jù)存儲技術(shù)領(lǐng)域,特別是涉及一種基于動態(tài)RAID系統(tǒng)的擴(kuò)容方法。
背景技術(shù):
現(xiàn)代社會產(chǎn)生的信息,以2002年為例,其一年產(chǎn)生了大約5EB的信息,其中92% 的新信息大部分存儲在磁盤中,大容量磁盤已經(jīng)成為目前必不可少的存儲介質(zhì);重要的信息的存儲比如公司信息顯得尤為關(guān)鍵,研究表明50%的公司出現(xiàn)過不能恢復(fù)的信息超過十天,43%的公司出現(xiàn)數(shù)據(jù)永久丟失后立刻倒閉,93%的公司出現(xiàn)嚴(yán)重的數(shù)據(jù)丟失后倒閉,數(shù)據(jù)可靠性在數(shù)據(jù)存儲中尤為重要。而基于獨(dú)立冗余磁盤陣列RAID的存儲技術(shù)從其誕生起便在存儲系統(tǒng)中得到了非常廣泛的應(yīng)用,因?yàn)椴捎肦AID結(jié)構(gòu)的存儲系統(tǒng)可以保證系統(tǒng)的可靠性以及由于磁盤失效而導(dǎo)致的丟失數(shù)據(jù)的恢復(fù),但隨著信息量的不斷增加,RAID中存放的數(shù)據(jù)也不斷增加,磁盤可用容量不斷減少,原有的設(shè)計(jì)容量已經(jīng)不滿足數(shù)據(jù)增加時(shí),磁盤將面臨空間耗盡的困境。一旦磁盤空間耗盡,購買新的磁盤然后在新的磁盤RAID上重構(gòu)原有RAID數(shù)據(jù)是耗時(shí)非常大的,而且還面臨著幾天的當(dāng)機(jī)時(shí)間,這對現(xiàn)在的7/M時(shí)間的服務(wù)要求是一個(gè)很大的挑戰(zhàn)。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種基于動態(tài)RAID系統(tǒng)的擴(kuò)容方法,該擴(kuò)容方法可以解決傳統(tǒng)RAID系統(tǒng)在擴(kuò)容過程中耗時(shí)長及遷移數(shù)據(jù)量大等技術(shù)問題。本發(fā)明提供了一種基于動態(tài)RAID系統(tǒng)的擴(kuò)容方法,設(shè)原始磁盤個(gè)數(shù)為m,新增磁盤個(gè)數(shù)為n,新增磁盤分別編號為0到n-1,該方法包括以下步驟(1)將動態(tài)RAID系統(tǒng)劃分為條帶集;(2)選取一個(gè)條帶集P,判斷條帶集ρ中是否存在一個(gè)條帶集單元的編號為p_q, 其中P為條帶集編號,q = ((P)mod(m+n)),若存在,則將該條帶集單元移動到編號為r的新增磁盤且保持該條帶集單元的偏移量不變,并更新該條帶集單元的地址映射表,其中r = ((q)mod(n));若不存在,則不做任何操作;(3)判斷η是否等于1,若是,轉(zhuǎn)入步驟(6);否則,令t = 1,進(jìn)入步驟⑷;(4)判斷條帶集(p+t)中是否存在條帶集單元的編號為(p+t) — q,若存在,則將該條帶集單元移動到編號為r的新增磁盤且保持該條帶集單元的偏移量不變,并更新該條帶集單元的地址映射表,其中(P+t)為條帶集編號;若不存在,則不做任何操作;(5)判斷t是否等于(n-1),若是,進(jìn)入步驟(6);否則,令t = t+Ι,轉(zhuǎn)入步驟(4);(6)按照步驟(2)至(5)的操作,遍歷步驟⑴中劃分的所有條帶集。本發(fā)明所提出的動態(tài)RAID系統(tǒng)是在傳統(tǒng)的RAID系統(tǒng)中增加了一個(gè)條帶集的概念,通過條帶集的引入使得通過磁盤來訪問數(shù)據(jù)變成通過條帶集來訪問數(shù)據(jù)。本發(fā)明所述的基于動態(tài)RAID系統(tǒng)的擴(kuò)容方法相對于傳統(tǒng)的擴(kuò)容方法來說具有以下優(yōu)勢1.可以實(shí)現(xiàn)在線擴(kuò)容,避免了停機(jī)所造成的無法實(shí)現(xiàn)服務(wù)的情況。
2.擴(kuò)容過程遷移數(shù)據(jù)量小,在原始m個(gè)磁盤構(gòu)成的RAID上增加η個(gè)磁盤,為了達(dá)到負(fù)載均衡,理論上的數(shù)據(jù)遷移最小值是占總數(shù)據(jù)量的n/(m+n),本發(fā)明所述的擴(kuò)容方法可以達(dá)到這個(gè)最小值。3.在數(shù)據(jù)遷移過程中,傳統(tǒng)的RAID遷移的是小數(shù)據(jù)塊,而本方法遷移的是大數(shù)據(jù)塊,這樣磁盤遷移同樣的數(shù)據(jù)量需要的時(shí)間更少。
圖1集和條帶的示意圖;圖2偏移量示意圖;圖3建立地址映射表過程圖;圖4更新地址映射表過程圖;圖5m = 4,η = 1的磁盤擴(kuò)容過程圖;圖6修改地址映射表過程圖;圖7數(shù)據(jù)讀取過程圖;圖8m = 4,η = 2的磁盤擴(kuò)容過程圖;圖9數(shù)據(jù)縮容過程圖。
具體實(shí)施例方式下面將結(jié)合本發(fā)明的附圖和相關(guān)實(shí)例,更清晰的說明動態(tài)RAID系統(tǒng)及基于動態(tài) RAID系統(tǒng)的擴(kuò)容方法。RAID中存儲數(shù)據(jù)的基本結(jié)構(gòu)是條帶,條帶大小有16K、32K、64K、128K、256K幾種, RAID5 一般取3 (或64Κ。條帶分布在每個(gè)磁盤中,而且一個(gè)條帶在每個(gè)磁盤中只能有一個(gè)數(shù)據(jù)塊,這個(gè)數(shù)據(jù)塊一般叫做條帶單元?,F(xiàn)有的RAID在構(gòu)造時(shí),都是采用條帶的方式存放數(shù)據(jù),由于條帶屬于粒度比較小的數(shù)據(jù)集合,數(shù)據(jù)遷移時(shí)會形成一張很大的地址映射表,因此本發(fā)明在此提出“條帶集”的概念,條帶集是粒度更大的數(shù)據(jù)集合,一個(gè)條帶集可以由幾百個(gè)甚至上千個(gè)條帶構(gòu)成,每個(gè)條帶集形成一個(gè)小粒度的RAID,這些小粒度RAID不用考慮RAID級別。每個(gè)磁盤中屬于同一個(gè)條帶集的所有條帶單元可以作為一個(gè)整體,這個(gè)整體稱為“條帶集單元”。圖1所示為由4個(gè)磁盤組成的RAID,其中Al、Bi、Cl、Dl四個(gè)數(shù)據(jù)塊構(gòu)成一個(gè)條帶,A1、B1、C1、D1分別稱為條帶單元,四個(gè)條帶構(gòu)成的一個(gè)條帶集,Al到A4、B1到B4、C1到 C4、D1到D4分別稱為條帶集單元。為了方便數(shù)據(jù)遷移的實(shí)現(xiàn),下面對條帶集和條帶集單元進(jìn)行編號,對于圖1中上面一個(gè)條帶集(即Al到A4、B 1到B4、Cl到C4、Dl到D4組成的條帶集),編號為0 (在計(jì)算機(jī)專業(yè)中,對存儲介質(zhì)的編號都是從0開始的),對于下面的條帶集編號為1。條帶集單元的編號也是從0開始,在一個(gè)條帶集中的第一個(gè)條帶集單元編號為0,圖1中條帶集單元A1、B1、C1、D1的編號均為0,第二個(gè)條帶集單元編號為1,以此類推。條帶集單元的編號是以條帶集為參照物的,是條帶集的內(nèi)部編號,該編號不隨條帶集單元的移動而改變。條帶集單元的全局編號是由它所在的條帶集編號加上條帶集的內(nèi)部編號組成的,如圖1中下面的條帶集編號為1,磁盤0上的條帶集單元內(nèi)部編號為0,磁盤1上的條帶集單元內(nèi)部編號為1,那么這兩個(gè)條帶集單元的全局編號為1-0和1-1。在不混淆的情
4況下,本文把條帶集單元的全局編號就叫做條帶集單元的編號。條帶集單元的編號可以根據(jù)主機(jī)給出的LBA地址得到,LBA是一個(gè)一維的線性地址。在構(gòu)建條帶集時(shí),條帶集中條帶的個(gè)數(shù)和條帶大小都是人為設(shè)置的,假設(shè)條帶集中共有 e個(gè)條帶,每個(gè)條帶的大小是s,那么可以通過LBA除以(eXs)的積,得到的商即條帶集編號。假設(shè)每個(gè)條帶有m個(gè)條帶單元,那么每個(gè)條帶單元大小就是s/m。通過LBA對s取模, 把這個(gè)結(jié)果除以條帶單元大小s/m,得到的商就是條帶集單元編號中的內(nèi)部編號。本發(fā)明所述的動態(tài)RAID系統(tǒng)包括構(gòu)成RAID的多個(gè)磁盤和RAID控制器,該動態(tài) RAID系統(tǒng)在邏輯上劃分了條帶集的概念,使得多個(gè)條帶構(gòu)成了一個(gè)條帶集,一個(gè)條帶集類似一個(gè)子RAID,該動態(tài)RAID系統(tǒng)還包括一地址映射表,該地址映射表記錄所有條帶集單元的位置信息。具體的講,動態(tài)RAID的條帶集是一個(gè)邏輯上的劃分,在RAID搭建的時(shí)候,可以根據(jù)磁盤大小配置條帶集中條帶的數(shù)量,比如150G的硬盤,條帶單元的大小是16KB,那么可以選擇2M作為一個(gè)條帶集單元的大小,也就說條帶集中具有2M/16KB= 1 個(gè)條帶。特別的,對于每個(gè)條帶集,可以配置不同RAID級別,在本發(fā)明中僅認(rèn)為所有的條帶集都是同一級別,以此說明。動態(tài)RAID在構(gòu)造了這樣的條帶集之后,為了方便移動數(shù)據(jù)塊,還構(gòu)建了一個(gè)地址映射表,該地址映射表由兩級表組成。一級表是條帶集表,每個(gè)條帶集對應(yīng)一級表中的一個(gè)表項(xiàng),每個(gè)一級表表項(xiàng)指向一個(gè)二級表,二級表中記錄每個(gè)條帶集的所有條帶集單元的位置,每個(gè)二級表表項(xiàng)對應(yīng)一個(gè)條帶集單元的位置,二級表中有三列,第一列是條帶集單元的內(nèi)部編號,第二列表示該條帶集單元所在磁盤的編號,第三列表示該條帶集單元在磁盤中的偏移量。偏移量表示該條帶集單元與磁盤起始條帶集單元之間的條帶集單元數(shù)量,如圖2所示,條帶集0的四個(gè)條帶集單元放在磁盤的最上方,也就是磁盤的起始位置,因此偏移量是0,條帶集1的四個(gè)條帶集單元放在距離磁盤起始位置一個(gè)條帶集單元的位置, 因此偏移量是1,以此類推。地址映射表是一個(gè)動態(tài)建立的過程,每寫入一個(gè)條帶集單元,就添加該條帶集單元對應(yīng)的二級表項(xiàng)。如圖3所示,其表示了地址映射表的建立過程,以寫入條帶集單元0-0 為例,先根據(jù)集號0,建立一級表中的集0項(xiàng),然后再建立集0對應(yīng)的二級表,并且把條帶集單元0-0的編號0,磁盤號0,偏移量0填入二級表中。當(dāng)有數(shù)據(jù)移動時(shí),修改相應(yīng)的二級表內(nèi)容,如圖4所示,條帶集單元0-0從原來的位置移動到磁盤4之后,首先查找集0的一級表,通過集0找到二級表中條帶集單元0的位置,修改磁盤號位磁盤4,由于條帶集單元0-0 在磁盤4中的偏移量還是0,所以偏移量部分不要改變。條帶集單元0-0移動到新位置之后,編號還是0-0,因?yàn)樵摋l帶集單元還是屬于集0的第一個(gè)條帶集單元,從數(shù)據(jù)上來說,它保存的還是集0中的最開始部分的數(shù)據(jù),因此編號沒有改變。當(dāng)原有m個(gè)磁盤數(shù)據(jù)已經(jīng)超過了總存儲容量的某個(gè)值,比如說80%,就需要擴(kuò)容。 在原始的m個(gè)磁盤中,條帶集是由m個(gè)條帶集單元構(gòu)成的,一旦擴(kuò)容了 η個(gè)磁盤,為了負(fù)載均衡,必須要把部分?jǐn)?shù)據(jù)從原始磁盤遷移到新增磁盤,使得每個(gè)磁盤的數(shù)據(jù)量近似相同,這樣每個(gè)磁盤的訪問量才能近似相同,即需要把m個(gè)磁盤上的所有條帶集單元分布到m+n個(gè)磁盤中實(shí)現(xiàn)擴(kuò)容和負(fù)載均衡。本發(fā)明所述的基于動態(tài)RAID的擴(kuò)容方法,其基本思想是增加新的磁盤后,將原來磁盤上的條帶集的某些條帶集單元遷移到新磁盤上,并確保數(shù)據(jù)分布均衡,新空出的空間組成新的條帶集,用于存儲新的數(shù)據(jù)。具體數(shù)據(jù)遷移方式會有多種,凡是采用本發(fā)明的設(shè)計(jì)結(jié)構(gòu)和思路,做一些簡單的變化或更改的設(shè)計(jì),都落入本發(fā)明保護(hù)的范圍。下面以m = 4,η = 1為例詳細(xì)介紹動態(tài)RAID擴(kuò)容的方法及擴(kuò)容后數(shù)據(jù)的讀寫方法。1.動態(tài)RAID擴(kuò)容方法在本發(fā)明所述的擴(kuò)容方法中數(shù)據(jù)遷移并不需要移動所有數(shù)據(jù),如圖5所示,原始的磁盤陣列中有4個(gè)磁盤,分別編號為0到3,新增加了一個(gè)磁盤,編號為新磁盤0,每個(gè)條帶集選取一個(gè)條帶集單元移動到新增磁盤,原始磁盤遷移出數(shù)據(jù)的空白區(qū)域就空余出來, 可以填充新的數(shù)據(jù)。擴(kuò)容方法具體過程如下(1)劃分條帶集,以每個(gè)條帶集具有1 個(gè)條帶為準(zhǔn)進(jìn)行劃分,記錄條帶集的個(gè)數(shù)。(2)選取條帶集0,判斷是否存在條帶集單元0-0 (p = 0,q = Omod 5),存在,則將該條帶集單元移到新增磁盤0(r = Omod n,在這里η = 1,因此r永遠(yuǎn)等于0);(3)因?yàn)閚 = 1,直接選擇下一個(gè)條帶進(jìn)行遷移;(4)選取條帶集1,判斷是否存在條帶集單元1-1 (ρ = 0,q = Imod 5),存在,則將條帶集單元1-1遷移到第0個(gè)新磁盤;(5)選取條帶集2,判斷是否存在條帶集單元2-2 (p = 0,q = 2mod 5),存在,則將條帶集單元2-2遷移到第0個(gè)新磁盤;(6)選取條帶集3,判斷是否存在條帶集單元3-3 (p = 0,q = 3mod 5),存在,則將條帶集單元3-3遷移到第0個(gè)新磁盤;(7)選取條帶集4,判斷是否存在條帶集單元4-4 (p = 0,q = 4mod 5),不存在,則不做任何操作;(8)繼續(xù)下一個(gè)條帶集的數(shù)據(jù)遷移,按照本發(fā)明所述的方法遍歷步驟(1)中劃分的所有條帶集。每個(gè)條帶集單元移動后,需要更新該條帶集單元的地址映射表,即將該條帶集單元的磁盤編號更改為新磁盤編號。從圖5可以看到,每個(gè)磁盤上的條帶集單元個(gè)數(shù)是一樣的,而且以從條帶集0到條帶集4這個(gè)區(qū)域上看,新增磁盤上增加了 4個(gè)條帶集單元,原始四個(gè)磁盤上總共有20個(gè)條帶集單元,數(shù)據(jù)遷移量為4/20 = 0.2,與n/(m+n) = 1/5相同,達(dá)到了理論上的最小值。2.磁盤擴(kuò)容后的數(shù)據(jù)寫入方法當(dāng)數(shù)據(jù)遷移完成后,每個(gè)磁盤中都會出現(xiàn)很多的空白區(qū)域,這些區(qū)域可以用來組成新的條帶集,填寫新的數(shù)據(jù)。新數(shù)據(jù)寫入過程分兩步完成,第一步是把新數(shù)據(jù)寫入磁盤, 第二步是修改相應(yīng)的地址映射表。圖6顯示了寫入條帶集8之后,修改地址映射表的情況,在圖上只標(biāo)明對條帶集單元8-1對應(yīng)的地址映射表進(jìn)行修改的情況,其余條帶集單元的修改過程相似。當(dāng)條帶集單元8-1寫入磁盤后,首先查找條帶集8所在的一級表,如果沒有,表示條帶集8是新數(shù)據(jù),則添加條帶集8的一級表項(xiàng),然后添加一個(gè)二級表。根據(jù)條帶集單元的編號,該條帶集單元記錄在二級表中第二行。在劃分條帶集的時(shí)候,已經(jīng)對每個(gè)條帶集單元存放的磁盤及偏移量進(jìn)行了計(jì)算,若條帶集單元8-1放置在磁盤1的偏移量為1的位置,則填寫的二級表項(xiàng)為 8-1,磁盤1,偏移1。3.磁盤擴(kuò)容后的數(shù)據(jù)讀取方法通過LBA地址依照前面闡述的方法得到條帶集單元的編號,然后訪問條帶集一級表,得到整個(gè)條帶集的所有條帶集單元所在的磁盤和偏移量,從而根據(jù)這些信息找到該條帶集單元并且從相應(yīng)位置讀取數(shù)據(jù)。如圖7所示,若想讀取8-3這個(gè)條帶集單元,首先通過8這個(gè)值找到一級表中條帶集8的位置,其次通過一級表指向的二級表,找到二級表中條帶集單元3,獲得該條帶集單元存放的位置是在磁盤3,偏移量為3,最好讀出磁盤3偏移量為3的條帶集單元。對于m = 4,n = 2的動態(tài)RAID擴(kuò)容方法,如圖8所示,移動的條帶集單元為0_0, 1-0,1-1,2-1,2-2,3-2 等。4.動態(tài)RAID的磁盤縮容方法除了本文前面提到的動態(tài)RAID的擴(kuò)容方法,動態(tài)RAID還可以用在縮容方面??s容的過程就是把m個(gè)磁盤減少η個(gè),其中m > η??s容也包含了數(shù)據(jù)塊的移動,但是縮容的條件是組成條帶集的條帶集單元的個(gè)數(shù)必須要小于等于m-n,否則就會出現(xiàn)屬于同一個(gè)條帶集的條帶集單元放在同一個(gè)磁盤上,這樣就不能夠保證數(shù)據(jù)的可靠性??s容過程如圖9所示,圖9僅簡單的畫出4個(gè)集的情況。在縮容過程中,每次移動一個(gè)條帶集單元,就把條帶集單元的新磁盤號及磁盤內(nèi)偏移量寫入二級表,寫入過程和遷移時(shí)改變二級表的過程一樣,直到η個(gè)磁盤上的數(shù)據(jù)塊全部移除。本發(fā)明不僅局限于上述具體實(shí)施方式
,本領(lǐng)域一般技術(shù)人員根據(jù)本發(fā)明公開的內(nèi)容,可以采用其它多種具體實(shí)施方式
實(shí)施本發(fā)明,比如本發(fā)明中提到的數(shù)據(jù)遷移方式,為了達(dá)到多個(gè)磁盤能夠負(fù)載均衡的目的,實(shí)際上會有多種數(shù)據(jù)遷移方式。因此,凡是采用本發(fā)明的設(shè)計(jì)結(jié)構(gòu)和思路,做一些簡單的變化或更改的設(shè)計(jì),都落入本發(fā)明保護(hù)的范圍。
權(quán)利要求
1.一種基于動態(tài)RAID系統(tǒng)的擴(kuò)容方法,設(shè)原始磁盤個(gè)數(shù)為m,新增磁盤個(gè)數(shù)為n,新增磁盤分別編號為0到n-1,該方法包括以下步驟(1)將動態(tài)RAID系統(tǒng)劃分為條帶集;(2)選取一個(gè)條帶集P,判斷條帶集P中是否存在一個(gè)條帶集單元的編號為P— q,其中P為條帶集編號,q= ((p)mod (m+n)),若存在,則將該條帶集單元移動到編號為r的新增磁盤且保持該條帶集單元的偏移量不變,并更新該條帶集單元的地址映射表,其中r= (Cq) mod (η));若不存在,則不做任何操作;(3)判斷η是否等于1,若是,轉(zhuǎn)入步驟(6);否則,令t=l,進(jìn)入步驟(4);(4)判斷條帶集(p+t)中是否存在條帶集單元的編號為(p+t)— q,若存在,則將該條帶集單元移動到編號為r的新增磁盤且保持該條帶集單元的偏移量不變,并更新該條帶集單元的地址映射表,其中(p+t)為條帶集編號;若不存在,則不做任何操作;(5)判斷t是否等于(n-1),若是,進(jìn)入步驟(6);否則,令t=t+l,轉(zhuǎn)入步驟(4);(6)按照步驟(2)至(5)的操作,遍歷步驟(1)中劃分的所有條帶集。
2.根據(jù)權(quán)利要求1所述的擴(kuò)容方法,其特征在于,所述的地址映射表由一級表和二級表組成,一級表是條帶集表,每個(gè)一級表表項(xiàng)均指向一個(gè)二級表,二級表是條帶集單元表, 每個(gè)二級表表項(xiàng)均記錄一個(gè)條帶集單元的位置。
3.根據(jù)權(quán)利要求1所述的擴(kuò)容方法,其特征在于,所述的條帶集單元是指每個(gè)磁盤中屬于同一個(gè)條帶集的所有條帶單元。
4.根據(jù)權(quán)利要求1所述的RAID系統(tǒng)擴(kuò)容后的數(shù)據(jù)寫入方法,包括以下步驟(1)把數(shù)據(jù)寫入磁盤中空白的條帶集單元;(2)修改相應(yīng)條帶集單元的地址映射表。
5.根據(jù)權(quán)利要求1所述的RAID系統(tǒng)擴(kuò)容后的數(shù)據(jù)讀取方法,包括以下步驟(1)通過LBA地址得到數(shù)據(jù)所在的條帶集單元的編號;(2)通過地址映射表找到該條帶集單元;(3)從該條帶集單元中讀取數(shù)據(jù)。
全文摘要
本發(fā)明的目的在于提供一種基于動態(tài)RAID系統(tǒng)的擴(kuò)容方法,該擴(kuò)容方法首先將動態(tài)RAID系統(tǒng)劃分為若干個(gè)條帶集,之后選擇一個(gè)條帶集p,并選擇編號為p-q的條帶集單元移動到編號為r的新增磁盤且保持該條帶集單元的偏移量不變,并更新地址映射表,其中q=(p)mod(m+n),r=(q)mod(n),最后按照上述步驟遍歷所有條帶集完成擴(kuò)容。所述的動態(tài)RAID系統(tǒng)是在傳統(tǒng)RAID系統(tǒng)中增加了一個(gè)條帶集的概念,通過條帶集的引入使得通過磁盤來訪問數(shù)據(jù)變成通過條帶集來訪問數(shù)據(jù)。本發(fā)明所述的擴(kuò)容方法可以達(dá)到理論上的數(shù)據(jù)遷移最小值,且遷移的單位是條帶集單元,遷移同樣的數(shù)據(jù)量需要的時(shí)間更少。
文檔編號G06F3/06GK102200892SQ20111011180
公開日2011年9月28日 申請日期2011年4月29日 優(yōu)先權(quán)日2011年4月29日
發(fā)明者萬繼光, 吳東, 李俊堯, 李頂, 殷超, 毛宇, 王繼斌, 謝長生, 譚志虎 申請人:華中科技大學(xué)