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