專利名稱:一種基于鏡像技術(shù)的數(shù)據(jù)存儲方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及通信技術(shù)領(lǐng)域,特別是涉及一種基于鏡像技術(shù)的數(shù)據(jù)存儲方法及裝置。
背景技術(shù):
RAID (Redundant Array of Inexpensive Disks,磁盤冗余陣列)是一種高性能、 高可靠性的存儲技術(shù),通過將一系列單獨的磁盤以不同的方式組合起來,為應用終端或終 端集群提供邏輯上的磁盤。其中,使用RAID的優(yōu)點包括擴大磁 盤容量、提高磁盤讀寫的性 能和數(shù)據(jù)的安全性。具體的,RAID技術(shù)已經(jīng)廣泛應用于數(shù)據(jù)存儲的各種場合,常用的RAID技術(shù)包括 RAIDO、RAIDU RAID5、RAID6、RAIDlO等;其中,RAIDO不具有冗余能力,RAIDl并不是完全 的磁盤陣列;而RAID5、RAID6和RAIDlO分別由多塊磁盤(例如,RAID5和RAID6不少于3 塊,RAIDlO不少于4塊)組成,各個RAID以條帶的方式向陣列中的磁盤寫數(shù)據(jù),并將奇偶 校驗數(shù)據(jù)存放在陣列中的各個磁盤上。其中,奇偶校驗數(shù)據(jù)是由每個條帶中的數(shù)據(jù)位使用 XOR運算得出,從而使得在一個磁盤發(fā)生損壞時,可以通過條帶中的數(shù)據(jù)位+奇偶校驗位使 用XOR運算來還原丟失的那部分數(shù)據(jù)。進一步的,RAID5的每個條帶上含有1個校驗位,支持任意損壞其中一塊磁盤,通 過其他磁盤上的奇偶校驗位來重建數(shù)據(jù);RAID6的每個條帶上含有2個校驗位,支持任意損 壞其中兩塊磁盤,通過其他磁盤上的奇偶校驗位來恢復數(shù)據(jù);RAIDlO是對磁盤組先進行鏡 像,再對磁盤進行條帶,當一塊磁盤損壞后通過其對應的鏡像盤恢復數(shù)據(jù),最多允許不同位 置下50%的磁盤損壞。如圖1所示,為現(xiàn)有技術(shù)中一種以RAID5為例的數(shù)據(jù)存儲過程示意圖,其中,RAID5 是一種基于條帶校驗模型的存儲結(jié)構(gòu),還有一個校驗位,當對數(shù)據(jù)寫入RAID5陣列時,需要 對條帶上的數(shù)據(jù)進行校驗,并將校驗和寫入到校驗位。具體的,RAID5陣列由3塊磁盤組成,而寫入RAID5的有6塊數(shù)據(jù),此時,需要將6 塊數(shù)據(jù)分成3個條帶寫入磁盤中。其中,條帶P(P1、P2和P3)中的數(shù)據(jù)塊是奇偶校驗數(shù)據(jù), 分別由每個條帶中的數(shù)據(jù)XOR算出,即P1=A@B,P2=C D,P3=E F;假設(shè)磁盤1損壞 時,對于條帶1中的數(shù)據(jù)A,可以由B @ Pl運算得出。如圖2所示,為現(xiàn)有技術(shù)中一種以RAIDlO為例的數(shù)據(jù)存儲過程示意圖,其中, RAIDlO是RAIDl和RAIDO的結(jié)合,也可稱為RAID (0+1),先進行鏡像后進行條帶化,既提高 了系統(tǒng)的讀寫性能,又提供了數(shù)據(jù)的冗余保護,RAIDlO的磁盤空間利用率和RAIDl是一樣 的,均為50%。具體的,在RAIDlO中,只要不是鏡像組的一對磁盤同時出現(xiàn)損壞,則可以支持多 塊磁盤同時掉線。例如,在圖2中,當磁盤1、4、5三塊磁盤同時掉線時,只要磁盤2、3、6仍 然正常工作,則可以保證數(shù)據(jù)不丟失。但是,在使用RAID5進行數(shù)據(jù)存儲時,當數(shù)據(jù)寫入時有數(shù)據(jù)發(fā)生變化,則條帶需要重新進行校驗,從而導致寫入的性能較低。尤其是在隨機寫較多的情況下,為了計算新校驗 和還需要將老數(shù)據(jù)讀出,開銷巨大,性能嚴重下降。另外,當有磁盤因為寫入失敗發(fā)生踢盤 或者其他原因損失后,則陣列重建過程需要將所有保留數(shù)據(jù)全部讀出并通過異或關(guān)系計算 來恢復數(shù)據(jù),從而導致系統(tǒng)資源被大量占用,嚴重影響對正常業(yè)務(wù)的響應速度。在使用RAIDlO進行數(shù)據(jù)存儲時,當一對鏡像組磁盤同時掉線時,則數(shù)據(jù)將無法恢 復,例如,如果磁盤1和磁盤2同時損壞時,則RAIDlO陣列中的數(shù)據(jù)就無法恢復了。此外, RAIDlO的磁盤利用率不是很高,需要消耗50%的磁盤來對數(shù)據(jù)進行冗余,大大增加了設(shè)備 的成本
發(fā)明內(nèi)容
本發(fā)明提供一種基于鏡像技術(shù)的數(shù)據(jù)存儲方法及裝置,以節(jié)省系統(tǒng)資源,并提高 磁盤的利用率。為了達到上述目的,本發(fā)明提出了一種基于鏡像技術(shù)的數(shù)據(jù)存儲方法,應用于包 括至少兩個磁盤的RAID陣列中,所述RAID陣列中的磁盤設(shè)有局部鏡像分區(qū),所述方法進一 步包括以下步驟當有數(shù)據(jù)需要對所述磁盤進行寫操作時,從所述磁盤對應的其他磁盤的局部鏡像 分區(qū)中選擇活動分塊,并將所述數(shù)據(jù)寫入所述磁盤和選擇的局部鏡像分區(qū)的活動分塊;當所述數(shù)據(jù)寫入所述磁盤和局部鏡像分區(qū)的活動分塊成功時,刪除所述局部鏡像 分區(qū)的活動分塊中寫入的數(shù)據(jù);當所述數(shù)據(jù)寫入所述磁盤失敗且寫入所述局部鏡像分區(qū)的活動分塊成功時,根據(jù) 所述局部鏡像分區(qū)的活動分塊中寫入的數(shù)據(jù)對所述磁盤進行恢復。所述RAID陣列中的磁盤設(shè)有局部鏡像分區(qū),具體為將所述RAID陣列的所有磁盤進行排序,并根據(jù)排序結(jié)果從所有磁盤中選擇一個 磁盤的預設(shè)個數(shù)的條帶分塊作為前一個磁盤的局部鏡像分區(qū)。將所述數(shù)據(jù)寫入所述磁盤和選擇的局部鏡像分區(qū)的活動分塊,之后還包括將所述局部鏡像分區(qū)的活動分塊設(shè)置為鎖定狀態(tài);其中,處于鎖定狀態(tài)的活動分 塊無法寫入數(shù)據(jù);刪除所述局部鏡像分區(qū)的活動分塊中寫入的數(shù)據(jù),之后還包括清除所述局部鏡 像分區(qū)的活動分塊設(shè)置的鎖定狀態(tài);根據(jù)所述局部鏡像分區(qū)的活動分塊中寫入的數(shù)據(jù)對所述磁盤進行恢復,之前還包 括保持所述局部鏡像分區(qū)的活動分塊設(shè)置的鎖定狀態(tài)。根據(jù)所述局部鏡像分區(qū)的活動分塊中寫入的數(shù)據(jù)對所述磁盤進行恢復,具體包 括獲取所述磁盤的性能信息,并當所述性能信息小于預設(shè)的性能指標時,根據(jù)所述 局部鏡像分區(qū)的活動分塊中寫入的數(shù)據(jù)對所述磁盤進行恢復。根據(jù)所述局部鏡像分區(qū)的活動分塊中寫入的數(shù)據(jù)對所述磁盤進行恢復,具體包 括將所述局部鏡像分區(qū)的活動分塊中寫入的數(shù)據(jù)重新寫入到所述磁盤;如果預設(shè)次 數(shù)內(nèi)將所述局部鏡像分區(qū)的活動分塊中寫入的數(shù)據(jù)重新寫入到所述磁盤成功時,刪除所述局部鏡像分區(qū)的活動分塊中寫入的數(shù)據(jù),并清除所述局部鏡像分區(qū)的活動分塊設(shè)置的鎖定 狀態(tài);如果預設(shè)次數(shù)內(nèi)將所述局部鏡像分區(qū)的活動分塊中寫入的數(shù)據(jù)重新寫入到所述磁盤 均失敗時,如果當前有可用的熱備磁盤,則通過所述熱備磁盤對所述磁盤進行重建。通過所述熱備磁盤對所述磁盤進行重建,具體包括將所述磁盤中的數(shù)據(jù)和所述局部鏡像分區(qū)的活動分塊中寫入的數(shù)據(jù)拷貝到所述 熱備磁盤,刪除所述局部鏡像分區(qū)的活動分塊中寫入的數(shù)據(jù),并清除所述局部鏡像分區(qū)的 活動分塊設(shè)置的鎖定狀態(tài)。一種基于鏡像技術(shù)的數(shù)據(jù)存儲裝置,應用于包括至少兩個磁盤的RAID陣列中,所 述RAID陣列中的磁盤設(shè)有局部鏡像分區(qū),所述裝置包括選擇模塊,用于當有數(shù)據(jù)需要對所述磁盤進行寫操作時,從所述磁盤對應的其他 磁盤的局部鏡像分區(qū)中選擇活動分塊;
寫入模塊,與所述選擇模塊連接,用于將所述數(shù)據(jù)寫入所述磁盤和選擇的局部鏡 像分區(qū)的活動分塊;刪除模塊,與所述選擇模塊和所述寫入模塊分別連接,用于當所述數(shù)據(jù)寫入所述 磁盤和局部鏡像分區(qū)的活動分塊成功時,刪除所述局部鏡像分區(qū)的活動分塊中寫入的數(shù) 據(jù);處理模塊,與所述選擇模塊和所述寫入模塊分別連接,用于當所述數(shù)據(jù)寫入所述 磁盤失敗且寫入所述局部鏡像分區(qū)的活動分塊成功時,根據(jù)所述局部鏡像分區(qū)的活動分塊 中寫入的數(shù)據(jù)對所述磁盤進行恢復。還包括設(shè)置模塊,與所述選擇模塊連接,用于將所述RAID陣列的所有磁盤進行排序,并 根據(jù)排序結(jié)果從所有磁盤中選擇一個磁盤的預設(shè)個數(shù)的條帶分塊作為前一個磁盤的局部 鏡像分區(qū)。還包括維護模塊,用于當所述數(shù)據(jù)寫入所述磁盤和選擇的局部鏡像分區(qū)的活動分塊時, 將所述局部鏡像分區(qū)的活動分塊設(shè)置為鎖定狀態(tài);其中,處于鎖定狀態(tài)的活動分塊無法寫 入數(shù)據(jù);當刪除所述局部鏡像分區(qū)的活動分塊中寫入的數(shù)據(jù)時,清除所述局部鏡像分區(qū)的 活動分塊設(shè)置的鎖定狀態(tài);當根據(jù)所述局部鏡像分區(qū)的活動分塊中寫入的數(shù)據(jù)對所述磁盤進行恢復時,保持 所述局部鏡像分區(qū)的活動分塊設(shè)置的鎖定狀態(tài)。所述處理模塊,具體用于獲取所述磁盤的性能信息,并當所述性能信息小于預設(shè) 的性能指標時,根據(jù)所述局部鏡像分區(qū)的活動分塊中寫入的數(shù)據(jù)對所述磁盤進行恢復。所述處理模塊,進一步用于將所述局部鏡像分區(qū)的活動分塊中寫入的數(shù)據(jù)重新寫 入到所述磁盤;如果預設(shè)次數(shù)內(nèi)將所述局部鏡像分區(qū)的活動分塊中寫入的數(shù)據(jù)重新寫入到 所述磁盤成功時,刪除所述局部鏡像分區(qū)的活動分塊中寫入的數(shù)據(jù),并清除所述局部鏡像 分區(qū)的活動分塊設(shè)置的鎖定狀態(tài);如果預設(shè)次數(shù)內(nèi)將所述局部鏡像分區(qū)的活動分塊中寫入 的數(shù)據(jù)重新寫入到所述磁盤均失敗時,如果當前有可用的熱備磁盤,則通過所述熱備磁盤 對所述磁盤進行重建。
在通過所述熱備磁盤對所述磁盤進行重建時,所述處理模塊,進一步用于將所述 磁盤中的數(shù)據(jù)和所述局部鏡像分區(qū)的活動分塊中寫入的數(shù)據(jù)拷貝到所述熱備磁盤,刪除所 述局部鏡像分區(qū)的活動分塊中寫入的數(shù)據(jù),并清除所述局部鏡像分區(qū)的活動分塊設(shè)置的鎖 定狀態(tài)。與現(xiàn)有技術(shù)相比,本發(fā)明具有以下優(yōu)點通過為RAID陣列中的磁盤設(shè)置局部鏡像分區(qū),并將數(shù)據(jù)同時寫入到磁盤和對應 的局部鏡像分區(qū),當磁盤出現(xiàn)故障導致數(shù)據(jù)寫入失敗時,能夠通過局部鏡像分區(qū)內(nèi)寫入的 數(shù)據(jù)進行恢復,從而加快了業(yè)務(wù)的響應速度,對正常業(yè)知性能的影響較小,磁盤利用率很
尚ο
圖1為現(xiàn)有技術(shù)中以RAID5為例的數(shù)據(jù)存儲過程示意圖; 圖2為現(xiàn)有技術(shù)中以RAIDlO為例的數(shù)據(jù)存儲過程示意圖;圖3為本發(fā)明提出的一種基于鏡像技術(shù)的數(shù)據(jù)存儲方法流程圖;圖4為本發(fā)明應用場景下提出的一種基于鏡像技術(shù)的數(shù)據(jù)存儲方法流程圖;圖5為本發(fā)明應用場景下數(shù)據(jù)寫入示意圖;圖6為本發(fā)明提出的一種基于鏡像技術(shù)的數(shù)據(jù)存儲裝置結(jié)構(gòu)圖。
具體實施例方式本發(fā)明中,通過為RAID陣列中的磁盤設(shè)置局部鏡像分區(qū),在數(shù)據(jù)的寫入過程中, 需要將數(shù)據(jù)同時寫入到磁盤和對應的局部鏡像分區(qū)中,當磁盤出現(xiàn)故障導致數(shù)據(jù)寫入磁盤 失敗時,如果數(shù)據(jù)寫入對應的局部鏡像分區(qū)成功,則能夠通過局部鏡像分區(qū)內(nèi)寫入的數(shù)據(jù) 對所述磁盤進行恢復(例如,對寫入磁盤失敗的分塊進行數(shù)據(jù)恢復、對寫入磁盤失敗的磁 盤進行重建等);從而加快了業(yè)務(wù)的響應速度,對正常業(yè)務(wù)性能的影響較小,磁盤利用率很 尚ο本發(fā)明提出的一種基于鏡像技術(shù)的數(shù)據(jù)存儲方法,應用于包括至少兩個磁盤的 RAID陣列中,如圖3所示,所述方法包括以下步驟步驟301,為所述RAID陣列中的磁盤設(shè)置局部鏡像分區(qū)。步驟302,當有數(shù)據(jù)需要對所述磁盤進行寫操作時,從所述磁盤對應的其他磁盤的 局部鏡像分區(qū)中選擇活動分塊,并將所述數(shù)據(jù)寫入所述磁盤和選擇的局部鏡像分區(qū)的活動 分塊。步驟303,當所述數(shù)據(jù)寫入所述磁盤和局部鏡像分區(qū)的活動分塊成功時,刪除所述 局部鏡像分區(qū)的活動分塊中寫入的數(shù)據(jù)。步驟304,當所述數(shù)據(jù)寫入所述磁盤失敗且寫入所述局部鏡像分區(qū)的活動分塊成 功時,根據(jù)所述局部鏡像分區(qū)的活動分塊中寫入的數(shù)據(jù)對所述磁盤進行恢復。為了更加清楚的闡述本發(fā)明提供的技術(shù)方案,以下結(jié)合具體的應用場景對本發(fā)明 進行詳細描述。按照業(yè)界的經(jīng)驗,硬盤故障大多是出現(xiàn)在磁盤寫入時,如果一塊磁盤寫入失 敗,則意味著這塊磁盤有不可恢復的扇區(qū)(磁盤自身的g-list已經(jīng)使用完),需要進行更 換?;诖耍緫脠鼍跋?,需要為RAID陣列中的磁盤設(shè)置局部鏡像分區(qū)。
需要說明的是,本發(fā)明提供的技術(shù)方案可以應用于當前的RAID陣列(例如,RAID5陣列等)中,也可以應用于其他的RAID陣列(例如,包括12個磁盤的RAID陣列等)中。本應用場景下,假設(shè)每個磁盤柜有16塊磁盤(該磁盤個數(shù)可以根據(jù)實際需要任意 選擇),磁盤柜中磁盤的個數(shù)不會影響本發(fā)明的實現(xiàn),為了方便描述,將16個磁盤分別編號 為1 16,并將16個磁盤中的15個磁盤(本應用場景下以磁盤1 磁盤15為例)組成 一個陣列(即RAID陣列),將另一個磁盤作為熱備磁盤(本應用場景下以磁盤16為例)。 對于該RAID陣列來說,需要對該RAID陣列進行條帶化,本應用場景下,以每個條帶大小為 128KB(實際應用中,該條帶大小可以根據(jù)需要進行任意設(shè)定,例如還可以為64KB等)為例 進行說明。具體的,當條帶化完成后,需要為RAID陣列中的磁盤設(shè)置局部鏡像分區(qū),即從 RAID陣列的所有磁盤中選擇磁盤,并使用所選擇磁盤的預設(shè)個數(shù)的條帶分塊作為其他磁盤 的局部鏡像分區(qū)。例如,從磁盤1 磁盤15中選擇磁盤1,并使用磁盤1的280個條帶分塊作為磁 盤2 磁盤15的局部鏡像分區(qū),并使用磁盤2的20條帶分塊作為磁盤1的局部鏡像分區(qū)。 其中,該條帶分塊可以從磁盤(以磁盤1為例)中任意選擇,例如,可以選擇磁盤1的頭280 個條帶分塊作為局部鏡像分區(qū),可以選擇磁盤1的最后280個條帶分塊作為局部鏡像分區(qū), 可以從磁盤1的中間選擇280個條帶分塊作為局部鏡像分區(qū)等。優(yōu)選的,本應用場景下,為了充分利用每個磁盤,可以將RAID陣列的所有磁盤進 行排序,并根據(jù)排序結(jié)果從所有磁盤中選擇一個磁盤的預設(shè)個數(shù)的條帶分塊作為前一個磁 盤的局部鏡像分區(qū)。例如,可以將每個磁盤的頭20個條帶分塊(該條帶分塊的個數(shù)以及條 帶分塊的位置可以根據(jù)實際需要任意選擇)作為前一個磁盤的局部鏡像分區(qū),即將磁盤15 的頭20個條帶分塊作為磁盤14的局部鏡像分區(qū),將磁盤14的頭20個條帶分塊作為磁盤 13的局部鏡像分區(qū),以此類推,將將磁盤1的頭20個條帶分塊作為磁盤15的局部鏡像分 區(qū)。如圖4所示,基于上述情況,本發(fā)明提供的基于鏡像技術(shù)的數(shù)據(jù)存儲方法包括以 下步驟步驟401,當有數(shù)據(jù)需要寫入時,將該數(shù)據(jù)寫入到磁盤和對應的局部鏡像分區(qū)。本應用場景下,以數(shù)據(jù)需要寫入到磁盤1 (即有數(shù)據(jù)對磁盤1的某個條帶分塊進行 寫操作)為例進行說明,相應的,磁盤1對應的局部鏡像分區(qū)為磁盤2的頭20個條帶分塊; 即當有數(shù)據(jù)需要寫入到磁盤1時,將該數(shù)據(jù)同時寫入到磁盤1和磁盤2的局部鏡像分區(qū)中, 如圖5所示的數(shù)據(jù)寫入過程,磁盤2的局部鏡像分區(qū)作為磁盤1的鏡像對。需要說明的是,在將數(shù)據(jù)寫入到磁盤2的局部鏡像分區(qū)時,需要從磁盤2的局部鏡 像分區(qū)中選擇活動分塊(即沒有被設(shè)置為鎖定狀態(tài)的分塊),并將數(shù)據(jù)寫入到選擇的活動 分塊中。其中,該選擇活動分塊的方式可以為從磁盤2的局部鏡像分區(qū)中隨機選擇。進一步的,將數(shù)據(jù)寫入到選擇的活動分塊之后,還需要將該活動分塊設(shè)置為鎖定 狀態(tài),以保證該活動分塊中的內(nèi)容不會被后續(xù)的數(shù)據(jù)所覆蓋;其中,處于鎖定狀態(tài)的活動分 塊無法寫入數(shù)據(jù)。步驟402,判斷數(shù)據(jù)寫入磁盤是否成功,如果成功,則轉(zhuǎn)到步驟403,否則,轉(zhuǎn)到步 驟 404。
需要注意的是,本應用場景下,當有數(shù)據(jù)需要寫入時,需要先對該數(shù)據(jù)進行緩存, 并將緩存的數(shù)據(jù)寫入到磁盤(或者對應的局部鏡像分區(qū))。步驟403,刪除局部鏡像分區(qū)的活動分塊中寫入的數(shù)據(jù),并清除局部鏡像分區(qū)的活 動分塊設(shè)置的鎖定狀態(tài)。本應用場景下,以數(shù)據(jù)寫入局部鏡像分區(qū)的活動分塊成功為例進行說明,當數(shù)據(jù) 寫入磁盤成功時,則說明磁盤沒有出現(xiàn)故障,不需要保留局部鏡像分區(qū)的活動分塊中寫入 的數(shù)據(jù),即需要刪除局部鏡像分區(qū)的活動分塊中寫入的數(shù)據(jù),并清除局部鏡像分區(qū)的活動 分塊設(shè)置的鎖定狀態(tài),以使該局部鏡像分區(qū)的活動分塊能夠繼續(xù)寫入后續(xù)的數(shù)據(jù)。 另外,需要注意的是,當數(shù)據(jù)寫入磁盤時,還需要刪除緩存的數(shù)據(jù),本應用場景下 不對該緩存的數(shù)據(jù)詳加贅述。步驟404,建立寫入數(shù)據(jù)失敗的分塊地址與局部鏡像分區(qū)的活動分塊的地址之間 的對應關(guān)系。具體的,當獲知磁盤2的局部鏡像分區(qū)寫入成功的信息后,需要將磁盤1寫入數(shù)據(jù) 失敗的分塊地址(即目的地址)映射到局部鏡像分區(qū)的活動分塊的地址,并將磁盤1寫入 數(shù)據(jù)失敗的分塊地址記錄到失敗表中。如表1所示的一種失敗表的示意情況。表 1 需要注意的是,當目的地址(即寫入數(shù)據(jù)失敗的分塊地址)寫入失敗時,需要保 存局部鏡像分區(qū)的活動分塊中寫入的數(shù)據(jù),并保持局部鏡像分區(qū)的活動分塊設(shè)置的鎖定狀 態(tài)。例如,如表1所示,對目的地址0X236A79寫入失敗時,則地址0X236A79對應的當前局 部鏡像分塊0X1111A8將被設(shè)置為鎖定狀態(tài),處于鎖定狀態(tài)的局部鏡像分塊不能寫入數(shù)據(jù)。 在后續(xù)對其他地址的寫入操作進行分配活動分塊時,不能分配該局部鏡像分塊0X1111A8。另外,需要說明的是,每次向目的地址(例如,0X236A79)寫入數(shù)據(jù)失敗時,需要將 寫入失敗次數(shù)加1。步驟405,根據(jù)預設(shè)策略將局部鏡像分區(qū)的活動分塊中寫入的數(shù)據(jù)重新寫入到寫 入數(shù)據(jù)失敗的分塊地址。具體的,當建立了寫入數(shù)據(jù)失敗的分塊地址與局部鏡像分區(qū)的活動分塊的地址之 間的對應關(guān)系之后,當磁盤(例如,磁盤1)空閑(即通過獲取磁盤的性能信息,確定當前性 能信息小于預設(shè)的性能指標時)時,還需要讀取局部鏡像分塊0X1111A8中寫入的數(shù)據(jù),并 將0X1111A8中寫入的數(shù)據(jù)重新寫入到目的地址0X236A79。本應用場景下,該預設(shè)策略可以根據(jù)實際需要任意選擇,例如,該預設(shè)策略可以為 預設(shè)周期(即每到預設(shè)周期時將局部鏡像分區(qū)的活動分塊中寫入的數(shù)據(jù)重新寫入到寫入數(shù)據(jù)失敗的分塊地址),該預設(shè)策略可以為預設(shè)性能指標(即每次性能到達該指標時將局部鏡像分區(qū)的活動分塊中寫入的數(shù)據(jù)重新寫入到寫入數(shù)據(jù)失敗的分塊地址),實際應用中, 該預設(shè)策略還可以為其他策略,本應用場景下不再贅述。步驟406,判斷預設(shè)次數(shù)內(nèi)將局部鏡像分區(qū)的活動分塊中寫入的數(shù)據(jù)重新寫入到 寫入數(shù)據(jù)失敗的分塊地址是否成功,如果成功,轉(zhuǎn)到步驟407,如果不成功,轉(zhuǎn)到步驟408。具體的,如果將局部鏡像分區(qū)的活動分塊中寫入的數(shù)據(jù)重新寫入到寫入數(shù)據(jù)失敗 的分塊地址失敗時,則需要更新表1所示的失敗表,每失敗一次,將寫入失敗次數(shù)加1。在本 步驟中,可以根據(jù)該失敗表判斷預設(shè)次數(shù)內(nèi)將局部鏡像分區(qū)的活動分塊中寫入的數(shù)據(jù)重新 寫入到寫入數(shù)據(jù)失敗的分塊地址是否成功。需要注意的是,以該預設(shè)次數(shù)為3次為例,如果在寫失敗操作次數(shù)未達到3次 之前,新業(yè)務(wù)的目的地址為0X236A79時,此時,仍然需要嘗試將數(shù)據(jù)寫入到目的地址 0X236A79,并將數(shù)據(jù)寫入到0X236A79對應的局部鏡像分塊0X1111A8 (從表1中可以獲得相
關(guān)信息)。具體的,當數(shù)據(jù)需要寫入到目的地址0X236A79時,需要判斷失敗表中是否記錄了 目的地址0X236A79的信息,如果是(本應用場景下記錄了目的地址0X236A79與局部鏡像 分塊0X1111A8),則能夠獲取到局部鏡像分塊的地址信息,此時需要將數(shù)據(jù)寫入到獲取的局 部鏡像分塊中。進一步的,如果將數(shù)據(jù)寫入到目的地址0X236A79成功,則刪除局部鏡像分區(qū)的活 動分塊中寫入的數(shù)據(jù),并清除局部鏡像分區(qū)的活動分塊設(shè)置的鎖定狀態(tài),并將失敗表中相 應的記錄刪除。如果將數(shù)據(jù)寫入到目的地址0X236A79失敗,則需要更新表1所示的失敗表, 每失敗一次,將寫入失敗次數(shù)加1。需要注意的是,在上述過程中,對于目的地址為0X236A79的讀請求操作,需要從 對應的局部鏡像分塊0X1111A8中讀取相關(guān)數(shù)據(jù)。步驟407,刪除局部鏡像分區(qū)的活動分塊中寫入的數(shù)據(jù),并清除局部鏡像分區(qū)的活 動分塊設(shè)置的鎖定狀態(tài),并將失敗表中相應的記錄刪除。步驟408,判斷當前是否有可用的熱備磁盤,如果當前有可用的熱備磁盤,轉(zhuǎn)到步 驟409,否則,轉(zhuǎn)到步驟410。步驟409,通過熱備磁盤對磁盤進行重建。具體的,在通過熱備磁盤(以磁盤16為例)對磁盤(以磁盤1為例)進行重建時, 需要將磁盤1中的數(shù)據(jù)和局部鏡像分區(qū)的活動分塊中寫入的數(shù)據(jù)拷貝到熱備磁盤16中,并 刪除局部鏡像分區(qū)的活動分塊中寫入的數(shù)據(jù),以及清除局部鏡像分區(qū)的活動分塊設(shè)置的鎖 定狀態(tài)。本應用場景下,如果有熱備磁盤則需要啟動重建功能,拷貝磁盤1上的數(shù)據(jù)到熱 備磁盤16,并將寫入數(shù)據(jù)失敗的分塊(例如0X236A79地址的分塊)中的數(shù)據(jù),通過對應的 局部鏡像分區(qū)的活動分塊(例如0X1111A8地址的分塊)中拷入,當數(shù)據(jù)拷貝到磁盤16之 后,需要刪除局部鏡像分區(qū)的活動分塊中寫入的數(shù)據(jù),以及清除局部鏡像分區(qū)的活動分塊 設(shè)置的鎖定狀態(tài),并清除寫入失敗表中的內(nèi)容。需要注意的是,在執(zhí)行上述操作的過程中,發(fā)生的業(yè)務(wù)讀寫可以正常進行,對于寫 操作,直接定位到熱備磁盤16,磁盤2的局部鏡像也相應的鏡像到熱備磁盤1 ;對于讀操作,拷貝到熱備磁盤16的數(shù)據(jù)直接從熱備磁盤16中進行讀取,未拷貝到熱備磁盤16的數(shù)據(jù)從 磁盤1中進行讀取,當拷貝完成后踢出磁盤1。步驟410,上報告警,并使用局部鏡像分區(qū)中的活動分塊替代磁盤中的壞分塊進行工作。具體的,由于上述步驟中已經(jīng)建立了寫入數(shù)據(jù)失敗的分塊地址與局部鏡像分區(qū)的 活動分塊的地址之間的對應關(guān)系,則本步驟中,根據(jù)該對應關(guān)系,則能夠使用局部鏡像分區(qū) 中的活動分塊替代磁盤中的壞分塊進行工作。例如,當有數(shù)據(jù)需要寫入到目的地址0X236A79時,由于目的地址0X236A79對應的 分塊已經(jīng)無法寫入數(shù)據(jù),則本步驟中,能夠直接將數(shù)據(jù)寫入到局部鏡像分塊0X1111A8中。本應用場景下,在使用局部鏡像分區(qū)中的活動分塊替代磁盤中的壞分塊進行工作 的過程 中,如果發(fā)現(xiàn)空閑的熱備磁盤,則開始重建。其中,本發(fā)明中的步驟可以根據(jù)實際的需要進行調(diào)整??梢?,通過采用本發(fā)明提供的技術(shù)方案,具有以下優(yōu)點(1)當數(shù)據(jù)寫入磁盤發(fā)生首次寫入失敗時,可以不在繁忙時進行重試,而在空閑時 通過局部鏡像分塊中數(shù)據(jù)進行重試,加快業(yè)務(wù)的響應速度。(2)本發(fā)明在對磁盤進行重建時,不需要CPU參與運算,對正常的業(yè)務(wù)性能影響較 小。(3)與其他冗余陣列相比,本發(fā)明在陣列具有冗余性的同時,對磁盤的利用率很高 (例如,損失的空間為每個磁盤的頭20個分塊)。(4)本發(fā)明在具備高磁盤利用率,冗余性的同時,業(yè)務(wù)性能較高,特別是隨機寫性 能較高,并不降低數(shù)據(jù)的寫入性能(特別是隨機寫性能)。基于同樣的發(fā)明構(gòu)思,本發(fā)明提出的一種基于鏡像技術(shù)的數(shù)據(jù)存儲裝置,應用于 包括至少兩個磁盤的RAID陣列中,所述RAID陣列中的磁盤設(shè)有局部鏡像分區(qū),如圖6所 示,所述裝置包括設(shè)置模塊11,用于為所述RAID陣列中的磁盤設(shè)置局部鏡像分區(qū)。本發(fā)明中,所述設(shè)置模塊11,具體用于將所述RAID陣列的所有磁盤進行排序,并 根據(jù)排序結(jié)果從所有磁盤中選擇一個磁盤的預設(shè)個數(shù)的條帶分塊作為前一個磁盤的局部 鏡像分區(qū)。選擇模塊12,與所述設(shè)置模塊11連接,用于當有數(shù)據(jù)需要對所述磁盤進行寫操作 時,從所述磁盤對應的其他磁盤的局部鏡像分區(qū)中選擇活動分塊。寫入模塊13,與所述選擇模塊12連接,用于將所述數(shù)據(jù)寫入所述磁盤和選擇的局 部鏡像分區(qū)的活動分塊。刪除模塊14,與所述選擇模塊12和所述寫入模塊13分別連接,用于當所述數(shù)據(jù)寫 入所述磁盤和局部鏡像分區(qū)的活動分塊成功時,刪除所述局部鏡像分區(qū)的活動分塊中寫入 的數(shù)據(jù)。處理模塊15,與所述選擇模塊12和所述寫入模塊13分別連接,用于當所述數(shù)據(jù)寫 入所述磁盤失敗且寫入所述局部鏡像分區(qū)的活動分塊成功時,根據(jù)所述局部鏡像分區(qū)的活 動分塊中寫入的數(shù)據(jù)對所述磁盤進行恢復。本發(fā)明中,所述處理模塊15,具體用于獲取所述磁盤的性能信息,并當所述性能信息小于預設(shè)的性能指標時,根據(jù)所述局部鏡像分區(qū)的活動分塊中寫入的數(shù)據(jù)對所述磁盤進 行恢復。所述處理模塊15,進一步用于將所述局部鏡像分區(qū)的活動分塊中寫入的數(shù)據(jù)重新 寫入到所述磁盤;如果預設(shè)次數(shù)內(nèi)將所述局部鏡像分區(qū)的活動分塊中寫入的數(shù)據(jù)重新寫入 到所述磁盤成功時,刪除所述局部鏡像分區(qū)的活動分塊中寫入的數(shù)據(jù),并清除所述局部鏡 像分區(qū)的活動分塊設(shè)置的鎖定狀態(tài);如果預設(shè)次數(shù)內(nèi)將所述局部鏡像分區(qū)的活動分塊中寫 入的數(shù)據(jù)重新寫入到所述磁盤均失敗時,如果當前有可用的熱備磁盤,則通過所述熱備磁 盤對所述磁盤進行重建。
進一步的,在通過所述熱備磁盤對所述磁盤進行重建時,所述處理模塊15,進一步 用于將所述磁盤中的數(shù)據(jù)和所述局部鏡像分區(qū)的活動分塊中寫入的數(shù)據(jù)拷貝到所述熱備 磁盤,刪除所述局部鏡像分區(qū)的活動分塊中寫入的數(shù)據(jù),并清除所述局部鏡像分區(qū)的活動 分塊設(shè)置的鎖定狀態(tài)。維護模塊16,與所述設(shè)置模塊11連接,用于當所述數(shù)據(jù)寫入所述磁盤和選擇的局 部鏡像分區(qū)的活動分塊時,將所述局部鏡像分區(qū)的活動分塊設(shè)置為鎖定狀態(tài);其中,處于鎖 定狀態(tài)的活動分塊無法寫入數(shù)據(jù);當刪除所述局部鏡像分區(qū)的活動分塊中寫入的數(shù)據(jù)時,清除所述局部鏡像分區(qū)的 活動分塊設(shè)置的鎖定狀態(tài);當根據(jù)所述局部鏡像分區(qū)的活動分塊中寫入的數(shù)據(jù)對所述磁盤進行恢復時,保持 所述局部鏡像分區(qū)的活動分塊設(shè)置的鎖定狀態(tài)。其中,本發(fā)明裝置的各個模塊可以集成于一體,也可以分離部署。上述模塊可以合 并為一個模塊,也可以進一步拆分成多個子模塊。通過以上的實施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到本發(fā)明可以通 過硬件實現(xiàn),也可以借助軟件加必要的通用硬件平臺的方式來實現(xiàn)?;谶@樣的理解,本發(fā) 明的技術(shù)方案可以以軟件產(chǎn)品的形式體現(xiàn)出來,該軟件產(chǎn)品可以存儲在一個非易失性存儲 介質(zhì)(可以是⑶-ROM,U盤,移動硬盤等)中,包括若干指令用以使得一臺計算機設(shè)備(可 以是個人計算機,服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個實施例所述的方法。本領(lǐng)域技術(shù)人員可以理解附圖只是一個優(yōu)選實施例的示意圖,附圖中的模塊或流 程并不一定是實施本發(fā)明所必須的。本領(lǐng)域技術(shù)人員可以理解實施例中的裝置中的模塊可以按照實施例描述進行分 布于實施例的裝置中,也可以進行相應變化位于不同于本實施例的一個或多個裝置中。上 述實施例的模塊可以合并為一個模塊,也可以進一步拆分成多個子模塊。上述本發(fā)明序號僅僅為了描述,不代表實施例的優(yōu)劣。以上公開的僅為本發(fā)明的幾個具體實施例,但是,本發(fā)明并非局限于此,任何本領(lǐng) 域的技術(shù)人員能思之的變化都應落入本發(fā)明的保護范圍。
權(quán)利要求
一種基于鏡像技術(shù)的數(shù)據(jù)存儲方法,應用于包括至少兩個磁盤的RAID陣列中,其特征在于,所述RAID陣列中的磁盤設(shè)有局部鏡像分區(qū),所述方法進一步包括以下步驟當有數(shù)據(jù)需要對所述磁盤進行寫操作時,從所述磁盤對應的其他磁盤的局部鏡像分區(qū)中選擇活動分塊,并將所述數(shù)據(jù)寫入所述磁盤和選擇的局部鏡像分區(qū)的活動分塊;當所述數(shù)據(jù)寫入所述磁盤和局部鏡像分區(qū)的活動分塊成功時,刪除所述局部鏡像分區(qū)的活動分塊中寫入的數(shù)據(jù);當所述數(shù)據(jù)寫入所述磁盤失敗且寫入所述局部鏡像分區(qū)的活動分塊成功時,根據(jù)所述局部鏡像分區(qū)的活動分塊中寫入的數(shù)據(jù)對所述磁盤進行恢復。
2.如權(quán)利要求1所述的方法,其特征在于,所述RAID陣列中的磁盤設(shè)有局部鏡像分區(qū), 具體為將所述RAID陣列的所有磁盤進行排序,并根據(jù)排序結(jié)果從所有磁盤中選擇一個磁盤 的預設(shè)個數(shù)的條帶分塊作為前一個磁盤的局部鏡像分區(qū)。
3.如權(quán)利要求1所述的方法,其特征在于,將所述數(shù)據(jù)寫入所述磁盤和選擇的局部鏡 像分區(qū)的活動分塊,之后還包括將所述局部鏡像分區(qū)的活動分塊設(shè)置為鎖定狀態(tài);其中,處于鎖定狀態(tài)的活動分塊無 法寫入數(shù)據(jù);刪除所述局部鏡像分區(qū)的活動分塊中寫入的數(shù)據(jù),之后還包括清除所述局部鏡像分 區(qū)的活動分塊設(shè)置的鎖定狀態(tài);根據(jù)所述局部鏡像分區(qū)的活動分塊中寫入的數(shù)據(jù)對所述磁盤進行恢復,之前還包括 保持所述局部鏡像分區(qū)的活動分塊設(shè)置的鎖定狀態(tài)。
4.如權(quán)利要求1所述的方法,其特征在于,根據(jù)所述局部鏡像分區(qū)的活動分塊中寫入 的數(shù)據(jù)對所述磁盤進行恢復,具體包括獲取所述磁盤的性能信息,并當所述性能信息小于預設(shè)的性能指標時,根據(jù)所述局部 鏡像分區(qū)的活動分塊中寫入的數(shù)據(jù)對所述磁盤進行恢復。
5.如權(quán)利要求1或4所述的方法,其特征在于,根據(jù)所述局部鏡像分區(qū)的活動分塊中寫 入的數(shù)據(jù)對所述磁盤進行恢復,具體包括將所述局部鏡像分區(qū)的活動分塊中寫入的數(shù)據(jù)重新寫入到所述磁盤;如果預設(shè)次數(shù) 內(nèi)將所述局部鏡像分區(qū)的活動分塊中寫入的數(shù)據(jù)重新寫入到所述磁盤成功時,刪除所述局 部鏡像分區(qū)的活動分塊中寫入的數(shù)據(jù),并清除所述局部鏡像分區(qū)的活動分塊設(shè)置的鎖定狀 態(tài);如果預設(shè)次數(shù)內(nèi)將所述局部鏡像分區(qū)的活動分塊中寫入的數(shù)據(jù)重新寫入到所述磁盤均 失敗時,如果當前有可用的熱備磁盤,則通過所述熱備磁盤對所述磁盤進行重建。
6.如權(quán)利要求5所述的方法,其特征在于,通過所述熱備磁盤對所述磁盤進行重建,具 體包括將所述磁盤中的數(shù)據(jù)和所述局部鏡像分區(qū)的活動分塊中寫入的數(shù)據(jù)拷貝到所述熱備 磁盤,刪除所述局部鏡像分區(qū)的活動分塊中寫入的數(shù)據(jù),并清除所述局部鏡像分區(qū)的活動 分塊設(shè)置的鎖定狀態(tài)。
7.一種基于鏡像技術(shù)的數(shù)據(jù)存儲裝置,應用于包括至少兩個磁盤的RAID陣列中,其特 征在于,所述RAID陣列中的磁盤設(shè)有局部鏡像分區(qū),所述裝置包括選擇模塊,用于當有數(shù)據(jù)需要對所述磁盤進行寫操作時,從所述磁盤對應的其他磁盤的局部鏡像分區(qū)中選擇活動分塊;寫入模塊,與所述選擇模塊連接,用于將所述數(shù)據(jù)寫入所述磁盤和選擇的局部鏡像分 區(qū)的活動分塊;刪除模塊,與所述選擇模塊和所述寫入模塊分別連接,用于當所述數(shù)據(jù)寫入所述磁盤 和局部鏡像分區(qū)的活動分塊成功時,刪除所述局部鏡像分區(qū)的活動分塊中寫入的數(shù)據(jù);處理模塊,與所述選擇模塊和所述寫入模塊分別連接,用于當所述數(shù)據(jù)寫入所述磁盤失敗且寫入所述局部鏡像分區(qū)的活動分塊成功時,根據(jù)所述局部鏡像分區(qū)的活動分塊中寫 入的數(shù)據(jù)對所述磁盤進行恢復。
8.如權(quán)利要求7所述的裝置,其特征在于,還包括設(shè)置模塊,與所述選擇模塊連接,用于將所述RAID陣列的所有磁盤進行排序,并根據(jù) 排序結(jié)果從所有磁盤中選擇一個磁盤的預設(shè)個數(shù)的條帶分塊作為前一個磁盤的局部鏡像 分區(qū)。
9.如權(quán)利要求7所述的裝置,其特征在于,還包括維護模塊,用于當所述數(shù)據(jù)寫入所述磁盤和選擇的局部鏡像分區(qū)的活動分塊時,將所 述局部鏡像分區(qū)的活動分塊設(shè)置為鎖定狀態(tài);其中,處于鎖定狀態(tài)的活動分塊無法寫入數(shù) 據(jù);當刪除所述局部鏡像分區(qū)的活動分塊中寫入的數(shù)據(jù)時,清除所述局部鏡像分區(qū)的活動 分塊設(shè)置的鎖定狀態(tài);當根據(jù)所述局部鏡像分區(qū)的活動分塊中寫入的數(shù)據(jù)對所述磁盤進行恢復時,保持所述 局部鏡像分區(qū)的活動分塊設(shè)置的鎖定狀態(tài)。
10.如權(quán)利要求7所述的裝置,其特征在于,所述處理模塊,具體用于獲取所述磁盤的性能信息,并當所述性能信息小于預設(shè)的性 能指標時,根據(jù)所述局部鏡像分區(qū)的活動分塊中寫入的數(shù)據(jù)對所述磁盤進行恢復。
11.如權(quán)利要求7或10所述的裝置,其特征在于,所述處理模塊,進一步用于將所述局部鏡像分區(qū)的活動分塊中寫入的數(shù)據(jù)重新寫入到 所述磁盤;如果預設(shè)次數(shù)內(nèi)將所述局部鏡像分區(qū)的活動分塊中寫入的數(shù)據(jù)重新寫入到所述 磁盤成功時,刪除所述局部鏡像分區(qū)的活動分塊中寫入的數(shù)據(jù),并清除所述局部鏡像分區(qū) 的活動分塊設(shè)置的鎖定狀態(tài);如果預設(shè)次數(shù)內(nèi)將所述局部鏡像分區(qū)的活動分塊中寫入的數(shù) 據(jù)重新寫入到所述磁盤均失敗時,如果當前有可用的熱備磁盤,則通過所述熱備磁盤對所 述磁盤進行重建。
12.如權(quán)利要求11所述的裝置,其特征在于,在通過所述熱備磁盤對所述磁盤進行重建時,所述處理模塊,進一步用于將所述磁盤 中的數(shù)據(jù)和所述局部鏡像分區(qū)的活動分塊中寫入的數(shù)據(jù)拷貝到所述熱備磁盤,刪除所述局 部鏡像分區(qū)的活動分塊中寫入的數(shù)據(jù),并清除所述局部鏡像分區(qū)的活動分塊設(shè)置的鎖定狀 態(tài)。
全文摘要
本發(fā)明公開了一種基于鏡像技術(shù)的數(shù)據(jù)存儲方法,該方法包括當有數(shù)據(jù)需要對磁盤進行寫操作時,從所述磁盤對應的局部鏡像分區(qū)中選擇活動分塊,并將所述數(shù)據(jù)寫入所述磁盤和活動分塊;當所述數(shù)據(jù)寫入所述磁盤失敗且寫入所述活動分塊成功時,根據(jù)所述活動分塊中寫入的數(shù)據(jù)對所述磁盤進行恢復。本發(fā)明中,加快了業(yè)務(wù)的響應速度,對正常業(yè)務(wù)性能的影響較小,磁盤利用率很高。
文檔編號G06F3/06GK101866307SQ20101020823
公開日2010年10月20日 申請日期2010年6月24日 優(yōu)先權(quán)日2010年6月24日
發(fā)明者呂琳, 孫策 申請人:杭州華三通信技術(shù)有限公司