recording,簡稱SMR)硬盤,其中,X為硬盤的整數(shù)容量,y為硬盤的零散容量,零散容量是在硬盤生產(chǎn)時就產(chǎn)生的,并且,每個硬盤的零散容量可能不同,也可能相同。存儲設(shè)備中的每個硬盤的整數(shù)容量包括N個分塊,對于N和分塊的容量大小可以根據(jù)實際情況來調(diào)整,本發(fā)明中不加以限制。
[0046]在本實施例中,硬盤的容量越大,則一個硬盤故障便意味著較大的容量的損失,但是,實際上大部分的硬盤故障,只是某個磁頭或某個碟片發(fā)生故障,其余的磁頭或碟片可以繼續(xù)使用,即硬盤中的某個分塊發(fā)生故障,而其它沒有發(fā)生故障的分塊仍然可以使用。在本實施例中,當(dāng)磁盤陣列控制器檢測到存儲設(shè)備中的一個或者多個硬盤發(fā)生故障,例如,該硬盤中的數(shù)據(jù)無法讀寫,則查找發(fā)生故障的分塊,并將該發(fā)生故障的分塊確定為第一分塊。
[0047]需要說明的是,第一硬盤為存儲設(shè)備中發(fā)生故障的硬盤,第一硬盤可以為一個發(fā)生故障的硬盤,也可以為多個發(fā)生故障的硬盤。
[0048]步驟102、在存儲設(shè)備的冗余容量池中獲取第二分塊。
[0049]其中,第二分塊的容量不小于第一分塊的容量,冗余容量池包括多個硬盤的零散容量。
[0050]在本實施例中,將存儲設(shè)備中的所有硬盤的零散容量作為存儲設(shè)備的冗余容量池,冗余容量池中不存儲數(shù)據(jù),將冗余容量池的容量作為存儲設(shè)備的冗余容量,可對存儲設(shè)備進(jìn)行擴容。并且,將存儲設(shè)備中的硬盤的整數(shù)容量作為存儲設(shè)備的主存儲容量池,由于每個硬盤的整數(shù)容量被劃分為多個分塊,則主存儲容量池中也包括若干的分塊。當(dāng)存儲設(shè)備發(fā)生故障時,查找到發(fā)生故障的分塊,即第一分塊,在冗余容量池中獲取與第一分塊的容量大小相等的分塊,即第二分塊。
[0051]圖4為硬盤故障前的容量分配示意圖。圖5為硬盤故障后的容量分配示意圖。如圖4所示,存儲設(shè)備中包括η個硬盤,將每個硬盤的整數(shù)容量X構(gòu)建主存儲容量池,即主存儲容量池的容量為ηΧ,并在整數(shù)容量中存儲數(shù)據(jù);將每個硬盤的零散容量構(gòu)建冗余容量池,即冗余容量池的容量為yl+y2+y3+…yn,零散容量中沒有存儲數(shù)據(jù),用于對存儲設(shè)備進(jìn)行擴容。如圖5所示,當(dāng)硬盤m發(fā)生故障時,找到硬盤m的整數(shù)容量中發(fā)生故障的分塊作為第一分塊,該第一分塊的容量為Q,則在冗余容量池中獲取Q大小的容量,并將該Q大小的容量作為主存儲容量池的容量,則主存儲容量池中的容量不變,仍然為nX,但冗余容量池中的容量變?yōu)閥l+y2+y3+…yn_Q。
[0052]需要說明的是,在本實施例中,發(fā)生故障的硬盤中,發(fā)生故障的分塊不能使用,而未發(fā)生故障的分塊可以繼續(xù)使用。
[0053]步驟103、重構(gòu)第一分塊中的數(shù)據(jù),并將數(shù)據(jù)存儲到第二分塊中。
[0054]在本實施例中,重構(gòu)第一分塊中存儲的數(shù)據(jù),將重構(gòu)的數(shù)據(jù)存儲到第二分塊中,以便于當(dāng)?shù)谝环謮K在下一次被訪問時,可以到第二分塊中訪問數(shù)據(jù)。對于重構(gòu)第一分塊中的數(shù)據(jù)的方法,可采用現(xiàn)有技術(shù)中數(shù)據(jù)的重構(gòu)方法,例如,采用傳統(tǒng)的獨立磁盤冗余數(shù)組(Redundant Array of Independent Disks Vers1nl.0,簡稱 RAIDl.0)技術(shù)或者是RAID2.0技術(shù)等,重構(gòu)故障區(qū)域的數(shù)據(jù)。
[0055]現(xiàn)有技術(shù)中對于出現(xiàn)故障的硬盤,維護人員需要使用新的硬盤來更換故障硬盤,由于硬盤故障率遠(yuǎn)高于普通硬件的故障率,且硬盤發(fā)貨量極大,所以將產(chǎn)生較高的維護費用,而且,對于出現(xiàn)故障的硬盤,直接使用新的硬盤來更換故障硬盤,另外,更換硬盤時需要進(jìn)行熱拔插,所以需要設(shè)計拉手條,增加設(shè)備成本。但是,本發(fā)明實施例提供的存儲的處理方法,將硬盤固定在存儲設(shè)備的內(nèi)部,例如,采用一體化設(shè)計,存儲設(shè)備中的所有硬盤做成一體,與硬盤框硬連接,所有硬盤不可拔插;或者,將硬盤分組,多個硬盤組成一個硬盤組,硬盤組整體在硬盤框上可拔插,硬盤組內(nèi)的硬盤不可拔插。并且,本發(fā)明實施例中,利用硬盤的零散容量對存儲設(shè)備進(jìn)行擴容,當(dāng)硬盤的發(fā)生故障時,只需要在冗余容量池中獲取與發(fā)生故障的分塊的容量大小相對應(yīng)的第二分塊來代替故障分塊,將第一分塊中的數(shù)據(jù)重構(gòu)到第二分塊中,實現(xiàn)了數(shù)據(jù)的備份和恢復(fù),因此,本實施提供的存儲的處理方法,不需要維護人員對存儲設(shè)備中的故障硬盤進(jìn)行更換,因此,有效節(jié)省了維護成本和硬件成本。
[0056]本實施例提供的存儲的處理方法,硬盤固定在存儲設(shè)備的內(nèi)部,當(dāng)多個硬盤中的第一硬盤發(fā)生故障時,確定發(fā)生故障的分塊為第一分塊,并在存儲設(shè)備的冗余容量池中獲取第二分塊,重構(gòu)第一分塊中的數(shù)據(jù),并將數(shù)據(jù)存儲到第二分塊中。本發(fā)明實施例中由于將硬盤的零散容量作為存儲設(shè)備的冗余容量池,當(dāng)硬盤發(fā)生故障時,只需要在冗余容量池中獲取與發(fā)生故障的分塊的容量大小相對的應(yīng)第二分塊,并將重構(gòu)數(shù)據(jù)存儲到第二分塊中,有效利用了硬盤的零散容量對存儲設(shè)備進(jìn)行擴容,因此,不需要維護人員對存儲設(shè)備中的故障硬盤進(jìn)行更換,有效節(jié)省了維護成本和硬件成本。
[0057]圖6為本發(fā)明實施例二提供的存儲的處理方法流程圖。如圖6所示,該方法包括:
[0058]步驟201、將多個硬盤的整數(shù)容量的所有分塊,劃分為M個分塊組,并為每個分塊組分配一個邏輯單元號LUN。
[0059]其中,M為正整數(shù),且M彡N。
[0060]在本實施例中,將存儲設(shè)備中不同的硬盤的整數(shù)容量的分塊進(jìn)行劃分,以組成分塊組,即每個分塊組中包括了不同硬盤中的分塊,并為每個分塊組分配一個邏輯單元號(Logical Unit Number,簡稱LUN),以便于對分塊組進(jìn)行管理。
[0061]步驟202、當(dāng)存儲設(shè)備中的第一硬盤發(fā)生故障時,確定發(fā)生故障的分塊為第一分塊。
[0062]步驟203、在存儲設(shè)備的冗余容量池中獲取第二分塊。
[0063]其中,第二分塊的容量不小于第一分塊的容量,冗余容量池包括多個硬盤的零散容量。
[0064]在本實施例中,步驟202和步驟203分別和上述實施例一種的步驟101和步驟102的實現(xiàn)原理相同,此處不再贅述。
[0065]步驟204、建立邏輯區(qū)塊地址(Logical Block Address,簡稱LBA)映射表。
[0066]其中,LBA映射表用于存儲所述第一分塊的LBA與所述第二分塊的LBA之間的映射關(guān)系。
[0067]在本實施例中,每一個分塊中包括至少一個邏輯區(qū)塊,每一個邏輯區(qū)塊對應(yīng)一個LBA,則每一個分塊的LBA即為該分塊包括的邏輯區(qū)塊的LBA,因此,每一個分塊可能對應(yīng)一個LBA,可能對應(yīng)多個LBA。當(dāng)從冗余容量池中獲取到第二分塊之后,需要建立第一分塊的LBA和第二分塊的LBA之間的映射關(guān)系,并將該映射關(guān)系存儲到LBA映射表中。當(dāng)下一次訪問到該發(fā)生故障的分塊時,可以根據(jù)第一分塊的LBA和第二分塊的LBA之間的映射關(guān)系,從LBA映射表中查找到第二分塊的LBA,并在第二分塊中訪問數(shù)據(jù)。
[0068]步驟205、根據(jù)分塊組的LUN,重構(gòu)第一分塊中的數(shù)據(jù),并將數(shù)據(jù)存儲到第二分塊中。
[0069]在本實施例中,根據(jù)分塊組的LUN,對個分塊組進(jìn)行邏輯運算,以重構(gòu)第一分塊中的數(shù)據(jù),并將重構(gòu)數(shù)據(jù)存儲到第二分塊中。
[0070]具體的,可采用RAID2.0技術(shù)重構(gòu)數(shù)據(jù),將硬盤的整數(shù)容量先按照固定的容量切割成多個分塊(Chunk,通常為64MB),并將這些小分塊進(jìn)行分組已形成不同RAID類型的分塊組(Chunk Group),每個分塊組對應(yīng)一個LUN,且每個分塊組中包括不同硬盤的整數(shù)容量中的分塊。當(dāng)存儲設(shè)備中的某一個硬盤發(fā)生故障后,查找到故障分塊所在的分塊組,即可根據(jù)LUN來查找第一分塊所在的分塊組,在該分塊組中的各分塊之間進(jìn)行邏輯運算,對發(fā)生故障的分塊進(jìn)行重構(gòu),從而大大降低重構(gòu)時間,減少重構(gòu)整個硬盤數(shù)據(jù)使得重構(gòu)窗口擴大而導(dǎo)致的數(shù)據(jù)丟失風(fēng)險,在硬盤容量大幅增加的同時確保存儲系統(tǒng)的性能和可靠性。
[0071]可選地,在本實施例中,分別采用主容量管理表和冗余容量管理表對主存儲容量池和冗余容量池進(jìn)行管理。當(dāng)從冗余容量池中獲取第二數(shù)據(jù)塊之后,將主容量管理表中的第一數(shù)據(jù)塊的LBA映射到第二數(shù)據(jù)塊的LBA,即步驟205,建立LBA映射表的過程。并且,在將數(shù)據(jù)存儲到第二分塊中之后,還需要在冗余容量管理表中將第二數(shù)據(jù)塊的LBA刪除,以防止下一次硬盤故障時,將故障分塊的LBA映射到該第二數(shù)據(jù)塊的LBA。
[0072]本實施例提供的存儲的處理方法,將多個硬盤的整數(shù)容量的分塊,劃分為M個分塊組,并為每個分塊組分配一個邏輯單元號LUN,當(dāng)存儲設(shè)備中的第一硬盤發(fā)生故障時,確定發(fā)生故障的分塊為第一分塊,在冗余容量池中獲取第二分塊,并建立LBA映射表,根據(jù)分塊組的LUN,重構(gòu)第一分塊中的數(shù)據(jù),并將數(shù)據(jù)存儲到第二分塊中。本實施例中,有效利用了硬盤的零散容量對存儲設(shè)備進(jìn)行擴容