本發明專利技術提供一種Raid5陣列讀IO失敗的修復方法,該方法應用于降級的Raid5陣列,包括:A、將失敗的讀IO置于失敗修復線程隊列;B、針對失敗修復線程隊列中所述失敗的讀IO,構造內容為無效數據的寫IO并執行該寫IO操作,該寫IO的起始位置、大小與所述失敗的讀IO相同;C、該寫IO成功后在所述失敗的讀IO的數據緩存中寫入所述無效數據,返回該讀IO成功。本發明專利技術實現了對降級模式RAID5陣列的錄像數據區讀錯誤的即時修復機制。
【技術實現步驟摘要】
本專利技術涉及存儲陣列技術,尤其涉及Raid 5陣列讀IO失敗的修復方法和裝置。技術背景傳統的RAID5陣列在降級模式(陣列的單個磁盤損壞)下,由于條帶不再具有數據冗余保護的能力,磁盤讀錯誤的容錯機制較弱,因而會出現如下問題如果在陣列重建過程中,重建流程對某個磁盤發生讀錯誤、或者外部獲取存儲數據的業務對磁盤發生讀錯誤,會造成磁盤從陣列中踢出、重建中止、陣列不可用等問題;如果處于降級狀態的陣列因為系統缺乏熱備盤等客觀原因而尚未進入重建狀態,此時外部業務對某個磁盤發生讀錯誤,也將造成該磁盤從陣列中踢出、陣列不可用的問題。RAID5陣列在監控存儲的實際應用中,如果出現上述問題,大量的數據存儲業務將會終端,對用戶來說是難以接受的。
技術實現思路
有鑒于此,本專利技術的目的是提供一種Raid5陣列讀IO失敗的修復方法和裝置。為實現上述目的,本專利技術提供技術方案如下一種Raid5陣列讀IO失敗的修復方法,該方法應用于降級的Raid5陣列,該方法包括:A、將失敗的讀IO置于失敗修復線程隊列;B、針對失敗修復線程隊列中所述失敗的讀 10,構造內容為無效數據的寫IO并執行該寫IO操作,該寫IO的起始位置、大小與所述失敗的讀IO相同;C、該寫IO成功后在所述失敗的讀IO的數據緩存中寫入所述無效數據,返回該讀IO成功。優選地,在步驟B之前進一步包括步驟D1、判斷失敗的讀IO讀取的是否為索引區,如果是,則返回讀IO失敗,如果否,則執行步驟B。優選地,步驟C進一步包括如果所述寫IO失敗,則返回所述讀IO失敗。優選地,在步驟Dl之前進一步包括步驟D2、給所述失敗的讀IO設置標志,用以表示該讀IO經過失敗修復處理;在步驟A之前進一步包括步驟D3、判斷所述失敗的讀IO 是否設置有經過失敗修復處理的標志,如果沒有,執行步驟A ;如果有,則進入Raid 5陣列正常處理流程。優選地,該步驟D3進一步包括在所述失敗的讀IO沒有設置經過失敗修復處理標志的情況下判斷所述讀IO失敗是否由扇區損壞導致,如果是,執行步驟A ;如果否,進入 Raid 5陣列正常處理流程。基于相同的構思,本專利技術還提供了一種Raid5陣列讀IO失敗的修復裝置,該裝置應用于降級的Raid5陣列,該裝置包括修復準備模塊和修復模塊。修復準備模塊,用于將失敗的讀IO置于失敗修復線程隊列;修復模塊,用于針對失敗修復線程隊列中所述失敗的讀10,構造內容為無效數據的寫IO并執行該寫IO操作,該寫IO的起始位置、大小與所述失敗的讀IO相同;該寫IO成功后在所述失敗的讀IO的數據緩存中寫入所述無效數據,返回該讀IO成功。該修復準備模塊進一步用于對失敗修復線程隊列中的失敗的讀IO進行判斷,判 斷其讀取的是否為索引區,如果是,不執行修復處理,如果否,由修復模塊執行修復處理。該修復模塊在所述寫IO失敗時返回所述讀IO失敗。該修復準備模塊還用于對失敗修復線程隊列中的失敗的讀IO設置標志,用以表 示該讀IO經過失敗修復處理;該修復準備模塊在將失敗的讀IO置于失敗修復線程隊列前,判斷所述失敗的讀 IO是否設置有經過失敗修復處理的標志,如果沒有,將該失敗的讀IO置于失敗修復線程隊 列;如果有,則進入Raid 5陣列正常處理流程。該修復準備模塊進一步用于在所述失敗的讀IO沒有設置經過失敗修復處理標志 的情況下判斷所述讀IO失敗是否由扇區損壞導致,如果是,將該失敗的讀IO置于失敗修復 線程隊列;如果否,進入Raid 5陣列正常處理流程。與現有技術相比,本專利技術實現了對降級模式RAID5陣列的錄像數據區讀錯誤的即 時修復機制。附圖說明圖I是本專利技術實施例的流程圖。圖2是本專利技術實施例的另一流程圖。圖3是本專利技術實施例的第三流程圖。圖4是本專利技術裝置的邏輯結構圖。具體實施方式仔細研究監控業務的特點可以發現對于監控的存儲業務來說,磁盤出現少量壞扇 區的情況下,丟失一部分老的視頻錄像數據是可以接受的,因為視頻監控數據雖然是海量 的,但有很多視頻信息其實是重復無用的,比如某個攝像頭采集到的畫面可能數個小時沒 有變化,或者變化很少。磁盤出現少量壞扇區但是在磁盤仍舊可以正常使用的情況下,需要 采用即時有效的錯誤處理機制,避免這種情況下的磁盤從陣列中踢出、重建中止、陣列不可 用等問題,保證新的錄像數據可以正常存儲到陣列中。為此,本專利技術提出了一種用于降級 Raid5陣列的讀IO失敗修復方法,該方法包括以下步驟步驟A、將失敗的讀IO置于錯誤修復線程隊列;步驟B、針對錯誤修復線程隊列中所述失敗的讀10,構造內容為無效數據的寫IO 并執行該寫10,該寫IO的起始位置、大小與所述失敗的讀IO相同;步驟C、在所述失敗的讀IO的數據緩存中寫入所述無效數據,返回該讀IO成功的信息。處于降級狀態的Raid陣列,當發生讀IO失敗時,將不立即反饋讀失敗信息,而是 針對讀IO所指向的邏輯地址構造新的寫IO命令,該新的寫IO命令利用磁盤配備的壞扇區 重分配機制/磁盤壞塊重映射機制,將無效數據寫入到邏輯地址和上述讀IO對應的邏輯地 址一致,但物理空間和上述讀IO對應的物理空間不一致的扇區上。并且構造的該無效數據 作為實際讀到的數據寫入讀緩存中。這樣從處理流程上來看,本次讀IO操作是成功的,雖然讀到的數據本身和真實的數據不一致的(扇區的損壞導致真實數據丟失了)。但是讀IO 操作的成功解決使得壞扇區所在磁盤不會被從陣列中踢出、陣列不會不可用,如果在重建 的話,重建也不會中止。以下進一步結合附圖詳細描述實施例。參圖1,降級模式的RAID5陣列出現讀失敗10,將該讀失敗IO掛入錯誤修復線程 的IO隊列。S11、判斷該讀IO失敗是否是扇區損壞導致;且該讀失敗IO沒有經過失敗修復處理。S12、如果是,則將該失敗的讀IO掛入錯誤修復線程的IO隊列,以進行失敗修復。S13、如果否,按照RAID5現有的處理流程進行后續處理。參見圖2,錯誤修復線程對讀失敗IO的修復流程。S21、取出所述錯誤修復線程IO隊列中的讀失敗10。S22、給該讀失敗IO置上失敗修復處理的標志位。S23、判斷該讀失敗IO讀取的條帶是否為索引區。S24、如果是索引區,返回讀失敗10,結束對該讀失敗IO的失敗修復。S25、如果不是索引區,構造寫10,該寫IO的起始地址、長度與該讀失敗IO相同,該 寫IO的內容為全O。參見圖3,圖3為修復寫IO的響應流程S31、判斷修復寫IO是否寫成功。S32、如果寫成功,將上述讀失敗IO的數據緩存進行清0,返回讀成功信息。S33、如果沒有寫成功,以讀失敗的方式進行返回。圖I 圖3的處理流程展示了對一個讀失敗IO的修復流程。針對一個降級的 RAID5陣列,當出現讀IO失敗的時候,不立即反饋讀IO失敗使得磁盤被踢出、重建被中止, 而是針對該失敗的讀IO進行修復處理。讀IO失敗有多種原因,其中磁盤的扇區損壞是一 種讀IO失敗的原因。本專利技術主要是針對該原因導致的讀IO失敗進行修復處理。當由于壞 扇區導致讀IO失敗時,會反饋扇區損壞的錯誤碼,據此就可以判斷是由于扇區損壞導致讀 IO失敗的。在這種情況下,就可以對該讀失敗IO進行修復了。先將該讀失敗IO掛入失敗 修復線程隊列中,喚醒對該讀IO的修復處理。由于在修復處理的過程中會存在修復不成功 的情況,在修復不成功時仍然返回讀IO失敗,本文檔來自技高網...
【技術保護點】
一種Raid5陣列讀IO失敗的修復方法,該方法應用于降級的Raid5陣列,其特征在于,該方法包括:A、將失敗的讀IO置于失敗修復線程隊列;B、針對失敗修復線程隊列中所述失敗的讀IO,構造內容為無效數據的寫IO并執行該寫IO操作,該寫IO的起始位置、大小與所述失敗的讀IO相同;C、該寫IO成功后在所述失敗的讀IO的數據緩存中寫入所述無效數據,返回該讀IO成功。
【技術特征摘要】
【專利技術屬性】
技術研發人員:成浩,丁強,
申請(專利權)人:浙江宇視科技有限公司,
類型:發明
國別省市:
還沒有人留言評論。發表了對其他瀏覽者有用的留言會獲得科技券。