欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種基于軟raid的磁盤壞塊處理方法

文檔序號(hào):6436340閱讀:531來(lái)源:國(guó)知局
專利名稱:一種基于軟raid的磁盤壞塊處理方法
技術(shù)領(lǐng)域
本發(fā)明涉及一種磁盤壞塊處理方法,具體涉及一種軟RAID環(huán)境下的磁盤壞塊處理方法,屬于計(jì)算機(jī)數(shù)據(jù)存儲(chǔ)技術(shù)領(lǐng)域。
背景技術(shù)
在大容量數(shù)據(jù)存儲(chǔ)中,磁盤是廣泛采用的存儲(chǔ)介質(zhì)。物理上講,每個(gè)硬盤都有自己的“CHS”參數(shù),即磁頭數(shù)(Heads),柱面數(shù)(Cylinders)和扇區(qū)數(shù)(Sectors),每個(gè)扇區(qū)一般是512個(gè)字節(jié)。老式磁盤每個(gè)磁道的扇區(qū)數(shù)相等,利用這三個(gè)參數(shù)即可實(shí)現(xiàn)對(duì)任意扇區(qū)的隨機(jī)訪問,但這種方式外柱面的記錄密度要遠(yuǎn)低于內(nèi)柱面,會(huì)造成磁盤空間的浪費(fèi),已經(jīng)被多數(shù)磁盤廠商所摒棄,轉(zhuǎn)而采用等密度結(jié)構(gòu)生產(chǎn)硬盤,采用這種結(jié)構(gòu)后,尋址方式也改為線性尋址,即以扇區(qū)為單位進(jìn)行尋址,LBA方式就是其中的一種。LBA全稱是Logical Block Addressing,即邏輯塊尋址,該方式從0開始為物理扇區(qū)一一編號(hào),建立邏輯塊與物理扇區(qū)之間的映射關(guān)系,從這種意義上說(shuō),塊和扇區(qū)其實(shí)是對(duì)同一事物的不同稱謂,只不過塊的說(shuō)法層次較高一些,更加適用于比較抽象的場(chǎng)合。
磁盤在出廠前有一個(gè)自檢過程,該過程會(huì)統(tǒng)計(jì)并記錄磁盤上存在的壞扇區(qū),這些壞扇區(qū)在后繼使用中不會(huì)被映射,也就沒有對(duì)應(yīng)的邏輯塊地址;磁盤的可用扇區(qū)在正式使用前由操作系統(tǒng)按照一定規(guī)則,建立邏輯塊和物理扇區(qū)之間的映射關(guān)系,以后操作系統(tǒng)就可以根據(jù)邏輯塊地址對(duì)具體的扇區(qū)進(jìn)行操作。磁盤在使用過程中,由于各種原因仍有可能導(dǎo)致某個(gè)邏輯塊無(wú)法訪問的情況,也就是產(chǎn)生了壞塊,具體情況可以分兩種一種是偶爾的讀錯(cuò)誤,經(jīng)過寫驗(yàn)證后可以修復(fù)的扇區(qū),該邏輯塊仍然有效,可以被繼續(xù)使用;一種是無(wú)法修復(fù)的壞扇區(qū),對(duì)于這種情況多數(shù)磁盤廠商采取的策略是對(duì)這個(gè)邏輯塊地址進(jìn)行重新映射,將該地址對(duì)應(yīng)到另一塊可用的備用扇區(qū)。
在壞塊產(chǎn)生時(shí),保證邏輯塊的可用性僅僅是其中的一方面,如何恢復(fù)壞塊的原有內(nèi)容往往是實(shí)際應(yīng)用中更為關(guān)注的話題。各種災(zāi)備方案是不錯(cuò)的選擇,但那是更高層次的解決方案,且一般造價(jià)不菲。從底層存儲(chǔ)的具體架構(gòu)來(lái)講,為了使存儲(chǔ)的數(shù)據(jù)具有容錯(cuò)性, 提高數(shù)據(jù)存儲(chǔ)可靠性,改善存儲(chǔ)系統(tǒng)性能,一般采用各種類型的RAID進(jìn)行數(shù)據(jù)存儲(chǔ),其全稱是Redundant Arrays of Independent Disks,稱作獨(dú)立磁盤冗余陣列,簡(jiǎn)稱磁盤陣列。比較常用的RAID有RAIDO、RAIDU RAID5、RAID6、RAIDlO等。其中RAIDO是為了單純的提高讀寫性能,不具有冗余能力,RAIDl則對(duì)磁盤做了鏡像,有效使用空間僅為總?cè)萘康囊话搿F渌N陣列分別由多個(gè)磁盤組成,它們以條帶的方式向陣列中的磁盤寫數(shù)據(jù),奇偶校驗(yàn)數(shù)據(jù)存放在陣列中的各個(gè)磁盤上。RAID5的每個(gè)條帶含有1個(gè)校驗(yàn)塊,支持任意損壞其中一個(gè)磁盤、通過其它磁盤上的奇偶校驗(yàn)塊來(lái)重建數(shù)據(jù);RAID6的每個(gè)條帶含有2個(gè)校驗(yàn)塊,支持任意損壞其中兩個(gè)磁盤、通過其它磁盤上的奇偶校驗(yàn)塊來(lái)重建數(shù)據(jù)。采用RAID進(jìn)行數(shù)據(jù)存儲(chǔ),在多數(shù)情況下可以為壞塊產(chǎn)生時(shí)的數(shù)據(jù)重建提供解決方案。
從實(shí)現(xiàn)方式來(lái)講,磁盤陣列可以分成“軟件RAID”和“硬件RAID”兩種。硬件RAID 是使用專門的磁盤陣列卡等硬件設(shè)備來(lái)實(shí)現(xiàn)的,性能要高于軟件RAID,但成本也比較高;軟件RAID —般是通過集成在操作系統(tǒng)中的功能軟件實(shí)現(xiàn)對(duì)磁盤的管理,成本低廉,操作簡(jiǎn)單?,F(xiàn)在的磁盤陣列廠商在開發(fā)磁盤陣列產(chǎn)品時(shí),所開發(fā)的磁盤陣列一般由針對(duì)該磁盤陣列開發(fā)的存儲(chǔ)操作系統(tǒng)進(jìn)行控制管理。目前多數(shù)采用軟RAID的磁盤陣列產(chǎn)品,是在對(duì)應(yīng)的存儲(chǔ)操作系統(tǒng)中集成RAID管理功能,用這些功能軟件構(gòu)建常見級(jí)別的RAID,但這些采用軟 RAID的陣列產(chǎn)品在數(shù)據(jù)可靠性上存在一個(gè)較為普遍的問題,那就是它們無(wú)法對(duì)磁盤在使用過程中產(chǎn)生的壞塊進(jìn)行處理,無(wú)法利用RAID的特點(diǎn)對(duì)壞塊原有內(nèi)容進(jìn)行數(shù)據(jù)重建,致使在磁盤產(chǎn)生一個(gè)壞塊時(shí)就需要更換該磁盤對(duì)整個(gè)RAID進(jìn)行重建,浪費(fèi)了存儲(chǔ)資源,也降低了數(shù)據(jù)存儲(chǔ)的可靠性。發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種軟RAID環(huán)境下的磁盤壞塊處理方法,以達(dá)到在壞塊產(chǎn)生時(shí)有條件地進(jìn)行數(shù)據(jù)重建的效果。
本方法主要應(yīng)用于磁盤陣列對(duì)應(yīng)的存儲(chǔ)操作系統(tǒng)中。該存儲(chǔ)操作系統(tǒng)要求包括以下技術(shù)特征
操作系統(tǒng)為L(zhǎng)inux操作系統(tǒng),具備軟RAID的創(chuàng)建、維護(hù)和刪除功能;系統(tǒng)采用U盤作為存儲(chǔ)介質(zhì),被制作成USB啟動(dòng)盤格式,制作好的U盤以配件形式安裝在磁盤陣列的主板或控制器上。存儲(chǔ)操作系統(tǒng)是一個(gè)層級(jí)結(jié)構(gòu),在物理硬件上依次構(gòu)建了內(nèi)核模式程序和用戶模式程序,并應(yīng)用邏輯卷管理機(jī)制對(duì)底層磁盤進(jìn)行管理。本方法在內(nèi)核模式下實(shí)現(xiàn),是對(duì) Linux操作系統(tǒng)內(nèi)核驅(qū)動(dòng)的修改和擴(kuò)展。
該磁盤陣列,對(duì)盤陣內(nèi)每個(gè)物理磁盤做了特殊處理,預(yù)留一部分磁盤空間作為備用扇區(qū)區(qū)域,并用磁盤空間最末端的一塊區(qū)域存放DDF (Disk Data format是SNIA的技術(shù), SNIA的全稱是Morage Networking Industry Association,中文名稱是全球網(wǎng)絡(luò)存儲(chǔ)工業(yè)協(xié)會(huì),DDF是由該協(xié)會(huì)針對(duì)RAID而定義的一種標(biāo)準(zhǔn)數(shù)據(jù)結(jié)構(gòu),用來(lái)描述通用RAID磁盤數(shù)據(jù)格式,采用DDF結(jié)構(gòu)對(duì)RAID進(jìn)行描述,可以方便不同廠商磁盤產(chǎn)品之間的數(shù)據(jù)遷移。)結(jié)構(gòu)的RAID信息。備用扇區(qū)區(qū)域中預(yù)留了若干地址連續(xù)的扇區(qū)作為備用扇區(qū),用來(lái)在本磁盤上產(chǎn)生壞塊時(shí)進(jìn)行重新映射,備用扇區(qū)按照LBA地址從小到大進(jìn)行排序,被分配使用時(shí)按照排序結(jié)果依次進(jìn)行,系統(tǒng)有一個(gè)備用扇區(qū)定期檢查模塊,用來(lái)定期檢測(cè)備用扇區(qū)的可用情況,以便在備用扇區(qū)中出現(xiàn)壞塊時(shí),及時(shí)更新備用扇區(qū)相關(guān)信息;最末端以DDF結(jié)構(gòu)描述的RAID信息區(qū)域存放著一個(gè)自定義的表結(jié)構(gòu),用來(lái)保存本磁盤上的重映射關(guān)系,供操作系統(tǒng)上層的數(shù)據(jù)讀寫使用,其稱作“壞塊重映射表”。該表由表頭和數(shù)據(jù)部分組成,表頭包含一個(gè)統(tǒng)計(jì)位和地址位,分別記錄了本磁盤上備用扇區(qū)已使用的個(gè)數(shù)和當(dāng)前首個(gè)可用的備用扇區(qū)LBA地址,當(dāng)備用扇區(qū)全部用光時(shí),該地址字段被設(shè)為無(wú)效數(shù)值;數(shù)據(jù)部分由若干條記錄組成,初值為零條,隨著備用扇區(qū)的使用而增加,最大記錄數(shù)等于備用扇區(qū)個(gè)數(shù),每個(gè)記錄包含兩個(gè)數(shù)據(jù)位,分別用來(lái)保存壞塊的邏輯塊地址和重新映射后備用扇區(qū)的LBA地址。
針對(duì)上述特點(diǎn)的磁盤陣列和對(duì)應(yīng)的存儲(chǔ)操作系統(tǒng),本發(fā)明提供一種軟RAID環(huán)境下的磁盤壞塊處理方法,包括以下步驟
步驟一在磁盤使用過程中產(chǎn)生的壞塊被訪問到時(shí),檢索壞塊重映射表的數(shù)據(jù)部分,判斷壞塊的邏輯塊地址是否已經(jīng)在表中,依據(jù)檢索結(jié)果處理如下
(1)如果壞塊的邏輯塊地址不在表中,則產(chǎn)生介質(zhì)訪問錯(cuò)誤,并反饋給內(nèi)核驅(qū)動(dòng);
(2)如果壞塊的邏輯塊地址已經(jīng)在表中,則依據(jù)該條記錄訪問壞塊重新映射后對(duì)應(yīng)的備用扇區(qū)LBA地址,倘若訪問正常,則結(jié)束當(dāng)前操作,倘若仍然不能訪問,則產(chǎn)生介質(zhì)訪問錯(cuò)誤,并反饋給內(nèi)核驅(qū)動(dòng);
步驟二系統(tǒng)讀取底層硬盤驅(qū)動(dòng)器發(fā)來(lái)的錯(cuò)誤信息,獲得壞塊的LBA地址,并判斷是否讀錯(cuò)誤,如果是讀錯(cuò)誤,由步驟三繼續(xù)處理,否則是寫錯(cuò)誤,轉(zhuǎn)向步驟六處理;
步驟三對(duì)于讀錯(cuò)誤,判斷壞塊所在驅(qū)動(dòng)器是否處于冗余狀態(tài),如果是冗余狀態(tài), 由步驟四繼續(xù)處理,如果該驅(qū)動(dòng)器沒有采用RAID或者處于RAIDO等非冗余狀態(tài),致使沒有可用的參考點(diǎn)而無(wú)法進(jìn)行數(shù)據(jù)重建,將該塊標(biāo)記為壞塊,并將介質(zhì)訪問錯(cuò)誤的信息返回給內(nèi)核驅(qū)動(dòng)后即可完成操作;
步驟四對(duì)于數(shù)據(jù)存在冗余,并且參考點(diǎn)狀態(tài)正常的情況,則依據(jù)驅(qū)動(dòng)器所處RAID 級(jí)別調(diào)用對(duì)應(yīng)接口進(jìn)行數(shù)據(jù)重建操作,重建成功后,由步驟五繼續(xù)處理,如果重建失敗,將該塊標(biāo)記為壞塊,并將介質(zhì)訪問錯(cuò)誤的信息返回給內(nèi)核驅(qū)動(dòng)后即可完成操作;
步驟五將重建成功的數(shù)據(jù)寫入到壞塊對(duì)應(yīng)的LBA地址,并刷新系統(tǒng)緩存,保證數(shù)據(jù)完全寫入到對(duì)應(yīng)物理扇區(qū),然后檢驗(yàn)寫入的數(shù)據(jù)是否可讀,如果可讀,表明該扇區(qū)是可以修復(fù)的,并且已經(jīng)被修復(fù),結(jié)束當(dāng)前操作即可,如果寫入失敗或者寫入的數(shù)據(jù)無(wú)法讀取,表明該壞塊對(duì)應(yīng)的扇區(qū)無(wú)法修復(fù),由步驟六繼續(xù)處理;
步驟六對(duì)于寫錯(cuò)誤,首先讀取本驅(qū)動(dòng)器上壞塊重映射表的表頭,判斷是否還有剩余的備用扇區(qū)可用,如果沒有剩余,表明該驅(qū)動(dòng)器上的壞塊無(wú)法重新映射,將該塊標(biāo)記為壞塊,并將該驅(qū)動(dòng)器標(biāo)記為重映射失敗狀態(tài),即結(jié)束當(dāng)前操作,如果有剩余,由步驟七繼續(xù)處理;
步驟七向磁盤發(fā)送重映射命令,判斷所用磁盤本身是否支持重映射操作,如果不支持,轉(zhuǎn)向步驟八進(jìn)行處理,如果支持,分情況處理如下
(1)調(diào)用磁盤驅(qū)動(dòng)對(duì)應(yīng)接口進(jìn)行壞塊重映射和數(shù)據(jù)寫入操作,如果操作成功,則表明壞塊被磁盤自身的重映射機(jī)制修復(fù),結(jié)束當(dāng)前操作即可;
(2)在調(diào)用磁盤驅(qū)動(dòng)對(duì)應(yīng)接口進(jìn)行壞塊重映射或者數(shù)據(jù)寫入時(shí),如果其中某個(gè)操作失敗,則表明壞塊無(wú)法被磁盤本身的重映射機(jī)制修復(fù),交由步驟八進(jìn)行后繼處理;
步驟八檢索壞塊重映射表的表頭,獲取當(dāng)前可用的備用扇區(qū)LBA地址,檢索壞塊重映射表的數(shù)據(jù)部分,判斷壞塊的邏輯塊地址是否已經(jīng)在表中,依據(jù)檢索結(jié)果處理如下
(1)如果壞塊的邏輯塊地址不在表中,則直接在表中添加一條記錄,記錄壞塊重新映射后對(duì)應(yīng)備用扇區(qū)的LBA地址,然后更新表頭的統(tǒng)計(jì)位和地址位,之后執(zhí)行步驟九;
(2)如果壞塊的邏輯塊地址已經(jīng)在表中,則更新該條記錄,記錄壞塊重新映射后對(duì)應(yīng)新備用扇區(qū)的LBA地址,然后更新表頭的統(tǒng)計(jì)位和地址位,之后執(zhí)行步驟九;
步驟九按照壞塊重映射表,將欲寫入的數(shù)據(jù)寫入到備用扇區(qū)中,并檢測(cè)寫入操作是否成功,依據(jù)操作結(jié)果處理如下
(1)如果失敗,表明備用扇區(qū)中存在壞塊,調(diào)用系統(tǒng)的備用扇區(qū)定期檢測(cè)模塊對(duì)備用扇區(qū)當(dāng)前情況進(jìn)行更新,然后由步驟六進(jìn)行處理;
(2)如果成功,表明壞塊重映射操作完成,結(jié)束當(dāng)前操作即可,此后對(duì)壞塊的訪問由壞塊重映射表處理,自動(dòng)重定向?yàn)閷?duì)備用扇區(qū)的訪問。
有益效果
本發(fā)明的有益效果是
(1)提高了軟RAID環(huán)境下的數(shù)據(jù)可靠性。該方法解決了多數(shù)軟RAID產(chǎn)品在磁盤產(chǎn)生一個(gè)壞塊時(shí)就需要更換該磁盤對(duì)整個(gè)RAID進(jìn)行重建的問題,依據(jù)壞塊所在磁盤的具體使用情況對(duì)壞塊進(jìn)行處理,提供了壞塊發(fā)生時(shí)的處理策略,提高了軟RAID產(chǎn)品的數(shù)據(jù)可靠性。
(2)處理效率較高。軟RAID相對(duì)于硬件RAID比較明顯的弊端是處理速度問題,該方法基于自主研發(fā)的存儲(chǔ)操作系統(tǒng)構(gòu)建,多數(shù)操作在內(nèi)核層實(shí)現(xiàn),可以更好的利用系統(tǒng)資源,更為高效透明的實(shí)現(xiàn)具體功能。
(3)處理方式比較靈活。對(duì)壞塊的處理,依據(jù)磁盤本身是否支持壞塊重映射分情況處理,這樣即可以有效利用存儲(chǔ)空間,也便于壞塊的靈活處理,提高重映射成功的幾率。


