一種磁盤陣列中的磁盤故障處理方法
【專利摘要】本發(fā)明公開了一種RAID中的磁盤故障處理方法:為系統(tǒng)中的各工作RAID設(shè)置P個臨時存儲介質(zhì),P為正整數(shù),初始設(shè)置時,臨時存儲介質(zhì)中為空;其中,各工作RAID的磁盤中不設(shè)置保留空間;當(dāng)任一工作RAID中的任一磁盤出現(xiàn)故障時,將所述故障對應(yīng)的條帶中的數(shù)據(jù)保存到臨時存儲介質(zhì)中;當(dāng)故障修復(fù)時,將保存在臨時存儲介質(zhì)中的數(shù)據(jù)對應(yīng)恢復(fù)到原條帶中,并釋放所恢復(fù)的數(shù)據(jù)在臨時存儲介質(zhì)中占用的存儲空間。應(yīng)用本發(fā)明所述方法,能夠?qū)崿F(xiàn)存儲空間的合理利用。
【專利說明】一種磁盤陣列中的磁盤故障處理方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及存儲技術(shù),特別涉及一種磁盤陣列(RAID, Redundant Arrays ofIndependent Disks)中的磁盤故障處理方法。
【背景技術(shù)】
[0002]現(xiàn)有技術(shù)中,通常會對RAID進(jìn)行磁盤冗余,即在其中的每個磁盤上均保留一部分空間,當(dāng)磁盤出現(xiàn)壞道等時,可將壞道所在條帶上的數(shù)據(jù)保存到保留空間中。
[0003]但是,上述方式在實際應(yīng)用中會存在一定的問題:如果磁盤沒有出現(xiàn)故障,這些保留空間就會被浪費(fèi),如果出現(xiàn)故障較多,這些保留空間又會不夠用,即不能實現(xiàn)存儲空間的
合理利用。
【發(fā)明內(nèi)容】
[0004]有鑒于此,本發(fā)明提供了一種RAID中的磁盤故障處理方法,能夠?qū)崿F(xiàn)存儲空間的
合理利用。
[0005]為了達(dá)到上述目的,本發(fā)明的技術(shù)方案是這樣實現(xiàn)的:
[0006]一種RAID中的磁盤故障處理方法,包括:
[0007]為系統(tǒng)中的各工作RAID設(shè)置P個臨時存儲介質(zhì),P為正整數(shù),初始設(shè)置時,所述臨時存儲介質(zhì)中為空;其中,各工作RAID的磁盤中不設(shè)置保留空間;
[0008]當(dāng)任一工作RAID中的任一磁盤出現(xiàn)故障時,將所述故障對應(yīng)的條帶中的數(shù)據(jù)保存到所述臨時存儲介質(zhì)中;
[0009]當(dāng)故障修復(fù)時,將保存在所述臨時存儲介質(zhì)中的數(shù)據(jù)對應(yīng)恢復(fù)到原條帶中,并釋放所恢復(fù)的數(shù)據(jù)在所述臨時存儲介質(zhì)中占用的存儲空間。
[0010]可見,采用本發(fā)明所述方案,為各工作RAID設(shè)置臨時存儲介質(zhì),相應(yīng)地,在各工作RAID的磁盤中不再設(shè)置保留空間,一旦某一工作RAID中的磁盤出現(xiàn)故障,可將故障對應(yīng)的條帶中的數(shù)據(jù)保存到臨時存儲介質(zhì)中,當(dāng)故障修復(fù)后,還可將保存在臨時存儲介質(zhì)中的數(shù)據(jù)對應(yīng)恢復(fù)到原條帶中,并釋放所恢復(fù)的數(shù)據(jù)在臨時存儲介質(zhì)中占用的存儲空間,供其它工作RAID繼續(xù)使用;相比于磁盤的保留空間,臨時存儲介質(zhì)中的存儲空間通常更大,因此不會出現(xiàn)不夠用的情況,而且,臨時存儲介質(zhì)供所有工作RAID —起使用,并讓真正需要用到的工作RAID使用,不會造成存儲空間的浪費(fèi),從而實現(xiàn)了存儲空間的合理利用。
【專利附圖】
【附圖說明】
[0011]圖1為本發(fā)明RAID中的磁盤故障處理方法實施例的流程圖。
【具體實施方式】
[0012]為了使本發(fā)明的技術(shù)方案更加清楚、明白,以下參照附圖并舉實施例,對本發(fā)明所述方案作進(jìn)一步的詳細(xì)說明。[0013]圖1為本發(fā)明RAID中的磁盤故障處理方法實施例的流程圖。如圖1所示,包括以下步驟11~13。
[0014]步驟11:為系統(tǒng)中的各工作RAID設(shè)置P個臨時RAID,P為正整數(shù),初始設(shè)置時,臨時RAID中為空;其中,各 工作RAID的磁盤中不設(shè)置保留空間。
[0015]工作RAID,即指區(qū)別于臨時RAID的正常RAID。
[0016]針對系統(tǒng)中的所有工 作RAID,可設(shè)置一個或多個臨時RAID,具體數(shù)量可根據(jù)實際需要而定,初始設(shè)置時,臨時RAID中為空,即為空閑狀態(tài)。
[0017]相應(yīng)地,由于設(shè)置了臨時RAID,因此各工作RAID的磁盤中不需要再設(shè)置保留空間。
[0018]綜合考慮各方面的性能,較佳地,臨時RAID的類型可為RAID5,當(dāng)然,也可以是其它類型。
[0019]步驟12:當(dāng)任一工作RAID中的任一磁盤出現(xiàn)故障時,將所述故障對應(yīng)的條帶中的數(shù)據(jù)保存到臨時RAID中。
[0020]步驟13:當(dāng)故障修復(fù)時,將保存在臨時RAID中的數(shù)據(jù)對應(yīng)恢復(fù)到原條帶中,并釋放所恢復(fù)的數(shù)據(jù)在臨時RAID中占用的存儲空間。
[0021]在實際應(yīng)用中,所述故障可以為:磁盤出現(xiàn)壞道,相應(yīng)地,所述故障對應(yīng)的條帶為:壞道所在條帶。
[0022]對于任一條帶中的數(shù)據(jù),當(dāng)該數(shù)據(jù)被保存到臨時RAID中后,如果需要對該條帶中的數(shù)據(jù)進(jìn)行操作,可直接對保存在臨時RAID中的相應(yīng)數(shù)據(jù)進(jìn)行操作,所述操作是指讀寫
坐寸ο
[0023]當(dāng)磁盤的壞道故障修復(fù)后,可將保存在臨時RAID中的數(shù)據(jù)對應(yīng)恢復(fù)到原條帶中,即壞道所在條帶中,并釋放所恢復(fù)的數(shù)據(jù)在臨時RAID中占用的存儲空間,恢復(fù)成功后,后續(xù)直接對恢復(fù)到磁盤中的數(shù)據(jù)進(jìn)行操作即可。
[0024]除以上介紹的磁盤出現(xiàn)壞道外,在實際應(yīng)用中,所述故障也可能是其它故障,比如:由于磁盤不在位或其它故障導(dǎo)致磁盤不能進(jìn)行讀寫。
[0025]當(dāng)所述故障為磁盤不能進(jìn)行讀寫時,相應(yīng)地,所述故障對應(yīng)的條帶為:磁盤中的所有條帶。
[0026]具體來說,當(dāng)任一工作RAID中的任一磁盤不能進(jìn)行讀寫時,可將該磁盤中的各條帶中的數(shù)據(jù)均保存到臨時RAID中;當(dāng)該磁盤恢復(fù)正常后,可將保存在臨時RAID中的數(shù)據(jù)對應(yīng)恢復(fù)到該磁盤中的各條帶中,并釋放所恢復(fù)的數(shù)據(jù)在臨時RAID中占用的存儲空間。
[0027]同樣,將故障磁盤上的數(shù)據(jù)保存到臨時RAID中后,如果需要對故障磁盤上的數(shù)據(jù)進(jìn)行操作,可直接對保存在臨時RAID中的相應(yīng)數(shù)據(jù)進(jìn)行操作。
[0028]即用臨時RAID來代替故障磁盤,同時,可對故障磁盤進(jìn)行修復(fù)操作,如reset、換盤等。
[0029]現(xiàn)有技術(shù)中,當(dāng)磁盤不在位或其它故障導(dǎo)致磁盤不能進(jìn)行讀寫時,磁盤中的保留空間也會失去作用,從而導(dǎo)致在故障修復(fù)之前無法對磁盤進(jìn)行正常的讀寫,而且RAID也會無法繼續(xù)工作需要等待磁盤修復(fù),或者需要進(jìn)行降級重構(gòu)讀寫,影響性能和安全,不能適應(yīng)復(fù)雜的環(huán)境。
[0030]而采用本發(fā)明所述方案后,當(dāng)磁盤出現(xiàn)故障時,可將相應(yīng)的數(shù)據(jù)保存到臨時RAID中,直接訪問臨時RAID,不需要對工作RAID進(jìn)行重構(gòu)等,并同時對故障磁盤進(jìn)行修復(fù)操作,在此過程中,工作RAID還能繼續(xù)正常工作,不影響性能和安全等。
[0031]另外,可預(yù)先將每個臨時RAID的存儲空間分別劃分為N個存儲區(qū)域,并將每個存儲區(qū)域分別劃分為M個子區(qū)域,N和M均為大于I的正整數(shù),具體取值均可根據(jù)實際需要而定。
[0032]存儲區(qū)域?qū)?yīng)于工作RAID,一個工作RAID可以使用一個或多個存儲區(qū)域,子區(qū)域?qū)?yīng)于磁盤,一個磁盤可以使用一個或多個小區(qū)域。
[0033]較佳地,將每個臨時RAID的存儲空間分別等分為N個存儲區(qū)域,將每個存儲區(qū)域分別等分為M個子區(qū)域。
[0034]相應(yīng)地,當(dāng)需要將任一工作RAID X中的任一磁盤y中的任一條帶z中的數(shù)據(jù)保存到臨時RAID中時,主要可采用以下幾種處理方式。
[0035]處理方式一
[0036]如果未為工作RAID X分配過存儲區(qū)域,則為工作RAID x分配一個空閑存儲區(qū)域,并從該空閑存儲區(qū)域中為磁盤y分配一個空閑子區(qū)域,將條帶z中的數(shù)據(jù)保存到該空閑子區(qū)域中。
[0037]處理方式二
[0038]如果同時滿足以下條件:已經(jīng)為工作RAID X分配過存儲區(qū)域、已經(jīng)在該存儲區(qū)域中為磁盤I分配過子區(qū)域且該子區(qū)域未用完,則將條帶z中的數(shù)據(jù)保存到該子區(qū)域中。
[0039]處理方式三
[0040]如果同時滿足以下條件:已經(jīng)為工作RAID X分配過存儲區(qū)域、已經(jīng)在該存儲區(qū)域中為磁盤y分配過子區(qū)域且該子區(qū)域已用完、該存儲區(qū)域中存在空閑子區(qū)域,則從該空閑存儲區(qū)域中為磁盤I分配一個新的空閑子區(qū)域,并將條帶z中的數(shù)據(jù)保存到該新的空閑子區(qū)域中。
[0041]處理方式四
[0042]如果同時滿足以下條件:已經(jīng)為工作RAID X分配過存儲區(qū)域、已經(jīng)在該存儲區(qū)域中為磁盤y分配過子區(qū)域且該子區(qū)域已用完、該存儲區(qū)域中不存在空閑子區(qū)域,則為工作RAID X分配一個新的空閑存儲區(qū)域,并從該新的空閑存儲區(qū)域中為磁盤y分配一個新的空閑子區(qū)域,將條帶z中的數(shù)據(jù)保存到該新的空閑子區(qū)域中。
[0043]處理方式五
[0044]如果同時滿足以下條件:已經(jīng)為工作RAID X分配過存儲區(qū)域、未在該存儲區(qū)域中為磁盤I分配過子區(qū)域、該存儲區(qū)域中存在空閑子區(qū)域,則從該存儲區(qū)域中為磁盤I分配一個空閑子區(qū)域,并將條帶z中的數(shù)據(jù)保存到該空閑子區(qū)域中。
[0045]處理方式六
[0046]如果同時滿足以下條件:已經(jīng)為工作RAID X分配過存儲區(qū)域、未在該存儲區(qū)域中為磁盤I分配過子區(qū)域、該存儲區(qū)域中不存在空閑子區(qū)域,則為工作RAID X分配一個新的空閑存儲區(qū)域,并從該新的空閑存儲區(qū)域中為磁盤I分配一個新的空閑子區(qū)域,將條帶z中的數(shù)據(jù)保存到該新的空閑子區(qū)域中。
[0047]需要說明的是,為便于表述,用工作RAID X來表不任一工作RAID,用磁盤y來表不任一磁盤,用條帶z來表示任一條帶,但并不用于限制本發(fā)明的技術(shù)方案。[0048]通常來說,各子區(qū)域的大小需要為條帶大小的整數(shù)倍,不會出現(xiàn)一個條帶中的數(shù)據(jù)被分開保存到兩個子區(qū)域中的情況。
[0049]將數(shù)據(jù)按照上述方式進(jìn)行保存后,記錄保存位置,以方便后續(xù)對數(shù)據(jù)進(jìn)行查找和操作等。
[0050]另外,臨時RAID和工作RAID本質(zhì)上是一樣的,都是RAID,因此RAID應(yīng)該具有的性能臨時RAID也具有,如能對數(shù)據(jù)進(jìn)行很好的保護(hù),具有很好的安全性等。
[0051]以上以臨時RAID為例,對本發(fā)明所述方案進(jìn)行說明,在實際應(yīng)用中,也可以用單個或多個磁盤來代替上述臨時RAID,具體實現(xiàn)不再贅述,并可將臨時RAID和臨時磁盤統(tǒng)稱為臨時存儲介質(zhì)。
[0052]總之,采用本發(fā)明所述方案,既能夠?qū)崿F(xiàn)存儲空間的合理利用,又能夠提高RAID的讀寫性能、安全性、可操作性和適應(yīng)復(fù)雜環(huán)境的能力等;而且,本發(fā)明所述方案實現(xiàn)起來簡單方便,從而便于普及和推廣。
[0053]綜上所述,以上僅為本發(fā)明的較佳實施例而已,并非用于限定本發(fā)明的保護(hù)范圍。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
【權(quán)利要求】
1.一種磁盤陣列RAID中的磁盤故障處理方法,其特征在于,包括: 為系統(tǒng)中的各工作RAID設(shè)置P個臨時存儲介質(zhì),P為正整數(shù),初始設(shè)置時,所述臨時存儲介質(zhì)中為空;其中,各工作RAID的磁盤中不設(shè)置保留空間; 當(dāng)任一工作RAID中的任一磁盤出現(xiàn)故障時,將所述故障對應(yīng)的條帶中的數(shù)據(jù)保存到所述臨時存儲介質(zhì)中; 當(dāng)故障修復(fù)時,將保存在所述臨時存儲介質(zhì)中的數(shù)據(jù)對應(yīng)恢復(fù)到原條帶中,并釋放所恢復(fù)的數(shù)據(jù)在所述臨時存儲介質(zhì)中占用的存儲空間。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于, 當(dāng)所述故障為磁盤出現(xiàn)壞道時,所述故障對應(yīng)的條帶為:壞道所在條帶。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于, 當(dāng)所述故障為磁盤不能進(jìn)行讀寫時,所述故障對應(yīng)的條帶為:磁盤中的所有條帶。
4.根據(jù)權(quán)利要求1所述的方法,其特征在于, 該方法進(jìn)一步包括:對于任一條帶中的數(shù)據(jù),當(dāng)該數(shù)據(jù)被保存到所述臨時存儲介質(zhì)中后,如果需要對該條帶中的數(shù)據(jù)進(jìn)行操作,則直接對保存在所述臨時存儲介質(zhì)中的相應(yīng)數(shù)據(jù)進(jìn)行操作。
5.根據(jù)權(quán)利要求1所述的方法,其特征在于, 該方法進(jìn)一步包括:預(yù)先將每個臨時存儲介質(zhì)的存儲空間分別劃分為N個存儲區(qū)域,并將每個存儲區(qū)域分別劃分`為M個子區(qū)域,N和M均為大于I的正整數(shù); 當(dāng)需要將任一工作RAID X中的任一磁盤y中的任一條帶z中的數(shù)據(jù)保存到所述臨時存儲介質(zhì)中時,進(jìn)行以下處理: 如果未為工作RAID X分配過存儲區(qū)域,則為工作RAID x分配一個空閑存儲區(qū)域,并從該空閑存儲區(qū)域中為磁盤y分配一個空閑子區(qū)域,將條帶z中的數(shù)據(jù)保存到該空閑子區(qū)域中; 如果同時滿足以下條件:已經(jīng)為工作RAID X分配過存儲區(qū)域、已經(jīng)在該存儲區(qū)域中為磁盤y分配過子區(qū)域且該子區(qū)域未用完,則將條帶z中的數(shù)據(jù)保存到該子區(qū)域中; 如果同時滿足以下條件:已經(jīng)為工作RAID X分配過存儲區(qū)域、已經(jīng)在該存儲區(qū)域中為磁盤y分配過子區(qū)域且該子區(qū)域已用完、該存儲區(qū)域中存在空閑子區(qū)域,則從該空閑存儲區(qū)域中為磁盤y分配一個新的空閑子區(qū)域,并將條帶z中的數(shù)據(jù)保存到該新的空閑子區(qū)域中; 如果同時滿足以下條件:已經(jīng)為工作RAID X分配過存儲區(qū)域、已經(jīng)在該存儲區(qū)域中為磁盤I分配過子區(qū)域且該子區(qū)域已用完、該存儲區(qū)域中不存在空閑子區(qū)域,則為工作RAIDX分配一個新的空閑存儲區(qū)域,并從該新的空閑存儲區(qū)域中為磁盤I分配一個新的空閑子區(qū)域,將條帶Z中的數(shù)據(jù)保存到該新的空閑子區(qū)域中; 如果同時滿足以下條件:已經(jīng)為工作RAID X分配過存儲區(qū)域、未在該存儲區(qū)域中為磁盤I分配過子區(qū)域、該存儲區(qū)域中存在空閑子區(qū)域,則從該存儲區(qū)域中為磁盤I分配一個空閑子區(qū)域,并將條帶z中的數(shù)據(jù)保存到該空閑子區(qū)域中; 如果同時滿足以下條件:已經(jīng)為工作RAID X分配過存儲區(qū)域、未在該存儲區(qū)域中為磁盤I分配過子區(qū)域、該存儲區(qū)域中不存在空閑子區(qū)域,則為工作RAID X分配一個新的空閑存儲區(qū)域,并從該新的空閑存儲區(qū)域中為磁盤y分配一個新的空閑子區(qū)域,將條帶z中的數(shù)據(jù)保存到該新的空閑子區(qū)域中。
6.根據(jù)權(quán)利要求5所述的方法,其特征在于, 所述劃分為N個存儲區(qū)域包括:等分為N個存儲區(qū)域; 所述劃分為M個子區(qū)域包括:等分為M個子區(qū)域。
7.根據(jù)權(quán)利要求1~6中任一項所述的方法,其特征在于, 所述臨時存儲介質(zhì)為以下之一:RAID、磁盤。
8.根據(jù)權(quán)利要求7所述的方法,其特征在于, 所述臨時RAID的類型為RAID5。
【文檔編號】G06F11/07GK103678025SQ201310634831
【公開日】2014年3月26日 申請日期:2013年12月2日 優(yōu)先權(quán)日:2013年12月2日
【發(fā)明者】莊建波 申請人:創(chuàng)新科軟件技術(shù)(深圳)有限公司, 創(chuàng)新科存儲技術(shù)(深圳)有限公司