基于虛擬磁盤的壞塊重定向方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及信息存儲技術(shù)領(lǐng)域,具體涉及一種基于虛擬磁盤的壞塊重定向方法及
目.0
【背景技術(shù)】
[0002]在實(shí)際應(yīng)用中,磁盤經(jīng)常因?yàn)檫\(yùn)輸,安裝,使用環(huán)境等原因產(chǎn)生壞道。傳統(tǒng)的磁盤容錯技術(shù)有:通過smart工具來預(yù)測磁盤使用壽命,然后通過告警模塊通知人工替換。當(dāng)磁盤出現(xiàn)部分壞道時(shí),將錯誤直接反饋到用戶層導(dǎo)致數(shù)據(jù)錯誤。為了提高磁盤的容錯可用性,業(yè)界產(chǎn)生了磁盤容錯的壞塊重定向技術(shù)。首先要支持實(shí)時(shí)探測壞塊,當(dāng)寫1返回特定的錯誤碼,或者重試N次都失敗,則可確定為壞塊。當(dāng)有壞塊時(shí),在內(nèi)存中建立壞塊重定向索引,將壞塊重新定位到磁盤預(yù)留區(qū)的壞塊重定向數(shù)據(jù)區(qū)中,若寫入成功,則同步壞塊重定向索引到磁盤的壞塊重定向索引區(qū)中。
[0003]通過smart工具來監(jiān)控磁盤,只能預(yù)測;必須通過人工干預(yù);局部錯誤會反饋到用戶層,期望用戶層有糾錯能力;傳統(tǒng)的壞塊重定向技術(shù)引入了復(fù)雜的流程,可能帶來性能和穩(wěn)定性問題;并且還不支持雙控制器的壞塊重定向。
【發(fā)明內(nèi)容】
[0004]針對現(xiàn)有技術(shù)中的缺陷,本發(fā)明提供了一種基于虛擬磁盤的壞塊重定向方法及裝置,解決了傳統(tǒng)的壞塊重定向技術(shù)帶來系統(tǒng)性能和穩(wěn)定性降低的問題。
[0005]第一方面,本發(fā)明提供一種基于虛擬磁盤的壞塊重定向方法,包括:
[0006]在1與磁盤之間引入VSD層;
[0007]根據(jù)所述VSD中的壞塊重定向索引,并將所述壞塊重定向索引的目標(biāo)地址重定向到所述磁盤中未發(fā)生壞塊的區(qū)域。
[0008]可選的,所述在1與磁盤之間引入VSD層,包括:
[0009]對所述VSD層進(jìn)行分核,以使不同條帶組的1分配在不同的CPU核上。
[0010]可選的,所述方法還包括:
[0011 ] 在所述VSD層加入雙控異步1鎖,使得所述磁盤中的第一控制器與第二控制器按照順序進(jìn)行壞塊重定向索引。
[0012]可選的,采用ping-pong模式保存索引數(shù)據(jù)塊。
[0013]可選的,所述采用ping-pong模式保存索引數(shù)據(jù)塊,包括:
[0014]保存所述索引數(shù)據(jù)塊中版本最小的索引數(shù)據(jù)塊;
[0015]在所述索引數(shù)據(jù)塊修改時(shí),若修改失敗,則保留原所述索引數(shù)據(jù)塊的版本;
[0016]對所述索引數(shù)據(jù)塊中版本最大的進(jìn)行讀操作,版本最小的進(jìn)行寫操作。
[0017]第二方面,本發(fā)明還提供了一種基于虛擬磁盤的壞塊重定向裝置,包括:
[0018]引入模塊,用于在1與磁盤之間引入VSD層;
[0019]壞塊重定向模塊,用于根據(jù)所述VSD中的壞塊重定向索引,并將所述壞塊重定向索引的目標(biāo)地址重定向到所述磁盤中未發(fā)生壞塊的區(qū)域。
[0020]可選的,所述引入模塊,還用于:
[0021]對所述VSD層進(jìn)行分核,以使不同條帶組的1分配在不同的CPU核上。
[0022]可選的,所述裝置還包括:
[0023]雙控異步1鎖模塊,用于在所述VSD層加入雙控異步1鎖,使得所述磁盤中的第一控制器與第二控制器按照順序進(jìn)行壞塊重定向索引。
[0024]可選的,所述裝置通過ping-pong模式保存索引數(shù)據(jù)塊。
[0025]可選的,所述通過ping-pong模式保存索引數(shù)據(jù)塊,包括:
[0026]保存所述索引數(shù)據(jù)塊中版本最小的索引數(shù)據(jù)塊;
[0027]在所述索引數(shù)據(jù)塊修改時(shí),若修改失敗,則保留原所述索引數(shù)據(jù)塊的版本;
[0028]對所述索引數(shù)據(jù)塊中版本最大的進(jìn)行讀操作,版本最小的進(jìn)行寫操作。
[0029]由上述技術(shù)方案可知,本發(fā)明提供的一種基于虛擬磁盤的壞塊重定向方法及裝置,通過在1與磁盤之間引入VSD層;根據(jù)所述VSD中的壞塊重定向索引,并將所述壞塊重定向索引的目標(biāo)地址指向所述磁盤中未發(fā)生壞塊的區(qū)域解決了傳統(tǒng)的壞塊重定向技術(shù)帶來系統(tǒng)性能和穩(wěn)定性降低的問題。
【附圖說明】
[0030]圖1為本發(fā)明一實(shí)施例提供的一種基于虛擬磁盤的壞塊重定向方法的流程示意圖;
[0031]圖2為本發(fā)明一實(shí)施例提供的一種基于虛擬磁盤的壞塊重定向裝置的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0032]下面結(jié)合附圖,對發(fā)明的【具體實(shí)施方式】作進(jìn)一步描述。以下實(shí)施例僅用于更加清楚地說明本發(fā)明的技術(shù)方案,而不能以此來限制本發(fā)明的保護(hù)范圍。
[0033]圖1示出了一種基于虛擬磁盤的壞塊重定向方法,如圖1所示,該方法包括:
[0034]101、在1與磁盤之間引入虛擬磁盤Virtual Storage Disk(簡稱VSD)層;
[0035]具體的對所述VSD層進(jìn)行分核,以使不同條帶組的1分配在不同的CPU核上。
[0036]102、根據(jù)所述VSD中的壞塊重定向索引,并將所述壞塊重定向索引的目標(biāo)地址重定向到所述磁盤中未發(fā)生壞塊的區(qū)域。
[0037]在具體應(yīng)用中,所述方法還包括圖1中未示出的步驟103:
[0038]103、在所述VSD層加入雙控異步1鎖,使得所述磁盤中的第一控制器與第二控制器按照順序進(jìn)行壞塊重定向索引。
[0039]在具體應(yīng)用中,本方法采用ping-pong模式保存索引數(shù)據(jù)塊。
[0040]上述采用ping-pong模式保存索引數(shù)據(jù)塊,包括:
[0041]保存所述索引數(shù)據(jù)塊中版本最小的索引數(shù)據(jù)塊;
[0042]在所述索引數(shù)據(jù)塊修改時(shí),若修改失敗,則保留原所述索引數(shù)據(jù)塊的版本;
[0043]對所述索引數(shù)據(jù)塊中版本最大的進(jìn)行讀操作,版本最小的進(jìn)行寫操作。
[0044]為了更清楚的說明上述方法,通過下述實(shí)施例來進(jìn)行詳細(xì)說明。
[0045]為了讓raid更好的記錄各種狀態(tài),適應(yīng)各種磁盤,引入了虛擬磁盤VSD層。VSD將磁盤的幾何空間做了重新劃分,分為保留區(qū)和數(shù)據(jù)區(qū)。保留區(qū)由超級塊區(qū),bitmap索引區(qū),壞塊重定向索引區(qū),壞塊重定向數(shù)據(jù)區(qū)等組成。
[0046]上層的1要到達(dá)Disk,要通過VSD層轉(zhuǎn)發(fā),在VSD層做壞塊重定向,就可以做到與具體OS,Disk無關(guān),具有很高的兼容性和擴(kuò)展性。
[0047]在VSD上做了分核設(shè)定,不同條帶組的1分配在不同CPU核上進(jìn)行,則VSD處理1的壞塊重定向過程中,訪問的索引區(qū)和數(shù)據(jù)區(qū)相對每個(gè)CPU核獨(dú)立,不存在數(shù)據(jù)共享訪問的鎖沖突,而且數(shù)據(jù)節(jié)點(diǎn)數(shù)量小。
[0048]內(nèi)存中采用Per_CPU的range_rb_tree (范圍紅黑樹)來保存壞塊重定向索引,通過range_rb_tree的接口進(jìn)行l(wèi)oad,查找,更新,delete。由于Per_CPU架構(gòu)不用spin_lock鎖,則每次正常1只增加一個(gè)range_rb_tree的查找過程,只有幾條指令(由rb_tree的深度決定),所以不會影響性能。
[0049]range_rb_tree的節(jié)點(diǎn)為4k字節(jié)的數(shù)據(jù)塊地址映射,相對每個(gè)扇區(qū)大小(512字節(jié))來說做了放大,但可以大大簡化(內(nèi)存管理和流程的)復(fù)雜性。
[0050]當(dāng)探測到壞塊(4k范圍)時(shí)啟動雙控的壞塊重定向過程:
[0051]a)首先要通過雙控異步1鎖來保護(hù)壞塊重定向過程不會重入。在壞塊重定向過程,插入磁盤產(chǎn)生plugin事件處理過程等需要修改Per_CPU range_rb_tree的過程,都需要加載雙控異步1鎖來保護(hù)。
[0052]b)拿到雙控異步1鎖的回調(diào)中執(zhí)行dc_bbr_work:獲取新的重定向塊,若滿了,貝Ij報(bào)告錯誤;修改b1發(fā)送到重定向后的數(shù)據(jù)塊;同步保存重定向索引到磁盤的保留區(qū);發(fā)送同步重定向請求到對端控制器,同步重定向索引數(shù)據(jù)保證兩端索引數(shù)據(jù)一致(用于保證處理各種雙控切換事件發(fā)生后的壞塊重定向索引正確性)。當(dāng)所有異步過程產(chǎn)生的task引用都完畢后,dc_bbr_task才完畢,雙控重定向過程完成。
[0053]c)同步到對端的過程要處理雙控的斷開切單,加入切雙等事件。
[0054]具體工作流程:
[0055]1、因?yàn)橥粩?shù)據(jù)塊會都在一端依次寫,另一端可能依次讀,而不是都由一端來依次讀寫,所以pcpu_bbr_map在修改的時(shí)候必須同步到對端。
[0056]a)同步過程中不需要spin_lock or mutex保護(hù)共享資源.首先pcpu模式下對tree的修改不會產(chǎn)生程序crash,而1沖突正確性由上層保證。
[0057]b)同步過程的雙控沖突需要1_mutex的保護(hù)機(jī)制。
[0058]2、attach的時(shí)候需要讀disk
[0059]a)從磁盤reload bbr索引的時(shí)候,pcpu_bbr_map都裝載區(qū)塊