本發(fā)明涉及存儲系統(tǒng)領域,特別是涉及一種RAID存儲系統(tǒng)的數(shù)據(jù)發(fā)送方法及裝置。
背景技術:
在RAID存儲系統(tǒng)中包含控制器和多個磁盤陣列,控制器用于執(zhí)行主機發(fā)送的各種指令,磁盤陣列用于存儲數(shù)據(jù)。當接收到主機發(fā)送的讀取指令時,控制器就會根據(jù)讀取指令,將相應的磁盤陣列中的數(shù)據(jù)返回至主機。
但是,由于軟硬件的不正當操作,當數(shù)據(jù)在存儲時,有可能就會出錯,導致,當主機發(fā)送了讀取指令后,控制器將錯誤的數(shù)據(jù)返回至主機。當主機接收到控制器返回的數(shù)據(jù)后,會進行相應的奇偶校驗,從而確定控制器返回的數(shù)據(jù)是否正確,如果不正確,則繼續(xù)向控制器發(fā)送讀取指令,而控制器并不知道當前存儲的數(shù)據(jù)是錯誤的,因此,會重復向主機返回相同的數(shù)據(jù),最終導致主機讀取數(shù)據(jù)的效率較低,有效性較差。
由此可見,在主機發(fā)出讀取指令時,控制器如何能夠快速有效地向主機提供正確的數(shù)據(jù),從而保證讀取的效率和有效性是本領域技術人員亟待解決的問題。
技術實現(xiàn)要素:
本發(fā)明的目的是提供一種RAID存儲系統(tǒng)的數(shù)據(jù)發(fā)送方法及裝置,用于在主機發(fā)出讀取指令時,控制器如何能夠快速有效地向主機提供正確的數(shù)據(jù),從而保證讀取的效率和有效性。
為解決上述技術問題,本發(fā)明提供一種RAID存儲系統(tǒng)的數(shù)據(jù)發(fā)送方法,包括:
接收主機發(fā)送的讀取指令,并按照所述讀取指令查找到目標條帶單元;
利用奇偶校驗算法判斷所述目標條帶單元中的數(shù)據(jù)是否正確;
如果是,則將所述目標條帶單元中的數(shù)據(jù)發(fā)送至所述主機;
如果否,則利用所述奇偶校驗算法將所述目標條帶單元中的數(shù)據(jù)進行恢復,并進入所述將所述目標條帶單元中的數(shù)據(jù)發(fā)送至所述主機的步驟。
優(yōu)選地,所述利用奇偶校驗算法判斷所述目標條帶單元中的數(shù)據(jù)是否正確具體包括:
讀取所述目標條帶單元的已存數(shù)據(jù)以及所述目標條帶單元對應的已存第一奇偶校驗數(shù)據(jù);
按照所述奇偶校驗算法將所述目標條帶單元的已存數(shù)據(jù)生成新第一奇偶校驗數(shù)據(jù);
判斷已存第一奇偶校驗數(shù)據(jù)與所述新第一奇偶校驗數(shù)據(jù)是否相同;
其中,如果是,則進入所述將所述目標條帶單元中的數(shù)據(jù)發(fā)送至所述主機的步驟,否則,進入所述利用所述奇偶校驗算法將所述目標條帶單元中的數(shù)據(jù)進行恢復的步驟。
優(yōu)選地,所述利用所述奇偶校驗算法將所述目標條帶單元中的數(shù)據(jù)進行恢復具體包括:
獲取所述目標條帶單元所在條帶的第二奇偶校驗數(shù)據(jù)以及所述目標條帶單元所在條帶的其余各條帶單元的已存數(shù)據(jù),并按照所述奇偶校驗算法生成所述目標條帶單元對應的新數(shù)據(jù);
按照所述奇偶校驗算法將所述目標條帶單元對應的新數(shù)據(jù)生成對比第一奇偶校驗數(shù)據(jù);
判斷所述對比第一奇偶校驗數(shù)據(jù)與所述已存第一奇偶校驗數(shù)據(jù)是否相同;
如果是,則將所述目標條帶單元對應的新數(shù)據(jù)覆蓋所述目標條帶單元的已存數(shù)據(jù),并進入所述將所述目標條帶單元中的數(shù)據(jù)發(fā)送至所述主機的步驟;
如果否,則判斷所述目標條帶單元對應的新數(shù)據(jù)與所述目標條帶單元的已存數(shù)據(jù)是否相同;
如果否,則輸出提示錯誤的信息;
如果是,則按照所述奇偶校驗算法修改所述目標條帶單元所在條帶的各條帶單元所對應的第一奇偶校驗數(shù)據(jù),并進入所述將所述目標條帶單元中的數(shù)據(jù)發(fā)送至所述主機的步驟。
優(yōu)選地,所述利用奇偶校驗算法判斷所述目標條帶單元中的數(shù)據(jù)是否正確具體包括:
按照所述奇偶校驗算法計算所述目標條帶單元所在條帶的第二奇偶校驗數(shù)據(jù);
判斷計算得到的第二奇偶校驗數(shù)據(jù)與已存第二奇偶校驗數(shù)據(jù)是否相同;
其中,如果是,則進入所述將所述目標條帶單元中的數(shù)據(jù)發(fā)送至所述主機的步驟,否則,進入所述利用所述奇偶校驗算法將所述目標條帶單元中的數(shù)據(jù)進行恢復的步驟。
優(yōu)選地,所述利用所述奇偶校驗算法將所述目標條帶單元中的數(shù)據(jù)進行恢復具體包括:
設置所述目標條帶單元所在條帶的第一條帶單元為起始單元;
按照所述奇偶校驗算法將當前條帶的已存第二奇偶校驗數(shù)據(jù)和所述目標條帶單元所在條帶的其余各條帶單元的已存第一奇偶校驗數(shù)據(jù)生成當前條帶單元對應的新數(shù)據(jù);
將所述當前條帶單元對應的新數(shù)據(jù)與所述目標條帶單元所在條帶的其余各條帶單元的已存數(shù)據(jù)生成當前條帶對應的新校驗和;
判斷所述當前條帶對應的新校驗和與已存校驗和是否相同;
如果是,則將所述當前條帶單元對應的新數(shù)據(jù)覆蓋當前條帶單元的已存數(shù)據(jù),并進入所述將所述目標條帶單元中的數(shù)據(jù)發(fā)送至所述主機的步驟;
如果否,則判斷當前條帶單元是否為最后一個存儲數(shù)據(jù)的條帶單元;
如果是,則輸出提示錯誤的信息;如果否,則將當前條帶單元的下一個條帶單元作為當前條帶單元,并返回。
為解決上述技術問題,本發(fā)明還提供一種RAID存儲系統(tǒng)的數(shù)據(jù)發(fā)送裝置,包括:
查找單元,用于接收主機發(fā)送的讀取指令,并按照所述讀取指令查找到目標條帶單元;
判斷單元,用于利用奇偶校驗算法判斷所述目標條帶單元中的數(shù)據(jù)是否正確;
恢復單元,用于在所述判斷單元的判斷結果為否時,利用所述奇偶校驗算法將所述目標條帶單元中的數(shù)據(jù)進行恢復;
發(fā)送單元,用于在所述判斷單元的判斷結果為是,或所述恢復單元將數(shù)據(jù)進行恢復后,將所述目標條帶單元中的數(shù)據(jù)發(fā)送至所述主機。
優(yōu)選地,所述判斷單元具體包括:
讀取模塊,用于讀取所述目標條帶單元的已存數(shù)據(jù)以及所述目標條帶單元對應的已存第一奇偶校驗數(shù)據(jù);
第一生成模塊,用于按照所述奇偶校驗算法將所述目標條帶單元的已存數(shù)據(jù)生成新第一奇偶校驗數(shù)據(jù);
第一判斷模塊,用于判斷已存第一奇偶校驗數(shù)據(jù)與所述新第一奇偶校驗數(shù)據(jù)是否相同,如果是,則觸發(fā)所述發(fā)送單元,否則,觸發(fā)所述恢復單元。
優(yōu)選地,所述恢復單元具體包括:
第二生成模塊,用于獲取所述目標條帶單元所在條帶的第二奇偶校驗數(shù)據(jù)以及所述目標條帶單元所在條帶的其余各條帶單元的已存數(shù)據(jù),并按照所述奇偶校驗算法生成所述目標條帶單元對應的新數(shù)據(jù);
第三生成模塊,用于按照所述奇偶校驗算法將所述目標條帶單元對應的新數(shù)據(jù)生成對比第一奇偶校驗數(shù)據(jù);
第二判斷模塊,用于判斷所述對比第一奇偶校驗數(shù)據(jù)與所述已存第一奇偶校驗數(shù)據(jù)是否相同;
第一覆蓋模塊,用于在所述第二判斷模塊的判斷結果為是時,將所述目標條帶單元對應的新數(shù)據(jù)覆蓋所述目標條帶單元的已存數(shù)據(jù),并觸發(fā)所述發(fā)送單元;
第三判斷模塊,用于在所述第二判斷模塊的判斷結果為否時,判斷所述目標條帶單元對應的新數(shù)據(jù)與所述目標條帶單元的已存數(shù)據(jù)是否相同;
第一輸出模塊,用于在所述第三判斷模塊的判斷結果為否時,輸出提示錯誤的信息;
修改模塊,用不在所述第三判斷模塊的判斷結果為是時,按照所述奇偶校驗算法修改所述目標條帶單元所在條帶的各條帶單元所對應的第一奇偶校驗數(shù)據(jù),并觸發(fā)所述發(fā)送單元。
優(yōu)選地,所述判斷單元具體包括:
計算模塊,用于按照所述奇偶校驗算法計算所述目標條帶單元所在條帶的第二奇偶校驗數(shù)據(jù);
第四判斷模塊,用于判斷計算得到的第二奇偶校驗數(shù)據(jù)與已存第二奇偶校驗數(shù)據(jù)是否相同,如果是,則觸發(fā)所述發(fā)送單元,否則,觸發(fā)所述恢復單元。
優(yōu)選地,所述恢復單元具體包括:
設置模塊,用于設置所述目標條帶單元所在條帶的第一條帶單元為起始單元;
第四生成模塊,用于按照所述奇偶校驗算法將當前條帶的已存第二奇偶校驗數(shù)據(jù)和所述目標條帶單元所在條帶的其余各條帶單元的已存第一奇偶校驗數(shù)據(jù)生成當前條帶單元對應的新數(shù)據(jù);
第五生成模塊,用于將所述當前條帶單元對應的新數(shù)據(jù)與所述目標條帶單元所在條帶的其余各條帶單元的已存數(shù)據(jù)生成當前條帶對應的新校驗和;
第五判斷模塊,用于判斷所述當前條帶對應的新校驗和與已存校驗和是否相同;
第二覆蓋模塊,用于所述第五判斷模塊的判斷結果為是時,將所述當前條帶單元對應的新數(shù)據(jù)覆蓋當前條帶單元的已存數(shù)據(jù),并觸發(fā)所述發(fā)送單元;
第六判斷模塊,用于所述第五判斷模塊的判斷結果為否時,判斷當前條帶單元是否為最后一個存儲數(shù)據(jù)的條帶單元;
第二輸出模塊,用于在所述第六判斷模塊的判斷結果為是時,輸出提示錯誤的信息;
遞增模塊,用于在所述第六判斷模塊的判斷結果為否時,將當前條帶單元的下一個條帶單元作為當前條帶單元,并觸發(fā)所述第四生成模塊。
本發(fā)明所提供的RAID存儲系統(tǒng)的數(shù)據(jù)發(fā)送方法及裝置,該方法包括:接收主機發(fā)送的讀取指令,并按照讀取指令查找到目標條帶單元;利用奇偶校驗算法判斷目標條帶單元中的數(shù)據(jù)是否正確;如果是,則將目標條帶單元中的數(shù)據(jù)發(fā)送至主機;如果否,則利用奇偶校驗算法將目標條帶單元中的數(shù)據(jù)進行恢復,并進入將目標條帶單元中的數(shù)據(jù)發(fā)送至主機的步驟。由此可見,RAID存儲系統(tǒng)接收到主機的讀取指令時,會將相應的目標條帶單元的數(shù)據(jù)進行檢驗,在確保數(shù)據(jù)正確的前提下,才將數(shù)據(jù)發(fā)送給主機,這樣不僅避免了錯誤數(shù)據(jù)的發(fā)送,而且更重要的是,能夠保證數(shù)據(jù)發(fā)送的有效性和提高發(fā)送的效率。
附圖說明
為了更清楚地說明本發(fā)明實施例,下面將對實施例中所需要使用的附圖做簡單的介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明實施例提供的一種RAID存儲系統(tǒng)的數(shù)據(jù)發(fā)送方法的流程圖;
圖2為本發(fā)明實施例提供的一種主機與RAID存儲系統(tǒng)的結構圖;
圖3為本發(fā)明實施例提供的一種數(shù)據(jù)卷與校驗數(shù)據(jù)在RAID存儲系統(tǒng)上的分布示意圖;
圖4為本發(fā)明實施例提供的另一種數(shù)據(jù)卷與校驗數(shù)據(jù)在RAID存儲系統(tǒng)上的分布示意圖;
圖5為本發(fā)明實施例提供的另一種RAID存儲系統(tǒng)的數(shù)據(jù)發(fā)送的流程圖;
圖6為本發(fā)明實施例提供的另一種RAID存儲系統(tǒng)的數(shù)據(jù)發(fā)送方法的流程圖;
圖7為本發(fā)明實施例提供的一種步驟S13的流程圖;
圖8為本發(fā)明實施例公開的一種RAID存儲系統(tǒng)的數(shù)據(jù)發(fā)送裝置的結構圖。
具體實施方式
下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部實施例?;诒景l(fā)明中的實施例,本領域普通技術人員在沒有做出創(chuàng)造性勞動前提下,所獲得的所有其他實施例,都屬于本發(fā)明保護范圍。
本發(fā)明的核心是提供一種RAID存儲系統(tǒng)的數(shù)據(jù)發(fā)送方法及裝置,用于在主機發(fā)出讀取指令時,控制器如何能夠快速有效地向主機提供正確的數(shù)據(jù),從而保證讀取的效率和有效性。
為了使本技術領域的人員更好地理解本發(fā)明方案,下面結合附圖和具體實施方式對本發(fā)明作進一步的詳細說明。
圖1為本發(fā)明實施例提供的一種RAID存儲系統(tǒng)的數(shù)據(jù)發(fā)送方法的流程圖。如圖1所示,RAID存儲系統(tǒng)的數(shù)據(jù)發(fā)送方法包括:
S10:接收主機發(fā)送的讀取指令,并按照讀取指令查找到目標條帶單元。
S11:利用奇偶校驗算法判斷目標條帶單元中的數(shù)據(jù)是否正確;如果是,進入步驟S12,否則,進入步驟S13。
S12:將目標條帶單元中的數(shù)據(jù)發(fā)送至主機。
S13:利用奇偶校驗算法將目標條帶單元中的數(shù)據(jù)進行恢復,并進入步驟S12。
圖2為本發(fā)明實施例提供的一種主機與RAID存儲系統(tǒng)的結構圖。如圖2所示,RAID存儲系統(tǒng)10與主機12進行數(shù)據(jù)交互,RAID存儲系統(tǒng)10中包含了多個磁盤,如圖2所示,16(1)-16(6)均為磁盤,RAID存儲系統(tǒng)10中包括RAID控制器18,用于直接與各磁盤進行數(shù)據(jù)交互??梢岳斫獾氖牵瑘D2只是一種具體示例,并不代表RAID存儲系統(tǒng)10只有6個磁盤。
RAID控制器18可能以擁有一個或多個處理器的計算機的形式存在于系統(tǒng)中,該計算機能根據(jù)存于可讀介質中的執(zhí)行命令進行數(shù)據(jù)的處理。RAID控制器18能夠同時從磁盤16(1)-16(6)中同時讀取數(shù)據(jù)。磁盤16(1)-16(5)包含了1個或多個數(shù)據(jù)卷,為了便于解釋,我們假設磁盤16(1)-16(5)存儲了一個數(shù)據(jù)卷,此假設目的是為了便于解釋,實際場景中可能存在多個數(shù)據(jù)卷。除了存儲數(shù)據(jù)卷,磁盤16(1)-16(5)同時存儲了第一奇偶校驗數(shù)據(jù),磁盤16(6)存儲了第二奇偶校驗數(shù)據(jù)。RAID存儲系統(tǒng)10被配置后用來接收來自主機12對數(shù)據(jù)卷的各類請求。RAID存儲系統(tǒng)10也可能被配置接收來自于其他計算機系統(tǒng)的請求,在此不進行過多贅述。
當RAID存儲系統(tǒng)10接收到讀取指令時,首先查找到目標條帶單元,即找到與讀取指令相對應的條帶單元,然后再根據(jù)奇偶校驗算法判斷目標條帶單元中的數(shù)據(jù)是否是正確的,如果是正確的,說明這個數(shù)據(jù)在寫入目標條帶單元是正確的,也是主機12所想要的數(shù)據(jù),則將該數(shù)據(jù)發(fā)送至主機12。相反,當判斷出目標條帶單元中的數(shù)據(jù)不正確的話,則說明在對目標條帶單元寫入數(shù)據(jù)的過程中發(fā)生錯誤,則需要對目標條帶單元中的數(shù)據(jù)進行恢復,從而保證發(fā)送給主機12的數(shù)據(jù)是正確的數(shù)據(jù)。
本實施例提供的RAID存儲系統(tǒng)的數(shù)據(jù)發(fā)送方法,在RAID存儲系統(tǒng)接收到主機的讀取指令時,會將相應的目標條帶單元的數(shù)據(jù)進行檢驗,在確保數(shù)據(jù)正確的前提下,才將數(shù)據(jù)發(fā)送給主機,這樣不僅避免了錯誤數(shù)據(jù)的發(fā)送,而且更重要的是,能夠保證數(shù)據(jù)發(fā)送的有效性和提高發(fā)送的效率。
為了更加清楚磁盤的存儲狀態(tài),給出圖3和圖4。圖3為本發(fā)明實施例提供的一種數(shù)據(jù)卷與校驗數(shù)據(jù)在RAID存儲系統(tǒng)上的分布示意圖。圖4為本發(fā)明實施例提供的另一種數(shù)據(jù)卷與校驗數(shù)據(jù)在RAID存儲系統(tǒng)上的分布示意圖。圖3與圖4為兩種不同的分布,下文將詳細說明。需要說明的是,每個磁盤中均包含有多個條帶單元,不同磁盤的條帶單元構成多個條帶。
對于圖3來說
圖3展示了條帶S1-Smax在磁盤16(1)-16(6)上的分布。具體為:磁盤16(1)-16(4)這4個磁盤用來存儲數(shù)據(jù),16(5)用來存儲第二奇偶校驗數(shù)據(jù),16(6)用來存儲第一奇偶校驗數(shù)據(jù)。不同磁盤的同一序號的條帶單元構成一個條帶。例如條帶單元B1,1為16(1)的第一個條帶單元、條帶單元B1,2為16(2)的第一個條帶單元、條帶單元B1,3為16(3)的第一個條帶單元、條帶單元B1,4為16(4)的第一個條帶單元,條帶單元SP1為16(5)的第一個條帶單元,則條帶單元B1,1、條帶單元B1,2、條帶單元B1,3、條帶單元B1,4以及條帶單元SP1就構成了第一條帶S1,以此類推得到第二條帶S2、第三條帶S3和第四條帶S4。16(6)用來存儲第一奇偶校驗數(shù)據(jù),包括多個條帶單元,各條帶單元與磁盤16(1)-16(4)中的各條帶單元一一對應,即磁盤16(1)-16(4)中的各條帶單元均有自己的第一奇偶校驗數(shù)據(jù),同一條帶上的4個條帶單元共同擁有一個第二奇偶校驗數(shù)據(jù)。在圖3中,第一奇偶校驗數(shù)據(jù)用Py,x來表示,第二奇偶校驗數(shù)據(jù)用SPy表示y和x均為由1開始的正整數(shù)。
在具體實施中,每個條帶單元SPy存儲了根據(jù)條帶單元By,1-By,4計算得來的第二奇偶校驗數(shù)據(jù),此數(shù)據(jù)是根據(jù)條帶單元By,1-By,4的邏輯亦或計算得來的。
每個條帶Sy在磁盤16(6)上都有對應的第一奇偶校驗數(shù)據(jù)。在圖3中,每個第一奇偶校驗數(shù)據(jù)都存儲在單元Py,1-Py,4中,每個單元Py,x都有與之相對應的條帶單元By,x。每個單元Py,x都存儲著由條帶單元By,x邏輯亦或計算得來的第二奇偶校驗數(shù)據(jù)。
主機12與RAID存儲系統(tǒng)10的數(shù)據(jù)交互過程為:由Py,x和SPy分別得來的第一、第二奇偶檢驗數(shù)據(jù),在每次條帶單元被改變后能實時更新。例如,RAID控制器18收到來自主機12在條帶單元By,x上覆蓋寫入新數(shù)據(jù)的請求,相應的,RAID控制器18接收到請求,從已存條帶單元By,x上讀取數(shù)據(jù),從Py,x和SPy讀取第一、第二奇偶檢驗數(shù)據(jù)。接著,RAID控制器18為條帶單元SPy生成新的第二奇偶校驗數(shù)據(jù),此數(shù)據(jù)通過在條帶單元SPy上已存的第二奇偶校驗數(shù)據(jù),和從主機12接收到的新數(shù)據(jù),與條帶單元By,x上的已存數(shù)據(jù)得來;相應的,RAID控制器18同時也為單元Py,x生成新的第一奇偶校驗數(shù)據(jù),此數(shù)據(jù)通過Py,x已存奇偶校驗數(shù)據(jù),從主機12得到的新數(shù)據(jù),與條帶單元By,x上的已存數(shù)據(jù)得來。RAID控制器18在SPy上新生成的第二奇偶校驗數(shù)據(jù)覆蓋在SPy上已存的第二奇偶校驗數(shù)據(jù),使在Py,x上新生成的第一奇偶校驗數(shù)據(jù)覆蓋在Py,x上已存的第一奇偶校驗數(shù)據(jù),使在By,x上新接收的數(shù)據(jù)覆蓋已存的數(shù)據(jù)。
圖5為本發(fā)明實施例提供的另一種RAID存儲系統(tǒng)的數(shù)據(jù)發(fā)送的流程圖。如圖5所示,與上述實施例相同的步驟本實施例不再贅述。在上述實施例的基礎上,步驟S11具體包括:
S110:讀取目標條帶單元的已存數(shù)據(jù)以及目標條帶單元對應的已存第一奇偶校驗數(shù)據(jù)。
S111:按照奇偶校驗算法將目標條帶單元的已存數(shù)據(jù)生成新第一奇偶校驗數(shù)據(jù)。
S112:判斷已存第一奇偶校驗數(shù)據(jù)與新第一奇偶校驗數(shù)據(jù)是否相同。
其中,如果是,則進入步驟S12,否則,進入步驟S13。
在另一實施例中,步驟S13具體包括:
S130:獲取目標條帶單元所在條帶的第二奇偶校驗數(shù)據(jù)以及目標條帶單元所在條帶的其余各條帶單元的已存數(shù)據(jù),并按照奇偶校驗算法生成目標條帶單元對應的新數(shù)據(jù)。
S131:按照奇偶校驗算法將目標條帶單元對應的新數(shù)據(jù)生成對比第一奇偶校驗數(shù)據(jù)。
S132:判斷對比第一奇偶校驗數(shù)據(jù)與已存第一奇偶校驗數(shù)據(jù)是否相同,如果是,則進入步驟S133,否則,進入步驟S134。
S133:將目標條帶單元對應的新數(shù)據(jù)覆蓋目標條帶單元的已存數(shù)據(jù),并進入步驟S12。
S134:判斷目標條帶單元對應的新數(shù)據(jù)與目標條帶單元的已存數(shù)據(jù)是否相同,如果是,則進入步驟S136,否則,進入步驟S135。
S135:輸出提示錯誤的信息。
S136:按照奇偶校驗算法修改目標條帶單元所在條帶的各條帶單元所對應的第一奇偶校驗數(shù)據(jù),并進入步驟S12。
當RAID控制器18接收到讀取條帶單元By,x上數(shù)據(jù)的請求時,作為回應,RAID控制器18讀取在條帶單元By,x上的已存數(shù)據(jù)Dold,在條帶單元Py,x上的已存第一奇偶數(shù)據(jù)Pold。接著,RAID控制器18根據(jù)已存數(shù)據(jù)Dold生成新第一奇偶校驗數(shù)據(jù)Pnew。其中,用于生成Pnew的算法與生成在磁盤16(6)中Py,x上的Pold的算法相同。RAID控制器18對Pnew與Pold進行對比,如果新第一奇偶校驗數(shù)據(jù)Pnew與已存第一奇偶校驗數(shù)據(jù)Pold不相同,則認為被請求的數(shù)據(jù)已經損壞,Pold被錯誤生成;當新第一奇偶校驗數(shù)據(jù)Pnew與Pold對比相同,則說明可以將條帶單元By,x上的數(shù)據(jù)被返回主機12。
如果Pnew與Pold不相等,則RAID控制器18讀取本條帶中除By,x的其余條帶單元上的數(shù)據(jù),與條帶單元SPy上的第二奇偶校驗數(shù)據(jù),并生成目標條帶單元對應的新數(shù)據(jù)Dnew,更詳細地說,目標條帶單元對應的新數(shù)據(jù)Dnew根據(jù)條帶單元By,1-By,4上的數(shù)據(jù)與條帶單元SPy上的第二奇偶校驗數(shù)據(jù)生成。然后再根據(jù)新數(shù)據(jù)Dnew再生成一個對比第一奇偶校驗數(shù)據(jù)P'new。用于生成P'new的算法與生成Pnew的算法相同。比較P'new與Pnew,如果P'new與Pnew相同,則在條帶單元By,x上的已存數(shù)據(jù)Dold被Dnew覆蓋寫入。然而,當額外生成的對比第一奇偶校驗數(shù)據(jù)P'new與Pnew不相同,則比較新數(shù)據(jù)Dnew與Dold是否相等。
如果Dnew與Dold比較后不相同,則向主機12返回一個錯誤信息,表明RAID存儲系統(tǒng)10有過多的數(shù)據(jù)損壞。
如果Dnew與Dold比較后相同,則說明本條帶中的某一個或某幾個第一奇偶校驗數(shù)據(jù)發(fā)生錯誤,需要按照奇偶校驗算法進行修復。每一個第一奇偶校驗數(shù)據(jù)的具體修復過程為:
根據(jù)條帶單元By,x中的已存數(shù)據(jù)生成新奇偶校驗數(shù)據(jù)Pnew(i)。用于生成Pnew的算法與生成Py,x上的Pold的算法相同。接著將Pnew(i)寫入覆蓋掉Pold(i)。重復上述過程,知道將本條帶中全部的第一奇偶校驗數(shù)據(jù)修改完為止。其中下標i表示多個條帶單元依次循環(huán)進行。
圖5展示了RAID存儲系統(tǒng)10接收了只對條帶單元By,x的讀取數(shù)據(jù)請求。然而,若RAID存儲系統(tǒng)10接收到讀取多個條帶單元數(shù)據(jù)的請求,則都會重復一次圖5中的流程。從時間上來講,圖5流程可能比當前技術流程所用時間更長,但卻增加了返回到主機12的數(shù)據(jù)的有效性和可靠性,相對于現(xiàn)有技術中,可能會無限制的發(fā)送錯誤數(shù)據(jù)來說,本發(fā)明提供的方法所用的時間也是較少的,因此在一定程度上,效率也是較高的。
對于圖4來說
圖4與圖3相同的地方,本實施例不再贅述,磁盤16(6)上還存儲了另一種數(shù)據(jù),即校驗和。與條帶S1-Smax相對應的校驗和CS1-CSmax,在一個系統(tǒng)中,每個校驗和數(shù)據(jù)CSy都由條帶單元By,1-By,4與和條帶Sy相對應的SPy計算得來;其中,生成CSy的算法與生成SPy的算法不相同,且無論CSy是怎樣的數(shù)據(jù)形式,任意條帶單元By,x的數(shù)據(jù)都能根據(jù)CSy與SPy中的數(shù)據(jù)生成。
如Py,x一樣,校驗和數(shù)據(jù)CSy會在每次條帶單元By,x改變時更新。當RAID控制器18接收到來自主機12對條帶單元By,x的覆蓋寫請求時,RAID控制器18讀取在條帶單元By,x上的已有數(shù)據(jù),SPy上的第二奇偶校驗數(shù)據(jù),CSy校驗和;接著,RAID控制器18根據(jù)條帶單元SPy上的第二奇偶數(shù)據(jù),從主機12接收到的新數(shù)據(jù),與條帶單元By,x上已存的數(shù)據(jù)為SPy生成新的第二奇偶校驗數(shù)據(jù)。同時,RAID控制器18也會根據(jù)CSy上的已存校驗和,從主機12接收到的新數(shù)據(jù),與條帶單元By,x上的已存數(shù)據(jù)為CSy生成新的校驗和。因此,RAID控制器18覆蓋寫入了在SPy上的新第二奇偶校驗數(shù)據(jù),在CSy上的新校驗和,在By,x上的來自主機12的新數(shù)據(jù)。
圖6為本發(fā)明實施例提供的另一種RAID存儲系統(tǒng)的數(shù)據(jù)發(fā)送方法的流程圖。如圖6所示,與上述實施例相同的步驟,本實施例不再贅述,步驟S11具體包括:
S113:按照奇偶校驗算法計算目標條帶單元所在條帶的第二奇偶校驗數(shù)據(jù)。
S114:判斷計算得到的第二奇偶校驗數(shù)據(jù)與已存第二奇偶校驗數(shù)據(jù)是否相同,其中,如果是,則進入步驟S12,否則,進入步驟S13。
圖7為本發(fā)明實施例提供的一種步驟S13的流程圖。如圖7所示,步驟S13具體包括:
S137:設置目標條帶單元所在條帶的第一條帶單元為起始單元。
S138:按照奇偶校驗算法將當前條帶的已存第二奇偶校驗數(shù)據(jù)和目標條帶單元所在條帶的其余各條帶單元的已存第一奇偶校驗數(shù)據(jù)生成當前條帶單元對應的新數(shù)據(jù)。
S139:將當前條帶單元對應的新數(shù)據(jù)與目標條帶單元所在條帶的其余各條帶單元的已存數(shù)據(jù)生成當前條帶對應的新校驗和。
S140:判斷當前條帶對應的新校驗和與已存校驗和是否相同,如果是,進入步驟S141,否則進入步驟S142。
S141:將當前條帶單元對應的新數(shù)據(jù)覆蓋當前條帶單元的已存數(shù)據(jù),并進入步驟S12。
S142:判斷當前條帶單元是否為最后一個存儲數(shù)據(jù)的條帶單元,如果是,則進入步驟S143,否則,進入步驟S144。
S143:輸出提示錯誤的信息;
S144:將當前條帶單元的下一個條帶單元作為當前條帶單元,并返回步驟S138。
RAID控制器18接受了來主機12的讀取數(shù)據(jù)請求,被請求的數(shù)據(jù)存儲在條帶單元By,x中。RAID控制器18根據(jù)條帶單元By,1-By,4的數(shù)據(jù)生成新第二奇偶校驗數(shù)據(jù)Pnew。值得注意的是,Pnew的生成算法與生成條帶單元SPy上的已存奇偶校驗數(shù)據(jù)Pold相同。接著RAID控制器18比較Pnew與Pold。
若Pnew與Pold相等,則認為條帶單元By,x上的數(shù)據(jù)是有效的,并發(fā)送至主機12。
當Pnew與Pold不相同時,則認為損壞數(shù)據(jù)存在于條帶單元By,1-By,4中,需要對各條帶單元的數(shù)據(jù)進行恢復。在具體實施中,可以設置一個虛擬變量i,一次對每個條帶單元的數(shù)據(jù)進行恢復,本實施例不再贅述,參見圖6。
在步驟S139中,RAID控制器18生成新校驗和CSnew。值得注意的是,生成CSnew的算法與生成在磁盤16(6)上CS1-CSmax的算法相同。
上述實施例中,公開了RAID存儲系統(tǒng)的數(shù)據(jù)發(fā)送對應的幾個實施例,下文中,將相對應的給出RAID存儲系統(tǒng)的數(shù)據(jù)發(fā)送裝置對應的實施例。由于RAID存儲系統(tǒng)的數(shù)據(jù)發(fā)送裝置與RAID存儲系統(tǒng)的數(shù)據(jù)發(fā)送方法相對應,因此,具體實施方式參見上文的說明,本實施例不再贅述。圖8為本發(fā)明實施例公開的一種RAID存儲系統(tǒng)的數(shù)據(jù)發(fā)送裝置的結構圖。如圖8所述,該裝置包括:
查找單元1,用于接收主機發(fā)送的讀取指令,并按照讀取指令查找到目標條帶單元;
判斷單元2,用于利用奇偶校驗算法判斷目標條帶單元中的數(shù)據(jù)是否正確;
恢復單元3,用于在判斷單元的判斷結果為否時,利用奇偶校驗算法將目標條帶單元中的數(shù)據(jù)進行恢復;
發(fā)送單元4,用于在判斷單元的判斷結果為是,或恢復單元將數(shù)據(jù)進行恢復后,將目標條帶單元中的數(shù)據(jù)發(fā)送至主機。
作為優(yōu)選的實施方式,判斷單元2具體包括:
讀取模塊,用于讀取目標條帶單元的已存數(shù)據(jù)以及目標條帶單元對應的已存第一奇偶校驗數(shù)據(jù);
第一生成模塊,用于按照奇偶校驗算法將目標條帶單元的已存數(shù)據(jù)生成新第一奇偶校驗數(shù)據(jù);
第一判斷模塊,用于判斷已存第一奇偶校驗數(shù)據(jù)與新第一奇偶校驗數(shù)據(jù)是否相同,如果是,則觸發(fā)發(fā)送單元,否則,觸發(fā)恢復單元。
作為優(yōu)選的實施方式,恢復單元3具體包括:
第二生成模塊,用于獲取目標條帶單元所在條帶的第二奇偶校驗數(shù)據(jù)以及目標條帶單元所在條帶的其余各條帶單元的已存數(shù)據(jù),并按照奇偶校驗算法生成目標條帶單元對應的新數(shù)據(jù);
第三生成模塊,用于按照奇偶校驗算法將目標條帶單元對應的新數(shù)據(jù)生成對比第一奇偶校驗數(shù)據(jù);
第二判斷模塊,用于判斷對比第一奇偶校驗數(shù)據(jù)與已存第一奇偶校驗數(shù)據(jù)是否相同;
第一覆蓋模塊,用于在第二判斷模塊的判斷結果為是時,將目標條帶單元對應的新數(shù)據(jù)覆蓋目標條帶單元的已存數(shù)據(jù),并觸發(fā)發(fā)送單元;
第三判斷模塊,用于在第二判斷模塊的判斷結果為否時,判斷目標條帶單元對應的新數(shù)據(jù)與目標條帶單元的已存數(shù)據(jù)是否相同;
第一輸出模塊,用于在第三判斷模塊的判斷結果為否時,輸出提示錯誤的信息;
修改模塊,用不在第三判斷模塊的判斷結果為是時,按照奇偶校驗算法修改目標條帶單元所在條帶的各條帶單元所對應的第一奇偶校驗數(shù)據(jù),并觸發(fā)發(fā)送單元。
在另外一個實施例中,判斷單元2具體包括:
計算模塊,用于按照奇偶校驗算法計算目標條帶單元所在條帶的第二奇偶校驗數(shù)據(jù);
第四判斷模塊,用于判斷計算得到的第二奇偶校驗數(shù)據(jù)與已存第二奇偶校驗數(shù)據(jù)是否相同,如果是,則觸發(fā)發(fā)送單元,否則,觸發(fā)恢復單元。
作為優(yōu)選地實施方式,恢復單元3具體包括:
設置模塊,用于設置目標條帶單元所在條帶的第一條帶單元為起始單元;
第四生成模塊,用于按照奇偶校驗算法將當前條帶的已存第二奇偶校驗數(shù)據(jù)和目標條帶單元所在條帶的其余各條帶單元的已存第一奇偶校驗數(shù)據(jù)生成當前條帶單元對應的新數(shù)據(jù);
第五生成模塊,用于將當前條帶單元對應的新數(shù)據(jù)與目標條帶單元所在條帶的其余各條帶單元的已存數(shù)據(jù)生成當前條帶對應的新校驗和;
第五判斷模塊,用于判斷當前條帶對應的新校驗和與已存校驗和是否相同;
第二覆蓋模塊,用于第五判斷模塊的判斷結果為是時,將當前條帶單元對應的新數(shù)據(jù)覆蓋當前條帶單元的已存數(shù)據(jù),并觸發(fā)發(fā)送單元;
第六判斷模塊,用于第五判斷模塊的判斷結果為否時,判斷當前條帶單元是否為最后一個存儲數(shù)據(jù)的條帶單元;
第二輸出模塊,用于在第六判斷模塊的判斷結果為是時,輸出提示錯誤的信息;
遞增模塊,用于在第六判斷模塊的判斷結果為否時,將當前條帶單元的下一個條帶單元作為當前條帶單元,并觸發(fā)第四生成模塊。
本實施例提供的RAID存儲系統(tǒng)的數(shù)據(jù)發(fā)送裝置,在RAID存儲系統(tǒng)接收到主機的讀取指令時,會將相應的目標條帶單元的數(shù)據(jù)進行檢驗,在確保數(shù)據(jù)正確的前提下,才將數(shù)據(jù)發(fā)送給主機,這樣不僅避免了錯誤數(shù)據(jù)的發(fā)送,而且更重要的是,能夠保證數(shù)據(jù)發(fā)送的有效性和提高發(fā)送的效率。
以上對本發(fā)明所提供的RAID存儲系統(tǒng)的數(shù)據(jù)發(fā)送方法及裝置進行了詳細介紹。說明書中各個實施例采用遞進的方式描述,每個實施例重點說明的都是與其他實施例的不同之處,各個實施例之間相同相似部分互相參見即可。對于實施例公開的裝置而言,由于其與實施例公開的方法相對應,所以描述的比較簡單,相關之處參見方法部分說明即可。應當指出,對于本技術領域的普通技術人員來說,在不脫離本發(fā)明原理的前提下,還可以對本發(fā)明進行若干改進和修飾,這些改進和修飾也落入本發(fā)明權利要求的保護范圍內。