專利名稱:一種網(wǎng)絡(luò)存儲系統(tǒng)的管理方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及網(wǎng)絡(luò)存儲技術(shù),尤其涉及一種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)為例,主機可以基于標準 的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)楣收?,RAID直接離線,其上數(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)楣收?,不能再被訪問
發(fā)明內(nèi)容
有鑒于此,為了提高RAID重建速度,降低重建過程中發(fā)生數(shù)據(jù)丟失的風(fēng)險,本發(fā) 明提供一種更為完善的網(wǎng)絡(luò)存儲系統(tǒng)管理裝置及對應(yī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ù)邏輯索引區(qū)的記錄確定讀寫錯誤事件所影響的資源塊,然后根 據(jù)發(fā)生IO讀寫錯誤的磁盤編號以及RAID級別確定資源塊的新狀態(tài)并在資源塊狀態(tài)表中更 新該資源塊的記錄;其中所述資源塊的狀態(tài)包括正常狀態(tài)、降級狀態(tài)以及故障狀態(tài);所述 資源塊狀態(tài)表包括資源塊編號、資源塊狀態(tài)以及發(fā)生IO讀寫錯誤的磁盤編號;重建單元,用于在RAID成員磁盤讀寫出錯之后選擇熱備盤替換所述出錯磁盤,并 以資源塊為單元對RAID進行重建,且在重建完成后將該發(fā)生IO讀寫錯誤的磁盤踢出RAID, 并通知所述狀態(tài)維護單元RAID重建完成事件;其中所述狀態(tài)維護單元在接收到RAID重建完成事件后,根據(jù)RAID成員磁盤的當前狀態(tài)以及RAID級別確定資源塊狀態(tài)表中資源塊的 新狀態(tài),并更新所述資源塊狀態(tài)表。優(yōu)選地,所述重建單元進一步用于創(chuàng)建并維護重建進程表用于記錄各個資源塊的 重建是否完成,并采用先重建降級狀態(tài)的資源塊后重建處于正常狀態(tài)的重建策略。優(yōu)選地,所述重建單元,進一步用于在重建正常狀態(tài)的資源塊時,將出錯磁盤的數(shù) 據(jù)拷貝到熱備盤
本發(fā)明通過資源塊狀態(tài)的維護,配合資源塊為單元的重建方案,使用降級優(yōu)先和 僅僅重建已使用資源塊等策略;在提高重建速度的同時,有效降低了 RAID重建過程中RAID 的成員磁盤上其他位置發(fā)生磁盤IO讀寫錯誤引發(fā)的重建失敗或者數(shù)據(jù)丟失的風(fēng)險。
圖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)資源塊的示意圖。圖10是本發(fā)明RAID重建過程中帶有的資源塊狀態(tài)的示意圖。
具體實施例方式通常網(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)的資源塊已使用,為0 則表示對應(yīng)的資源塊未使用。再比如將一個32GB的第二 RAID陣列(array2)按照512M的 塊大小劃分為64塊,第二 RAID陣列的塊表同樣也需要8個字節(jié)的空間,塊表中bit位為1 的表示對應(yīng)的資源塊已使用,為0則表示對應(yīng)的資源塊未使用。進一步來說,如果所述指定 長度是多個不同的長度,此時可以進一步在塊表中記錄塊的大小,這樣可以滿足其他管理 操作的需求,比如數(shù)據(jù)遷移等等,但這與本發(fā)明主題并不是緊密相關(guān)的,不再進一步討論。步驟102,創(chuàng)建邏輯資源(LUN)時為LUN分配至少一個資源塊,并在邏輯資源占用 的RAID陣列的塊表中將分配給該邏輯資源的資源塊標記更新為已使用狀態(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,以索引 標記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,當磁盤發(fā)生IO讀寫錯誤時,收到磁盤返回的讀寫錯誤事件,確定發(fā)生讀 寫錯誤的資源塊,根據(jù)發(fā)生IO讀寫錯誤的磁盤編號以及RAID級別判斷資源塊的新狀態(tài),并 在預(yù)設(shè)的資源塊狀態(tài)表中更新該資源塊的記錄。其中所述資源塊的狀態(tài)通常包括正常狀 態(tài)、降級狀態(tài)以及故障狀態(tài)。資源塊的各個狀態(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讀寫錯誤的磁
盤編號。步驟106,根據(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)變?yōu)榻导墵顟B(tài)時,狀態(tài)維護單 元通知重建單元RAID降級事件,由重建單元進行重建處理。RAID降級事件一般包括RAID 名稱、出錯磁盤編號。步驟104、步驟105、以及步驟106由狀態(tài)維護單元13執(zhí)行。在現(xiàn)有的技術(shù)中一旦某個磁盤發(fā)生了磁盤IO讀寫錯誤,通常都是將該磁盤踢出 RAID陣列,等待重建過程的開始。而本發(fā)明則相反,不會立刻執(zhí)行磁盤踢出操作,而是暫時 不執(zhí)行踢出操作以達到臨時保持該磁盤的成員磁盤地位的目的,直到重建完成為止。所謂 的臨時并不是指一個非常短暫的時間,這是相對于重建完成而言的。如果系統(tǒng)缺乏熱備盤 或者管理員并不打算使能RAID陣列的重建或者管理員手動停止了 RAID陣列重建,這一臨 時保持將持續(xù)相當長的時間。如果陣列開始重建,則在本發(fā)明中踢出出錯磁盤的操作將由 RAID重建單元觸發(fā)執(zhí)行,當陣列重建完成的時候,把該出錯磁盤從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ā)重建。
資源塊編號資源塊狀態(tài)發(fā)生IO讀寫錯誤的磁盤編號~
Wm 表 1進一步來說,假設(shè)系統(tǒng)中暫時無可用的熱備盤,則此時重建不會開始。假設(shè)某一個 時刻,D2上也發(fā)生了磁盤IO讀寫錯誤,對應(yīng)資源塊18,狀態(tài)維護單元根據(jù)RAID級別以及剩 余成員磁盤的狀態(tài)確定資源塊18變?yōu)榻导墵顟B(tài),更新資源塊狀態(tài)表增加資源塊18對應(yīng)的 記錄;RAID的總體狀態(tài)仍然為降級,所有資源塊均可以正常訪問。此時資源塊狀態(tài)表中的 記錄信息如表2所示。
資源塊編號資源塊狀態(tài)發(fā)生IO讀寫錯誤的磁盤編號~
Wm
"TiWm2表 2進一步地,如果某個時刻D3上又發(fā)生了磁盤IO讀寫錯誤,對應(yīng)資源塊18,資源塊 18原來的狀態(tài)是降級,狀態(tài)維護單元根據(jù)RAID級別以及剩余成員磁盤的狀態(tài)確定資源塊18變?yōu)楣收蠣顟B(tài),更新資源塊狀態(tài)表中資源塊18對應(yīng)的記錄,“資源塊狀態(tài)”更新為故障, “發(fā)生IO讀寫錯誤的磁盤編號”更新為2,3,RAID的總體狀態(tài)變?yōu)楣收?。此時資源塊狀態(tài)表 中的記錄信息如表3所示。但是不同的是,如果此時發(fā)生磁盤IO讀寫錯誤的不是D3,仍然 是D2,且對應(yīng)資源塊18,即資源塊18上D2前后發(fā)生了兩次錯誤,那么此時資源塊18的數(shù) 據(jù)依然可以恢復(fù),那么該資源塊的狀態(tài)將保持不變,依然為降級狀態(tài)。
權(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ù)邏輯索引區(qū)的記錄確定讀寫錯誤事件所影響的資源塊,然后根據(jù)發(fā)生 IO讀寫錯誤的磁盤編號以及RAID級別確定資源塊的新狀態(tài)并在資源塊狀態(tài)表中更新該資 源塊的記錄;其中所述資源塊的狀態(tài)包括正常狀態(tài)、降級狀態(tài)以及故障狀態(tài);所述資源塊 狀態(tài)表包括資源塊編號、資源塊狀態(tài)以及發(fā)生IO讀寫錯誤的磁盤編號;重建單元,用于在RAID成員磁盤讀寫出錯之后選擇熱備盤替換所述出錯磁盤,并以資 源塊為單元對RAID進行重建,且在重建完成后將該發(fā)生IO讀寫錯誤的磁盤踢出RAID,并通 知所述狀態(tài)維護單元RAID重建完成事件;其中所述狀態(tài)維護單元在接收到RAID重建完成 事件后,根據(jù)RAID成員磁盤的當前狀態(tài)以及RAID級別確定資源塊狀態(tài)表中資源塊的新狀 態(tài),并更新所述資源塊狀態(tài)表。
2.根據(jù)權(quán)利要求1所述的管理裝置,其特征在于,所述重建單元,進一步用于創(chuàng)建并維 護重建進程表用于記錄各個資源塊的重建是否完成,并采用先重建降級狀態(tài)的資源塊后重 建處于正常狀態(tài)的重建策略。
3.根據(jù)權(quán)利要求2所述的管理裝置,其特征在于,所述重建單元,進一步用于在重建正 常狀態(tài)的資源塊時,將出錯磁盤的數(shù)據(jù)拷貝到熱備盤。
4.根據(jù)權(quán)利要求3所述的管理裝置,其特征在于,所述重建單元,進一步用于在重建正 常狀態(tài)資源塊的過程中某個資源塊從正常狀態(tài)變?yōu)榻导墵顟B(tài),且該IO讀寫錯誤發(fā)生在正 在重建的出錯磁盤上時,則在完成當前正常狀態(tài)資源塊重建后,優(yōu)先重建該新降級的資源 塊。
5.根據(jù)權(quán)利要求1所述的管理裝置,其特征在于,所述重建單元,進一步用于根據(jù)塊表 的記錄重建已經(jīng)分配使用的資源塊,跳過沒有被分配使用的資源塊。
6.根據(jù)權(quán)利要求2所述的管理裝置,其特征在于,進一步包括讀寫輔助單元,用于根據(jù)索引區(qū)的記錄確定主機的IO讀寫請求訪問的邏輯資源地址 對應(yīng)的資源塊,并在重建過程之外根據(jù)狀態(tài)維護單元記錄的該資源塊的狀態(tài)按照預(yù)定策略 響應(yīng)主機的讀寫操作。
7.根據(jù)權(quán)利要求6所述的管理裝置,其特征在于,所述預(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讀寫錯誤的磁盤,則按照正常讀寫操作處理。
8.根據(jù)權(quán)利要求7所述的管理裝置,其特征在于,所述讀寫輔助單元,進一步用于在重 建過程之中根據(jù)重建進程表判斷IO讀請求所屬資源塊是否已經(jīng)重建完成,如果該資源塊 重建完成,則使用熱備盤替代出錯磁盤響應(yīng)IO讀請求;如果該資源塊正在重建或者未開始 重建,則訪問正在重建的出錯磁盤。
9.根據(jù)權(quán)利要求8所述的管理裝置,其特征在于,所述讀寫輔助單元,進一步用于在重 建過程之中根據(jù)重建進程表判斷IO寫請求所屬資源塊是否已經(jīng)重建完成,如果該資源塊 正在重建或者重建完成,則將IO寫請求中的數(shù)據(jù)同時寫入熱備盤以及相應(yīng)的出錯磁盤;如 果該資源塊未開始重建,則訪問正在重建的出錯磁盤。
10.根據(jù)權(quán)利要求1所述的管理裝置,其特征在于,所述若干資源塊大小相同。
11.根據(jù)權(quán)利要求1所述的管理裝置,其特征在于,所述資源塊狀態(tài)表中僅記錄非正常 狀態(tài)的資源塊。
12.—種網(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ù)邏輯索引區(qū)的記錄確定讀寫錯誤事件所影響的資源塊,然后根據(jù)發(fā)生IO讀寫錯誤的 磁盤編號以及RAID級別確定資源塊的新狀態(tài)并在資源塊狀態(tài)表中更新該資源塊的記錄; 其中所述資源塊的狀態(tài)包括正常狀態(tài)、降級狀態(tài)以及故障狀態(tài);所述資源塊狀態(tài)表包括資 源塊編號、資源塊狀態(tài)以及發(fā)生IO讀寫錯誤的磁盤編號;D、在RAID成員磁盤讀寫出錯之后選擇熱備盤替換所述出錯磁盤,并以資源塊為單元 對RAID進行重建,且在重建完成后將該發(fā)生IO讀寫錯誤的磁盤踢出RAID,并在重建完成后 發(fā)出重建完成事件E、接收RAID重建完成事件,并RAID成員磁盤的當前狀態(tài)以及RAID級別確定資源塊狀 態(tài)表中資源塊的新狀態(tài),并更新所述資源塊狀態(tài)表。
13.根據(jù)權(quán)利要求12所述的管理方法,其特征在于,進一步包括F、創(chuàng)建并維護重建進程表用于記錄各個資源塊的重建是否完成,并采用先重建降級狀 態(tài)的資源塊后重建處于正常狀態(tài)的重建策略。
14.根據(jù)權(quán)利要求13所述的管理方法,其特征在于,其中步驟F進一步包括,在重建正 常狀態(tài)的資源塊時,將出錯磁盤的數(shù)據(jù)拷貝到熱備盤。
15.根據(jù)權(quán)利要求14所述的管理裝置,其特征在于,所述步驟進一步包括在重建正常 狀態(tài)資源塊的過程中某個資源塊從正常狀態(tài)變?yōu)榻导墵顟B(tài),且該IO讀寫錯誤發(fā)生在正在 重建的出錯磁盤上時,則在完成當前正常狀態(tài)資源塊重建后,優(yōu)先重建該新降級的資源塊。
16.根據(jù)權(quán)利要求12所述的管理方法,其特征在于,其特征在于,進一步包括G、進一步用于根據(jù)塊表的記錄重建已經(jīng)分配使用的資源塊,跳過沒有被分配使用的資源塊。
17.根據(jù)權(quán)利要求2所述的管理方法,其特征在于,進一步包括H、根據(jù)索引區(qū)的記錄確定主機的IO讀寫請求訪問的邏輯資源地址對應(yīng)的資源塊,并 在重建過程之外根據(jù)該資源塊的狀態(tài)按照預(yù)定策略響應(yīng)主機的讀寫操作。
18.根據(jù)權(quán)利要求17所述的管理方法,其特征在于,其中所述預(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讀寫錯誤的磁盤,則按照正常讀寫操作處理。
19.根據(jù)權(quán)利要求18所述的管理方法,其特征在于,所述步驟G進一步包括,在重建 過程之中根據(jù)重建進程表判斷IO讀請求所屬資源塊是否已經(jīng)重建完成,如果該資源塊重 建完成,則使用熱備盤替代出錯磁盤響應(yīng)IO讀請求;如果該資源塊正在重建或者未開始重 建,則訪問正在重建的出錯磁盤。
20.根據(jù)權(quán)利要求18所述的管理方法,其特征在于,所述步驟G進一步包括,在重建過 程之中根據(jù)重建進程表判斷IO寫請求所屬資源塊是否已經(jīng)重建完成,如果該資源塊正在 重建或者重建完成,則將IO寫請求中的數(shù)據(jù)同時寫入熱備盤以及相應(yīng)的出錯磁盤;如果該 資源塊未開始重建,則訪問正在重建的出錯磁盤。
21.根據(jù)權(quán)利要求12所述的管理方法,其特征在于,其中所述若干資源塊大小相同。
22.根據(jù)權(quán)利要求12所述的管理方法,其特征在于,其中所述資源塊狀態(tài)表中僅記錄 非正常狀態(tài)的資源塊。
全文摘要
本發(fā)明提供一種網(wǎng)絡(luò)存儲系統(tǒng)的管理方法,其創(chuàng)建RAID時把RAID可用空間根據(jù)指定長度劃分為資源塊,在創(chuàng)建邏輯資源時為邏輯資源分配至少一個資源塊,并記錄該邏輯資源與其分配到的資源塊的對應(yīng)關(guān)系;在RAID成員磁盤發(fā)生磁盤IO讀寫錯誤時,更新該資源塊的記錄;在重建過程中,以資源塊為單元優(yōu)先重建降級資源塊,采用拷貝方式重建正常狀態(tài)的資源塊。該方法有效地提高了重建的速度,并能夠有效降低重建過程中數(shù)據(jù)丟失的風(fēng)險。本發(fā)明一并提供了與該網(wǎng)絡(luò)存儲系統(tǒng)的管理方法對應(yīng)的裝置。
文檔編號G06F12/06GK102147713SQ201110040239
公開日2011年8月10日 申請日期2011年2月18日 優(yōu)先權(quán)日2011年2月18日
發(fā)明者李宏文 申請人:杭州宏杉科技有限公司