圖1為系統(tǒng)體系結(jié)構(gòu)圖2為壞塊重映射表數(shù)據(jù)結(jié)構(gòu)示意圖3為壞塊處理流程圖。
具體實(shí)施方式
下面結(jié)合附圖及實(shí)施例對(duì)本發(fā)明做進(jìn)一步說(shuō)明。
本方法所涉及的功能軟件集成于某磁盤陣列對(duì)應(yīng)的存儲(chǔ)操作系統(tǒng)中,整個(gè)系統(tǒng)的體系結(jié)構(gòu)如附圖1所示。該存儲(chǔ)操作系統(tǒng)自主研發(fā),是一個(gè)內(nèi)核版本為2. 6的Linux操作系統(tǒng),實(shí)現(xiàn)了軟RAID的創(chuàng)建、維護(hù)和刪除等功能;該系統(tǒng)采用自主設(shè)計(jì)的U盤作為存儲(chǔ)介質(zhì), 被制作成USB啟動(dòng)盤格式;制作好的U盤以配件形式安裝在該磁盤陣列的主板或控制器上, 便于插拔和替換。存儲(chǔ)操作系統(tǒng)是一個(gè)層級(jí)結(jié)構(gòu),在物理硬件上依次構(gòu)建了內(nèi)核模式程序和用戶模式程序,并應(yīng)用邏輯卷管理機(jī)制對(duì)底層磁盤進(jìn)行管理。本方法所涉及的功能軟件主要在內(nèi)核模式下實(shí)現(xiàn),是對(duì)Linux操作系統(tǒng)內(nèi)核驅(qū)動(dòng)的修改和擴(kuò)展。
該磁盤陣列,對(duì)盤陣內(nèi)每個(gè)物理磁盤做了特殊處理,預(yù)留U8MB的磁盤空間作為備用扇區(qū)區(qū)域,并用磁盤空間最末端的64MB存放DDF結(jié)構(gòu)的RAID信息。備用扇區(qū)區(qū)域由 256個(gè)地址連續(xù)的扇區(qū)作為備用扇區(qū),備用扇區(qū)按照LBA地址從小到大進(jìn)行排序,被分配使用時(shí)按照排序結(jié)果依次進(jìn)行,系統(tǒng)有一個(gè)備用扇區(qū)定期檢查模塊,用來(lái)定期檢測(cè)備用扇區(qū)的可用情況,以便在備用扇區(qū)中出現(xiàn)壞塊時(shí),及時(shí)更新備用扇區(qū)相關(guān)信息;最末端以DDF結(jié)構(gòu)描述的RAID信息區(qū)域中存放有一個(gè)“壞塊重映射表”。如附圖2所示,該表由表頭和數(shù)據(jù)部分組成,表頭包含2字節(jié)的統(tǒng)計(jì)位“cnt”和8字節(jié)的地址位“addr”,分別記錄了本磁盤上備用扇區(qū)已使用的個(gè)數(shù)和當(dāng)前首個(gè)可用的備用扇區(qū)LBA地址,當(dāng)備用扇區(qū)全部用光時(shí),該地址字段被設(shè)為無(wú)效數(shù)值;數(shù)據(jù)部分由若干條記錄組成,初值為零條,隨著備用扇區(qū)的使用而增加,最大記錄數(shù)為256個(gè),每個(gè)記錄包含兩個(gè)8字節(jié)的數(shù)據(jù)位,分別用來(lái)保存壞塊的邏輯塊地址和重新映射后備用扇區(qū)的LBA地址。
以該磁盤陣列和對(duì)應(yīng)的存儲(chǔ)操作系統(tǒng)為基礎(chǔ),本實(shí)施例實(shí)現(xiàn)了一種軟RAID環(huán)境下的磁盤壞塊處理方法,如附圖3所示,包括以下步驟
步驟一在磁盤使用過程中產(chǎn)生的壞塊被訪問到時(shí),檢索壞塊重映射表的數(shù)據(jù)部分,判斷壞塊的邏輯塊地址是否已經(jīng)在表中,依據(jù)檢索結(jié)果處理如下
(1)如果壞塊的邏輯塊地址不在表中,則產(chǎn)生介質(zhì)訪問錯(cuò)誤,并反饋給內(nèi)核驅(qū)動(dòng);
(2)如果壞塊的邏輯塊地址已經(jīng)在表中,則依據(jù)該條記錄訪問壞塊重新映射后對(duì)應(yīng)的備用扇區(qū)LBA地址,倘若訪問正常,則結(jié)束當(dāng)前操作,倘若仍然不能訪問,則產(chǎn)生介質(zhì)訪問錯(cuò)誤,并反饋給內(nèi)核驅(qū)動(dòng);
步驟二系統(tǒng)讀取底層硬盤驅(qū)動(dòng)器發(fā)來(lái)的錯(cuò)誤信息,獲得壞塊的LBA地址,并判斷是否讀錯(cuò)誤,如果是讀錯(cuò)誤,由步驟三繼續(xù)處理,否則是寫錯(cuò)誤,轉(zhuǎn)向步驟六處理;
步驟三對(duì)于讀錯(cuò)誤,判斷壞塊所在驅(qū)動(dòng)器是否處于冗余狀態(tài),如果是冗余狀態(tài), 由步驟四繼續(xù)處理,如果該驅(qū)動(dòng)器沒有采用RAID或者處于RAIDO等非冗余狀態(tài),致使沒有可用的參考點(diǎn)而無(wú)法進(jìn)行數(shù)據(jù)重建,將該塊標(biāo)記為壞塊,并將介質(zhì)訪問錯(cuò)誤的信息返回給內(nèi)核驅(qū)動(dòng)后即可完成操作;
步驟四對(duì)于數(shù)據(jù)存在冗余,并且參考點(diǎn)狀態(tài)正常的情況,則依據(jù)驅(qū)動(dòng)器所處RAID 級(jí)別調(diào)用對(duì)應(yīng)接口進(jìn)行數(shù)據(jù)重建操作,重建成功后,由步驟五繼續(xù)處理,如果重建失敗,將該塊標(biāo)記為壞塊,并將介質(zhì)訪問錯(cuò)誤的信息返回給內(nèi)核驅(qū)動(dòng)后即可完成操作;
步驟五將重建成功的數(shù)據(jù)寫入到壞塊對(duì)應(yīng)的LBA地址,并刷新系統(tǒng)緩存,保證數(shù)據(jù)完全寫入到對(duì)應(yīng)物理扇區(qū),然后檢驗(yàn)寫入的數(shù)據(jù)是否可讀,如果可讀,表明該扇區(qū)是可以修復(fù)的,并且已經(jīng)被修復(fù),結(jié)束當(dāng)前操作即可,如果寫入失敗或者寫入的數(shù)據(jù)無(wú)法讀取,表明該壞塊對(duì)應(yīng)的扇區(qū)無(wú)法修復(fù),由步驟六繼續(xù)處理;
步驟六對(duì)于寫錯(cuò)誤,首先讀取本驅(qū)動(dòng)器上壞塊重映射表的表頭,判斷是否還有剩余的備用扇區(qū)可用,如果沒有剩余,表明該驅(qū)動(dòng)器上的壞塊無(wú)法重新映射,將該塊標(biāo)記為壞塊,并將該驅(qū)動(dòng)器標(biāo)記為重映射失敗狀態(tài),即結(jié)束當(dāng)前操作,如果有剩余,由步驟七繼續(xù)處理;
步驟七向磁盤發(fā)送重映射命令,判斷所用磁盤本身是否支持重映射操作,如果不支持,轉(zhuǎn)向步驟八進(jìn)行處理,如果支持,分情況處理如下
(1)調(diào)用磁盤驅(qū)動(dòng)對(duì)應(yīng)接口進(jìn)行壞塊重映射和數(shù)據(jù)寫入操作,如果操作成功,則表明壞塊被磁盤自身的重映射機(jī)制修復(fù),結(jié)束當(dāng)前操作即可;
(2)在調(diào)用磁盤驅(qū)動(dòng)對(duì)應(yīng)接口進(jìn)行壞塊重映射或者數(shù)據(jù)寫入時(shí),如果其中某個(gè)操作失敗,則表明壞塊無(wú)法被磁盤本身的重映射機(jī)制修復(fù),交由步驟八進(jìn)行后繼處理;
步驟八檢索壞塊重映射表的表頭,獲取當(dāng)前可用的備用扇區(qū)LBA地址,檢索壞塊重映射表的數(shù)據(jù)部分,判斷壞塊的邏輯塊地址是否已經(jīng)在表中,依據(jù)檢索結(jié)果處理如下
(1)如果壞塊的邏輯塊地址不在表中,則直接在表中添加一條記錄,記錄壞塊重新映射后對(duì)應(yīng)備用扇區(qū)的LBA地址,然后更新表頭的統(tǒng)計(jì)位和地址位,之后執(zhí)行步驟九;
(2)如果壞塊的邏輯塊地址已經(jīng)在表中,則更新該條記錄,記錄壞塊重新映射后對(duì)應(yīng)新備用扇區(qū)的LBA地址,然后更新表頭的統(tǒng)計(jì)位和地址位,之后執(zhí)行步驟九;
步驟九按照壞塊重映射表,將欲寫入的數(shù)據(jù)寫入到備用扇區(qū)中,并檢測(cè)寫入操作是否成功,依據(jù)操作結(jié)果處理如下
(1)如果失敗,表明備用扇區(qū)中存在壞塊,調(diào)用系統(tǒng)的備用扇區(qū)定期檢測(cè)模塊對(duì)備用扇區(qū)當(dāng)前情況進(jìn)行更新,然后由步驟六進(jìn)行處理;
(2)如果成功,表明壞塊重映射操作完成,結(jié)束當(dāng)前操作即可,此后對(duì)壞塊的訪問由壞塊重映射表處理,自動(dòng)重定向?yàn)閷?duì)備用扇區(qū)的訪問。
本發(fā)明不僅限于以上實(shí)施例,凡是利用本發(fā)明的設(shè)計(jì)思路,做一些簡(jiǎn)單變化的設(shè)計(jì),都應(yīng)計(jì)入本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1. 一種基于軟RAID的磁盤壞塊處理方法,它應(yīng)用于磁盤陣列對(duì)應(yīng)的存儲(chǔ)操作系統(tǒng)中, 該存儲(chǔ)操作系統(tǒng)要求包括以下技術(shù)特征其中,操作系統(tǒng)為L(zhǎng)inux操作系統(tǒng),具備軟RAID的創(chuàng)建、維護(hù)和刪除功能;系統(tǒng)采用U盤作為存儲(chǔ)介質(zhì),被制作成USB啟動(dòng)盤格式,制作好的 U盤以配件形式安裝在磁盤陣列的主板或控制器上;存儲(chǔ)操作系統(tǒng)是一個(gè)層級(jí)結(jié)構(gòu),在物理硬件上依次構(gòu)建了內(nèi)核模式程序和用戶模式程序,并應(yīng)用邏輯卷管理機(jī)制對(duì)底層磁盤進(jìn)行管理;本方法在內(nèi)核模式下實(shí)現(xiàn),是對(duì)Linux操作系統(tǒng)內(nèi)核驅(qū)動(dòng)的修改和擴(kuò)展;該磁盤陣列,對(duì)盤陣內(nèi)每個(gè)物理磁盤做了特殊處理,預(yù)留一部分磁盤空間作為備用扇區(qū)區(qū)域,并用磁盤空間最末端的一塊區(qū)域存放DDF結(jié)構(gòu)的RAID信息;備用扇區(qū)區(qū)域中預(yù)留了若干地址連續(xù)的扇區(qū)作為備用扇區(qū),用來(lái)在本磁盤上產(chǎn)生壞塊時(shí)進(jìn)行重新映射,備用扇區(qū)按照LBA地址從小到大進(jìn)行排序,被分配使用時(shí)按照排序結(jié)果依次進(jìn)行,系統(tǒng)有一個(gè)備用扇區(qū)定期檢查模塊,用來(lái)定期檢測(cè)備用扇區(qū)的可用情況,以便在備用扇區(qū)中出現(xiàn)壞塊時(shí),及時(shí)更新備用扇區(qū)相關(guān)信息;最末端以DDF結(jié)構(gòu)描述的RAID信息區(qū)域存放著一個(gè)自定義的表結(jié)構(gòu),用來(lái)保存本磁盤上的重映射關(guān)系,供操作系統(tǒng)上層的數(shù)據(jù)讀寫使用,其稱作“壞塊重映射表”,該表由表頭和數(shù)據(jù)部分組成,表頭包含一個(gè)統(tǒng)計(jì)位和地址位,分別記錄了本磁盤上備用扇區(qū)已使用的個(gè)數(shù)和當(dāng)前首個(gè)可用的備用扇區(qū)LBA地址,當(dāng)備用扇區(qū)全部用光時(shí),該地址字段被設(shè)為無(wú)效數(shù)值;數(shù)據(jù)部分由若干條記錄組成,初值為零條,隨著備用扇區(qū)的使用而增加,最大記錄數(shù)等于備用扇區(qū)個(gè)數(shù),每個(gè)記錄包含兩個(gè)數(shù)據(jù)位,分別用來(lái)保存壞塊的邏輯塊地址和重新映射后備用扇區(qū)的LBA地址,其特征在于包括以下步驟步驟一在磁盤使用過程中產(chǎn)生的壞塊被訪問到時(shí),檢索壞塊重映射表的數(shù)據(jù)部分,判斷壞塊的邏輯塊地址是否已經(jīng)在表中,依據(jù)檢索結(jié)果處理如下(1)如果壞塊的邏輯塊地址不在表中,則產(chǎn)生介質(zhì)訪問錯(cuò)誤,并反饋給內(nèi)核驅(qū)動(dòng);(2)如果壞塊的邏輯塊地址已經(jīng)在表中,則依據(jù)該條記錄訪問壞塊重新映射后對(duì)應(yīng)的備用扇區(qū)LBA地址,倘若訪問正常,則結(jié)束當(dāng)前操作,倘若仍然不能訪問,則產(chǎn)生介質(zhì)訪問錯(cuò)誤,并反饋給內(nèi)核驅(qū)動(dòng);步驟二系統(tǒng)讀取底層硬盤驅(qū)動(dòng)器發(fā)來(lái)的錯(cuò)誤信息,獲得壞塊的LBA地址,并判斷是否讀錯(cuò)誤,如果是讀錯(cuò)誤,由步驟三繼續(xù)處理,否則是寫錯(cuò)誤,轉(zhuǎn)向步驟六處理;步驟三對(duì)于讀錯(cuò)誤,判斷壞塊所在驅(qū)動(dòng)器是否處于冗余狀態(tài),如果是冗余狀態(tài),由步驟四繼續(xù)處理,如果該驅(qū)動(dòng)器沒有采用RAID或者處于RAIDO等非冗余狀態(tài),致使沒有可用的參考點(diǎn)而無(wú)法進(jìn)行數(shù)據(jù)重建,將該塊標(biāo)記為壞塊,并將介質(zhì)訪問錯(cuò)誤的信息返回給內(nèi)核驅(qū)動(dòng)后即可完成操作;步驟四對(duì)于數(shù)據(jù)存在冗余,并且參考點(diǎn)狀態(tài)正常的情況,則依據(jù)驅(qū)動(dòng)器所處RAID級(jí)別調(diào)用對(duì)應(yīng)接口進(jìn)行數(shù)據(jù)重建操作,重建成功后,由步驟五繼續(xù)處理,如果重建失敗,將該塊標(biāo)記為壞塊,并將介質(zhì)訪問錯(cuò)誤的信息返回給內(nèi)核驅(qū)動(dòng)后即可完成操作;步驟五將重建成功的數(shù)據(jù)寫入到壞塊對(duì)應(yīng)的LBA地址,并刷新系統(tǒng)緩存,保證數(shù)據(jù)完全寫入到對(duì)應(yīng)物理扇區(qū),然后檢驗(yàn)寫入的數(shù)據(jù)是否可讀,如果可讀,表明該扇區(qū)是可以修復(fù)的,并且已經(jīng)被修復(fù),結(jié)束當(dāng)前操作即可,如果寫入失敗或者寫入的數(shù)據(jù)無(wú)法讀取,表明該壞塊對(duì)應(yīng)的扇區(qū)無(wú)法修復(fù),由步驟六繼續(xù)處理;步驟六對(duì)于寫錯(cuò)誤,首先讀取本驅(qū)動(dòng)器上壞塊重映射表的表頭,判斷是否還有剩余的備用扇區(qū)可用,如果沒有剩余,表明該驅(qū)動(dòng)器上的壞塊無(wú)法重新映射,將該塊標(biāo)記為壞塊,并將該驅(qū)動(dòng)器標(biāo)記為重映射失敗狀態(tài),即結(jié)束當(dāng)前操作,如果有剩余,由步驟七繼續(xù)處理;步驟七向磁盤發(fā)送重映射命令,判斷所用磁盤本身是否支持重映射操作,如果不支持,轉(zhuǎn)向步驟八進(jìn)行處理,如果支持,分情況處理如下(1)調(diào)用磁盤驅(qū)動(dòng)對(duì)應(yīng)接口進(jìn)行壞塊重映射和數(shù)據(jù)寫入操作,如果操作成功,則表明壞塊被磁盤自身的重映射機(jī)制修復(fù),結(jié)束當(dāng)前操作即可;(2)在調(diào)用磁盤驅(qū)動(dòng)對(duì)應(yīng)接口進(jìn)行壞塊重映射或者數(shù)據(jù)寫入時(shí),如果其中某個(gè)操作失敗,則表明壞塊無(wú)法被磁盤本身的重映射機(jī)制修復(fù),交由步驟八進(jìn)行后繼處理;步驟八檢索壞塊重映射表的表頭,獲取當(dāng)前可用的備用扇區(qū)LBA地址,檢索壞塊重映射表的數(shù)據(jù)部分,判斷壞塊的邏輯塊地址是否已經(jīng)在表中,依據(jù)檢索結(jié)果處理如下(1)如果壞塊的邏輯塊地址不在表中,則直接在表中添加一條記錄,記錄壞塊重新映射后對(duì)應(yīng)備用扇區(qū)的LBA地址,然后更新表頭的統(tǒng)計(jì)位和地址位,之后執(zhí)行步驟九;(2)如果壞塊的邏輯塊地址已經(jīng)在表中,則更新該條記錄,記錄壞塊重新映射后對(duì)應(yīng)新備用扇區(qū)的LBA地址,然后更新表頭的統(tǒng)計(jì)位和地址位,之后執(zhí)行步驟九;步驟九按照壞塊重映射表,將欲寫入的數(shù)據(jù)寫入到備用扇區(qū)中,并檢測(cè)寫入操作是否成功,依據(jù)操作結(jié)果處理如下(1)如果失敗,表明備用扇區(qū)中存在壞塊,調(diào)用系統(tǒng)的備用扇區(qū)定期檢測(cè)模塊對(duì)備用扇區(qū)當(dāng)前情況進(jìn)行更新,然后由步驟六進(jìn)行處理;(2)如果成功,表明壞塊重映射操作完成,結(jié)束當(dāng)前操作即可,此后對(duì)壞塊的訪問由壞塊重映射表處理,自動(dòng)重定向?yàn)閷?duì)備用扇區(qū)的訪問。
全文摘要
本發(fā)明涉及一種基于軟RAID的磁盤壞塊處理方法。本方法集成于磁盤陣列對(duì)應(yīng)的存儲(chǔ)操作系統(tǒng)中,在磁盤陣列的每個(gè)磁盤內(nèi)預(yù)留了若干備用扇區(qū)以備本磁盤的壞塊重映射使用,自定義了壞塊重映射表用來(lái)保存本磁盤上的壞塊重映射關(guān)系,然后主要修改存儲(chǔ)操作系統(tǒng)的內(nèi)核驅(qū)動(dòng),依據(jù)所用磁盤是否處于冗余狀態(tài),以及磁盤本身是否支持壞塊重映射操作等具體特點(diǎn),分情況對(duì)磁盤壞塊進(jìn)行處理。本發(fā)明可以提高軟RAID環(huán)境下的數(shù)據(jù)可靠性,且處理方式比較靈活,處理效率較高。
文檔編號(hào)G06F11/00GK102508724SQ201110326370
公開日2012年6月20日 申請(qǐng)日期2011年10月25日 優(yōu)先權(quán)日2011年10月25日
發(fā)明者周澤湘, 張偉濤, 張恒, 李艷國(guó), 武志民, 潘興旺, 王道邦, 章珉 申請(qǐng)人:北京同有飛驥科技股份有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
旺苍县| 广丰县| 宜章县| 凌海市| 吉木乃县| 彭阳县| 尼木县| 岳池县| 高邑县| 巴青县| 吴旗县| 屏边| 龙江县| 贵阳市| 正安县| 长汀县| 偃师市| 雅江县| 兰西县| 方山县| 保德县| 嘉黎县| 左贡县| 陇南市| 三河市| 天长市| 陆丰市| 新竹县| 汤原县| 桓台县| 沙洋县| 陆丰市| 北票市| 清流县| 大足县| 邵武市| 从化市| 临夏县| 湟源县| 左贡县| 会泽县|