專利名稱:一種磁盤陣列系統(tǒng)中磁盤故障處理和數(shù)據(jù)重構(gòu)方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)存儲(chǔ)領(lǐng)域,特別涉及磁盤陣列系統(tǒng)中磁盤故障處理和數(shù)據(jù)重構(gòu) 的方法。
背景技術(shù):
磁盤陣列(RAID,簡稱Redundant Array of Independent Disks)是一種把多塊獨(dú) 立的硬盤(物理硬盤)按不同的方式組合起來形成一個(gè)硬盤組(邏輯硬盤),從而提 供比單個(gè)硬盤更高的存儲(chǔ)性能和提供數(shù)據(jù)備份的技術(shù)。RAID技術(shù)作為一種成熟的 技術(shù)廣泛應(yīng)用于磁盤陣列系統(tǒng)中。磁盤陣列按照獨(dú)立硬盤組成磁盤陣列的不同方式 分成不同的RAID級別(RAID Levels)。現(xiàn)有技術(shù)中已擁有了從RAID 0到RAID 6 七種基本的RAI:D級別。不同的RAI:D級別代表著不同的存儲(chǔ)性能、數(shù)據(jù)安全性、 存儲(chǔ)成本以及算法復(fù)雜度和數(shù)據(jù)冗余度。
在大多數(shù)的RAID級別中,當(dāng)磁盤陣列中的磁盤失效時(shí),RAID系統(tǒng)可以通過 冗余的數(shù)據(jù)或者編碼重構(gòu)故障磁盤,從而保證了數(shù)據(jù)的完整性,提高數(shù)據(jù)的可用性。 但是,對于一個(gè)具有冗余能力的RAID系統(tǒng),其在數(shù)據(jù)重構(gòu)的過程中存在較大的風(fēng) 險(xiǎn)與不足。
以實(shí)際應(yīng)用中較為常見的RAID5為例,RAID5是-種存儲(chǔ)性能、數(shù)據(jù)安全和 存儲(chǔ)成本i;顧的存儲(chǔ)解決方樂。RAIDS不對磁盤中存儲(chǔ)的數(shù)據(jù)進(jìn)行備份,而是把數(shù) 據(jù)和相對應(yīng)的奇偶校驗(yàn)信息存儲(chǔ)到組成RAI:D5的各個(gè)磁盤上,并且奇偶校驗(yàn)信息和 相對應(yīng)的數(shù)據(jù)分別存儲(chǔ)于不同的磁盤....t:。當(dāng)RAID5的一個(gè)磁盤數(shù)據(jù)發(fā)生損壞后,利 用剩.F的數(shù)據(jù)和相應(yīng)的奇偶校驗(yàn)信息去恢復(fù)被損壞的數(shù)據(jù)。RAID5在重構(gòu)數(shù)據(jù)的過 程中,通常在檢測到磁盤發(fā)生讀寫故障后,會(huì)立即將故障磁盤設(shè)置為"故障"狀態(tài), 并且將其剔出陣列,同時(shí)加入一塊新的冗余數(shù)據(jù)盤,然后通過冗余的編碼信息將故 障磁盤中的數(shù)據(jù)信息重構(gòu)到冗余數(shù)據(jù)盤中。由于RAID5本身的冗余編碼信息有限, 采用上述的數(shù)據(jù)重構(gòu)方法極易導(dǎo)致陣列崩潰,數(shù)據(jù)丟失。因此,RAID5的數(shù)據(jù)重構(gòu) 過程具有高風(fēng)險(xiǎn)的缺陷。RAID6是另一種常見的存儲(chǔ)解決方案。在RAID6中,數(shù)據(jù)和校驗(yàn)碼都是被分 成數(shù)據(jù)塊,然后分別存儲(chǔ)到磁盤陣列的各個(gè)硬盤匕與RAID5相比,RAID6還加 入了一個(gè)獨(dú)立的校驗(yàn)磁盤,它把分布在各個(gè)磁盤上的校驗(yàn)碼都備份在一起,這樣 RAID6磁盤陣列就允許多個(gè)磁盤同吋出現(xiàn)故障。但RAID6重構(gòu)數(shù)據(jù)的過程與RAID5 相類似,也會(huì)將發(fā)生故障的磁盤設(shè)為"故障"狀態(tài),并剔出陣列。基于RAID6本身 所具有的冗余編碼信息豐富的特點(diǎn),應(yīng)用現(xiàn)有的數(shù)據(jù)重構(gòu)方法會(huì)延長數(shù)據(jù)重構(gòu)時(shí)間, 因此需要高性能處理器或者特殊硬件的支持,RAID6的數(shù)據(jù)重構(gòu)過程具有低性能的 缺陷。
鑒于現(xiàn)有的數(shù)據(jù)重構(gòu)方法在磁盤陣列系統(tǒng)中的應(yīng)用存在上述的不足,迫切需要 一種新的方法。
發(fā)明內(nèi)容
本發(fā)明的目的是克服現(xiàn)有磁盤陣列在數(shù)據(jù)重構(gòu)過程中風(fēng)險(xiǎn)高、性能低的缺陷, 從而提供一種低風(fēng)險(xiǎn)、高效率的磁盤陣列故障處理和數(shù)據(jù)重構(gòu)方法。
為了實(shí)現(xiàn)上述目的,本發(fā)明提供了一種磁盤陣列系統(tǒng)中磁盤故障處理方法和數(shù)
據(jù)重構(gòu)方法,按照以下步驟順序執(zhí)行
步驟l)、磁盤陣列中的磁盤發(fā)生讀寫故障;
步驟2)、在故障磁盤中定位故障數(shù)據(jù)塊,保留故障磁盤上的剩余正確數(shù)據(jù),并 査找故障信息表,判斷發(fā)生故障的數(shù)據(jù)塊所在條帶是否已經(jīng)存在其他故障數(shù)據(jù)塊, 若存在,執(zhí)行下一步,否則,執(zhí)行步驟4);
步驟3)、磁盤陣列系統(tǒng)的信息完整性被破壞,將磁盤陣列系統(tǒng)設(shè)置為"只讀模
式",禁止用戶執(zhí)行寫操作,對磁盤的故障處理操作結(jié)束;
步驟4)、將故障數(shù)據(jù)塊的位置信息記錄到故障信息表中;
步驟5)、判斷磁盤陣列系統(tǒng)中是否存在冗余數(shù)據(jù)盤,若不存在,執(zhí)行下一步, 否則,執(zhí)行步驟7);
步驟6)、進(jìn)入"降級"運(yùn)行模式,結(jié)束操作; 步驟7)、對故障數(shù)據(jù)塊迸行數(shù)據(jù)重構(gòu),恢復(fù)故障數(shù)據(jù)。 上述技術(shù)方案中,所述的步驟7)包括以下步驟-
步驟7-l)、判斷發(fā)生故障的磁盤是否是磁盤陣列中的工作盤,如果是,執(zhí)行步 驟7-3),否則,執(zhí)行下一步;
步驟7-2)、工作盤所綁定的從盤發(fā)生故障,為發(fā)生故障的從盤所對應(yīng)的主盤再分配一個(gè)冗余數(shù)據(jù)盤,構(gòu)建一主多從的主從盤結(jié)構(gòu),然后執(zhí)行下一步,如果無法為 主盤分配新的從盤,則磁盤陣列系統(tǒng)進(jìn)入"降級"運(yùn)行模式;
步驟7-3)、將工作盤的故障數(shù)據(jù)塊的信息加入到故障信息表中;
步驟7-4)、判斷發(fā)生故障的工作盤是否建立了主從盤關(guān)系,若已建立,執(zhí)行步 驟7-6),否則,執(zhí)行下一步;
步驟7-5)、為發(fā)生故障的工作盤尋找一個(gè)冗余數(shù)據(jù)盤,將發(fā)生故障的工作盤作 為主盤,所述的冗余數(shù)據(jù)盤作為從盤,建立主從盤結(jié)構(gòu);
步驟7-6)、將主盤上的故障數(shù)據(jù)信息映射到從盤的相應(yīng)位置;
步驟7-7)、啟動(dòng)數(shù)據(jù)重構(gòu)操作;
步驟7-8)、執(zhí)行數(shù)據(jù)重構(gòu)的循環(huán)操作,記錄數(shù)據(jù)遷移點(diǎn)的位置信息,并判斷對
當(dāng)前磁盤的數(shù)據(jù)重構(gòu)操作是否結(jié)束,若沒有,執(zhí)行下一步,否則,執(zhí)行步驟7-14);
步驟7-9)、判斷當(dāng)前數(shù)據(jù)是否是有效數(shù)據(jù),若是,執(zhí)行下一步,否則,執(zhí)行步 驟7-ll);
步驟7-10)、采用數(shù)據(jù)遷移技術(shù)將主盤數(shù)據(jù)重構(gòu)到從盤上,重新執(zhí)行步驟7-8);
步驟7-11)、判斷當(dāng)前數(shù)據(jù)是否為新發(fā)生的故障數(shù)據(jù),若是,執(zhí)行下一步,否 則,執(zhí)行步驟7-14);
步驟7-12)、采用冗余編碼技術(shù)恢復(fù)故障數(shù)據(jù),并寫入從盤,重新執(zhí)行步驟7-8);
步驟7-13)、判斷當(dāng)前數(shù)據(jù)是否為已經(jīng)遷移的數(shù)據(jù),對于已經(jīng)遷移的數(shù)據(jù)無需 再次遷移,重新執(zhí)行步驟7-8);
步驟7-14)、數(shù)據(jù)重構(gòu)操作完畢,將發(fā)生故障的工作盤設(shè)置成"故障"狀態(tài), 剔除出磁盤陣列,并將從盤升級為主盤,解除發(fā)生故障的工作盤與冗余數(shù)據(jù)盤間的 主從關(guān)系。
所述的磁盤陣列系統(tǒng)在數(shù)據(jù)遷移過程中,允許對發(fā)生數(shù)據(jù)遷移的磁盤進(jìn)行訪問, 當(dāng)用戶讀寫數(shù)據(jù)時(shí),若用戶讀寫數(shù)據(jù)點(diǎn)落在數(shù)據(jù)遷移點(diǎn)之前,則直接對從盤進(jìn)行操 作;若用戶讀寫數(shù)據(jù)點(diǎn)落在數(shù)據(jù)遷移點(diǎn)之后,則直接對主盤進(jìn)行操作;若用戶讀寫 數(shù)據(jù)點(diǎn)落在數(shù)據(jù)遷移點(diǎn)之上,那么通過該數(shù)據(jù)塊的鎖機(jī)制來保證從盤數(shù)據(jù)與主盤數(shù) 據(jù)的一致性或者從盤數(shù)據(jù)新于主盤數(shù)據(jù);若用戶讀寫數(shù)據(jù)點(diǎn)落在故障數(shù)據(jù)塊上,磁 盤存在主從盤關(guān)系,則將對主盤故障數(shù)據(jù)塊的訪問轉(zhuǎn)換成對從盤映射數(shù)據(jù)塊的操作, 若不存在主從盤關(guān)系,則通過冗余編碼信息對故障數(shù)據(jù)塊進(jìn)行操作。
所述的磁盤陣列系統(tǒng)在做讀寫訪問時(shí),如果被訪問的數(shù)據(jù)塊在故障信息表內(nèi), 則訪問從盤映射數(shù)據(jù),或?qū)ζ渌疟P相同位置的信息做冗余編碼計(jì)算;如果被訪問 的數(shù)據(jù)塊不在故障信息表內(nèi),則直接訪問原有數(shù)據(jù)塊。在所述的步驟7-2)中,所述的一主多從的主從盤結(jié)構(gòu)中,多個(gè)從盤補(bǔ)充主盤 成為一個(gè)完好的磁盤。
在所述的步驟7-5)中,所述的主從盤結(jié)構(gòu)中,所述的從盤補(bǔ)充主盤成為一個(gè) 完好的磁盤。
在所述的步驟7-6)中,所述的映射是將發(fā)生故障位置的數(shù)據(jù)塊通過其它磁盤 的冗余編碼恢復(fù)到從盤,并將發(fā)生故障數(shù)據(jù)塊的位置信息記錄到故障信息表。
在所述的步驟7-7)中,在啟動(dòng)數(shù)據(jù)重構(gòu)操作時(shí),若磁盤陣列系統(tǒng)中存在多個(gè) 故障磁盤數(shù)據(jù)重構(gòu)操作,則并行執(zhí)行數(shù)據(jù)重構(gòu)操作或按照優(yōu)先級關(guān)系串行執(zhí)行。
在所述的步驟7-8)中,所述的數(shù)據(jù)遷移點(diǎn)的位置信息作為每個(gè)磁盤的元數(shù)據(jù) 信息被不斷刷新保存到磁盤。
本發(fā)明的優(yōu)點(diǎn)在于
1、 本發(fā)明將磁盤故障做局部化處理,保留故障磁盤上的正確數(shù)據(jù),提高了磁盤 陣列系統(tǒng)的容錯(cuò)能力;
2、 本發(fā)明在數(shù)據(jù)重構(gòu)過程中采用了主從盤結(jié)構(gòu)、故障信息表和數(shù)據(jù)遷移技術(shù), 不僅加快了數(shù)據(jù)重構(gòu)速度,而且大大降低了數(shù)據(jù)重構(gòu)風(fēng)險(xiǎn),提高了磁盤陣列系統(tǒng)的 可用性。
圖1為本發(fā)明的磁盤陣列系統(tǒng)中磁盤故障處理和數(shù)據(jù)重構(gòu)方法的流程圖; 圖2為本發(fā)明的磁盤陣列系統(tǒng)中磁盤故障處理和數(shù)據(jù)重構(gòu)方法中數(shù)據(jù)重構(gòu)的流 程圖3為本發(fā)明數(shù)據(jù)重構(gòu)過程中,故障數(shù)據(jù)映射與主從盤關(guān)系建立示意圖; 圖4為數(shù)據(jù)遷移過程中,不同讀寫請求處理方法示意圖; 圖5為本發(fā)明在數(shù)據(jù)重構(gòu)過程中,多盤讀寫故障而保證數(shù)據(jù)完整性的示意圖; 圖6是本發(fā)明數(shù)據(jù)重構(gòu)結(jié)束操作示意圖。
具體實(shí)施例方式
下面結(jié)合附圖和具體實(shí)施方式
對本發(fā)明作進(jìn)一步詳細(xì)描述
本發(fā)明的故障處理和數(shù)據(jù)重構(gòu)方法的基本思想是當(dāng)磁盤數(shù)據(jù)發(fā)生故障后,先 將主盤上發(fā)生故障位置的數(shù)據(jù)塊復(fù)制到從盤,再將發(fā)生故障主盤上的所有數(shù)據(jù)塊從 前到后,依次遷移到從盤,完成一次恢復(fù)過程。與現(xiàn)有技術(shù)相比,本發(fā)明不將磁盤的局部損壞視為整個(gè)磁盤的損壞,當(dāng)檢測到工作盤發(fā)生故障后,不將工作盤設(shè)置為 "故障"狀態(tài),也不將發(fā)生故障的工作盤從磁盤陣列中剔除,而是把發(fā)生故障的磁 盤繼續(xù)保留在磁盤陣列中作為有效磁盤使用,這樣做一方面能夠提升數(shù)據(jù)重構(gòu)的性 能,另一方面也能夠降低重構(gòu)過程中其它磁盤發(fā)生故障所帶來的風(fēng)險(xiǎn)。在以下的實(shí) 施例中,以RAID級別的磁盤陣列系統(tǒng)為例,對本發(fā)明的方法做進(jìn)一步說明。
如圖1所示,本發(fā)明的磁盤陣列系統(tǒng)中磁盤故障處理和數(shù)據(jù)重構(gòu)方法包括以下 步驟
步驟IO、磁盤陣列系統(tǒng)中的磁盤發(fā)生讀寫故障;
步驟20、在故障磁盤中定位故障數(shù)據(jù)塊,保留故障磁盤上的剩余正確數(shù)據(jù),并 查找故障信息表,判斷發(fā)生故障的數(shù)據(jù)塊所在條帶是否已經(jīng)存在其他故障數(shù)據(jù)塊, 若存在,執(zhí)行下一步,否則,執(zhí)行步驟40;
本領(lǐng)域的普通技術(shù)人員都知道,磁盤陣列系統(tǒng)中,不同磁盤上相同條帶的數(shù)據(jù) 塊間具有聯(lián)系,且一個(gè)數(shù)據(jù)塊中保存有同一條帶其他數(shù)據(jù)塊的冗余數(shù)據(jù)。因此,如
果同一條帶中同一時(shí)間內(nèi)只有一個(gè)故障數(shù)據(jù)塊,則故障數(shù)據(jù)塊可通過其他數(shù)據(jù)塊上 的冗余數(shù)據(jù)進(jìn)行恢復(fù),但如果同一條帶在同一時(shí)間內(nèi)有兩個(gè)以上的故障數(shù)據(jù)塊,則 會(huì)破壞磁盤陣列系統(tǒng)的信息完整性。根據(jù)發(fā)生故障的磁盤數(shù)據(jù)塊的不同情況,需要 做不同的操作。
在現(xiàn)有技術(shù)中,如果一個(gè)磁盤發(fā)生故障,會(huì)將整個(gè)磁盤視為故障,不再使用故 障磁盤上的任何數(shù)據(jù)。但通過本步驟可見,本發(fā)明將故障做局部化處理,只舍棄故 障磁盤上的故障數(shù)據(jù)塊,保留正確數(shù)據(jù)塊,允許對正確數(shù)據(jù)塊進(jìn)行讀寫操作。
步驟30、磁盤陣列系統(tǒng)的信息完整性被破壞,將磁盤陣列系統(tǒng)設(shè)置為"只讀模 式",禁止用戶執(zhí)行寫操作,對磁盤的故障處理操作結(jié)束;
步驟40、將故障數(shù)據(jù)塊的位置信息記錄到故障信息表中;
磁盤陣列的故障信息表主要包括兩部分的內(nèi)容, 一是磁盤陣列中發(fā)生故障的數(shù) 據(jù)塊所在的位置,二是如果要進(jìn)行重構(gòu)操作,故障信息表還應(yīng)當(dāng)包括關(guān)于主從盤關(guān) 系的信息。在本步驟中,需要將故障數(shù)據(jù)塊的位置信息添加到故障信息表中,而關(guān)
于主從盤關(guān)系的信息則在后續(xù)的步驟73中實(shí)現(xiàn)。
步驟50、判斷磁盤陣列系統(tǒng)中是否存在冗余數(shù)據(jù)盤,若不存在,執(zhí)行下一步,
否則,執(zhí)行步驟70;
步驟60、進(jìn)入"降級"運(yùn)行模式;
在正常情況下,磁盤陣列系統(tǒng)具有冗余信息,通過對冗余信息的編碼可實(shí)現(xiàn)對
信息的保護(hù),例如在RAID5結(jié)構(gòu)中用N+l塊磁盤存儲(chǔ)N塊盤的信息,當(dāng)一塊磁盤發(fā)生故障時(shí),通過其他磁盤中所保存的冗余信息可恢復(fù)故障盤中的信息。但如果磁 盤發(fā)生故障時(shí),沒有備份盤可以替換或替換過程沒有完成,則其余N塊盤雖然可以 通過冗余編碼提供完整的信息,但這時(shí)磁盤陣列處于無冗余狀態(tài),數(shù)據(jù)安全低,而 且整體性能變差,這種情況就是本步驟中所述的"降級"模式。 步驟70、對故障數(shù)據(jù)塊進(jìn)行數(shù)據(jù)重構(gòu),恢復(fù)故障數(shù)據(jù)。從步驟10到步驟60,可視為對磁盤陣列系統(tǒng)中的磁盤故障進(jìn)行處理的過程,而本步驟則實(shí)現(xiàn)了故障數(shù)據(jù)塊的數(shù)據(jù)重構(gòu),對故障數(shù)據(jù)塊進(jìn)行數(shù)據(jù)重構(gòu)是一個(gè)較為復(fù)雜的操作,如圖2所示,其具體實(shí)現(xiàn)如下步驟71、判斷發(fā)生故障的磁盤是否是磁盤陣列中的工作盤,如果是,執(zhí)行步驟 73,否則,執(zhí)行下一步;步驟72、工作盤所綁定的從盤發(fā)生故障,為發(fā)生故障的從盤所對應(yīng)的主盤再尋找一個(gè)冗余數(shù)據(jù)盤,構(gòu)建一個(gè)一主多從的主從盤結(jié)構(gòu),如果無法為主盤分配新的從 盤,則磁盤陣列系統(tǒng)進(jìn)入"降級"運(yùn)行模式。在本步驟中,發(fā)生故障的從盤在恢復(fù)過程中并不放棄,但在恢復(fù)過程完成后,只保留沒有故障的從盤,并用沒有故障的從盤替代主盤。步驟73、將工作盤的故障數(shù)據(jù)塊的信息加入到故障信息表中。在本步驟中,主 要是將關(guān)于主從盤關(guān)系的信息添加到故障信息表中。步驟74、判斷發(fā)生故障的工作盤是否建立了主從盤關(guān)系,若已建立,執(zhí)行步驟 76,否則,執(zhí)行下一步;步驟75、為發(fā)生故障的工作盤尋找一個(gè)冗余數(shù)據(jù)盤,將發(fā)生故障的工作盤作為 主盤,所找到的冗余數(shù)據(jù)盤作為從盤,建立主從盤結(jié)構(gòu),從盤補(bǔ)充主盤構(gòu)成完好磁 盤,如果無法為發(fā)生故障的工作盤分配一個(gè)冗余數(shù)據(jù)盤作為從盤,則磁盤陣列系統(tǒng) 進(jìn)入"降級"運(yùn)行模式。步驟76、將主盤上的故障數(shù)據(jù)信息映射到從盤的相應(yīng)位置。在本步驟中,映射 有兩個(gè)含義,第一,發(fā)生故障位置的數(shù)據(jù)塊立即通過其他多個(gè)盤的冗余編碼恢復(fù)到 從盤,并將這個(gè)信息記錄到故障信息表;第二,以后對故障位置數(shù)據(jù)塊進(jìn)行的訪問, 將直接訪問從盤,直接訪問從盤比用冗余編碼訪問多個(gè)盤的速度快。如圖3所示,在一個(gè)包含有四個(gè)工作盤和一個(gè)冗余數(shù)據(jù)盤的磁盤陣列中,分別 用A、 B、 C、 D表示各個(gè)工作盤,假設(shè)標(biāo)記為D的工作盤發(fā)生讀寫故障,根據(jù)上述 步驟為D盤查找冗余數(shù)據(jù)盤作為它的從盤,然后將D盤上的故障數(shù)據(jù)塊的位置信息 存入故障信息表,并將故障數(shù)據(jù)塊映射到從盤上。步驟77、啟動(dòng)數(shù)據(jù)重構(gòu)操作,若磁盤陣列系統(tǒng)中存在多個(gè)故障磁盤數(shù)據(jù)重構(gòu)操作,則可以并行執(zhí)行數(shù)據(jù)重構(gòu)操作,也可以按照一定的優(yōu)先級關(guān)系串行執(zhí)行;在本實(shí)施例中,可按照優(yōu)先級關(guān)系串行執(zhí)行數(shù)據(jù)重構(gòu)過程,如果有故障磁盤正在做數(shù)據(jù)重構(gòu)操作,則其它故障磁盤的重構(gòu)操作需要等待。步驟78、執(zhí)行數(shù)據(jù)重構(gòu)的循環(huán)操作,記錄數(shù)據(jù)遷移點(diǎn)的位置信息,并判斷對當(dāng)前磁盤的數(shù)據(jù)重構(gòu)操作是否結(jié)束,若沒有,執(zhí)行下一步,否則,執(zhí)行步驟714。在本步驟中,所述的數(shù)據(jù)遷移點(diǎn)是指數(shù)據(jù)重構(gòu)過程中,當(dāng)前需要重構(gòu)的數(shù)據(jù)塊的位置。數(shù)據(jù)遷移點(diǎn)的位置會(huì)隨著數(shù)據(jù)遷移的過程而不斷改變。步驟79、判斷當(dāng)前數(shù)據(jù)是否是有效數(shù)據(jù),若是,執(zhí)行下一步,否則,執(zhí)行步驟711。步驟710、采用數(shù)據(jù)遷移技術(shù)將主盤數(shù)據(jù)重構(gòu)到從盤上,重新執(zhí)行步驟78。步驟711、判斷當(dāng)前數(shù)據(jù)是否為新發(fā)生的故障數(shù)據(jù),若是,執(zhí)行下一步,否則, 執(zhí)行步驟714。在步驟76中,實(shí)現(xiàn)了主盤上的故障數(shù)據(jù)信息向從盤的映射,但在數(shù) 據(jù)恢復(fù)過程中,主盤可能會(huì)產(chǎn)生新的故障數(shù)據(jù)塊,因此,在本步驟中,還要對當(dāng)前 數(shù)據(jù)是否為故障數(shù)據(jù)進(jìn)行判斷,并在后續(xù)操作中對故障數(shù)據(jù)做相應(yīng)的處理。步驟712、采用冗余編碼技術(shù)恢復(fù)故障數(shù)據(jù),并寫入從盤,重新執(zhí)行步驟78;步驟713、已經(jīng)遷移的數(shù)據(jù)無需再次遷移,重新執(zhí)行步驟78;步驟714、數(shù)據(jù)重構(gòu)操作完畢,將發(fā)生故障的工作盤剔除出磁盤陣列,并將從 盤升級為主盤,解除發(fā)生故障的工作盤與冗余數(shù)據(jù)盤間的主從關(guān)系。在磁盤故障處理和數(shù)據(jù)重構(gòu)過程中,都可對故障數(shù)據(jù)塊進(jìn)行訪問,以保障服務(wù) 的連續(xù)性和數(shù)據(jù)的完整性。在步驟78中,通過記錄數(shù)據(jù)遷移點(diǎn)位置的方法保證了在 服務(wù)連續(xù)性的前提下不影響數(shù)據(jù)的完整性。如圖4所示,在數(shù)據(jù)重構(gòu)過程中,當(dāng)記 錄數(shù)據(jù)遷移點(diǎn)位置后,用戶訪問數(shù)據(jù)遷移盤存在如下情況,本發(fā)明采取了相應(yīng)處理 方法保證了數(shù)據(jù)完整性1、 用戶訪問數(shù)據(jù)落在數(shù)據(jù)遷移點(diǎn)之前,即用戶所訪問的數(shù)據(jù)位于數(shù)據(jù)重構(gòu)操作完畢的區(qū)域內(nèi)對于這種情況, 一律將用戶的請求映射到從盤,用戶對主盤的數(shù)據(jù)讀寫操作都轉(zhuǎn)換成對從盤的操作。2、 用戶訪問數(shù)據(jù)落在數(shù)據(jù)遷移點(diǎn)之上本發(fā)明中規(guī)定,對于同一數(shù)據(jù)塊不能存在多種操作,只能有一種操作,因此,可以采用鎖機(jī)制來保證該數(shù)據(jù)塊在遷移操作 過程中,用戶無法對其進(jìn)行讀寫,從而保證在用戶和數(shù)據(jù)遷移操作對一個(gè)數(shù)據(jù)塊競 爭的過程中,從盤數(shù)據(jù)新于主盤數(shù)據(jù)或者兩者保持一致。3、 用戶訪問數(shù)據(jù)落在故障數(shù)據(jù)塊上在訪問主盤數(shù)據(jù)時(shí),查找故障信息表,如果能夠找到訪問數(shù)據(jù)塊的信息,那么被訪問的數(shù)據(jù)塊為故障數(shù)據(jù)塊。此時(shí),如果存 在主從盤關(guān)系,那么對主盤故障數(shù)據(jù)塊的訪問轉(zhuǎn)換成對從盤映射數(shù)據(jù)塊的操作。如 果不存在主從盤關(guān)系,那么通過冗余編碼信息對故障數(shù)據(jù)塊進(jìn)行操作。4、用戶訪問數(shù)據(jù)落在數(shù)據(jù)遷移點(diǎn)之后,即用戶所訪問的數(shù)據(jù)還沒有進(jìn)行數(shù)據(jù)重 構(gòu)操作如果用戶訪問數(shù)據(jù)落在數(shù)據(jù)遷移點(diǎn)之后,數(shù)據(jù)讀寫操作可以直接對主盤進(jìn) 行,然后通過后繼的數(shù)據(jù)遷移保證數(shù)據(jù)的完整性。在這種情況下,如果用戶讀寫數(shù) 據(jù)塊發(fā)生故障,那么同樣將其加入故障信息表,并將恢復(fù)的故障數(shù)據(jù)塊映射到從盤 對應(yīng)位置。數(shù)據(jù)遷移點(diǎn)位置信息記錄在磁盤陣列的元數(shù)據(jù)信息中。這樣,當(dāng)發(fā)生諸如斷電、 網(wǎng)絡(luò)故障等意外情況時(shí),還能保存最近遷移點(diǎn)位置信息。通過保存的遷移點(diǎn)位置信 息可以繼續(xù)磁盤數(shù)據(jù)重構(gòu)操作,提高了效率。在步驟60、步驟72和步驟75中,磁盤陣列系統(tǒng)都進(jìn)入"降級"模式,在降級 模式下,仍然可以對故障磁盤進(jìn)行訪問。在對故障磁盤進(jìn)行訪問時(shí),如果訪問的數(shù) 據(jù)塊是故障數(shù)據(jù)塊,則通過冗余編碼完成訪問,如果訪問的是故障盤中的正常數(shù)據(jù) 塊,則直接訪問原有信息。采用本發(fā)明的方法,可以降低數(shù)據(jù)重構(gòu)和降級狀態(tài)所帶來的數(shù)據(jù)丟失風(fēng)險(xiǎn)。在 采用本發(fā)明方法的磁盤陣列中,不同磁盤上不同位置的數(shù)據(jù)塊發(fā)生故障不會(huì)破壞磁 盤陣列的數(shù)據(jù)完整性,只有不同磁盤上相同位置的數(shù)據(jù)塊同時(shí)發(fā)生故障,且故障數(shù) 據(jù)高于陣列的冗余數(shù)量時(shí),才會(huì)破壞陣列數(shù)據(jù)的完整性。如圖4所示,仍以本實(shí)施 例中所采用的RAID級別的磁盤陣列系統(tǒng)為例,在具有四個(gè)工作盤和一個(gè)冗余盤的 磁盤陣列系統(tǒng)中,即使有多個(gè)工作盤發(fā)生故障,磁盤陣列依然可以保持?jǐn)?shù)據(jù)的完整 性。在圖5中,數(shù)字標(biāo)號分別表示故障磁盤數(shù)據(jù)塊的索引號。4號故障數(shù)據(jù)塊位于 A盤上,3號故障數(shù)據(jù)塊位于B盤上,2號故障數(shù)據(jù)塊位于C盤上,l號故障數(shù)據(jù) 塊位于D盤上。由于4號和1號數(shù)據(jù)塊在同一條帶,因此,只要滿足這兩個(gè)數(shù)據(jù)塊 不在同一時(shí)間內(nèi)發(fā)生故障,那么陣列的數(shù)據(jù)完整性能夠得到保證,即使每個(gè)磁盤都 擁有故障數(shù)據(jù)塊,但是數(shù)據(jù)依然安然無恙。由于數(shù)據(jù)塊的容量遠(yuǎn)遠(yuǎn)小于磁盤的容量, 多個(gè)磁盤相同位置的數(shù)據(jù)塊同時(shí)發(fā)生故障(如1, 4號數(shù)據(jù)塊同時(shí)發(fā)生故障)的概率 遠(yuǎn)遠(yuǎn)小于多個(gè)磁盤同時(shí)發(fā)生故障(如A中任意一個(gè)數(shù)據(jù)塊發(fā)生故障同時(shí)D中任何一個(gè)數(shù)據(jù)塊發(fā)生故障)的概率。因此,與傳統(tǒng)數(shù)據(jù)重構(gòu)方法相比,本發(fā)明具有極大優(yōu) 勢。如圖6所示,當(dāng)主盤數(shù)據(jù)全部重構(gòu)到對應(yīng)從盤之后,該故障磁盤的數(shù)據(jù)重構(gòu)完 畢。重構(gòu)完畢的從盤數(shù)據(jù)可以與主盤保持一致,也可以新于主盤中的數(shù)據(jù)。重構(gòu)完 畢后,故障磁盤被設(shè)置為"故障狀態(tài)",并且將其從磁盤陣列中剔除。此時(shí),帶有有 效數(shù)據(jù)的從盤升級為主盤,成為陣列一員,主從盤關(guān)系自然解除。最后所應(yīng)說明的是,以上實(shí)施例僅用以說明本發(fā)明的技術(shù)方案而非限制。盡管 參照實(shí)施例對本發(fā)明進(jìn)行了詳細(xì)說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解,對本發(fā)明 的技術(shù)方案進(jìn)行修改或者等同替換,都不脫離本發(fā)明技術(shù)方案的精神和范圍,其均 應(yīng)涵蓋在本發(fā)明的權(quán)利要求范圍當(dāng)中。
權(quán)利要求
1. 一種磁盤陣列系統(tǒng)中磁盤故障處理方法和數(shù)據(jù)重構(gòu)方法,按照以下步驟順序執(zhí)行步驟1)、磁盤陣列中的磁盤發(fā)生讀寫故障;步驟2)、在故障磁盤中定位故障數(shù)據(jù)塊,保留故障磁盤上的剩余正確數(shù)據(jù),并查找故障信息表,判斷發(fā)生故障的數(shù)據(jù)塊所在條帶是否已經(jīng)存在其他故障數(shù)據(jù)塊,若存在,執(zhí)行下一步,否則,執(zhí)行步驟4);步驟3)、磁盤陣列系統(tǒng)的信息完整性被破壞,將磁盤陣列系統(tǒng)設(shè)置為“只讀模式”,禁止用戶執(zhí)行寫操作,對磁盤的故障處理操作結(jié)束;步驟4)、將故障數(shù)據(jù)塊的位置信息記錄到故障信息表中;步驟5)、判斷磁盤陣列系統(tǒng)中是否存在冗余數(shù)據(jù)盤,若不存在,執(zhí)行下一步,否則,執(zhí)行步驟7);步驟6)、進(jìn)入“降級”運(yùn)行模式,結(jié)束操作;步驟7)、對故障數(shù)據(jù)塊進(jìn)行數(shù)據(jù)重構(gòu),恢復(fù)故障數(shù)據(jù)。
2、 根據(jù)權(quán)利要求1所述的磁盤陣列系統(tǒng)中磁盤故障處理方法和數(shù)據(jù)重構(gòu)方法, 其特征在于,所述的步驟7)包括以下步驟步驟7-l)、判斷發(fā)生故障的磁盤是否是磁盤陣列中的工作盤,如果是,執(zhí)行步驟7-3),否則,執(zhí)行下一步;步驟7-2)、工作盤所綁定的從盤發(fā)生故障,為發(fā)生故障的從盤所對應(yīng)的主盤再分配一個(gè)冗余數(shù)據(jù)盤,構(gòu)建一主多從的主從盤結(jié)構(gòu),然后執(zhí)行下一步,如果無法為主盤分配新的從盤,則磁盤陣列系統(tǒng)進(jìn)入"降級"運(yùn)行模式;步驟7-3)、將工作盤的故障數(shù)據(jù)塊的信息加入到故障信息表中;步驟7-4)、判斷發(fā)生故障的工作盤是否建立了主從盤關(guān)系,若已建立,執(zhí)行步 驟7-6),否則,執(zhí)行下一步;步驟7-5)、為發(fā)生故障的工作盤尋找一個(gè)冗余數(shù)據(jù)盤,將發(fā)生故障的工作盤作 為主盤,所述的冗余數(shù)據(jù)盤作為從盤,建立主從盤結(jié)構(gòu);步驟7-6)、將主盤上的故障數(shù)據(jù)信息映射到從盤的相應(yīng)位置;步驟7-7)、啟動(dòng)數(shù)據(jù)重構(gòu)操作;步驟7-8)、執(zhí)行數(shù)據(jù)重構(gòu)的循環(huán)操作,記錄數(shù)據(jù)遷移點(diǎn)的位置信息,并判斷對當(dāng)前磁盤的數(shù)據(jù)重構(gòu)操作是否結(jié)束,若沒有,執(zhí)行下一步,否則,執(zhí)行步驟7-14);步驟7-9)、判斷當(dāng)前數(shù)據(jù)是否是有效數(shù)據(jù),若是,執(zhí)行下一步,否則,執(zhí)行步 驟7-ll);步驟7-10)、采用數(shù)據(jù)遷移技術(shù)將主盤數(shù)據(jù)重構(gòu)到從盤上,重新執(zhí)行步驟7-8); 步驟7-11)、判斷當(dāng)前數(shù)據(jù)是否為新發(fā)生的故障數(shù)據(jù),若是,執(zhí)行下一步,否則,執(zhí)行步驟7-14);步驟7-12)、采用冗余編碼技術(shù)恢復(fù)故障數(shù)據(jù),并寫入從盤,重新執(zhí)行步驟7-8);步驟7-13)、判斷當(dāng)前數(shù)據(jù)是否為已經(jīng)遷移的數(shù)據(jù),對于已經(jīng)遷移的數(shù)據(jù)無需 再次遷移,重新執(zhí)行步驟7-8);步驟7-14)、數(shù)據(jù)重構(gòu)操作完畢,將發(fā)生故障的工作盤設(shè)置成"故障"狀態(tài), 剔除出磁盤陣列,并將從盤升級為主盤,解除發(fā)生故障的工作盤與冗余數(shù)據(jù)盤間的 主從關(guān)系。
3、 根據(jù)權(quán)利要求2所述的磁盤陣列系統(tǒng)中磁盤故障處理方法和數(shù)據(jù)重構(gòu)方法, 其特征在于,所述的磁盤陣列系統(tǒng)在數(shù)據(jù)遷移過程中,允許對發(fā)生數(shù)據(jù)遷移的磁盤 進(jìn)行訪問,當(dāng)用戶讀寫數(shù)據(jù)時(shí),若用戶讀寫數(shù)據(jù)點(diǎn)落在數(shù)據(jù)遷移點(diǎn)之前,則直接對 從盤進(jìn)行操作;若用戶讀寫數(shù)據(jù)點(diǎn)落在數(shù)據(jù)遷移點(diǎn)之后,則直接對主盤進(jìn)行操作; 若用戶讀寫數(shù)據(jù)點(diǎn)落在數(shù)據(jù)遷移點(diǎn)之上,那么通過該數(shù)據(jù)塊的鎖機(jī)制來保證從盤數(shù) 據(jù)與主盤數(shù)據(jù)的一致性或者從盤數(shù)據(jù)新于主盤數(shù)據(jù);若用戶讀寫數(shù)據(jù)點(diǎn)落在故障數(shù) 據(jù)塊上,磁盤存在主從盤關(guān)系,則將對主盤故障數(shù)據(jù)塊的訪問轉(zhuǎn)換成對從盤映射數(shù) 據(jù)塊的操作,若不存在主從盤關(guān)系,則通過冗余編碼信息對故障數(shù)據(jù)塊進(jìn)行操作。
4、 根據(jù)權(quán)利要求2所述的磁盤陣列系統(tǒng)中磁盤故障處理方法和數(shù)據(jù)重構(gòu)方法, 其特征在于,磁盤陣列系統(tǒng)在做讀寫訪問時(shí),如果被訪問的數(shù)據(jù)塊在故障信息表內(nèi), 則訪問從盤映射數(shù)據(jù),或?qū)ζ渌疟P相同位置的信息做冗余編碼計(jì)算;如果被訪問 的數(shù)據(jù)塊不在故障信息表內(nèi),則直接訪問原有數(shù)據(jù)塊。
5、 根據(jù)權(quán)利要求2所述的磁盤陣列系統(tǒng)中磁盤故障處理方法和數(shù)據(jù)重構(gòu)方法, 其特征在于,在所述的步驟7-2)中,所述的一主多從的主從盤結(jié)構(gòu)中,多個(gè)從盤 補(bǔ)充主盤成為一個(gè)完好的磁盤。
6、 根據(jù)權(quán)利要求2所述的磁盤陣列系統(tǒng)中磁盤故障處理和數(shù)據(jù)重構(gòu)方法,其特 征在于,在所述的步驟7-5)中,所述的主從盤結(jié)構(gòu)中,所述的從盤補(bǔ)充主盤成為 一個(gè)完好的磁盤。
7、 根據(jù)權(quán)利要求2所述的磁盤陣列系統(tǒng)中磁盤故障處理和數(shù)據(jù)重構(gòu)方法,其特 征在于,在所述的步驟7-6)中,所述的映射是將發(fā)生故障位置的數(shù)據(jù)塊通過其它 磁盤的冗余編碼恢復(fù)到從盤,并將發(fā)生故障數(shù)據(jù)塊的位置信息記錄到故障信息表。
8、 根據(jù)權(quán)利要求2所述的磁盤陣列系統(tǒng)中磁盤故障處理和數(shù)據(jù)重構(gòu)方法,其特 征在于,在所述的步驟7-7)中,在啟動(dòng)數(shù)據(jù)重構(gòu)操作時(shí),若磁盤陣列系統(tǒng)中存在 多個(gè)故障磁盤數(shù)據(jù)重構(gòu)操作,則并行執(zhí)行數(shù)據(jù)重構(gòu)操作或按照優(yōu)先級關(guān)系串行執(zhí)行。
9、 根據(jù)權(quán)利要求2所述的磁盤陣列系統(tǒng)中磁盤故障處理和數(shù)據(jù)重構(gòu)方法,其特 征在于,在所述的步驟7-8)中,所述的數(shù)據(jù)遷移點(diǎn)的位置信息作為每個(gè)磁盤的元 數(shù)據(jù)信息被不斷刷新保存到磁盤。
全文摘要
本發(fā)明公開了一種磁盤陣列系統(tǒng)中磁盤故障處理方法和數(shù)據(jù)重構(gòu)方法,包括磁盤陣列中的磁盤發(fā)生讀寫故障;定位故障數(shù)據(jù)塊,保留故障磁盤上的剩余正確數(shù)據(jù),并查找故障信息表,判斷發(fā)生故障的數(shù)據(jù)塊所在條帶是否已經(jīng)存在其他故障數(shù)據(jù)塊,若存在,將磁盤陣列系統(tǒng)設(shè)置為“只讀模式”,禁止用戶執(zhí)行寫操作;否則,將故障數(shù)據(jù)塊的位置信息記錄到故障信息表中;然后判斷磁盤陣列系統(tǒng)中是否存在冗余數(shù)據(jù)盤,若不存在,進(jìn)入“降級”運(yùn)行模式;否則,對故障數(shù)據(jù)塊進(jìn)行數(shù)據(jù)重構(gòu),恢復(fù)故障數(shù)據(jù)。
文檔編號G06F11/34GK101276302SQ20071006493
公開日2008年10月1日 申請日期2007年3月29日 優(yōu)先權(quán)日2007年3月29日
發(fā)明者吳忠杰, 李一鳴, 紀(jì)海濤, 韓曉明, 馬一力 申請人:中國科學(xué)院計(jì)算技術(shù)研究所