專利名稱:一種網(wǎng)絡(luò)存儲系統(tǒng)的管理方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及網(wǎng)絡(luò)存儲技術(shù),尤其涉及一種網(wǎng)絡(luò)存儲系統(tǒng)RAID陣列資源塊管理技術(shù)。
背景技術(shù):
在涉及眾多主機的數(shù)據(jù)存儲的網(wǎng)絡(luò)環(huán)境中,為了提高數(shù)據(jù)存儲的可靠性和安全性,同時為了存儲容量的擴展性和靈活性,網(wǎng)絡(luò)存儲技術(shù)應(yīng)運而生。通常來說,網(wǎng)絡(luò)存儲系統(tǒng)的作用是為客戶端PC機或者服務(wù)器(一般統(tǒng)稱為主機或Host)提供可用的存儲空間。一般網(wǎng)絡(luò)存儲系統(tǒng)的前端可以通過IP網(wǎng)絡(luò)或者FC網(wǎng)絡(luò)與主機相連,為主機提供數(shù)據(jù)存儲服務(wù)。在數(shù)據(jù)傳輸方面,以基于IP承載的網(wǎng)絡(luò)存儲系統(tǒng)為例,主機可以基于標(biāo)準(zhǔn)的iSCSI(互聯(lián)網(wǎng)小型計算機系統(tǒng)接口)協(xié)議網(wǎng)絡(luò)存儲系統(tǒng)進行數(shù)據(jù)的讀寫操作。網(wǎng)絡(luò)存儲系統(tǒng)的核心是存儲控制器(Storage Controller),存儲控制器進行數(shù)據(jù)處理并把數(shù)據(jù)寫入到后端物理磁盤中。為提高寫物理磁盤的性能以及提供數(shù)據(jù)冗余性,存儲控制器通常支持獨立磁盤冗余陣列(RAID,也可稱為RAID陣列)技術(shù),RAID技術(shù)是一種把多塊獨立的物理磁盤按不同的方式組合起來形成一個磁盤組,從而提供比單個磁盤更高的存儲性能,并提供數(shù)據(jù)備份技術(shù)。根據(jù)不同的數(shù)據(jù)組織方式,常用的RAID包括RAID0、RAID1、RAID5、RAID6、RAID10等。 根據(jù)RAID級別的不同可以提供各種級別的性能和可靠度,可以保證多數(shù)情況下,一個或者多個磁盤故障時可以通過剩余成員磁盤中的數(shù)據(jù)采用RAID級別對應(yīng)的算法恢復(fù)出錯磁盤的數(shù)據(jù),即保證數(shù)據(jù)不丟失。通過這種算法可重構(gòu)故障盤中的數(shù)據(jù)并寫入到熱備盤中,重構(gòu)完成后熱備盤做成陣列的成員磁盤,恢復(fù)陣列的冗余性和可靠性,即通常所說的RAID陣列重建。在現(xiàn)有實現(xiàn)機制下,RAID成員磁盤健康狀態(tài)一般包括兩種正常磁盤未發(fā)生IO 讀寫錯誤;故障磁盤發(fā)生了 IO讀寫錯誤,出錯扇區(qū)上的數(shù)據(jù)不能再被訪問。RAID健康狀態(tài)定義如下正常RAID的所有成員磁盤都正常,RAID可以正常讀寫,RAID具有完整的數(shù)據(jù)冗余性和可靠性;降級RAID的一個或多個成員磁盤故障,采用RAID級別對應(yīng)的算法可以通過剩余成員磁盤上的數(shù)據(jù)重構(gòu)出出錯磁盤的數(shù)據(jù),RAID可以正常讀寫,但是不能提供完整的數(shù)據(jù)冗余性和可靠性;故障RAID的一個或多個成員磁盤故障,采用RAID級別對應(yīng)的算法無法恢復(fù)出錯磁盤上的數(shù)據(jù),故障狀態(tài)的RAID直接離線,其上數(shù)據(jù)不能再被訪問。存儲控制器收到原健康狀態(tài)是“正?!钡腞AID的成員磁盤故障事件后,RAID把出錯磁盤踢出陣列,如果采用RAID級別對應(yīng)的算法可以通過剩余成員磁盤上的數(shù)據(jù)重構(gòu)出出錯磁盤的數(shù)據(jù),RAID健康狀態(tài)變?yōu)榻导?,然后觸發(fā)重建,使用熱備盤重構(gòu)出錯磁盤的數(shù)據(jù)。如果沒有可用的熱備盤,RAID —直是降級狀態(tài),等待熱備盤插入。如果采用RAID級別對應(yīng)的算法不能通過剩余成員磁盤上的數(shù)據(jù)重構(gòu)出出錯磁盤的數(shù)據(jù),RAID健康狀態(tài)變?yōu)楣收希琑AID直接離線,其上數(shù)據(jù)不能再被訪問。請參考圖1,圖1中的RAID的級別為RAID5、成員磁盤數(shù)目為4,分別是Diskl到 Disk4。D1、D2、D3、P1組成第一個條帶,其中D1、D2、D3是數(shù)據(jù),Pl是這個條帶上根據(jù)RAID5 算法計算出來的校驗數(shù)據(jù),下面的條帶類似,D表示數(shù)據(jù),P表示校驗數(shù)據(jù)。RAID5算法可以保證,1個條帶上1個磁盤發(fā)生介質(zhì)錯誤,可以通過該條帶上剩余成員磁盤的數(shù)據(jù)重構(gòu)出出錯磁盤的數(shù)據(jù)。如圖1所示,假設(shè)健康狀態(tài)是正常的RAID的條帶 2上,Disk4的D6區(qū)域發(fā)生磁盤IO讀寫錯誤,無法再訪問,按照通常的做法,RAID健康狀態(tài)變?yōu)榻导?,把Disk4從RAID中踢出,然后找可用的熱備盤進行重建。 然而出錯磁盤踢出陣列后,雖然通過重建可恢復(fù)RAID的冗余性,但是無法解決非同一條帶的多塊磁盤在短時間內(nèi)故障導(dǎo)致數(shù)據(jù)丟失的問題。進一步來說,一種常見的情況是如果網(wǎng)絡(luò)存儲系統(tǒng)中沒有符合要求的熱備盤,比如沒有配置熱備盤,或者熱備盤類型、 容量等不滿足上述RAID重建的要求等,此時,RAID 一直處于等待重建的狀態(tài),不具備完整的冗余性,如果RAID中其他成員磁盤上也發(fā)生了磁盤IO讀寫錯誤,采用RAID級別對應(yīng)的算法不能通過剩余成員磁盤上的數(shù)據(jù)重構(gòu)出該出錯磁盤的數(shù)據(jù),RAID健康狀態(tài)變?yōu)楣收希?RAID離線,無法再進行讀寫。比如RAID5可容忍一塊磁盤故障,即,RAID5的一塊成員磁盤發(fā)生介質(zhì)錯誤,RAID5狀態(tài)變?yōu)榻导壊⑻弑P,再有一塊成員磁盤發(fā)生介質(zhì)錯誤,RAID5狀態(tài)變?yōu)楣收?,不能再被訪問。比如圖2中Disk4被踢出RAID后,條帶5上Disk3的D15區(qū)域也發(fā)生了磁盤IO讀寫錯誤,無法再訪問。因為此時RAID5是非冗余狀態(tài),條帶5的數(shù)據(jù)丟失,不能再恢復(fù),因此RAID狀態(tài)變?yōu)楣收希荒茉俦辉L問。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明提供一種新網(wǎng)絡(luò)存儲系統(tǒng)的資源管理方法及裝置以解決現(xiàn)有技術(shù)存在的問題。所述網(wǎng)絡(luò)存儲系統(tǒng)管理裝置,用于執(zhí)行網(wǎng)絡(luò)存儲系統(tǒng)內(nèi)的資源管理操作,其中網(wǎng)絡(luò)存儲系統(tǒng)包括存儲控制器以及多塊磁盤,所述存儲控制器的前端端口通過網(wǎng)絡(luò)連接主機,所述存儲控制器的后端磁盤端口與所述磁盤相連;該管理裝置包括資源管理單元,用于使用所述磁盤創(chuàng)建RAID,并把該RAID的可用空間根據(jù)指定長度劃分為多個資源塊,并創(chuàng)建該RAID對應(yīng)的塊表用于記錄資源塊是否已被分配使用;其中該資源管理單元進一步用于在創(chuàng)建邏輯資源時為邏輯資源分配至少一個資源塊并更新相應(yīng)的塊表,并創(chuàng)建該邏輯資源的索引區(qū),其中所述邏輯資源索引區(qū)用于記錄該邏輯資源的邏輯空間與其自身分配到的RAID資源塊的物理空間的對應(yīng)關(guān)系;狀態(tài)維護單元,用于創(chuàng)建資源塊狀態(tài)表以維護RAID資源塊的狀態(tài);并在接收到磁盤IO讀寫錯誤事件時根據(jù)磁盤IO讀寫錯誤事件確定讀寫錯誤事件所影響的資源塊,然后根據(jù)發(fā)生IO讀寫錯誤的磁盤編號以及RAID級別確定資源塊的新狀態(tài)并在資源塊狀態(tài)表中更新該資源塊的記錄;其中所述資源塊的狀態(tài)包括正常狀態(tài)、降級狀態(tài)以及故障狀態(tài);所述資源塊狀態(tài)表包括資源塊編號、資源塊狀態(tài)以及發(fā)生IO讀寫錯誤的磁盤編號;讀寫輔助單元,用于根據(jù)索引區(qū)的記錄確定主機的IO讀寫請求訪問的邏輯資源地址對應(yīng)的資源塊,并根據(jù)狀態(tài)維護單元記錄的該資源塊的狀態(tài)按照預(yù)定策略響應(yīng)主機的讀寫操作。
優(yōu)選地,其中所述預(yù)定策 略包括如果該資源塊是正常狀態(tài),則透明處理;如果該資源塊是故障狀態(tài),如果訪問該資源塊所屬區(qū)域上發(fā)生IO讀寫錯誤的磁盤,則返回讀寫錯誤,如果訪問該資源塊所屬區(qū)域上未發(fā)生IO讀寫錯誤的磁盤,則按照正常讀寫操作處理; 如果訪問的資源塊是降級狀態(tài),對于訪問資源塊狀態(tài)表中記錄的發(fā)生IO讀寫錯誤的磁盤的數(shù)據(jù),根據(jù)相應(yīng)的RAID校驗算法進行讀寫處理,如果訪問該資源塊所屬區(qū)域上未發(fā)生IO 讀寫錯誤的磁盤,則按照正常讀寫操作處理。優(yōu)選地,所述狀態(tài)維護單元,進一步用于維護RAID的總體狀態(tài),其中所述RAID總體狀態(tài)包括正常狀態(tài)、降級狀態(tài)以及故障狀態(tài),其中該狀態(tài)維護單元進一步用于在RAID總體狀態(tài)為降級狀態(tài)時通知重建單元進行RAID重建。優(yōu)選地,還包括重建單元,用于在RAID降級之后對RAID陣列進行重建,并在重建完成后將該發(fā)生IO讀寫錯誤的磁盤踢出RAID陣列,并通知所述狀態(tài)維護單元RAID重建完成事件;其中所述狀態(tài)維護單元在接收到RAID重建完成事件后,根據(jù)RAID成員磁盤的當(dāng)前狀態(tài)以及RAID級別確定該資源塊的新狀態(tài),并更新所述資源塊狀態(tài)表。優(yōu)選地,其中所述多個資源塊大小相同。優(yōu)選地,其中所述資源塊狀態(tài)表中僅記錄非正常狀態(tài)的資源塊。本發(fā)明提供的網(wǎng)絡(luò)存儲系統(tǒng)管理方法,其用于執(zhí)行網(wǎng)絡(luò)存儲系統(tǒng)內(nèi)的資源管理操作,其中網(wǎng)絡(luò)存儲系統(tǒng)包括存儲控制器以及多塊磁盤,所述存儲控制器的前端端口通過網(wǎng)絡(luò)連接主機,所述存儲控制器的后端磁盤端口與所述磁盤相連;該方法包括A、使用所述磁盤創(chuàng)建RAID,并把該RAID的可用空間根據(jù)指定長度劃分為多個資源塊,并創(chuàng)建該RAID對應(yīng)的塊表用于記錄資源塊是否已被分配使用;B、創(chuàng)建邏輯資源時為邏輯資源分配至少一個資源塊并更新相應(yīng)的塊表,并創(chuàng)建該邏輯資源的索引區(qū),其中所述邏輯資源索引區(qū)用于記錄該邏輯資源的邏輯空間與其自身分配到的RAID資源塊的物理空間的對應(yīng)關(guān)系;C、創(chuàng)建資源塊狀態(tài)表以維護RAID資源塊的狀態(tài);并在接收到磁盤IO讀寫錯誤事件時根據(jù)磁盤IO讀寫錯誤事件確定讀寫錯誤事件所影響的資源塊,然后根據(jù)發(fā)生IO讀寫錯誤的磁盤編號以及RAID級別確定資源塊的新狀態(tài)并在資源塊狀態(tài)表中更新該資源塊的記錄;其中所述資源塊的狀態(tài)包括正常狀態(tài)以及故障狀態(tài);所述資源塊狀態(tài)表包括資源塊編號、資源塊狀態(tài)以及發(fā)生IO讀寫錯誤的磁盤編號;D、根據(jù)索引區(qū)的記錄確定主機的IO讀寫請求訪問的邏輯資源地址對應(yīng)的資源塊,并根據(jù)狀態(tài)維護單元記錄的該資源塊的狀態(tài)按照預(yù)定策略響應(yīng)主機的讀寫操作。優(yōu)選地,其中所述預(yù)定策略包括如果該資源塊是正常狀態(tài),則透明處理;如果該資源塊是故障狀態(tài),如果訪問該資源塊所屬區(qū)域上發(fā)生IO讀寫錯誤的磁盤,則返回讀寫錯誤,如果訪問該資源塊所屬區(qū)域上未發(fā)生IO讀寫錯誤的磁盤,則按照正常讀寫操作處理; 如果訪問的資源塊是降級狀態(tài),對于讀寫資源塊狀態(tài)表中記錄的發(fā)生IO讀寫錯誤的磁盤的數(shù)據(jù),根據(jù)相應(yīng)的RAID校驗算法進行讀寫處理,如果訪問該資源塊所屬區(qū)域上未發(fā)生IO 讀寫錯誤的磁盤,則按照正常讀寫操作處理。優(yōu)選地,進一步包括E、維護RAID的總體狀態(tài),其中所述RAID總體狀態(tài)包括正常狀態(tài)、降級狀態(tài)以及故障狀態(tài),并在在RAID總體狀態(tài)為降級狀態(tài)時通知重建單元進行RAID重建。優(yōu)選地,還包括F、在RAID降級之后對RAID陣列進行重建,并在重建完成后將該發(fā)生IO讀寫錯誤的磁盤踢出RAID陣列,并RAID重建完成后根據(jù)RAID成員磁盤的當(dāng)前狀態(tài)以及RAID級別確定該資源塊的新狀態(tài),更新所述資源塊狀態(tài)表。優(yōu)選地,其中所述多個資源塊大小相同。 優(yōu)選地,其中所述資源塊狀態(tài)表中僅記錄非正常狀態(tài)的資源塊。
圖1是一種RAID陣列中磁盤發(fā)生介質(zhì)錯誤示意圖。圖2是另一種RAID陣列中磁盤發(fā)生介質(zhì)錯誤示意圖。圖3是本發(fā)明網(wǎng)絡(luò)存儲系統(tǒng)管理裝置邏輯層次圖。圖4是本發(fā)明網(wǎng)絡(luò)存儲系統(tǒng)管理裝置邏輯結(jié)構(gòu)圖。圖5是本發(fā)明記錄資源塊分配使用情況的塊表示意圖。圖6是本發(fā)明為邏輯資源分配資源塊示意圖。圖7是一種本發(fā)明磁盤發(fā)生介質(zhì)錯誤對應(yīng)資源塊的示意圖。圖8是另一種本發(fā)明磁盤發(fā)生介質(zhì)錯誤對應(yīng)資源塊的示意圖。圖9是又一種本發(fā)明磁盤發(fā)生介質(zhì)錯誤對應(yīng)資源塊的示意圖。
具體實施例方式通常網(wǎng)絡(luò)存儲系統(tǒng)為方便主機的數(shù)據(jù)讀寫,為了對主機屏蔽存儲資源物理上的差異,可以通過虛擬化技術(shù)對物理存儲資源進行抽象,在物理層面以上(在本發(fā)明中是指 RAID以上)形成面向用戶主機的邏輯資源,并且相應(yīng)生成邏輯資源地址映射表,以記錄邏輯地址與物理地址的映射關(guān)系。請參考圖3的邏輯層次圖,本發(fā)明在邏輯資源層與物理層之間引入資源塊管理層。以下結(jié)合其他附圖進一步介紹本發(fā)明的詳細實施方式。請參考圖3以及圖4,本發(fā)明網(wǎng)絡(luò)存儲系統(tǒng)管理裝置本發(fā)明管理裝置10主要用于執(zhí)行網(wǎng)絡(luò)存儲系統(tǒng)內(nèi)的資源管理操作,其中網(wǎng)絡(luò)存儲系統(tǒng)包括存儲控制器以及多塊磁盤, 所述存儲控制器的前端端口通過網(wǎng)絡(luò)連接主機,所述存儲控制器的后端磁盤端口與所述磁盤相連,一般來說存儲控制器是一個較為完善的計算機系統(tǒng),其包括CPU與內(nèi)存等基本硬件以及操作系統(tǒng)等底層軟件。以計算機軟件實現(xiàn)本發(fā)明為例,從邏輯層面看,前述的管理裝置10包括資源管理單元11、讀寫輔助單元12、狀態(tài)維護單元13以及重建單元14。該管理裝置在網(wǎng)絡(luò)存儲系統(tǒng)中運行,結(jié)合網(wǎng)絡(luò)存儲系統(tǒng)其他模塊一并運行時,主要包括以下步驟步驟101,在網(wǎng)絡(luò)存儲系統(tǒng)中利用所述磁盤創(chuàng)建RAID陣列;并把所述RAID的可用存儲空間根據(jù)指定大小劃分為多個資源塊,其中資源塊大小可以是用戶通過資源管理單元配置的,各個RAID的資源塊的大小可以相同也可以不同,這取決對管理開銷的容忍度。把RAID的可用空間劃分為多個資源塊的同時創(chuàng)建RAID的塊表,每個資源塊和資源分配相關(guān)的特性是已使用和未使用(即空閑),因此塊表實現(xiàn)上可以使用bitmap表,bit 設(shè)置為1表示對應(yīng)的塊已使用,一方面可提高檢索效率,另一方面可節(jié)省塊表占用的空間。請參考圖5,比如將一個64GB的第一 RAID陣列(arrayl)按照IGB的塊大小劃分為64塊, arrayl的塊表僅需要8個字節(jié)的空間,塊表中bit位為1的表示對應(yīng)的資源塊已使用,為O 則表示對應(yīng)的資源塊未使用。再比如將一個32GB的第二 RAID陣列(array2)按照512M的塊大小劃分為64塊,第二 RAID陣列的塊表同樣也需要8個字節(jié)的空間,塊表中bit位為1 的表示對應(yīng)的資源塊已使用,為O則表示對應(yīng)的資源塊未使用。進一步來說,如果所述指定長度是多個不同的長度,此時可以進一步在塊表中記錄塊的大小,這樣可以滿足其他管理操作的需求,比如數(shù)據(jù)遷移等等,但這與本發(fā)明主題并不是緊密相關(guān)的,不再進一步討論。步驟102,創(chuàng)建邏輯資源(LUN)時為LUN分配至少一個資源塊,并在邏輯資源占用的RAID陣列的塊表中將分配給該邏輯資源的資源塊標(biāo)記更新為已使用狀態(tài);
步驟103,創(chuàng)建邏輯資源時為該邏輯資源建立索引區(qū)以記錄邏輯資源線性邏輯空間與其自身分配到的RAID資源塊物理空間的對應(yīng)關(guān)系;步驟101、步驟102以及步驟103由資源管理單元11執(zhí)行。在創(chuàng)建邏輯資源時需要在預(yù)先設(shè)定的索引區(qū)記錄邏輯資源對應(yīng)到哪些資源塊。請參考圖6,索引區(qū)中的前四行記錄了第一 RAID陣列的哪些資源塊被分配給了 LUN1,以索引標(biāo)記A0B10為例,其表示arrayl的第十個資源塊,即塊表中第二行從左到右第二個位置所表示的資源塊。雖然圖6所示的情形是LUm對應(yīng)的所有資源塊都在一個RAID陣列中。很容易理解的是,LUNl對應(yīng)的資源塊可以分布在不同的RAID陣列中。如果分配了其他RAID 陣列的資源塊的話,則需要在索引區(qū)中進行同樣的記錄。 步驟104,創(chuàng)建RAID時為該RAID創(chuàng)建資源塊狀態(tài)表,用于記錄該RAID中各個資源塊的狀態(tài)。步驟105,當(dāng)磁盤發(fā)生IO讀寫錯誤時,收到磁盤返回的讀寫錯誤事件,確定發(fā)生讀寫錯誤的資源塊,根據(jù)發(fā)生IO讀寫錯誤的磁盤編號以及RAID級別判斷資源塊的新狀態(tài),并在預(yù)設(shè)的資源塊狀態(tài)表中更新該資源塊的記錄。其中所述資源塊的狀態(tài)通常包括正常狀態(tài)、降級狀態(tài)以及故障狀態(tài)。步驟104以及步驟105由狀態(tài)維護單元13執(zhí)行。資源塊的各個狀態(tài)定義如下 所述正常狀態(tài)表示該資源塊所屬的磁盤區(qū)域上沒有發(fā)生IO讀寫錯誤事件; 所述降級狀態(tài)表示該資源塊所屬的磁盤區(qū)域上發(fā)生了 IO讀寫錯誤事件,采用 RAID級別對應(yīng)的算法可以通過剩余成員磁盤上的數(shù)據(jù)重構(gòu)出出錯磁盤的數(shù)據(jù); 所述故障狀態(tài)表示該資源塊所屬的磁盤區(qū)域上發(fā)生了 IO讀寫錯誤事件,采用 RAID級別對應(yīng)的算法不能通過剩余成員磁盤上的數(shù)據(jù)重構(gòu)出出錯磁盤的數(shù)據(jù),發(fā)生IO讀寫錯誤事件的磁盤上的數(shù)據(jù)無法讀寫;其中所述資源塊狀態(tài)表包括資源塊編號、資源塊狀態(tài)以及發(fā)生IO讀寫錯誤的磁盤編號。狀態(tài)維護單元根據(jù)資源塊的狀態(tài)進一步維護RAID總體狀態(tài),RAID總體狀態(tài)通常包括正常狀態(tài)、降級狀態(tài)以及故障狀態(tài),所述正常狀態(tài)表示該RAID的所有資源塊的狀態(tài)都是正常,所述降級狀態(tài)表示該RAID上有一個或多個資源塊的狀態(tài)是降級;所述故障狀態(tài)表示該RAID上有一個或多個資源塊的狀態(tài)是故障。一般來說,在RAID總體狀態(tài)為降級狀態(tài)時狀態(tài)維護單元需要通知重建單元進行RAID重建。在現(xiàn)有的技術(shù)中一旦某個磁盤發(fā)生了磁盤IO讀寫錯誤,通常都是將該磁盤踢出 RAID陣列,等待重建過程的開始。而本發(fā)明則相反,不會立刻執(zhí)行磁盤踢出操作,而是暫時不執(zhí)行踢出操作以達到臨時保持該磁盤的成員磁盤地位的目的,直到重建完成為止。所謂的臨時并不是指一個非常短暫的時間,這是相對于重建完成而言的。如果系統(tǒng)缺乏熱備盤或者管理員并不打算使能RAID陣列的重建或者管理員手動停止了 RAID陣列重建,這一臨時保持將持續(xù)相當(dāng)長的時間。如果陣列開始重建,則在本發(fā)明中踢出出錯磁盤的操作將由 RAID重建單元觸發(fā)執(zhí)行,當(dāng)陣列重建完成的時候,把該出錯磁盤從RAID陣列中踢出,并將 RAID重建完成事件報告給狀態(tài)維護單元。本發(fā)明中,存儲控制器對Host的IO讀寫請求的處理過程如下假設(shè)在初始情況下所有資源塊數(shù)據(jù)都是具有完整的冗余性,處于正常狀態(tài),Host訪問邏輯資源的數(shù)據(jù)時, 根據(jù)本次IO請求訪問的地址以及邏輯資源索引區(qū)中的記錄,存儲控制器把IO請求發(fā)送到對應(yīng)的資源塊,RAID模塊根據(jù)RAID級別對應(yīng)的算法把IO請求轉(zhuǎn)換為對磁盤的讀寫命令。為便于描述,我們把發(fā)送到對應(yīng)資源塊的IO請求稱為父命令,把發(fā)送到磁盤的讀寫命令稱為子命令,父命令和子命令存在關(guān)聯(lián)關(guān)系,一個父命令可能對應(yīng)一個或多個子命令。磁盤收到子命令(即讀寫命令)后,進行相應(yīng)的處理,并返回命令執(zhí)行結(jié)果給RAID,即命令執(zhí)行成功或者失敗。如果命令執(zhí)行失敗,即磁盤上發(fā)生了 IO讀寫錯誤,RAID收到磁盤IO讀寫錯誤事件后,根據(jù)RAID算法對IO讀寫錯誤進行處理,并把命令執(zhí)行結(jié)果返回給邏輯資源,邏輯資源再返回命令執(zhí)行結(jié)果給主機,這里的RAID對IO讀寫錯誤的處理算法和過程是常見的處理方式,本發(fā)明不再逐一詳述。在本發(fā)明中,RAID收到磁盤IO讀寫錯誤事件時,根據(jù)子命令對應(yīng)的父命令找到磁盤IO讀寫錯誤事件對應(yīng)的資源塊,然后把磁盤IO讀寫錯誤事件報告給狀態(tài)維護單元,由狀態(tài)維護單元更新RAID的資源塊狀態(tài)表中對應(yīng)的資源塊的記錄。下面開始詳述更新的過程在本發(fā)明的一種比較通用的實施方式中,資源塊的狀態(tài)包括三種正常狀態(tài)、降級狀態(tài)以及故障狀態(tài)。進一步來說,考慮到大部分的資源塊均是正常狀態(tài),為了減少記錄的信息量,提高檢索效率,因此RAID的資源塊狀態(tài)表中可以僅記錄降級狀態(tài)和故障狀態(tài)的資源塊。在初始情況下所有資源塊狀態(tài)都是正常的,RAID的資源塊狀態(tài)表為空,沒有任何記錄。狀態(tài)維護單元收到RAID上報的磁盤IO讀寫錯誤事件,所述磁盤IO讀寫錯誤事件通常包括發(fā)生IO讀寫錯誤的磁盤編號以及對應(yīng)的資源塊編號;狀態(tài)維護單元根據(jù)發(fā)生 IO讀寫錯誤的磁盤編號以及RAID級別確定資源塊的新狀態(tài),即,如果采用RAID級別對應(yīng)的算法可以通過剩余成員磁盤上的數(shù)據(jù)重構(gòu)出出錯磁盤的數(shù)據(jù),資源塊的新狀態(tài)為降級狀態(tài);如果采用RAID級別對應(yīng)的算法不能通過剩余成員磁盤上的數(shù)據(jù)重構(gòu)出出錯磁盤的數(shù)據(jù),資源塊的新狀態(tài)為故障狀態(tài);狀態(tài)維護單元判斷資源塊的原狀態(tài)和新狀態(tài)是否相同,如果不同,在RAID的資源塊狀態(tài)表中更新對應(yīng)的資源塊的記錄。如果資源塊的原狀態(tài)是正常,新狀態(tài)是降級,在資源塊狀態(tài)表中增加一項記錄,對應(yīng)該降級的資源塊;如果資源塊的原狀態(tài)是正常,新狀態(tài)是故障,在資源塊狀態(tài)表中增加一項記錄,對應(yīng)該故障的資源塊。資源塊狀態(tài)表中每一項記錄通常包含資源塊編號、資源塊狀態(tài)以及發(fā)生IO讀寫錯誤的磁盤編號,“發(fā)生IO讀寫錯誤的磁盤編號”對應(yīng)一個或多個磁
O對于資源塊所屬磁盤區(qū)域上多次發(fā)生磁盤讀寫錯誤,如果資源塊原狀態(tài)是降級, 新狀態(tài)還是降級,更新資源塊狀態(tài)表中該資源塊對應(yīng)的記錄中“發(fā)生IO讀寫錯誤的磁盤編號”,增加本次發(fā)生IO讀寫錯誤的磁盤編號;如果資源塊原狀態(tài)是降級,新狀態(tài)是故障,更新資源塊狀態(tài)表中該資源塊對應(yīng)的記錄中“資源塊狀態(tài)”為故障,并更新“發(fā)生IO讀寫錯誤的磁盤編號”,增加本次發(fā)生IO讀寫錯誤的磁盤編號。以RAID5為例,如果本次磁盤IO讀寫錯誤與上一次磁盤IO讀寫錯誤發(fā)生在不同磁盤上,且對應(yīng)不同的資源塊,則兩個資源塊上都有磁盤不能訪問,但是采用RAID算法可以通過該資源塊上其他磁盤的數(shù)據(jù)恢復(fù)出錯磁盤的數(shù)據(jù),因此上述兩個資源塊狀態(tài)都是降級,僅喪失了冗余性。如果本次磁盤IO讀寫錯誤與上一次磁盤IO讀寫錯誤發(fā)生在不同的磁盤上,且對應(yīng)同一個資源塊,即同一個資源塊上有兩塊磁盤不能訪問,采用RAID5算法無法再恢復(fù)出錯磁盤的數(shù)據(jù),因此該資源塊狀態(tài)是故障,該資源塊上出錯磁盤的數(shù)據(jù)丟失。請參考圖7至圖9所示的一系列狀態(tài)維護的示例。其中磁盤Dl D4四塊磁盤組成的RAID5陣列,根據(jù)指定長度劃分為64個資源塊,所有資源塊的狀態(tài)均為正常。某一時亥IJ,磁盤Dl上發(fā)生了磁盤IO讀寫錯誤,對應(yīng)資源塊1,狀態(tài)維護單元根據(jù)RAID級別以及剩余成員磁盤的狀態(tài)確定資源塊1變?yōu)榻导墵顟B(tài),更新資源塊狀態(tài)表(如表1),增加資源塊1 對應(yīng)的記錄;RAID總體狀態(tài)變?yōu)榻导?。此時Dl不會從陣列中踢出,成員磁盤地位還會臨時保持,RAID通知重建單元RAID降級事件,重建單元觸發(fā)重建。
權(quán)利要求
1.一種網(wǎng)絡(luò)存儲系統(tǒng)的管理裝置,用于執(zhí)行網(wǎng)絡(luò)存儲系統(tǒng)內(nèi)的資源管理操作,其中網(wǎng)絡(luò)存儲系統(tǒng)包括存儲控制器以及多塊磁盤,所述存儲控制器的前端端口通過網(wǎng)絡(luò)連接主機,所述存儲控制器的后端磁盤端口與所述磁盤相連;該管理裝置包括資源管理單元,用于使用所述磁盤創(chuàng)建RAID,并把該RAID的可用空間根據(jù)指定長度劃分為多個資源塊,并創(chuàng)建該RAID對應(yīng)的塊表用于記錄資源塊是否已被分配使用;其中該資源管理單元進一步用于在創(chuàng)建邏輯資源時為邏輯資源分配至少一個資源塊并更新相應(yīng)的塊表,并創(chuàng)建該邏輯資源的索引區(qū),其中所述邏輯資源索引區(qū)用于記錄該邏輯資源的邏輯空間與其自身分配到的RAID資源塊的物理空間的對應(yīng)關(guān)系;狀態(tài)維護單元,用于創(chuàng)建資源塊狀態(tài)表以維護RAID資源塊的狀態(tài);并在接收到磁盤IO 讀寫錯誤事件時根據(jù)磁盤IO讀寫錯誤事件確定讀寫錯誤事件所影響的資源塊,然后根據(jù)發(fā)生IO讀寫錯誤的磁盤編號以及RAID級別確定資源塊的新狀態(tài)并在資源塊狀態(tài)表中更新該資源塊的記錄;其中所述資源塊的狀態(tài)包括正常狀態(tài)、降級狀態(tài)以及故障狀態(tài);所述資源塊狀態(tài)表包括資源塊編號、資源塊狀態(tài)以及發(fā)生IO讀寫錯誤的磁盤編號;讀寫輔助單元,用于根據(jù)索引區(qū)的記錄確定主機的IO讀寫請求訪問的邏輯資源地址對應(yīng)的資源塊,并根據(jù)狀態(tài)維護單元記錄的該資源塊的狀態(tài)按照預(yù)定策略響應(yīng)主機的讀寫操作。
2.根據(jù)權(quán)利要求1所述的管理裝置,其中所述預(yù)定策略包括如果該資源塊是正常狀態(tài),則透明處理;如果該資源塊是故障狀態(tài),如果訪問該資源塊所屬區(qū)域上發(fā)生IO讀寫錯誤的磁盤,則返回讀寫錯誤,如果訪問該資源塊所屬區(qū)域上未發(fā)生IO讀寫錯誤的磁盤,則按照正常讀寫操作處理;如果訪問的資源塊是降級狀態(tài),對于訪問資源塊狀態(tài)表中記錄的發(fā)生IO讀寫錯誤的磁盤的數(shù)據(jù),根據(jù)相應(yīng)的RAID校驗算法進行讀寫處理,如果訪問該資源塊所屬區(qū)域上未發(fā)生IO讀寫錯誤的磁盤,則按照正常讀寫操作處理。
3.根據(jù)權(quán)利要求1所述的管理裝置,其特征在于,所述狀態(tài)維護單元,進一步用于維護 RAID的總體狀態(tài),其中所述RAID總體狀態(tài)包括正常狀態(tài)、降級狀態(tài)以及故障狀態(tài),其中該狀態(tài)維護單元進一步用于在RAID總體狀態(tài)為降級狀態(tài)時通知重建單元進行RAID重建。
4.根據(jù)權(quán)利要求1所述的管理裝置,其特征在于,還包括重建單元,用于在RAID降級之后對RAID陣列進行重建,并在重建完成后將該發(fā)生IO讀寫錯誤的磁盤踢出RAID陣列,并通知所述狀態(tài)維護單元RAID重建完成事件;其中所述狀態(tài)維護單元在接收到RAID重建完成事件后,根據(jù)RAID成員磁盤的當(dāng)前狀態(tài)以及RAID級別確定該資源塊的新狀態(tài),并更新所述資源塊狀態(tài)表。
5.根據(jù)權(quán)利要求1所述的管理裝置,其中所述多個資源塊大小相同。
6.根據(jù)權(quán)利要求1所述的管理裝置,其中所述資源塊狀態(tài)表中僅記錄非正常狀態(tài)的資源塊。
7.—種網(wǎng)絡(luò)存儲系統(tǒng)的管理方法,用于執(zhí)行網(wǎng)絡(luò)存儲系統(tǒng)內(nèi)的資源管理操作,其中網(wǎng)絡(luò)存儲系統(tǒng)包括存儲控制器以及多塊磁盤,所述存儲控制器的前端端口通過網(wǎng)絡(luò)連接主機,所述存儲控制器的后端磁盤端口與所述磁盤相連;該方法包括A、使用所述磁盤創(chuàng)建RAID,并把該RAID的可用空間根據(jù)指定長度劃分為多個資源塊, 并創(chuàng)建該RAID對應(yīng)的塊表用于記錄資源塊是否已被分配使用;B、創(chuàng)建邏輯資源時為邏輯資源分配至少一個資源塊并更新相應(yīng)的塊表,并創(chuàng)建該邏輯資源的索引區(qū),其中所述邏輯資源索引區(qū)用于記錄該邏輯資源的邏輯空間與其自身分配到的RAID資源塊的物理空間的對應(yīng)關(guān)系;C、創(chuàng)建資源塊狀態(tài)表以維護RAID資源塊的狀態(tài);并在接收到磁盤IO讀寫錯誤事件時根據(jù)磁盤IO讀寫錯誤事件確定讀寫錯誤事件所影響的資源塊,然后根據(jù)發(fā)生IO讀寫錯誤的磁盤編號以及RAID級別確定資源塊的新狀態(tài)并在資源塊狀態(tài)表中更新該資源塊的記錄;其中所述資源塊的狀態(tài)包括正常狀態(tài)以及故障狀態(tài);所述資源塊狀態(tài)表包括資源塊編號、資源塊狀態(tài)以及發(fā)生IO讀寫錯誤的磁盤編號;D、根據(jù)索引區(qū)的記錄確定主機的IO讀寫請求訪問的邏輯資源地址對應(yīng)的資源塊,并根據(jù)狀態(tài)維護單元記錄的該資源塊的狀態(tài)按照預(yù)定策略響應(yīng)主機的讀寫操作。
8.根據(jù)權(quán)利要求7所述的管理方法,其特征在于,其中所述預(yù)定策略包括如果該資源塊是正常狀態(tài),則透明處理;如果該資源塊是故障狀態(tài),如果訪問該資源塊所屬區(qū)域上發(fā)生 IO讀寫錯誤的磁盤,則返回讀寫錯誤,如果訪問該資源塊所屬區(qū)域上未發(fā)生IO讀寫錯誤的磁盤,則按照正常讀寫操作處理;如果訪問的資源塊是降級狀態(tài),對于讀寫資源塊狀態(tài)表中記錄的發(fā)生IO讀寫錯誤的磁盤的數(shù)據(jù),根據(jù)相應(yīng)的RAID校驗算法進行讀寫處理,如果訪問該資源塊所屬區(qū)域上未發(fā)生IO讀寫錯誤的磁盤,則按照正常讀寫操作處理。
9.根據(jù)權(quán)利要求8所述的管理方法,其特征在于,進一步包括E、維護RAID的總體狀態(tài),其中所述RAID總體狀態(tài)包括正常狀態(tài)、降級狀態(tài)以及故障狀態(tài),并在在RAID總體狀態(tài)為降級狀態(tài)時通知重建單元進行RAID重建。
10.根據(jù)權(quán)利要求7-9所述的管理方法,其特征在于,還包括F、在RAID降級之后對RAID陣列進行重建,并在重建完成后將該發(fā)生IO讀寫錯誤的磁盤踢出RAID陣列,并RAID重建完成后根據(jù)RAID成員磁盤的當(dāng)前狀態(tài)以及RAID級別確定該資源塊的新狀態(tài),更新所述資源塊狀態(tài)表。
11.根據(jù)權(quán)利要求7所述的管理方法,其中所述多個資源塊大小相同。
12.根據(jù)權(quán)利要求7所述的管理方法,其中所述資源塊狀態(tài)表中僅記錄非正常狀態(tài)的資源塊。
全文摘要
本發(fā)明提供一種網(wǎng)絡(luò)存儲系統(tǒng)管理方法,其創(chuàng)建RAID時把RAID可用空間根據(jù)指定長度劃分為資源塊,在創(chuàng)建邏輯資源時為邏輯資源分配至少一個資源塊,并記錄該邏輯資源與其分配到的資源塊的對應(yīng)關(guān)系;在RAID成員磁盤發(fā)生磁盤IO讀寫錯誤時,更新該資源塊的記錄;在處理主機IO讀寫請求時根據(jù)維護的資源塊狀態(tài)按照預(yù)定策略進行處理。該方法突破了傳統(tǒng)RAID技術(shù)的限制,使得多個磁盤IO讀寫錯誤僅僅影響到少數(shù)的資源塊,有效地提升了RAID中數(shù)據(jù)保護能力,并可有效防止重建過程中成員磁盤上其他位置發(fā)生IO讀寫錯誤引發(fā)的重建失敗或者數(shù)據(jù)丟失風(fēng)險。本發(fā)明一并提供了該方法對應(yīng)的網(wǎng)絡(luò)存儲系統(tǒng)管理裝置。
文檔編號H04L29/08GK102158538SQ201110040238
公開日2011年8月17日 申請日期2011年2月18日 優(yōu)先權(quán)日2011年2月18日
發(fā)明者李宏文 申請人:杭州宏杉科技有限公司