專利名稱:一種磁盤陣列的數(shù)據(jù)重建方法
技術(shù)領(lǐng)域:
本發(fā)明屬于計(jì)算機(jī)數(shù)據(jù)存儲(chǔ)方法,具體涉及一種磁盤陣列的數(shù)據(jù)重 建方法。
背景技術(shù):
隨著計(jì)算機(jī)技術(shù)和網(wǎng)絡(luò)通信技術(shù)的發(fā)展,信息化程度越來(lái)越高,人們對(duì)數(shù)據(jù)可靠性的要求也越來(lái)越高。磁盤陣列RAID (Redundant Array of Independent Disks)是可靠存儲(chǔ)系統(tǒng)領(lǐng)域中的一個(gè)典型裝置,同單個(gè)磁盤 相比,磁盤陣列的性能、可用性和可靠性都有相當(dāng)大的提高,其中,鏡 像、奇偶校驗(yàn)、熱備份等都是磁盤陣列常用的容錯(cuò)技術(shù)。當(dāng)磁盤陣列中 某一個(gè)成員磁盤出現(xiàn)故障且加入新磁盤時(shí),磁盤陣列能夠自動(dòng)切換到重 建模式,重建進(jìn)程在不中斷應(yīng)用服務(wù)的情況下連續(xù)將故障盤上的數(shù)據(jù)塊 重建到新加入的磁盤中,直到故障盤上所有的數(shù)據(jù)塊都恢復(fù)到新加入的 磁盤中,磁盤陣列返回到正常讀寫模式。由于當(dāng)前的應(yīng)用服務(wù)都要求所 使用的存儲(chǔ)子系統(tǒng)同時(shí)具有高性能、高可用性和高可靠性,應(yīng)用程序不 僅要求磁盤陣列在成員磁盤出現(xiàn)故障時(shí)能夠重建故障盤上的數(shù)據(jù),更重 要的是其能夠盡可能的減少重建時(shí)間來(lái)保證系統(tǒng)的可靠性,并且要盡可 能的降低重建過(guò)程對(duì)系統(tǒng)性能的影響,因此磁盤陣列的數(shù)據(jù)重建方法至 關(guān)重要。近幾年,隨著計(jì)算機(jī)技術(shù)的不斷發(fā)展,磁盤容量越來(lái)越大,而磁盤 定位速度的增長(zhǎng)卻遠(yuǎn)遠(yuǎn)低于磁盤容量和帶寬的增長(zhǎng)速度。研究表明,磁 盤容量以每年60%的速度增長(zhǎng),帶寬每年增長(zhǎng)40%,而磁盤的尋道時(shí)間 和旋轉(zhuǎn)等待延遲每年才減少8%。另外,還有研究顯示,順序地讀取容量 為1 10TB的磁盤上的所有內(nèi)容需要5 15小時(shí),而如果是隨機(jī)地讀取200810047977.3說(shuō)明書第2/6頁(yè)則需要15 150天。實(shí)驗(yàn)發(fā)現(xiàn)在I/0訪問(wèn)頻繁時(shí),對(duì)于磁盤陣列級(jí)別5, 重建一個(gè)500GB的磁盤需要幾天的時(shí)間。這些研究和實(shí)驗(yàn)都表明,隨著 磁盤容量的迅速增長(zhǎng)和訪問(wèn)速度的緩慢提高,磁盤陣列的數(shù)據(jù)重建過(guò)程 需要越來(lái)越多的時(shí)間,嚴(yán)重影響了基于磁盤陣列的存儲(chǔ)系統(tǒng)的可靠性和 可用性?,F(xiàn)有的Linux操作系統(tǒng)內(nèi)核中磁盤陣列控制軟件的數(shù)據(jù)重建方法, 即使有大量的磁盤空間自磁盤陣列創(chuàng)建以來(lái)都沒有被使用過(guò),重建過(guò)程 也都必須讀取所有工作盤上的數(shù)據(jù)塊,計(jì)算校驗(yàn)后將結(jié)果寫入新加入的 磁盤中,如此一來(lái),重建過(guò)程需要過(guò)多的時(shí)間,影響了存儲(chǔ)系統(tǒng)的讀寫 性能和可靠性。發(fā)明內(nèi)容本發(fā)明提出一種磁盤陣列的數(shù)據(jù)重建方法,解決現(xiàn)有的磁盤陣列數(shù) 據(jù)重建方法需要時(shí)間過(guò)多、影響存儲(chǔ)系統(tǒng)的讀寫性能和可靠性的問(wèn)題。本發(fā)明的一種磁盤陣列的數(shù)據(jù)重建方法,磁盤陣列上設(shè)置主控模塊、 讀寫處理模塊和重建模塊,包括初始化、日志位圖表更新、基于日志的重建和結(jié)束步驟;其特征在于(1)初始化步驟,順序進(jìn)行下述過(guò)程-(1.1) 根據(jù)用戶指令,打開已有磁盤陣列或創(chuàng)建新磁盤陣列;(1.2) 主控模塊創(chuàng)建該磁盤陣列的日志位圖表,日志位圖表的每一位對(duì) 應(yīng)磁盤陣列的一個(gè)條帶;(1.3) 主控模塊判斷該磁盤陣列是否為創(chuàng)建的新磁盤陣列,是則轉(zhuǎn)過(guò)程(1.4) ,否則轉(zhuǎn)過(guò)程(1.5);(1.4)主控模塊將其日志位圖表中所有位均初始化為0,且將磁盤陣列 中所有成員磁盤上的數(shù)據(jù)塊全部初始化為0,進(jìn)行步驟(2); (1. 5)主控模塊讀取存放于該磁盤陣列成員磁盤超級(jí)塊中的日志位圖表信息到內(nèi)存中以便對(duì)其實(shí)時(shí)修改,進(jìn)行步驟(2);(2) 日志位圖表更新步驟,進(jìn)行下述過(guò)程(2.1) 該磁盤陣列等待上層命令,并判斷其是否為寫請(qǐng)求,是則轉(zhuǎn)過(guò)程(2.2) ,否則轉(zhuǎn)過(guò)程(2,4);(2.2) 接收到寫請(qǐng)求,讀寫處理模塊將該寫請(qǐng)求所對(duì)應(yīng)磁盤陣列的條帶 在日志位圖表中對(duì)應(yīng)的位更新為1,標(biāo)明該條帶己被訪問(wèn)過(guò);(2.3) 讀寫處理模塊將該寫請(qǐng)求發(fā)向底層磁盤設(shè)備,將寫請(qǐng)求的數(shù)據(jù)寫 入磁盤陣列成員磁盤的正確位置,轉(zhuǎn)過(guò)程(2.1);(2.4) 接收到讀請(qǐng)求,讀寫處理模塊將該讀請(qǐng)求發(fā)向底層磁盤設(shè)備,從磁盤陣列成員磁盤的正確位置讀取數(shù)據(jù),轉(zhuǎn)過(guò)程(2.1);(3) 基于日志的重建步驟,當(dāng)主控模塊發(fā)現(xiàn)磁盤陣列成員磁盤出現(xiàn)故障時(shí),進(jìn)行下述過(guò)程(3. 1)重建模塊判斷磁盤陣列某一條帶在日志位圖表中對(duì)應(yīng)的位是否為 0,是則轉(zhuǎn)過(guò)程(3.2),否則轉(zhuǎn)過(guò)程(3.3);(3.2) 該條帶從未被訪問(wèn)過(guò),向新加入的替換磁盤中位于該條帶的數(shù)據(jù) 塊內(nèi)全部寫入0,轉(zhuǎn)過(guò)程(3.4);(3.3) 該條帶已被訪問(wèn)過(guò),讀取所有工作盤上位于該條帶的數(shù)據(jù)塊,計(jì) 算校驗(yàn)后將結(jié)果寫入新加入的替換磁盤中位于該條帶的數(shù)據(jù)塊內(nèi),轉(zhuǎn)過(guò) 程(3.4);(3.4) 重復(fù)執(zhí)行(3.1) — (3.3),直至磁盤陣列上所有條帶都重建完畢;(4) 結(jié)束步驟,當(dāng)用戶發(fā)出指令關(guān)閉磁盤陣列時(shí),進(jìn)行下述過(guò)程(4.1) 關(guān)閉磁盤陣列之前,主控模塊將日志位圖表保存到磁盤陣列各成 員磁盤的超級(jí)塊中; '(4.2) 關(guān)閉該磁盤陣列設(shè)備,釋放相關(guān)的資源。本發(fā)明基于一個(gè)普遍存在的現(xiàn)象,即磁盤在剛開始使用時(shí)故障率較高,導(dǎo)致磁盤陣列的成員磁盤出現(xiàn)故障時(shí)磁盤陣列的空間利用率很低, 磁盤陣列中有相當(dāng)一部分的條帶從未被訪問(wèn)過(guò)。本發(fā)明通過(guò)在塊級(jí)實(shí)時(shí) 監(jiān)控磁盤陣列的磁盤空間使用情況來(lái)指導(dǎo)磁盤陣列的數(shù)據(jù)重建過(guò)程,重 建未被訪問(wèn)的空間時(shí)只需向新加入的磁盤中相應(yīng)的數(shù)據(jù)塊內(nèi)全部寫入O, 大大減少了重建帶來(lái)的物理磁盤訪問(wèn)次數(shù),從而加快了重建速度并且減 少了用戶訪問(wèn)的響應(yīng)時(shí)間。另外,本發(fā)明僅僅改變了未使用空間的重建 方法,并沒有改變重建的流程或磁盤陣列的數(shù)據(jù)分布方法,故可以很方 便地優(yōu)化各種傳統(tǒng)的磁盤陣列的重建方法,適用于構(gòu)造具有高性能,高 可用性和高可靠性的基于磁盤陣列的存儲(chǔ)系統(tǒng)。
圖l為本發(fā)明示意圖;圖2為本發(fā)明的初始化步驟過(guò)程示意圖;圖3為本發(fā)明的日志位圖表更新步驟過(guò)程示意圖;圖4為本發(fā)明的基于日志的重建步驟過(guò)程示意圖;圖5為本發(fā)明的結(jié)束步驟過(guò)程示意圖;圖6為本發(fā)明的新磁盤陣列數(shù)據(jù)初始化示意圖;圖7為本發(fā)明針對(duì)已被訪問(wèn)條帶的磁盤陣列的數(shù)據(jù)重建示意圖;圖8為本發(fā)明針對(duì)未被訪問(wèn)條帶的磁盤陣列的數(shù)據(jù)重建示意圖。
具體實(shí)施方式
下面以磁盤陣列級(jí)別5為例,結(jié)合附圖對(duì)本發(fā)明進(jìn)一步詳細(xì)說(shuō)明。圖1為本發(fā)明各步驟關(guān)系示意圖初始化步驟完成后進(jìn)入日志位圖 表更新步驟,磁盤陣列成員磁盤出現(xiàn)故障時(shí)進(jìn)入基于日志的重建步驟, 當(dāng)用戶發(fā)出關(guān)閉指令時(shí),進(jìn)入結(jié)束步驟。圖2為本發(fā)明的初始化步驟過(guò)程示意圖,進(jìn)行下述操作根據(jù)用戶指令,打開已有磁盤陣列或創(chuàng)建新磁盤陣列,主控模塊創(chuàng) 建該磁盤陣列的日志位圖表,日志位圖表的每一位對(duì)應(yīng)磁盤陣列的一個(gè) 條帶;主控模塊判斷該磁盤陣列是否為創(chuàng)建的新磁盤陣列,是則將其日 志位圖表中所有位均初始化為0,且將磁盤陣列中所有成員磁盤上的數(shù)據(jù) 塊全部初始化為0,否則讀取存放于該磁盤陣列成員磁盤超級(jí)塊中的日志 位圖表信息到內(nèi)存中以便對(duì)其實(shí)時(shí)修改。圖3為本發(fā)明的日志位圖表更新步驟過(guò)程示意圖,進(jìn)行下述步驟 當(dāng)磁盤陣列收到請(qǐng)求時(shí),首先判斷該請(qǐng)求是否是寫請(qǐng)求,是則讀寫 處理模塊將該寫請(qǐng)求所對(duì)應(yīng)磁盤陣列的條帶在日志位圖表中對(duì)應(yīng)的位更 新為l,標(biāo)明該條帶已被訪問(wèn)過(guò),然后將該寫請(qǐng)求發(fā)向底層磁盤設(shè)備,將 寫請(qǐng)求的數(shù)據(jù)寫入磁盤陣列成員磁盤的正確位置,否則讀寫處理模塊將 該讀請(qǐng)求發(fā)向底層磁盤設(shè)備,從磁盤陣列成員磁盤的正確位置讀取數(shù)據(jù)。 圖4為本發(fā)明的基于日志的重建步驟過(guò)程示意圖,進(jìn)行下述步驟 重建模塊判斷磁盤陣列某一條帶在日志位圖表中對(duì)應(yīng)的位是否為0, 是則向新加入的替換磁盤中位于該條帶的數(shù)據(jù)塊內(nèi)全部寫入0,否則讀取 所有工作盤上位于該條帶的數(shù)據(jù)塊,計(jì)算校驗(yàn)后將結(jié)果寫入新加入的替 換磁盤中位于該條帶的數(shù)據(jù)塊內(nèi)。上述步驟重復(fù)執(zhí)行,直至該磁盤陣列 上所有條帶都重建完畢。圖5為本發(fā)明的結(jié)束步驟過(guò)程示意圖主控模塊將日志位圖表保存 到磁盤陣列各成員磁盤的超級(jí)塊中,然后關(guān)閉該磁盤陣列設(shè)備,釋放相 關(guān)的資源。圖6為本發(fā)明的新磁盤陣列數(shù)據(jù)初始化示意圖主控模塊創(chuàng)建該新 磁盤陣列的日志位圖表并將其所有位均初始化為0,同時(shí)將磁盤陣列中所有成員磁盤上的數(shù)據(jù)塊全部初始化為0。圖6所示磁盤陣列包括4個(gè)成員 磁盤,分別為磁盤l、磁盤2、磁盤3和磁盤4。 D0、 Dl、…D11為磁盤 陣列的數(shù)據(jù)塊,含數(shù)據(jù)信息,P0-2為數(shù)據(jù)塊D0、 Dl和D2的奇偶校驗(yàn)值,P3-5為數(shù)據(jù)塊D3、 D4和D5的奇偶校驗(yàn)值,P6-8為數(shù)據(jù)塊D6、 D7和D8 的奇偶校驗(yàn)值,P9-11為數(shù)據(jù)塊D9、 DlO和Dll的奇偶校驗(yàn)值。日志位圖 表中每一位對(duì)應(yīng)磁盤陣列的一個(gè)條帶,如D0、 Dl、 D2和P0-2為一個(gè)條 帶,依此類推。日志位圖表的位為0時(shí),表示其所對(duì)應(yīng)的磁盤陣列的條 帶未被訪問(wèn)過(guò),日志位圖表的位為1時(shí),表示其所對(duì)應(yīng)的磁盤陣列的條 帶己被訪問(wèn)過(guò)。磁盤上的箭頭及箭頭旁邊的0表示將磁盤陣列的中所有 成員磁盤上的數(shù)據(jù)塊全部初始化為0。圖7為本發(fā)明針對(duì)己被訪問(wèn)條帶的磁盤陣列的數(shù)據(jù)重建示意圖,進(jìn) 行下列操作讀取所有工作盤上位于該條帶的數(shù)據(jù)塊,計(jì)算奇偶校驗(yàn)后將結(jié)果寫 入新加入的替換磁盤中位于該條帶的數(shù)據(jù)塊內(nèi),完成故障盤在該條帶上 的數(shù)據(jù)重建。如圖7所示,磁盤3為故障盤,磁盤l、磁盤2和磁盤4為 工作盤,最后一個(gè)盤為新加入的替換磁盤,符號(hào)①表示計(jì)算奇偶校驗(yàn), 圖中將D0、 Dl和P0-2計(jì)算奇偶校驗(yàn)后寫入到D2中。圖8為本發(fā)明針對(duì)未被訪問(wèn)條帶的磁盤陣列的數(shù)據(jù)重建示意圖向 新加入的磁盤中位于該條帶的數(shù)據(jù)塊內(nèi)全部寫入0。圖8所示箭頭及箭頭 旁邊的0表示對(duì)替換磁盤中未被訪問(wèn)的數(shù)據(jù)塊發(fā)出寫0命令。
權(quán)利要求
1.一種磁盤陣列的數(shù)據(jù)重建方法,磁盤陣列上設(shè)置主控模塊、讀寫處理模塊和重建模塊,包括初始化、日志位圖表更新、基于日志的重建和結(jié)束步驟;其特征在于(1)初始化步驟,順序進(jìn)行下述過(guò)程(1.1)根據(jù)用戶指令,打開已有磁盤陣列或創(chuàng)建新磁盤陣列;(1.2)主控模塊創(chuàng)建該磁盤陣列的日志位圖表,日志位圖表的每一位對(duì)應(yīng)磁盤陣列的一個(gè)條帶;(1.3)主控模塊判斷該磁盤陣列是否為創(chuàng)建的新磁盤陣列,是則轉(zhuǎn)過(guò)程(1.4),否則轉(zhuǎn)過(guò)程(1.5);(1.4)主控模塊將其日志位圖表中所有位均初始化為0,且將磁盤陣列中所有成員磁盤上的數(shù)據(jù)塊全部初始化為0,進(jìn)行步驟(2);(1.5)主控模塊讀取存放于該磁盤陣列成員磁盤超級(jí)塊中的日志位圖表信息到內(nèi)存中以便對(duì)其實(shí)時(shí)修改,進(jìn)行步驟(2);(2)日志位圖表更新步驟,進(jìn)行下述過(guò)程(2.1)該磁盤陣列等待上層命令,并判斷其是否為寫請(qǐng)求,是則轉(zhuǎn)過(guò)程(2.2),否則轉(zhuǎn)過(guò)程(2.4);(2.2)接收到寫請(qǐng)求,讀寫處理模塊將該寫請(qǐng)求所對(duì)應(yīng)磁盤陣列的條帶在日志位圖表中對(duì)應(yīng)的位更新為1,標(biāo)明該條帶已被訪問(wèn)過(guò);(2.3)讀寫處理模塊將該寫請(qǐng)求發(fā)向底層磁盤設(shè)備,將寫請(qǐng)求的數(shù)據(jù)寫入磁盤陣列成員磁盤的正確位置,轉(zhuǎn)過(guò)程(2.1);(2.4)接收到讀請(qǐng)求,讀寫處理模塊將該讀請(qǐng)求發(fā)向底層磁盤設(shè)備,從磁盤陣列成員磁盤的正確位置讀取數(shù)據(jù),轉(zhuǎn)過(guò)程(2.1);(3)基于日志的重建步驟,當(dāng)主控模塊發(fā)現(xiàn)磁盤陣列成員磁盤出現(xiàn)故障時(shí),進(jìn)行下述過(guò)程(3.1)重建模塊判斷磁盤陣列某一條帶在日志位圖表中對(duì)應(yīng)的位是否為0,是則轉(zhuǎn)過(guò)程(3.2),否則轉(zhuǎn)過(guò)程(3.3);(3.2)該條帶從未被訪問(wèn)過(guò),向新加入的替換磁盤中位于該條帶的數(shù)據(jù)塊內(nèi)全部寫入0,轉(zhuǎn)過(guò)程(3.4);(3.3)該條帶已被訪問(wèn)過(guò),讀取所有工作盤上位于該條帶的數(shù)據(jù)塊,計(jì)算校驗(yàn)后將結(jié)果寫入新加入的替換磁盤中位于該條帶的數(shù)據(jù)塊內(nèi),轉(zhuǎn)過(guò)程(3.4);(3.4)重復(fù)執(zhí)行(3.1)-(3.3),直至磁盤陣列上所有條帶都重建完畢;(4)結(jié)束步驟,當(dāng)用戶發(fā)出指令關(guān)閉磁盤陣列時(shí),進(jìn)行下述過(guò)程(4.1)關(guān)閉磁盤陣列之前,主控模塊將日志位圖表保存到磁盤陣列各成員磁盤的超級(jí)塊中;(4.2)關(guān)閉該磁盤陣列設(shè)備,釋放相關(guān)的資源。
全文摘要
一種磁盤陣列的數(shù)據(jù)重建方法,屬于計(jì)算機(jī)數(shù)據(jù)存儲(chǔ)方法,解決現(xiàn)有的磁盤陣列數(shù)據(jù)重建方法需要時(shí)間過(guò)多、影響存儲(chǔ)系統(tǒng)的讀寫性能和可靠性的問(wèn)題。本發(fā)明磁盤陣列上設(shè)置主控模塊、讀寫處理模塊和重建模塊,包括初始化、日志位圖表更新、基于日志的重建和結(jié)束步驟。本發(fā)明通過(guò)實(shí)時(shí)監(jiān)控磁盤陣列的磁盤空間使用情況來(lái)指導(dǎo)數(shù)據(jù)重建過(guò)程,重建未被訪問(wèn)的空間時(shí)只需向新加入磁盤中相應(yīng)的數(shù)據(jù)塊內(nèi)全部寫入0,大大減少了重建帶來(lái)的物理磁盤訪問(wèn)次數(shù),加快了重建速度并且減少用戶訪問(wèn)響應(yīng)時(shí)間;本發(fā)明并未改變重建流程或磁盤陣列數(shù)據(jù)分布方式,可以很方便地優(yōu)化各種傳統(tǒng)的磁盤陣列重建方法,適用于構(gòu)造具有高性能,高可用性和高可靠性的存儲(chǔ)系統(tǒng)。
文檔編號(hào)G06F11/14GK101329641SQ20081004797
公開日2008年12月24日 申請(qǐng)日期2008年6月11日 優(yōu)先權(quán)日2008年6月11日
發(fā)明者丹 馮, 吳素貞, 龐麗萍, 曾令仿, 波 毛, 陳儉喜 申請(qǐng)人:華中科技大學(xué)