專利名稱:降級(jí)狀態(tài)下處理數(shù)據(jù)的方法及獨(dú)立冗余磁盤陣列系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及獨(dú)立冗余磁盤陣列技術(shù),尤指 一 種獨(dú)立冗余磁盤陣列系統(tǒng)在 降級(jí)狀態(tài)下處理數(shù)據(jù)的方法以及一種獨(dú)立冗余-茲盤陣列系統(tǒng)。
背景技術(shù):
獨(dú)立冗余i茲盤陣歹'J (RAID, Redundant Array of Independent Disks )是 改善磁盤存儲(chǔ)性能的有效方法之一。它將要存儲(chǔ)的數(shù)據(jù)按一定規(guī)則分塊,存 放在多個(gè)盤上,利用多個(gè)盤的并行存取、并行傳輸來匹配帶寬,以提高存取 速度。同時(shí),RAID還利用冗余數(shù)據(jù)來提高系統(tǒng)的可靠性。對(duì)主機(jī)來說它相 當(dāng)于一個(gè)快速大容量的》茲盤。RAID目前分為7級(jí)RAID0 RAID6,其中 RAID1 ~ RAID6采用冗余校驗(yàn)信息來提高系統(tǒng)的可靠性。RAID系統(tǒng)包括RAID控制器、陣列緩存和多個(gè)磁盤。其中,磁盤用來 存儲(chǔ)數(shù)據(jù);陣列緩存用來臨時(shí)存放主機(jī)訪問的數(shù)據(jù),使主機(jī)對(duì)RAID系統(tǒng)的 數(shù)據(jù)訪問大多數(shù)通過緩存進(jìn)行,以提高主機(jī)對(duì)RAID系統(tǒng)的數(shù)據(jù)訪問速度。 控制器用來控制陣列緩存以及磁盤的讀寫操作?,F(xiàn)以RAID5為例介紹RAID系統(tǒng)的工作情況。圖1所示為RAID5的數(shù) 據(jù)分布關(guān)系圖。圖示中的物理磁盤為真實(shí)存在的物理磁盤, 一般是企業(yè)級(jí)硬 盤,對(duì)最終用戶來說一般是不可見。真實(shí)的物理磁盤被分割成很多段,每個(gè) 段稱為一個(gè)條塊(Strip),不同物理磁盤上的相鄰段組合形成連續(xù)的邏輯磁 盤。每塊物理》茲盤上相鄰的Strip組合形成一個(gè)條帶(Stripe),每個(gè)Stripe 都有一個(gè)校驗(yàn)塊,用來存儲(chǔ)該Stripe的奇偶校驗(yàn)信息,如圖1中所示的P0~ P3。 RAID5通過奇偶校驗(yàn)來提供數(shù)據(jù)恢復(fù)的能力。當(dāng)對(duì)邏輯磁盤發(fā)出讀命令后,RAID系統(tǒng)中的RAID控制器根據(jù)圖1中的對(duì)應(yīng)關(guān)系,找到讀取的數(shù)據(jù)所在的物理磁盤,返回對(duì)應(yīng)Strip中的數(shù)據(jù)。 如果磁盤丟失或者損壞,例如圖1中的物理磁盤1丟失,而此時(shí)需要讀取 Dl中的數(shù)據(jù),則需要通過RAID5的奇偶校驗(yàn)信息計(jì)算出Dl中的數(shù)據(jù)并返 回。具體的方法是讀取這個(gè)Stripe上的其他Strip: D0、 D2和P0,然后對(duì)這 些Strip做奇偶校驗(yàn),校驗(yàn)值就是D1的數(shù)據(jù)。當(dāng)對(duì)邏輯磁盤發(fā)出寫命令時(shí),控制器根據(jù)圖1中的對(duì)應(yīng)關(guān)系將數(shù)據(jù)寫入 對(duì)應(yīng)的物理磁盤,并根據(jù)新寫入的數(shù)據(jù)重新計(jì)算奇偶校驗(yàn)信息。當(dāng)寫入的磁 盤丟失或者對(duì)應(yīng)的寫入空間發(fā)生故障,則不得不消耗更多的時(shí)間來計(jì)算奇偶 校驗(yàn)信息,以彌補(bǔ)因丟失原數(shù)據(jù)而對(duì)計(jì)算奇偶校驗(yàn)信息的影響??梢?,RAID系統(tǒng)由于其冗余特性,在Stripe中的一個(gè)Strip出現(xiàn)損壞時(shí), 仍然可以對(duì)其繼續(xù)進(jìn)行讀寫操作。這種狀態(tài)下的RAID系統(tǒng)成為處于降級(jí)(Degrade)狀態(tài)的RAID系統(tǒng)。當(dāng)RAID處于降級(jí)狀態(tài)下時(shí),其數(shù)據(jù)安全 性很脆弱,所以一般都會(huì)添加一塊磁盤替換發(fā)生故障的磁盤,通過校驗(yàn)把數(shù) 據(jù)重新寫入新加磁盤,使陣列恢復(fù)正常狀態(tài)。這個(gè)操作一般稱為陣列重建(Rebuild )。由于陣列重建需要占用RAID系統(tǒng)的大量資源,因此用戶都選 擇在業(yè)務(wù)空閑的時(shí)候進(jìn)行重建。在此之前,不得不在降級(jí)狀態(tài)下繼續(xù)使用 RAID系統(tǒng)。雖然,用戶還能夠在RAID系統(tǒng)處于降級(jí)狀態(tài)時(shí),繼續(xù)使用RAID讀寫 數(shù)據(jù),但是由于在讀寫過程中,將耗費(fèi)大量額外資源以彌補(bǔ)丟失數(shù)據(jù)的問題, 因此降級(jí)狀態(tài)下RAID系統(tǒng)的性能將大幅度下降,特別是對(duì)于數(shù)據(jù)庫應(yīng)用中 存在大量小數(shù)據(jù)塊隨機(jī)讀寫的情況下,性能將下降更明顯。發(fā)明內(nèi)容有鑒于此,本發(fā)明提供了一種降級(jí)狀態(tài)下處理數(shù)據(jù)的方法,應(yīng)用本發(fā)明 所提供的方法能夠提高RAID系統(tǒng)在降級(jí)狀態(tài)下的讀寫性能。一種獨(dú)立冗余》茲盤陣列系統(tǒng)在降級(jí)狀態(tài)下處理數(shù)據(jù)的方法,該方法包括將獨(dú)立冗余磁盤陣列系統(tǒng)中損壞空間的數(shù)據(jù)存入第一存儲(chǔ)介質(zhì);當(dāng)需要讀寫所述損壞空間的數(shù)據(jù)時(shí),從所述第 一存儲(chǔ)介質(zhì)中獲得所述數(shù)據(jù)。本發(fā)明提供了一種獨(dú)立冗余磁盤陣列系統(tǒng),該RAID系統(tǒng)能夠提高在降 級(jí)狀態(tài)下的讀寫性能。一種獨(dú)立冗余^f茲盤陣列系統(tǒng),該系統(tǒng)包括RAID控制器,用于控制將RAID系統(tǒng)中損壞空間上的數(shù)據(jù)存入第一存 儲(chǔ)介質(zhì);當(dāng)需要讀寫所述損壞空間的數(shù)據(jù)時(shí),從第一存儲(chǔ)介質(zhì)中獲得所述數(shù) 據(jù);第一存儲(chǔ)介質(zhì),用于存儲(chǔ)損壞空間上的數(shù)據(jù)。本發(fā)明所提供的一種在降級(jí)狀態(tài)下處理數(shù)據(jù)的方法及RAID系統(tǒng),通過 將損壞空間的數(shù)據(jù)存入第一存儲(chǔ)介質(zhì);當(dāng)需要訪問該數(shù)據(jù)時(shí),直接從所述第 一存儲(chǔ)介質(zhì)中獲得所述數(shù)據(jù),使得對(duì)這些數(shù)據(jù)進(jìn)行的讀寫操作的對(duì)象不再是 損壞的空間,而是運(yùn)行正常的第一存儲(chǔ)介質(zhì),這樣就可以按照正常的讀寫流 程處理數(shù)據(jù),進(jìn)而能夠有效提高RAID系統(tǒng)在降級(jí)狀態(tài)下的性能。
圖1為現(xiàn)有技術(shù)RAID5系統(tǒng)的數(shù)據(jù)分布關(guān)系示意圖;圖2為本發(fā)明的方法示例性流程圖;圖3為本發(fā)明的系統(tǒng)示例性結(jié)構(gòu)圖;圖4為本發(fā)明第一實(shí)施例讀操作處理流程圖;圖5為本發(fā)明第一實(shí)施例寫操作處理流程圖;圖6為本發(fā)明第一實(shí)施例RAID系統(tǒng)的結(jié)構(gòu)圖;圖7為本發(fā)明第二實(shí)施例RAID系統(tǒng)的結(jié)構(gòu)圖。
具體實(shí)施方式
在本發(fā)明實(shí)施例的技術(shù)方案中,為了提高RAID系統(tǒng)在降級(jí)狀態(tài)下的性能,可以將磁盤上損壞空間的數(shù)據(jù)存入第一存儲(chǔ)介質(zhì);在需要訪問損壞空間 的數(shù)據(jù)時(shí),則直接訪問第一存儲(chǔ)介質(zhì)來獲得這些數(shù)據(jù)。本發(fā)明的技術(shù)方案, 由于將損壞空間上的數(shù)據(jù)轉(zhuǎn)移至為損壞的空間上,因此對(duì)這些數(shù)據(jù)進(jìn)行讀寫 操作時(shí),操作的對(duì)象不再是損壞的空間,這樣就可以按照正常的讀寫流程處 理數(shù)據(jù),因此能夠提高RAID系統(tǒng)在降級(jí)狀態(tài)下的性能。參見圖2,圖2為本發(fā)明的方法示例性流程圖,包括在步驟201中, 將獨(dú)立冗余磁盤陣列系統(tǒng)中損壞空間的數(shù)據(jù)存入第一存儲(chǔ)介質(zhì);在步驟202 中,當(dāng)需要讀寫所述損壞空間的數(shù)據(jù)時(shí),從所述第一存儲(chǔ)介質(zhì)中獲得所述數(shù) 據(jù)。另夕卜,參見圖3,圖3為本發(fā)明的RAID系統(tǒng)示例性結(jié)構(gòu)圖,包括RAID 控制器,用于將RAID系統(tǒng)中損壞空間上的數(shù)據(jù)存入第一存儲(chǔ)介質(zhì);當(dāng)需要 讀寫所述損壞空間的數(shù)據(jù)時(shí),從第一存儲(chǔ)介質(zhì)中獲得所述數(shù)據(jù);第一存儲(chǔ)介 質(zhì),用于存儲(chǔ)損壞空間上的數(shù)據(jù)。其中,損壞空間可能為磁盤中的一部分, 也可以是整個(gè)^f茲盤。在本發(fā)明實(shí)施例的技術(shù)方案中,用來存儲(chǔ)損壞磁盤上數(shù)據(jù)的第 一 存儲(chǔ)介 質(zhì)可以是RAID系統(tǒng)中的陣列緩存、新增-茲盤、或-茲盤對(duì)應(yīng)中的校驗(yàn)塊?,F(xiàn)針對(duì)上述三種情況分別列舉實(shí)施例,對(duì)本發(fā)明的技術(shù)方案進(jìn)行詳細(xì)說明。實(shí)施例一本實(shí)施例主要介紹第一存儲(chǔ)介質(zhì)為RAID系統(tǒng)陣列緩存的情況。RAID 系統(tǒng)中的陣列緩存用來臨時(shí)存放主機(jī)訪問的數(shù)據(jù),在訪問數(shù)據(jù)時(shí),RAID控 制器通常先訪問陣列緩存,如果陣列緩存內(nèi)未存儲(chǔ)時(shí)再訪問磁盤,以提高主 機(jī)對(duì)RAID系統(tǒng)的數(shù)據(jù)訪問速度。在使用陣列緩存作第 一存儲(chǔ)介質(zhì)時(shí),可以在獲知磁盤上出現(xiàn)損壞空間 時(shí),通過校驗(yàn)恢復(fù)損壞空間上的數(shù)據(jù),將恢復(fù)數(shù)據(jù)保存至陣列緩存,供訪問 時(shí)使用。另外,由于陣列援存會(huì)緩存部分?jǐn)?shù)據(jù),并且在進(jìn)行讀寫操作時(shí)對(duì)緩 存內(nèi)的數(shù)據(jù)進(jìn)行更新。因此可以借助陣列緩存讀寫時(shí)進(jìn)行的更新操作,在讀寫過程中,逐步將損壞空間中的數(shù)據(jù)寫入陣列緩存,將緩存中非損壞空間的 數(shù)據(jù)移出緩存,實(shí)現(xiàn)將損壞空間上的數(shù)據(jù)保存至陣列緩存。這里,由于陣列緩存中會(huì)保存部分?jǐn)?shù)據(jù),因此在訪問數(shù)據(jù)時(shí),所要訪問 的數(shù)據(jù)為損壞空間的數(shù)據(jù)、并且未保存在陣列緩存內(nèi),再將該數(shù)據(jù)寫入陣列 緩存。訪問數(shù)據(jù)的操作包括讀操作和寫操作,陣列緩存對(duì)應(yīng)讀寫操作,分為 讀緩存和寫緩存。其中,讀緩存用來存儲(chǔ)從磁盤中讀取的數(shù)據(jù),寫緩存用來 存儲(chǔ)寫入磁盤的數(shù)據(jù)。在將數(shù)據(jù)寫入磁盤時(shí),通常將數(shù)據(jù)先寫入寫緩存,然后再由寫緩存寫入磁盤。這樣,將數(shù)據(jù)寫入寫緩存后,RAID控制器就可向 返回寫入成功的響應(yīng),以減少寫操作的響應(yīng)時(shí)間。當(dāng)執(zhí)行讀操作時(shí),在所要讀取的數(shù)據(jù)中存在損壞空間的數(shù)據(jù)、并且未保 存在陣列緩存內(nèi)的情況下,將讀取的損壞空間的數(shù)據(jù)寫入陣列緩存的讀緩存 內(nèi);當(dāng)執(zhí)行寫數(shù)據(jù)時(shí),在數(shù)據(jù)寫入的空間為損壞空間、并且該數(shù)據(jù)未保存在 陣列緩存內(nèi)的情況下,將該數(shù)據(jù)寫入所述陣列緩存的寫緩存內(nèi)。參見圖4和5,圖4和5分別為對(duì)應(yīng)讀操作和寫操作更新陣列緩存的流 程圖,現(xiàn)分別介紹如下。參見圖4,圖4為本發(fā)明實(shí)施例在讀操作時(shí)更新陣列緩存的流程圖。在步驟401中,RAID系統(tǒng)中的控制器收到讀命令。在步驟402中,根據(jù)讀命令中攜帶的標(biāo)識(shí)信息,判斷讀緩存是否命中, 如果是,則從讀緩存中返回所需數(shù)據(jù),結(jié)束當(dāng)前處理流程;否則,執(zhí)行步驟403。其中的標(biāo)識(shí)信息用于標(biāo)識(shí)數(shù)據(jù)塊在RAID系統(tǒng)中的位置,可包括數(shù)據(jù)塊 在磁盤中保存的邏輯地址、同一個(gè)數(shù)據(jù)塊保存在緩存中的緩存地址以及邏輯 地址和緩存地址之間的映射關(guān)系等內(nèi)容中的 一項(xiàng)或幾項(xiàng)。在讀緩存和寫緩存 中均會(huì)保存標(biāo)識(shí)信息表,用來確定自身是否保存了相關(guān)數(shù)據(jù)。在步驟403中,根據(jù)讀命令中攜帶的標(biāo)識(shí)信息,判斷寫緩存是否命中, 如果是,則從寫緩存中返回所需數(shù)據(jù),結(jié)束當(dāng)前處理流程;否則,執(zhí)行步驟404。在步驟404中,RAID控制器下發(fā)命令讀取磁盤,從磁盤中獲取所需數(shù) 據(jù),執(zhí)行步驟405。這里,如果需要讀取的數(shù)據(jù)為磁盤上損壞空間的數(shù)據(jù),則獲取的數(shù)據(jù)通 過校驗(yàn)得到;如果需要讀取的數(shù)據(jù)不為磁盤損壞空間的數(shù)據(jù),則直接從磁盤 上讀取。在步驟405中,判斷當(dāng)前讀取的數(shù)據(jù)中是否損壞空間的數(shù)據(jù),如果是, 執(zhí)行步驟406;否則,結(jié)束當(dāng)前處理流程。在RAID系統(tǒng)中,如果》茲盤發(fā)生損壞,RAID控制器則會(huì)記錄損壞空間 的具體位置信息。RAID控制器可以依據(jù)當(dāng)前讀命令中攜帶的標(biāo)識(shí)信息以及 記錄的損壞空間的位置信息確定當(dāng)前讀取的數(shù)據(jù)中是否有損壞空間的數(shù)據(jù)。在步驟406中,將損壞空間上的數(shù)據(jù)寫入讀緩存,結(jié)束當(dāng)前處理流程。在陣列緩存中,損壞空間上的數(shù)據(jù)具有比非損壞空間數(shù)據(jù)高的優(yōu)先級(jí), 在陣列緩存可用空間不足時(shí),按照陣列緩存策略釋放陣列緩存內(nèi)保存的非損 壞空間的數(shù)據(jù),將所述損壞空間的數(shù)據(jù)寫入釋放空間。在將非損壞空間的數(shù) 據(jù)寫入陣列緩存時(shí),僅將該數(shù)據(jù)寫入陣列緩存內(nèi)未被損壞空間數(shù)據(jù)占用的空 間中。這里,將損壞空間的數(shù)據(jù)寫入讀緩存的方式可以是,先考慮讀緩存中是 否有空塊,在有空塊的情況下,先寫入空塊;再考慮讀緩存中的非損壞空間 的數(shù)據(jù),用損壞空間的數(shù)據(jù)替換非損壞空間的數(shù)據(jù);最后,在讀緩存內(nèi)不存 在非損壞空間的數(shù)據(jù),按照陣列緩存策略進(jìn)行替換。具體為,先將當(dāng)前損壞空間的數(shù)據(jù)寫入讀緩存中的空塊;在讀緩存中沒 有空塊或者空塊容量不足時(shí),再按照陣列緩存策略用當(dāng)前損壞空間上的數(shù)據(jù) 或剩下未寫入的數(shù)據(jù),更新讀緩存內(nèi)已經(jīng)保存的非損壞空間的數(shù)據(jù);最后在 讀緩存中沒有保存的非損壞空間的數(shù)據(jù)或者對(duì)應(yīng)容量不足的情況下,按照陣 列緩存策略用當(dāng)前損壞空間上的數(shù)據(jù)或剩下未寫入的數(shù)據(jù),更新讀緩存內(nèi)已 經(jīng)保存的損壞空間的數(shù)據(jù)。另外,對(duì)于當(dāng)前讀取的非損壞空間的數(shù)據(jù),可以按照上述處理流程,執(zhí)行不將非損壞空間的數(shù)據(jù)寫入讀緩存的操作;也可以在不影響讀緩存中已經(jīng) 保存的損壞空間的數(shù)據(jù)的情況下,將當(dāng)前讀取的非損壞空間的數(shù)據(jù)寫入讀緩 存,以有效利用緩存空間,提高讀寫效率。具體可以是對(duì)于當(dāng)前讀取的非 損壞空間的數(shù)據(jù),可以先將當(dāng)前非損壞空間的數(shù)據(jù)寫入讀緩存中的空塊;在 讀緩存中沒有空塊或者空塊容量不足時(shí),再按照陣列緩存策略用當(dāng)前非損壞 空間上的數(shù)據(jù)或者剩下未寫入的數(shù)據(jù)更新讀緩存內(nèi)已經(jīng)保存的非損壞空間 的數(shù)據(jù);在讀緩存中已經(jīng)沒有保存的非損壞空間的數(shù)據(jù)或者對(duì)應(yīng)容量不足的 情況下,對(duì)于當(dāng)前非損壞空間的數(shù)據(jù)或者剩下未寫入的數(shù)據(jù)則不再進(jìn)行處 理。這里所使用的陣列緩存策略可以是陣列緩存會(huì)按照訪問頻率優(yōu)先 (LFU, Least Frequency Used )、最短訪問優(yōu)先(LRU, Least Recently Used ) 及最近訪問頻率優(yōu)先(LRFU, Least Recently Frequency Used )等策略。在本實(shí)施例的流程中,在步驟401和404中之所以未進(jìn)行當(dāng)前讀取數(shù)據(jù) 是否為損壞空間上的數(shù)據(jù)的判斷,主要是因?yàn)闊o論該數(shù)據(jù)是否為損壞空間上 的數(shù)據(jù),這個(gè)數(shù)據(jù)已經(jīng)保存在陣列緩存中,進(jìn)而不需要對(duì)這類處理進(jìn)行處理。參見圖5,圖5為本發(fā)明實(shí)施例在寫操作時(shí)更新陣列緩存的流程圖。在步驟501中,RAID系統(tǒng)中的控制器收到寫命令。在步驟502中,根據(jù)寫命令中攜帶的標(biāo)識(shí)信息,判斷讀緩存是否命中, 如果是,執(zhí)行步驟503;否則,執(zhí)行步驟509。在步驟503中,根據(jù)寫命令中攜帶的標(biāo)識(shí)信息,判斷寫緩存是否命中, 如果是,執(zhí)行步驟504;否則,執(zhí)行步驟505。在步驟504中,更新寫緩存,執(zhí)行步驟508。在步驟505中,判斷當(dāng)前寫入的數(shù)據(jù)中是否存在要寫入RAID系統(tǒng)中損 壞空間的數(shù)據(jù),如果是,則執(zhí)行步驟506;否則,執(zhí)行步驟507。其中,判斷當(dāng)前寫入數(shù)據(jù)中是否存在要寫入損壞空間的數(shù)據(jù)的方法,與讀流程中步驟405的方法相同。即依據(jù)當(dāng)前讀命令中攜帶的標(biāo)識(shí)信息以及記錄的損壞空間的位置信息確定當(dāng)前寫入的數(shù)據(jù)中是否存在寫入損壞空間的數(shù)據(jù)。在步驟506中,將要寫入損壞空間上的數(shù)據(jù)寫入寫緩存,由寫緩存處理 寫入對(duì)應(yīng)磁盤;對(duì)于當(dāng)前寫入數(shù)據(jù)中寫入非損壞空間的數(shù)據(jù),不寫入寫緩存, 直接執(zhí)行寫入磁盤操作;執(zhí)行步驟508。其中,將要寫入損壞空間的數(shù)據(jù)寫入寫緩存的操作,也可以與寫入讀緩 存的操作類似,先將當(dāng)前要寫入損壞空間的數(shù)據(jù)寫入寫緩存中的空塊;在讀 緩存中沒有空塊或者空塊容量不足時(shí),再按照陣列緩存策略用當(dāng)前寫入損壞 空間上的數(shù)據(jù)或剩下未寫入的數(shù)據(jù),更新寫緩存內(nèi)已經(jīng)保存的非損壞空間的 數(shù)據(jù);最后在讀緩存沒有保存的非損壞空間的數(shù)據(jù)或者對(duì)應(yīng)容量不足的情況 下,按照陣列緩存策略用當(dāng)前損壞空間上的數(shù)據(jù)或剩下未寫入的數(shù)據(jù),更新 寫緩存內(nèi)已經(jīng)保存的損壞空間的數(shù)據(jù)。在步驟507中,不將當(dāng)前寫入數(shù)據(jù)寫入寫緩存,直接執(zhí)行寫入磁盤操作。這里,對(duì)于步驟506中當(dāng)前寫入數(shù)據(jù)中剩下寫入非損壞空間的數(shù)據(jù),以 及本步驟中對(duì)應(yīng)非損壞空間的數(shù)據(jù),在不影響寫緩存中已經(jīng)保存的損壞空間 的數(shù)據(jù)的情況下,按照一定的策略將當(dāng)前對(duì)應(yīng)非損壞空間的數(shù)據(jù)寫入寫緩 存,以有效利用緩存空間,提高讀寫效率。具體可以是對(duì)于當(dāng)前對(duì)應(yīng)非損 壞空間的數(shù)據(jù),可以先將當(dāng)前非損壞空間的數(shù)據(jù)寫入寫緩存中的空塊;在寫 緩存中沒有空塊或者空塊容量不足時(shí),再按照陣列緩存策略用對(duì)應(yīng)非損壞空 間上的數(shù)據(jù)或者剩下未寫入的數(shù)據(jù)更新寫緩存內(nèi)已經(jīng)保存的非損壞空間的 數(shù)據(jù);在讀寫存中沒有保存非損壞空間的數(shù)據(jù)或者對(duì)應(yīng)容量不足的情況下, 則不降對(duì)應(yīng)非損壞空間的數(shù)據(jù)或者剩下未寫入的數(shù)據(jù)寫入寫緩存。在步驟508中,更新讀緩存,結(jié)束當(dāng)前處理流程。在步驟509中,根據(jù)寫命令中攜帶的標(biāo)識(shí)信息,判斷寫緩存是否命中, 如果是,執(zhí)行步驟510;否則,執(zhí)行步驟511。在步驟510中,更新寫緩存,結(jié)束當(dāng)前處理流程。另夕卜,步驟511-513的具體實(shí)現(xiàn)與步驟505 507相同,在此不再詳述。 參見圖6,圖6為本發(fā)明實(shí)施例系統(tǒng)的結(jié)構(gòu)圖。在本實(shí)施例中第一存儲(chǔ)介質(zhì)為RAID系統(tǒng)中的陣列緩存,對(duì)應(yīng)的RAID系統(tǒng)包括RAID控制器、陣 列緩存和磁盤。其中,RAID控制器,用于控制將RAID系統(tǒng)中損壞空間上 的數(shù)據(jù)存入陣列緩存;當(dāng)需要訪問所述數(shù)據(jù)時(shí),從陣列緩存中獲得所述數(shù)據(jù)。 所述RAID控制器,用于訪問數(shù)據(jù),當(dāng)所要訪問的數(shù)據(jù)為損壞空間的數(shù)據(jù)、 并且未保存在陣列緩存內(nèi),將該數(shù)據(jù)寫入陣列緩存。所述陣列緩存包括讀緩存和寫緩存。所述RAID控制器,用于在讀數(shù) 據(jù)時(shí),所要讀取的數(shù)據(jù)中存在損壞空間的數(shù)據(jù)、并且未保存在陣列緩存內(nèi), 將讀取的損壞空間的數(shù)據(jù)寫入陣列緩存的讀緩存內(nèi);在寫數(shù)據(jù)時(shí),當(dāng)數(shù)據(jù)寫 入的空間為損壞空間、并且該數(shù)據(jù)未保存在陣列緩存內(nèi),將該數(shù)據(jù)寫入所述 陣列緩存的寫緩存內(nèi)。具體的,所述RAID控制器,用于在陣列緩存內(nèi)存在空塊時(shí),將當(dāng)前損壞 空間的數(shù)據(jù)寫入陣列緩存的空塊;在陣列緩存沒有空塊或者空塊容量不足時(shí), 按照陣列緩存策略用當(dāng)前損壞空間上的數(shù)據(jù)或剩下未寫入的數(shù)據(jù),更新陣列緩 存內(nèi)已經(jīng)保存的非損壞空間的數(shù)據(jù);在陣列緩存內(nèi)沒有保存非損壞空間的數(shù)據(jù) 或者對(duì)應(yīng)容量不足時(shí),按照陣列緩存策略用當(dāng)前損壞空間上的數(shù)據(jù)或剩下未寫 入的數(shù)據(jù),更新陣列緩存內(nèi)已經(jīng)保存的損壞空間的數(shù)據(jù)。另外,RAID控制器,進(jìn)一步用于在訪問數(shù)據(jù)時(shí),所訪問的數(shù)據(jù)未保存在 陣列緩存內(nèi)、并且不為損壞空間的數(shù)據(jù),在不影響陣列緩存內(nèi)已經(jīng)保存的損壞 空間數(shù)據(jù)的情況下將該數(shù)據(jù)寫入陣列緩存。另外,RAID控制器,還可以在獲知磁盤上出現(xiàn)損壞空間時(shí),將該損壞空 間上的數(shù)據(jù)保存至新增磁盤。經(jīng)過實(shí)驗(yàn)證明,以一個(gè)IOT的RAID5系統(tǒng),陣列緩存容量為100G,在 正常狀態(tài)下陣列緩存的命中率有20%。那么當(dāng)沒有使用本技術(shù)之前,在 RAID5系統(tǒng)陣列降級(jí)后,隨機(jī)性能約降低到原性能的50%;使用本實(shí)施例 的技術(shù)方案后,如果100G的陣列緩存都用來做損壞控制的緩存,隨機(jī)性能 只降低到原性能的80%??梢姡鄬?duì)于現(xiàn)有技術(shù),本發(fā)明能夠有效的提高 RAID5系統(tǒng)的性能。實(shí)施例二本實(shí)施例主要介紹第 一存儲(chǔ)介質(zhì)為新增磁盤的情況。在使用新增磁盤作第 一存儲(chǔ)介質(zhì)時(shí),可以在獲知磁盤上出現(xiàn)損壞空間 時(shí),通過校驗(yàn)恢復(fù)損壞空間上的數(shù)據(jù),將恢復(fù)數(shù)據(jù)保存至陣列緩存,供訪問 時(shí)使用。另外,也可以在讀取磁盤上損壞空間的數(shù)據(jù)或者向損壞空間寫入數(shù) 據(jù)時(shí),將當(dāng)前操作對(duì)應(yīng)的數(shù)據(jù)寫入新增磁盤,供訪問時(shí)使用。在進(jìn)行讀操作時(shí),判定得到當(dāng)前讀操作磁盤的存儲(chǔ)空間為損壞空間時(shí), 將從讀緩存、或?qū)懢彺妗⒒驈拇疟P中讀取的數(shù)據(jù)存入新增磁盤。判斷當(dāng)前讀操作對(duì)應(yīng)的數(shù)據(jù)是否是損壞空間上的數(shù)據(jù)的時(shí)機(jī),可以是RAID控制器收到讀命令時(shí)、或者在返回讀操作對(duì)應(yīng)的數(shù)據(jù)時(shí),或者讀操作的其他階段執(zhí)行。 在進(jìn)行寫操作時(shí),判定得到當(dāng)前寫操作對(duì)應(yīng)磁盤上的損壞空間時(shí),將當(dāng) 前待寫入損壞空間的數(shù)據(jù),寫入新增磁盤。這里,執(zhí)行判斷的時(shí)機(jī),可以是RAID控制器收到寫命令或?qū)戅鞯钠渌A段執(zhí)行。當(dāng)將損壞空間的數(shù)據(jù)寫入新增磁盤后,在RAID控制器內(nèi)記錄該數(shù)據(jù)對(duì) 應(yīng)的損壞空間,以及該數(shù)據(jù)在新增磁盤上位置信息,以備后續(xù)查找。這里, 為了區(qū)別損壞空間上的數(shù)據(jù)是否已被校驗(yàn),可以將經(jīng)過校驗(yàn)的損壞空間稱為 已校驗(yàn)損壞空間,將未經(jīng)過校驗(yàn)的損壞空間稱為為校驗(yàn)損壞空間。在新增磁盤后,在讀寫陣列緩存之前,可以先根據(jù)記錄的已校驗(yàn)的損壞 空間,判斷所需數(shù)據(jù)是否在新增磁盤上,如果在新增磁盤上,則根據(jù)對(duì)應(yīng)的 位置信息查找得到對(duì)應(yīng)的數(shù)據(jù),則不必再讀取陣列緩存以及根據(jù)原磁盤校驗(yàn) 得到。其中,記錄已校驗(yàn)損壞空間的方法可以是在RAID控制器內(nèi)記錄一 個(gè)位圖或者索引來經(jīng)過校驗(yàn)的Strip。通過讀取這個(gè)位圖或者索引來確定對(duì) 應(yīng)的Strip是否經(jīng)過校驗(yàn)。在用該新增z磁盤同步損壞空間所在的;茲盤、重建RAID系統(tǒng)時(shí),可以根 據(jù)記錄的已校驗(yàn)的損壞空間,僅對(duì)沒有記錄的損壞空間、以及非損壞空間進(jìn) 4亍才t-瞼,并寫入新增》茲盤。參見圖7,圖7為本發(fā)明實(shí)施例系統(tǒng)的結(jié)構(gòu)圖。在本實(shí)施例中第一存儲(chǔ)介質(zhì)為新增磁盤,RAID系統(tǒng)包括RAID控制器、陣列緩存、原磁盤和新 增磁盤。具體的,RAID控制器,用于控制將RAID系統(tǒng)中損壞空間上的數(shù)據(jù)存 入新增磁盤;當(dāng)需要訪問所述數(shù)據(jù)時(shí),從新增磁盤中獲得所述數(shù)據(jù)。所述 RAID控制器,進(jìn)一步用于記錄數(shù)據(jù)被寫入新增磁盤的損壞空間;在使用所 述新增》茲盤同步損壞空間所在的磁盤時(shí),根據(jù)記錄的損壞空間,僅將磁盤中 未記錄空間的數(shù)據(jù)同步至所述新增磁盤。具體的,所述RAID控制器可以在訪問數(shù)據(jù)時(shí),確定所要訪問的數(shù)據(jù)為 損壞空間的數(shù)據(jù),將該數(shù)據(jù)存入新增磁盤;或者,在獲知磁盤上出現(xiàn)損壞空 間時(shí),將該損壞空間上的數(shù)據(jù)保存至新增磁盤。其中RAID控制器、陣列緩存和原磁盤之間的鏈接關(guān)系,與現(xiàn)有技術(shù)中 的相同,在此不再詳述。實(shí)施例三本實(shí)施例主要介紹第 一存儲(chǔ)介質(zhì)為磁盤中校驗(yàn)塊的情況。在使用磁盤中的校驗(yàn)塊作第 一存儲(chǔ)介質(zhì)時(shí),可以在獲知磁盤上出現(xiàn)損壞 空間時(shí),通過校驗(yàn)恢復(fù)損壞空間上的數(shù)據(jù),并將數(shù)據(jù)保存至磁盤中校驗(yàn)塊, 具體的可以是損壞空間對(duì)應(yīng)條帶中的校驗(yàn)塊。另外,也可以在讀取磁盤上損 壞空間的數(shù)據(jù)或者向損壞空間寫入數(shù)據(jù)時(shí),將當(dāng)前操作對(duì)應(yīng)的數(shù)據(jù)寫入新增 7磁盤,供訪問時(shí)使用。具體的方式與實(shí)施例二的相同,在此不再詳述。當(dāng)將損壞空間中的數(shù)據(jù)對(duì)應(yīng)條帶的校驗(yàn)塊后,需要在RAID控制器內(nèi)修 改數(shù)據(jù)對(duì)應(yīng)的存儲(chǔ)地址,以備后續(xù)查找使用。本實(shí)施例中RAID系統(tǒng)的結(jié)構(gòu)與實(shí)施例一中系統(tǒng)結(jié)構(gòu)圖相同,只是在本 實(shí)施例中第一存儲(chǔ)介質(zhì)為RAID系統(tǒng)磁盤中的校驗(yàn)塊。具體,RAID控制器可以在訪問數(shù)據(jù)時(shí),確定所要訪問的數(shù)據(jù)為損壞空 間的數(shù)據(jù),將該數(shù)據(jù)存入RAID系統(tǒng)磁盤中的校驗(yàn)塊;或者,在獲知磁盤上 出現(xiàn)損壞空間時(shí),將該損壞空間上的數(shù)據(jù)寫入至RAID系統(tǒng)》茲盤中的校驗(yàn)塊。本發(fā)明實(shí)施例的技術(shù)方案適用于RAID1-6的系統(tǒng)中。本發(fā)明實(shí)施例的技術(shù)方案,通過將磁盤上損壞空間的數(shù)據(jù)存入第一存儲(chǔ)介質(zhì);在需要訪問損壞空間的數(shù)據(jù)時(shí),直接訪問第一存儲(chǔ)介質(zhì)來獲得這些數(shù)據(jù)。由于將損壞空間 上的數(shù)據(jù)轉(zhuǎn)移至未損壞的空間上保存,避免了為獲得數(shù)據(jù)而對(duì)損壞的空間重復(fù)執(zhí)行校驗(yàn)的操作,因此提高了 RAID系統(tǒng)在降級(jí)狀態(tài)下的處理性能。以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本 發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在 本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1、一種獨(dú)立冗余磁盤陣列系統(tǒng)在降級(jí)狀態(tài)下處理數(shù)據(jù)的方法,其特征在于,該方法包括將獨(dú)立冗余磁盤陣列系統(tǒng)中損壞空間的數(shù)據(jù)存入第一存儲(chǔ)介質(zhì);當(dāng)需要讀寫所述損壞空間的數(shù)據(jù)時(shí),從所述第一存儲(chǔ)介質(zhì)中獲得所述數(shù)據(jù)。
2、 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述將損壞空間的數(shù)據(jù)存入 第一存儲(chǔ)介質(zhì)為將所述數(shù)據(jù)存入陣列緩存。
3、 根據(jù)權(quán)利要求2所述的方法,其特征在于,所述將損壞空間的數(shù)據(jù)存入 陣列緩存包括在對(duì)損壞空間進(jìn)行數(shù)據(jù)讀寫,所述數(shù)據(jù)未保存在陣列緩存內(nèi)時(shí),將該數(shù)據(jù) 寫入陣列緩存。
4、 根據(jù)權(quán)利要求3所述的方法,其特征在于,在對(duì)損壞空間進(jìn)行數(shù)據(jù)讀寫, 所述數(shù)據(jù)未保存在陣列緩存內(nèi)時(shí),將該數(shù)據(jù)寫入陣列緩存包括在讀數(shù)據(jù)時(shí),所要讀取的數(shù)據(jù)中存在損壞空間的數(shù)據(jù)、并且未保存在陣列 緩存內(nèi),將讀取的損壞空間的數(shù)據(jù)寫入陣列緩存的讀緩存內(nèi);在寫數(shù)據(jù)時(shí),當(dāng)數(shù)據(jù)寫入的空間為損壞空間、并且該數(shù)據(jù)未保存在陣列緩 存內(nèi),將該數(shù)據(jù)寫入所述陣列緩存的寫緩存內(nèi)。
5、 根據(jù)權(quán)利要求4所述的方法,其特征在于,所述將損壞空間的數(shù)據(jù)寫入 陣列緩存包括在陣列緩存可用空間不足時(shí),按照陣列緩存策略釋放陣列緩存內(nèi)保存的非 損壞空間的數(shù)據(jù),將所述損壞空間的數(shù)據(jù)寫入釋放空間。
6、 根據(jù)權(quán)利要求3或4所述的方法,其特征在于,該方法進(jìn)一步包括 在將非損壞空間的數(shù)據(jù)寫入陣列緩存時(shí),僅將該數(shù)據(jù)寫入陣列緩存內(nèi)未被損壞空間凄t據(jù)占用的空間中。
7、 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述將損壞空間的數(shù)據(jù)存入 第 一存儲(chǔ)介質(zhì)為將所述數(shù)據(jù)寫入新增磁盤。
8、 根據(jù)權(quán)利要求7所述的方法,其特征在于,該方法進(jìn)一步包括 記錄數(shù)據(jù)被寫入新增磁盤的損壞空間;在使用所述新增磁盤同步損壞空間所在的磁盤時(shí),根據(jù)記錄的損壞空間, 僅將磁盤中未記錄空間的數(shù)據(jù)同步至所述新增f茲盤。
9、 才艮據(jù)權(quán)利要求1所述的方法,其特征在于,所述將損壞空間上的數(shù)據(jù)存 入第一存儲(chǔ)介質(zhì)為將所述數(shù)據(jù)寫入RAID系統(tǒng)內(nèi)磁盤的校驗(yàn)塊。
10、 根據(jù)權(quán)利要求7、 8或9所述的方法,其特征在于,所述將獨(dú)立冗余磁 盤陣列系統(tǒng)中損壞空間的數(shù)據(jù)存入第 一存儲(chǔ)介質(zhì)包括在訪問數(shù)據(jù)時(shí),確定所要訪問的數(shù)據(jù)為損壞空間的數(shù)據(jù),將該數(shù)據(jù)存入第 一存儲(chǔ)介質(zhì)。
11、 根據(jù)權(quán)利要求2、 7、 8或9所述的方法,其特征在于,所述將損壞空 間上的數(shù)據(jù)存入第 一存儲(chǔ)介質(zhì)包括在獲知磁盤上出現(xiàn)損壞空間時(shí),將該損壞空間上的數(shù)據(jù)保存至第一存儲(chǔ)介質(zhì)。
12、 一種獨(dú)立冗余磁盤陣列系統(tǒng),其特征在于,該系統(tǒng)包括 RAID控制器,用于控制將RAID系統(tǒng)中損壞空間上的數(shù)據(jù)存入第一存儲(chǔ)介質(zhì);當(dāng)需要讀寫所述損壞空間的數(shù)據(jù)時(shí),從第一存儲(chǔ)介質(zhì)中獲得所述數(shù)據(jù); 第一存儲(chǔ)介質(zhì),用于存儲(chǔ)損壞空間上的數(shù)據(jù)。
13、 根據(jù)權(quán)利要求12所述的RAID系統(tǒng),其特征在于,所述第一存儲(chǔ)介質(zhì) 為RAID系統(tǒng)中的陣列緩存。
14、 根據(jù)權(quán)利要求13所述的RAID系統(tǒng),其特征在于, 所述RAID控制器,用于在對(duì)損壞空間進(jìn)行數(shù)據(jù)讀寫,所述數(shù)據(jù)未保存在陣列緩存內(nèi)時(shí),將該^:據(jù)寫入陣列緩存。
15、 根據(jù)權(quán)利要求14所述的RAID系統(tǒng),其特征在于,所述陣列緩存包括 讀緩存和寫緩存;所述RAID控制器,用于在讀數(shù)據(jù)時(shí),所要讀取的數(shù)據(jù)中存在損壞空間的 數(shù)據(jù)、并且未保存在陣列緩存內(nèi),將讀取的損壞空間的數(shù)據(jù)寫入陣列緩存的讀緩存內(nèi);在寫數(shù)據(jù)時(shí),當(dāng)數(shù)據(jù)寫入的空間為損壞空間、并且該數(shù)據(jù)未保存在陣 列緩存內(nèi),將該數(shù)據(jù)寫入所述陣列緩存的寫緩存內(nèi)。
16、 根據(jù)權(quán)利要求14或15所述的RAID系統(tǒng),其特征在于, 所述RAID控制器,用于在陣列緩存可用空間不足時(shí),按照陣列緩存策略釋放陣列緩存內(nèi)保存的非損壞空間的數(shù)據(jù),將所述損壞空間的數(shù)據(jù)寫入釋放空 間。
17、 根據(jù)權(quán)利要求14或15所述的RAID系統(tǒng),其特征在于,所述RADI控制器,進(jìn)一步用于在將非損壞空間的數(shù)據(jù)寫入陣列緩存時(shí), 僅將該數(shù)據(jù)寫入陣列緩存內(nèi)未被損壞空間數(shù)據(jù)占用的空間中。
18、 根據(jù)權(quán)利要求12所述的RAID系統(tǒng),其特征在于, 所述第 一存儲(chǔ)介質(zhì)為新增磁盤。
19、 根據(jù)權(quán)利要求18所述的RAID系統(tǒng),其特征在于, 所述RAID控制器,進(jìn)一步用于記錄數(shù)據(jù)被寫入新增磁盤的損壞空間;在使用所述新增;茲盤同步損壞空間所在的磁盤時(shí),根據(jù)記錄的損壞空間,僅將磁 盤中未記錄空間的數(shù)據(jù)同步至所述新增磁盤。
20、 根據(jù)權(quán)利要求12所述的方法,其特征在于, 所述第一存儲(chǔ)介質(zhì)為RAID系統(tǒng)磁盤中的校驗(yàn)塊。
21、 根據(jù)權(quán)利要求18、 19或20所述的RAID系統(tǒng),其特征在于, 所述RAID控制器,用于在訪問數(shù)據(jù)時(shí),確定所要訪問的數(shù)據(jù)為損壞空間的數(shù)據(jù),將該數(shù)據(jù)存入第一存儲(chǔ)介質(zhì)。
22、 根據(jù)權(quán)利要求13、 18、 19或20所述的RAID系統(tǒng),其特征在于, 所述RAID控制器,用于在獲知磁盤上出現(xiàn)損壞空間時(shí),將該損壞空間上的數(shù)據(jù)保存至第 一存儲(chǔ)介質(zhì)。
全文摘要
本發(fā)明公開了降級(jí)狀態(tài)下處理數(shù)據(jù)的方法及獨(dú)立冗余磁盤陣列系統(tǒng),通過將損壞空間的數(shù)據(jù)存入第一存儲(chǔ)介質(zhì);當(dāng)需要讀寫所述損壞空間的數(shù)據(jù)時(shí),從所述第一存儲(chǔ)介質(zhì)中獲得所述數(shù)據(jù),使得對(duì)這些數(shù)據(jù)進(jìn)行的讀寫操作的對(duì)象不再是損壞的空間,而是運(yùn)行正常的第一存儲(chǔ)介質(zhì),這樣就可以按照正常的讀寫流程處理數(shù)據(jù),進(jìn)而能夠有效提高獨(dú)立冗余磁盤陣列系統(tǒng)在降級(jí)狀態(tài)下的性能。
文檔編號(hào)G06F3/06GK101236482SQ20081010093
公開日2008年8月6日 申請(qǐng)日期2008年2月26日 優(yōu)先權(quán)日2008年2月26日
發(fā)明者敏 侯 申請(qǐng)人:杭州華三通信技術(shù)有限公司