一種基于虛擬磁盤層的檢測(cè)Raid磁盤拔出的方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,尤其涉及一種基于虛擬磁盤層的檢測(cè)Raid磁盤拔出的方法及裝置。
【背景技術(shù)】
[0002]Raid在收到磁盤拔出事件時(shí),將進(jìn)入降級(jí)或者失效狀態(tài)。
[0003]傳統(tǒng)的磁盤拔出都是物理上的拔出事件。首先通過磁盤監(jiān)控技術(shù)比如smart工具來監(jiān)測(cè)磁盤健康狀態(tài),當(dāng)發(fā)現(xiàn)磁盤即將損壞或已經(jīng)損壞,通過告警模塊通知人工替換。損壞的磁盤拔出必須通過人工進(jìn)行,進(jìn)而OS監(jiān)測(cè)到磁盤硬件拔出,產(chǎn)生事件通知,由Raid的事件通知層通知到Raid。
[0004]在實(shí)現(xiàn)本發(fā)明過程中,發(fā)明人發(fā)現(xiàn)現(xiàn)有技術(shù)中至少存在如下問題:
[0005]1.必須在磁盤即將損壞的時(shí)間片區(qū)內(nèi)及時(shí)通知到人,由人手動(dòng)拔出磁盤。若磁盤監(jiān)控或人工處理不及時(shí)導(dǎo)致磁盤已經(jīng)損壞,則會(huì)導(dǎo)致大量數(shù)據(jù)錯(cuò)誤;
[0006]2.手工拔出磁盤事件通知到Raid時(shí)間周期較長,需要秒級(jí)時(shí)間。
[0007]由OS監(jiān)測(cè)到磁盤硬件拔出,產(chǎn)生塊設(shè)備plugout事件的時(shí)間是秒級(jí)的,在處理大量1的情況下,秒級(jí)的延遲將產(chǎn)生大量的1錯(cuò)誤,要屏蔽掉這些錯(cuò)誤,Raid的錯(cuò)誤retry需要設(shè)置到秒級(jí),導(dǎo)致磁盤拔出那個(gè)時(shí)間點(diǎn)會(huì)產(chǎn)生秒級(jí)的1停頓(重試)。
【發(fā)明內(nèi)容】
[0008]為解決上述技術(shù)問題,本發(fā)明提出了一種基于虛擬磁盤層的檢測(cè)Raid磁盤拔出的方法及裝置,自動(dòng)發(fā)現(xiàn)磁盤錯(cuò)誤并自動(dòng)通知Raid磁盤拔出,可以提高Raid的健壯性,減少非自動(dòng)化的錯(cuò)誤,同時(shí)還和即刻發(fā)現(xiàn)磁盤物理拔出方法相結(jié)合,使得物理拔出磁盤事件在有1的時(shí)候立即通知到Raid,消除磁盤拔出那個(gè)時(shí)間點(diǎn)可能的1停頓。
[0009]本發(fā)明提供了一種基于虛擬磁盤層的檢測(cè)Raid磁盤拔出的方法,該方法包括:
[0010]建立虛擬磁盤層VSD,所述VSD將磁盤陣列Raid的幾何空間劃分為保留區(qū)和數(shù)據(jù)區(qū),所述保留區(qū)包括超級(jí)塊區(qū)、位圖bitmap索引區(qū)、壞塊重定向索引區(qū)和壞塊重定向數(shù)據(jù)區(qū);
[0011]在壞塊重定向過程中,所述虛擬磁盤層VSD實(shí)時(shí)檢測(cè)所述壞塊重定向數(shù)據(jù)區(qū)的磁盤壞塊數(shù)量,當(dāng)所述磁盤壞塊數(shù)量超出設(shè)定閾值時(shí),通知所述Raid磁盤拔出;
[0012]在執(zhí)行讀寫操作時(shí),所述虛擬磁盤層VSD實(shí)時(shí)檢測(cè)所述讀寫操作是否有錯(cuò)誤碼返回,當(dāng)所述錯(cuò)誤碼為磁盤介質(zhì)錯(cuò)誤時(shí),通知所述Raid磁盤拔出。
[0013]優(yōu)選地,所述設(shè)定閾值小于等于所述Raid實(shí)際可容忍的壞塊數(shù)量。
[0014]優(yōu)選地,所述通知所述Raid磁盤拔出具體為:通過調(diào)用內(nèi)部接口啟動(dòng)預(yù)設(shè)線程執(zhí)行,通知所述Raid磁盤拔出。
[0015]優(yōu)選地,所述內(nèi)部接口啟動(dòng)所述預(yù)設(shè)線程執(zhí)行時(shí),若所述預(yù)設(shè)線程還沒有執(zhí)行完畢,則返回,否則啟動(dòng)所述預(yù)設(shè)線程執(zhí)行。
[0016]優(yōu)選地,所述內(nèi)部接口與磁盤物理拔出時(shí)所調(diào)用的底層接口相同。
[0017]相應(yīng)的,本發(fā)明還提出了一種基于虛擬磁盤層的檢測(cè)Raid磁盤拔出的裝置,所述裝置包括:
[0018]VSD建立模塊,用于建立虛擬磁盤層VSD,所述VSD將磁盤陣列Raid的幾何空間劃分為保留區(qū)和數(shù)據(jù)區(qū),所述保留區(qū)包括超級(jí)塊區(qū)、位圖bitmap索引區(qū)、壞塊重定向索引區(qū)和壞塊重定向數(shù)據(jù)區(qū);
[0019]第一檢測(cè)模塊,用于在壞塊重定向過程中,所述虛擬磁盤層VSD實(shí)時(shí)檢測(cè)所述壞塊重定向數(shù)據(jù)區(qū)的磁盤壞塊數(shù)量,當(dāng)所述磁盤壞塊數(shù)量超出設(shè)定閾值時(shí),通知所述Raid磁盤拔出;
[0020]第二檢測(cè)模塊,用于在執(zhí)行讀寫操作時(shí),所述虛擬磁盤層VSD實(shí)時(shí)檢測(cè)所述讀寫操作是否有錯(cuò)誤碼返回,當(dāng)所述錯(cuò)誤碼為磁盤介質(zhì)錯(cuò)誤時(shí),通知所述Raid磁盤拔出。
[0021]優(yōu)選地,所述設(shè)定閾值小于等于所述Raid實(shí)際可容忍的壞塊數(shù)量。
[0022]采用本發(fā)明提出的一種基于虛擬磁盤層的檢測(cè)Raid磁盤拔出的方法及裝置,通過在VSD壞塊重定向功能的基礎(chǔ)上,主動(dòng)發(fā)現(xiàn)磁盤不可用;在VSD執(zhí)行1返回錯(cuò)誤時(shí),若是磁盤介質(zhì)錯(cuò)誤等相關(guān)的錯(cuò)誤碼,則主動(dòng)發(fā)現(xiàn)磁盤不可用;采用統(tǒng)一的、內(nèi)核進(jìn)程上下文的不可重入的接口來通知磁盤陣列Raid,與磁盤物理拔出調(diào)用相同的底層接口,使得本發(fā)明能自動(dòng)發(fā)現(xiàn)磁盤錯(cuò)誤并自動(dòng)通知Raid磁盤拔出,提高了 Raid的健壯性,減少非自動(dòng)化的錯(cuò)誤。物理拔出磁盤事件在有1的時(shí)候立即通知到Raid,消除磁盤拔出那個(gè)時(shí)間點(diǎn)可能的1停頓。
【附圖說明】
[0023]通過參考附圖會(huì)更加清楚的理解本發(fā)明的特征和優(yōu)點(diǎn),附圖是示意性的而不應(yīng)理解為對(duì)本發(fā)明進(jìn)行任何限制,在附圖中:
[0024]圖1為本發(fā)明實(shí)施例一提出的一種基于虛擬磁盤層的檢測(cè)Raid磁盤拔出的方法流程圖;
[0025]圖2為本發(fā)明實(shí)施例中提出的vsd_plugout_bbr接口函數(shù)的工作流程圖;
[0026]圖3為本發(fā)明實(shí)施例二提出的一種基于虛擬磁盤層的檢測(cè)Raid磁盤拔出的裝置模塊圖。
【具體實(shí)施方式】
[0027]為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0028]圖1為本發(fā)明實(shí)施例一提出的一種基于虛擬磁盤層的檢測(cè)Raid磁盤拔出的方法流程圖,如圖1所示,該方法包括以下步驟:
[0029]SlOl,建立虛擬磁盤層VSD,所述VSD將磁盤陣列Raid的幾何空間劃分為保留區(qū)和數(shù)據(jù)區(qū),所述保留區(qū)包括超級(jí)塊區(qū)、位圖bitmap索引區(qū)、壞塊重定向索引區(qū)和壞塊重定向數(shù)據(jù)區(qū)等;
[0030]S102,在壞塊重定向過程中,所述虛擬磁盤層VSD實(shí)時(shí)檢測(cè)所述壞塊重定向數(shù)據(jù)區(qū)的磁盤壞塊數(shù)量,當(dāng)所述磁盤壞塊數(shù)量超出設(shè)定閾值時(shí),通知所述Raid磁盤拔出。其中,所述設(shè)定閾值小于等于所述Raid實(shí)際可容忍的壞塊數(shù)量。
[0031]S103,在執(zhí)行讀寫操作時(shí),所述虛擬磁盤層VSD實(shí)時(shí)檢測(cè)所述讀寫操作是否有錯(cuò)誤碼返回,當(dāng)所述錯(cuò)誤碼為磁盤介質(zhì)錯(cuò)誤時(shí),通知所述Raid磁盤拔出。
[0032]其中,步驟S102和步驟S103中,通知所述Raid磁盤拔出具體為:通過調(diào)用內(nèi)部接口啟動(dòng)預(yù)設(shè)線程執(zhí)行,通知所述Raid磁盤拔出。所述內(nèi)部接口啟動(dòng)所述預(yù)設(shè)線程執(zhí)行時(shí),若所述預(yù)設(shè)線程還沒有執(zhí)行完畢,則返回,否則啟動(dòng)所述預(yù)設(shè)線程執(zhí)行。本發(fā)明實(shí)施例中,通過調(diào)用vsd_plugout_bbr接口啟動(dòng)一個(gè)新線程執(zhí)行特定VSD對(duì)象的plugout,當(dāng)時(shí)啟動(dòng)新線程執(zhí)行時(shí),若之前的線程還在執(zhí)行,則返回。
[0033]其中,所述內(nèi)部接口與磁盤物理拔出時(shí)所調(diào)用的底層接口相同。采用統(tǒng)一的、內(nèi)核進(jìn)程上下文的不可重入的接口來通知磁盤陣列Raid,與磁盤物理拔出調(diào)用相同的底層接口,使得本發(fā)明能自動(dòng)發(fā)現(xiàn)磁盤錯(cuò)誤并自動(dòng)通知Raid磁盤拔出,提高了 Raid的健壯性,減少非自動(dòng)化的錯(cuò)誤。物理拔出磁盤事件在有1的時(shí)候立即通知到Raid,消除磁盤拔出那個(gè)時(shí)間點(diǎn)可能的1停頓。
[0034]本發(fā)明實(shí)施例,為了讓磁盤陣列raid更好的記錄各種狀態(tài),適應(yīng)各種磁盤,本發(fā)明引入了虛擬磁盤Virtual Storage Disk層,簡(jiǎn)稱VSD。VSD將磁盤的幾何空間做了重新劃分,分為保留區(qū)和數(shù)據(jù)區(qū)。保留區(qū)由超級(jí)塊區(qū),bitmap索引區(qū),壞塊重定向索引區(qū),壞塊重定向數(shù)據(jù)區(qū)等組成。在VSD層實(shí)現(xiàn)了支持雙控制器的高效的壞塊重定向功能,與具體操作系統(tǒng)OS,磁盤Disk無關(guān),具有很高的兼容性和擴(kuò)展性。VSD在壞塊重定向過程中發(fā)現(xiàn)重定向數(shù)據(jù)塊區(qū)即將滿了,則可斷定該磁盤不可用了(壞塊個(gè)數(shù)超過了可以容忍的值),這時(shí)可以