數(shù)據(jù)拷貝方法及裝置制造方法
【專利摘要】本發(fā)明公開了一種數(shù)據(jù)拷貝方法及裝置,屬于數(shù)據(jù)存儲領(lǐng)域。所述方法包括:獲取差異數(shù)據(jù)對應(yīng)在主邏輯單元中的至少一個(gè)數(shù)據(jù)塊的標(biāo)識;將所述至少一個(gè)數(shù)據(jù)塊的標(biāo)識依次添加至拷貝隊(duì)列中的緩存區(qū)的末尾;所述拷貝隊(duì)列包括已拷貝區(qū)、拷貝區(qū)和緩存區(qū);將待拷貝數(shù)據(jù)塊所存儲的所述差異數(shù)據(jù)拷貝至所述從邏輯單元,并將所述待拷貝數(shù)據(jù)塊的標(biāo)識移動至所述拷貝區(qū);在所述拷貝區(qū)中的元素對應(yīng)的數(shù)據(jù)塊所存儲的數(shù)據(jù)已拷貝完成之后,將所述數(shù)據(jù)已拷貝完成的元素從所述拷貝區(qū)移動至所述已拷貝區(qū)。本發(fā)明解決了現(xiàn)有技術(shù)中每次從鏈表中添加或者刪除節(jié)點(diǎn)時(shí),都需要遍歷整個(gè)鏈表,從而導(dǎo)致數(shù)據(jù)拷貝效率低的問題,達(dá)到節(jié)約處理時(shí)間,提高拷貝效率的效果。
【專利說明】數(shù)據(jù)拷貝方法及裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)存儲領(lǐng)域,特別涉及一種數(shù)據(jù)拷貝方法及裝置。
【背景技術(shù)】
[0002]在數(shù)據(jù)存儲領(lǐng)域中,為了保障一個(gè)邏輯單元(Logic Unit Number, LUN)上的數(shù)據(jù)更安全可靠,通常會為該LUN建立一個(gè)或多個(gè)備份,實(shí)時(shí)或定時(shí)將主LUN的數(shù)據(jù)拷貝到從LUN 上。
[0003]對于同一存儲地址,對該存儲地址中的數(shù)據(jù)進(jìn)行拷貝以及對該存儲地址進(jìn)行寫入的步驟不能同時(shí)進(jìn)行?,F(xiàn)有的數(shù)據(jù)拷貝方法中,為了避免與寫入之間的沖突,可以預(yù)先設(shè)置一個(gè)鏈表,鏈表中有序排列正在進(jìn)行拷貝或者寫入的數(shù)據(jù)塊(chunk)對應(yīng)的節(jié)點(diǎn)。當(dāng)對主LUN中的某一個(gè)數(shù)據(jù)塊進(jìn)行數(shù)據(jù)拷貝時(shí),首先遍歷該鏈表,若鏈表中不存在該數(shù)據(jù)塊對應(yīng)的節(jié)點(diǎn),則開始拷貝該數(shù)據(jù)塊中存儲的數(shù)據(jù),同時(shí)在鏈表中添加該數(shù)據(jù)塊對應(yīng)的節(jié)點(diǎn),若鏈表中存在該數(shù)據(jù)塊對應(yīng)的節(jié)點(diǎn),則說明該數(shù)據(jù)塊正在被寫入,在等待寫入完成之后再開始拷貝該數(shù)據(jù)塊中存儲的數(shù)據(jù)。當(dāng)該數(shù)據(jù)塊中存儲的數(shù)據(jù)拷貝完成后,若此時(shí)沒有對該數(shù)據(jù)塊中的數(shù)據(jù)進(jìn)行寫入的請求,則再次遍歷該鏈表,以將該數(shù)據(jù)塊對應(yīng)的節(jié)點(diǎn)從鏈表中刪除。
[0004]在實(shí)現(xiàn)本發(fā)明的過程中, 申請人:發(fā)現(xiàn)現(xiàn)有技術(shù)至少存在以下缺點(diǎn):
[0005]現(xiàn)有技術(shù)提供的數(shù)據(jù)拷貝方法中,每次從鏈表中添加或者刪除節(jié)點(diǎn)時(shí),都需要遍歷整個(gè)鏈表,而遍歷列表需要消耗較多的時(shí)間,對數(shù)據(jù)拷貝的效率有較大的影響。
【發(fā)明內(nèi)容】
[0006]為了解決現(xiàn)有技術(shù)中每次從鏈表中添加或者刪除節(jié)點(diǎn)時(shí),都需要遍歷整個(gè)鏈表,從而導(dǎo)致數(shù)據(jù)拷貝效率低的問題,本發(fā)明實(shí)施例提供了一種數(shù)據(jù)拷貝方法及裝置。所述技術(shù)方案如下:
[0007]第一方面,提供了一種數(shù)據(jù)拷貝方法,所述方法包括:
[0008]獲取差異數(shù)據(jù)對應(yīng)在主邏輯單元中的至少一個(gè)數(shù)據(jù)塊的標(biāo)識,所述差異數(shù)據(jù)為所述主邏輯單元與從邏輯單元之間存在差異的數(shù)據(jù),所述從邏輯單元為所述主邏輯單元的備份;
[0009]將所述至少一個(gè)數(shù)據(jù)塊的標(biāo)識依次添加至拷貝隊(duì)列中的緩存區(qū)的末尾;所述拷貝隊(duì)列包括已拷貝區(qū)、拷貝區(qū)和緩存區(qū);所述已拷貝區(qū)中的元素為已經(jīng)完成拷貝的數(shù)據(jù)塊的標(biāo)識,所述拷貝區(qū)中的元素為正在進(jìn)行拷貝的數(shù)據(jù)塊的標(biāo)識,所述緩存區(qū)中的元素為尚未開始拷貝的數(shù)據(jù)塊的標(biāo)識;
[0010]將待拷貝數(shù)據(jù)塊所存儲的所述差異數(shù)據(jù)拷貝至所述從邏輯單元,并將所述待拷貝數(shù)據(jù)塊的標(biāo)識移動至所述拷貝區(qū);所述待拷貝數(shù)據(jù)塊為所述緩存區(qū)中的第一個(gè)元素對應(yīng)的數(shù)據(jù)塊;
[0011]在所述拷貝區(qū)中的元素對應(yīng)的數(shù)據(jù)塊所存儲的數(shù)據(jù)已拷貝完成之后,將所述數(shù)據(jù)已拷貝完成的元素從所述拷貝區(qū)移動至所述已拷貝區(qū)。
[0012]在第一方面的第一種可能實(shí)現(xiàn)方式中,所述方法還包括:
[0013]當(dāng)所述主邏輯單元接收到主機(jī)輸入輸出1請求時(shí),判斷所述主機(jī)1請求的寫入地址與所述拷貝區(qū)中的元素對應(yīng)的后臺拷貝的數(shù)據(jù)塊的地址是否存在沖突;
[0014]若所述主機(jī)1請求的寫入地址與所述拷貝區(qū)中的元素對應(yīng)的后臺拷貝的數(shù)據(jù)塊的地址不存在沖突,則執(zhí)行所述主機(jī)1請求;
[0015]若所述主機(jī)1請求的寫入地址與所述拷貝區(qū)中的元素對應(yīng)的后臺拷貝的數(shù)據(jù)塊的地址存在沖突,則等待與所述主機(jī)1請求的寫入地址存在沖突的數(shù)據(jù)塊拷貝完成后,再執(zhí)行所述主機(jī)1請求。
[0016]結(jié)合第一方面的第一種可能實(shí)現(xiàn)方式,在第一方面的第二種可能實(shí)現(xiàn)方式中,所述判斷所述主機(jī)1請求的寫入地址與所述拷貝區(qū)中的元素對應(yīng)的后臺拷貝的數(shù)據(jù)塊的地址是否存在沖突,包括:
[0017]檢測所述主機(jī)1請求的寫入地址對應(yīng)的數(shù)據(jù)塊的標(biāo)識是否存在于所述拷貝區(qū)中;
[0018]若檢測結(jié)果為所述主機(jī)1請求的寫入地址對應(yīng)的數(shù)據(jù)塊的標(biāo)識存在于所述拷貝區(qū)中,則獲取所述主機(jī)1請求的寫入地址對應(yīng)的數(shù)據(jù)塊的位圖,所述位圖用于指示所述主機(jī)1請求的寫入地址對應(yīng)的數(shù)據(jù)塊中的差異單元,所述差異單元為存儲有所述差異數(shù)據(jù)的最小數(shù)據(jù)單元;
[0019]檢測所述主機(jī)1請求的寫入地址與所述差異單元的地址是否存在沖突;
[0020]若檢測結(jié)果為所述主機(jī)1請求的寫入地址與所述差異單元的地址存在沖突,則確定所述主機(jī)1請求的寫入地址與所述拷貝區(qū)中的元素對應(yīng)的后臺拷貝的數(shù)據(jù)塊的地址存在沖突。
[0021]結(jié)合第一方面的第二種可能實(shí)現(xiàn)方式,在第一方面的第三種可能實(shí)現(xiàn)方式中,所述將待拷貝數(shù)據(jù)塊所存儲的所述差異數(shù)據(jù)拷貝至所述從邏輯單元,包括:
[0022]獲取所述待拷貝數(shù)據(jù)塊的位圖;
[0023]根據(jù)所述待拷貝數(shù)據(jù)塊的位圖,將所述待拷貝數(shù)據(jù)塊的差異單元中的數(shù)據(jù)拷貝至所述從邏輯單元。
[0024]結(jié)合第一方面的第一種可能實(shí)現(xiàn)方式,在第一方面的第四種可能實(shí)現(xiàn)方式中,所述將待拷貝數(shù)據(jù)塊所存儲的所述差異數(shù)據(jù)拷貝至所述從邏輯單元之前,所述方法包括:
[0025]檢測所述待拷貝數(shù)據(jù)塊的地址與寫入鏈表中的寫入地址是否存在沖突,所述寫入鏈表中存儲有未完成的主機(jī)1請求的寫入地址;
[0026]若所述待拷貝數(shù)據(jù)塊的地址與所述寫入鏈表中的寫入地址存在沖突,則等待所述寫入鏈表中,與所述待拷貝數(shù)據(jù)塊的地址沖突的寫入地址所對應(yīng)的主機(jī)1請求完成后,再執(zhí)行將所述待拷貝數(shù)據(jù)塊所存儲的所述差異數(shù)據(jù)拷貝至所述從邏輯單元的步驟。
[0027]結(jié)合第一方面的第四種可能實(shí)現(xiàn)方式,在第一方面的第五種可能實(shí)現(xiàn)方式中,若所述主機(jī)1請求的寫入地址與所述拷貝區(qū)中的元素對應(yīng)的后臺拷貝的數(shù)據(jù)塊的地址不存在沖突,所述方法還包括:
[0028]檢測所述主機(jī)1請求的寫入地址與所述緩存區(qū)中的元素對應(yīng)的數(shù)據(jù)塊的地址是否存在沖突;
[0029]若所述主機(jī)1請求的寫入地址與所述緩存區(qū)中的元素對應(yīng)的數(shù)據(jù)塊的地址存在地址沖突,則將所述主機(jī)10請求的寫入地址添加入所述寫入鏈表。
[0030]結(jié)合第一方面的第五種可能實(shí)現(xiàn)方式,在第一方面的第六種可能實(shí)現(xiàn)方式中,所述檢測所述主機(jī)10請求的寫入地址與所述緩存區(qū)中的元素對應(yīng)的數(shù)據(jù)塊的地址是否存在沖突,包括:
[0031]檢測所述主機(jī)10請求的寫入地址對應(yīng)的數(shù)據(jù)塊的標(biāo)識是否存在于所述緩存區(qū)中;
[0032]若檢測結(jié)果為所述主機(jī)10請求的寫入地址對應(yīng)的數(shù)據(jù)塊的標(biāo)識存在于所述緩存區(qū)中,則獲取所述主機(jī)10請求的寫入地址對應(yīng)的數(shù)據(jù)塊的位圖,所述位圖用于指示所述主機(jī)10請求的寫入地址對應(yīng)的數(shù)據(jù)塊中的差異單元,所述差異單元為存儲有所述差異數(shù)據(jù)的最小數(shù)據(jù)單元;
[0033]檢測所述主機(jī)10請求的寫入地址與所述差異單元的地址是否存在沖突;
[0034]若檢測結(jié)果為所述主機(jī)10請求的寫入地址與所述差異單元的地址存在沖突,則確定所述主機(jī)10請求的寫入地址與所述緩存區(qū)中的元素對應(yīng)的后臺拷貝的數(shù)據(jù)塊的地址存在沖突。
[0035]結(jié)合第一方面的第四至第六任意一種可能實(shí)現(xiàn)方式,在第一方面第七種可能實(shí)現(xiàn)方式中,所述方法還包括:
[0036]若所述主機(jī)10請求的寫入地址對應(yīng)的數(shù)據(jù)塊的標(biāo)識尚未被添加入所述拷貝隊(duì)列,則檢測所述主機(jī)10請求的寫入地址對應(yīng)的數(shù)據(jù)塊中是否存儲有所述差異數(shù)據(jù);
[0037]若所述主機(jī)10請求的寫入地址對應(yīng)的數(shù)據(jù)塊中存儲有所述差異數(shù)據(jù),則將所述主機(jī)10請求的寫入地址添加入所述寫入鏈表,立即執(zhí)行所述主機(jī)10請求。
[0038]結(jié)合第一方面的第一至第六任意一種可能實(shí)現(xiàn)方式,在第一方面第八種可能實(shí)現(xiàn)方式中,所述方法還包括:
[0039]若所述主機(jī)10請求的寫入地址為所述已拷貝區(qū)中的元素對應(yīng)的數(shù)據(jù)塊的地址,則立刻執(zhí)行所述主機(jī)10請求。
[0040]結(jié)合第一方面或者第一方面的第一至第六任意一種可能實(shí)現(xiàn)方式,在第一方面的第九種可能實(shí)現(xiàn)方式中,所述方法還包括:
[0041]在獲取差異數(shù)據(jù)對應(yīng)在主邏輯單元中的至少一個(gè)數(shù)據(jù)塊的標(biāo)識時(shí),若返回的數(shù)據(jù)塊的標(biāo)識數(shù)目為0,則確定所述主邏輯單元與所述從邏輯單元之間的差異數(shù)據(jù)對應(yīng)在主邏輯單元中的數(shù)據(jù)塊的標(biāo)識已經(jīng)獲取完成。
[0042]結(jié)合第一方面或者第一方面的第一至第六任意一種可能實(shí)現(xiàn)方式,在第一方面的第十種可能實(shí)現(xiàn)方式中,所述方法還包括:
[0043]檢測所述已拷貝區(qū)中的元素的個(gè)數(shù)是否達(dá)到預(yù)定閾值;
[0044]若所述已拷貝區(qū)中的元素的個(gè)數(shù)達(dá)到所述預(yù)定閾值,則將所述已拷貝區(qū)中的元素從差異息中刪除;
[0045]其中,所述差異信息包含于元數(shù)據(jù)中,且包含所述差異數(shù)據(jù)所在的各個(gè)數(shù)據(jù)塊的標(biāo)識;所述元數(shù)據(jù)用于描述所述主邏輯單元中存儲的用戶數(shù)據(jù)。
[0046]第二方面,提供了一種數(shù)據(jù)拷貝裝置,所述裝置包括:
[0047]標(biāo)識獲取模塊,用于獲取差異數(shù)據(jù)對應(yīng)在主邏輯單元中的至少一個(gè)數(shù)據(jù)塊的標(biāo)識,所述差異數(shù)據(jù)為所述主邏輯單元與從邏輯單元之間存在差異的數(shù)據(jù),所述從邏輯單元為所述主邏輯單元的備份;
[0048]標(biāo)識添加模塊,用于將所述至少一個(gè)數(shù)據(jù)塊的標(biāo)識依次添加至拷貝隊(duì)列中的緩存區(qū)的末尾;所述拷貝隊(duì)列包括已拷貝區(qū)、拷貝區(qū)和緩存區(qū);所述已拷貝區(qū)中的元素為已經(jīng)完成拷貝的數(shù)據(jù)塊的標(biāo)識,所述拷貝區(qū)中的元素為正在進(jìn)行拷貝的數(shù)據(jù)塊的標(biāo)識,所述緩存區(qū)中的元素為尚未開始拷貝的數(shù)據(jù)塊的標(biāo)識;
[0049]拷貝模塊,用于將待拷貝數(shù)據(jù)塊所存儲的所述差異數(shù)據(jù)拷貝至所述從邏輯單元;所述待拷貝數(shù)據(jù)塊為所述緩存區(qū)中的第一個(gè)元素對應(yīng)的數(shù)據(jù)塊;
[0050]第一移動模塊,用于將所述待拷貝數(shù)據(jù)塊的標(biāo)識移動至所述拷貝區(qū);
[0051]第二移動模塊,用于在所述拷貝區(qū)中的元素對應(yīng)的數(shù)據(jù)塊所存儲的數(shù)據(jù)已拷貝完成后,將所述數(shù)據(jù)已拷貝完成的元素從所述拷貝區(qū)移動至所述已拷貝區(qū)。
[0052]在第二方面的第一種可能實(shí)現(xiàn)方式中,所述裝置還包括:
[0053]判斷模塊,用于當(dāng)所述主邏輯單元接收到主機(jī)1請求時(shí),判斷所述主機(jī)1請求的寫入地址與所述拷貝區(qū)中的元素對應(yīng)的后臺拷貝的數(shù)據(jù)塊的地址是否存在沖突;
[0054]第一執(zhí)行模塊,用于若所述判斷模塊的判斷結(jié)果為所述主機(jī)1請求的寫入地址與所述拷貝區(qū)中的元素對應(yīng)的后臺拷貝的數(shù)據(jù)塊的地址不存在沖突,則執(zhí)行所述主機(jī)1請求;
[0055]第二執(zhí)行模塊,用于若所述判斷模塊的判斷結(jié)果為所述主機(jī)1請求的寫入地址與所述拷貝區(qū)中的元素對應(yīng)的后臺拷貝的數(shù)據(jù)塊的地址存在沖突,則等待與所述主機(jī)1請求的寫入地址存在沖突的數(shù)據(jù)塊拷貝完成后,再執(zhí)行所述主機(jī)1請求。
[0056]結(jié)合第二方面的第一種可能實(shí)現(xiàn)方式,在第二方面的第二種可能實(shí)現(xiàn)方式中,所述判斷模塊,包括:
[0057]第一檢測單元,用于檢測所述主機(jī)1請求的寫入地址對應(yīng)的數(shù)據(jù)塊的標(biāo)識是否存在于所述拷貝區(qū)中;
[0058]第一位圖獲取單元,用于若所述第一檢測單元的檢測結(jié)果為所述主機(jī)1請求的寫入地址對應(yīng)的數(shù)據(jù)塊的標(biāo)識存在于所述拷貝區(qū)中,則獲取所述主機(jī)1請求的寫入地址對應(yīng)的數(shù)據(jù)塊的位圖,所述位圖用于指示所述主機(jī)1請求的寫入地址對應(yīng)的數(shù)據(jù)塊中的差異單元,所述差異單元為存儲有所述差異數(shù)據(jù)的最小數(shù)據(jù)單元;
[0059]第二檢測單元,用于檢測所述主機(jī)1請求的寫入地址與所述差異單元的地址是否存在沖突;
[0060]第一確定單元,用于若所述第二檢測單元的檢測結(jié)果為所述主機(jī)1請求的寫入地址與所述差異單元的地址存在沖突,則確定所述主機(jī)1請求的寫入地址與所述拷貝區(qū)中的元素對應(yīng)的后臺拷貝的數(shù)據(jù)塊的地址存在沖突。
[0061]結(jié)合第二方面的第二種可能實(shí)現(xiàn)方式,在第二方面的第三種可能實(shí)現(xiàn)方式中,所述拷貝模塊,包括:
[0062]第二位圖獲取單元,用于獲取所述待拷貝數(shù)據(jù)塊的位圖;
[0063]拷貝單元,用于根據(jù)所述待拷貝數(shù)據(jù)塊的位圖,將所述待拷貝數(shù)據(jù)塊的差異單元中的數(shù)據(jù)拷貝至所述從邏輯單元。
[0064]結(jié)合第二方面的第一種可能實(shí)現(xiàn)方式,在第二方面的第四種可能實(shí)現(xiàn)方式中,所述裝置包括:
[0065]第一檢測模塊,用于在所述拷貝模塊將待拷貝數(shù)據(jù)塊所存儲的所述差異數(shù)據(jù)拷貝至所述從邏輯單元之前,檢測所述待拷貝數(shù)據(jù)塊的地址與寫入鏈表中的寫入地址是否存在沖突,所述寫入鏈表中存儲有未完成的主機(jī)10請求的寫入地址;
[0066]所述拷貝模塊,用于若所述待拷貝數(shù)據(jù)塊的地址與所述寫入鏈表中的寫入地址存在沖突,則等待所述寫入鏈表中,與所述待拷貝數(shù)據(jù)塊的地址沖突的寫入地址所對應(yīng)的主機(jī)10請求完成后,再執(zhí)行將所述待拷貝數(shù)據(jù)塊所存儲的所述差異數(shù)據(jù)拷貝至所述從邏輯單元的步驟。
[0067]結(jié)合第二方面的第四種可能實(shí)現(xiàn)方式,在第二方面的第五種可能實(shí)現(xiàn)方式中,所述裝置還包括:
[0068]第二檢測模塊,用于若所述判斷模塊的判斷結(jié)果為所述主機(jī)10請求的寫入地址與所述拷貝區(qū)中的元素對應(yīng)的后臺拷貝的數(shù)據(jù)塊的地址不存在沖突,則檢測所述主機(jī)10請求的寫入地址與所述緩存區(qū)中的元素對應(yīng)的數(shù)據(jù)塊的地址是否存在沖突;
[0069]第一地址添加模塊,用于若所述主機(jī)10請求的寫入地址與所述緩存區(qū)中的元素對應(yīng)的數(shù)據(jù)塊的地址存在地址沖突,則將所述主機(jī)10請求的寫入地址添加入所述寫入鏈表。
[0070]結(jié)合第二方面的第五種可能實(shí)現(xiàn)方式,在第二方面的第六種可能實(shí)現(xiàn)方式中,所述第二檢測模塊,包括:
[0071]第三檢測單元,用于檢測所述主機(jī)10請求的寫入地址對應(yīng)的數(shù)據(jù)塊的標(biāo)識是否存在于所述緩存區(qū)中;
[0072]第三位圖獲取單元,用于若所述第三檢測單元的檢測結(jié)果為所述主機(jī)10請求的寫入地址對應(yīng)的數(shù)據(jù)塊的標(biāo)識存在于所述緩存區(qū)中,則獲取所述主機(jī)10請求的寫入地址對應(yīng)的數(shù)據(jù)塊的位圖,所述位圖用于指示所述主機(jī)10請求的寫入地址對應(yīng)的數(shù)據(jù)塊中的差異單元,所述差異單元為存儲有所述差異數(shù)據(jù)的最小數(shù)據(jù)單元;
[0073]第四檢測單元,用于檢測所述主機(jī)10請求的寫入地址與所述差異單元的地址是否存在沖突;
[0074]第二確定單元,用于若所述第四檢測單元的檢測結(jié)果為所述主機(jī)10請求的寫入地址與所述差異單元的地址存在沖突,則確定所述主機(jī)10請求的寫入地址與所述緩存區(qū)中的元素對應(yīng)的后臺拷貝的數(shù)據(jù)塊的地址存在沖突。
[0075]結(jié)合第二方面的第四至第六任意一種可能實(shí)現(xiàn)方式,在第二方面的第七種可能實(shí)現(xiàn)方式中,所述裝置還包括:
[0076]第三檢測模塊,用于若所述主機(jī)10請求的寫入地址對應(yīng)的數(shù)據(jù)塊的標(biāo)識尚未被添加入所述拷貝隊(duì)列,則檢測所述主機(jī)10請求的寫入地址對應(yīng)的數(shù)據(jù)塊中是否存儲有所述差異數(shù)據(jù);
[0077]第二地址添加模塊,用于若所述主機(jī)10請求的寫入地址對應(yīng)的數(shù)據(jù)塊中存儲有所述差異數(shù)據(jù),則將所述主機(jī)10請求的寫入地址添加入所述寫入鏈表;
[0078]第三執(zhí)行模塊,用于立即執(zhí)行所述主機(jī)10請求。
[0079]結(jié)合第二方面的第一至第六任意一種可能實(shí)現(xiàn)方式,在第二方面的第八種可能實(shí)現(xiàn)方式中,所述裝置還包括:
[0080]第四執(zhí)行模塊,用于若所述主機(jī)10請求的寫入地址為所述已拷貝區(qū)中的元素對應(yīng)的數(shù)據(jù)塊的地址,則立刻執(zhí)行所述主機(jī)1請求。
[0081]結(jié)合第二方面或者第二方面的第一至第六任意一種可能實(shí)現(xiàn)方式,在第二方面的第九種可能實(shí)現(xiàn)方式中,所述裝置還包括:
[0082]確定模塊,用于在所述標(biāo)識獲取模塊獲取差異數(shù)據(jù)對應(yīng)在主邏輯單元中的至少一個(gè)數(shù)據(jù)塊的標(biāo)識時(shí),若返回的數(shù)據(jù)塊的標(biāo)識數(shù)目為0,則確定所述主邏輯單元與所述從邏輯單元之間的差異數(shù)據(jù)對應(yīng)在主邏輯單元中的數(shù)據(jù)塊的標(biāo)識已經(jīng)獲取完成。
[0083]結(jié)合第二方面或者第二方面的第一至第六任意一種可能實(shí)現(xiàn)方式,在第二方面的第十種可能實(shí)現(xiàn)方式中,所述裝置還包括:
[0084]第四檢測模塊,用于檢測所述已拷貝區(qū)中的元素的個(gè)數(shù)是否達(dá)到預(yù)定閾值;
[0085]刪除模塊,用于若所述第四檢測模塊的檢測結(jié)果為所述已拷貝區(qū)中的元素的個(gè)數(shù)達(dá)到所述預(yù)定閾值,則將所述已拷貝區(qū)中的元素從差異信息中刪除;
[0086]其中,所述差異信息包含于元數(shù)據(jù)中,且包含所述差異數(shù)據(jù)所在的各個(gè)數(shù)據(jù)塊的標(biāo)識;所述元數(shù)據(jù)用于描述所述主邏輯單元中存儲的用戶數(shù)據(jù)。
[0087]本發(fā)明實(shí)施例提供的技術(shù)方案帶來的有益效果是:
[0088]通過設(shè)置包含已拷貝區(qū)、拷貝區(qū)和緩存區(qū)的拷貝隊(duì)列,分別存儲完成拷貝的數(shù)據(jù)塊的標(biāo)識、正在進(jìn)行拷貝的數(shù)據(jù)塊的標(biāo)識以及尚未開始拷貝的數(shù)據(jù)塊的標(biāo)識,不需要對拷貝隊(duì)列進(jìn)行遍歷,僅通過隊(duì)列中不同區(qū)域的數(shù)據(jù)塊的標(biāo)識即可以確定數(shù)據(jù)塊的拷貝狀態(tài),解決了現(xiàn)有技術(shù)中每次從鏈表中添加或者刪除節(jié)點(diǎn)時(shí),都需要遍歷整個(gè)鏈表,從而導(dǎo)致數(shù)據(jù)拷貝效率低的問題,達(dá)到節(jié)約處理時(shí)間,提高拷貝效率的效果。
【專利附圖】
【附圖說明】
[0089]為了更清楚地說明本發(fā)明實(shí)施例中的技術(shù)方案,下面將對實(shí)施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0090]圖1是本發(fā)明一個(gè)實(shí)施例提供的數(shù)據(jù)拷貝方法的方法流程圖;
[0091]圖2是本發(fā)明另一實(shí)施例提供的數(shù)據(jù)拷貝方法的方法流程圖;
[0092]圖3是本發(fā)明另一實(shí)施例提供的拷貝隊(duì)列的示意圖;
[0093]圖4是本發(fā)明另一實(shí)施例提供的數(shù)據(jù)塊的位圖結(jié)構(gòu)示意圖;
[0094]圖5是本發(fā)明一個(gè)實(shí)施例提供的數(shù)據(jù)拷貝裝置的裝置結(jié)構(gòu)圖;
[0095]圖6是本發(fā)明一個(gè)實(shí)施例提供的數(shù)據(jù)拷貝裝置的裝置結(jié)構(gòu)圖。
【具體實(shí)施方式】
[0096]為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖對本發(fā)明實(shí)施方式作進(jìn)一步地詳細(xì)描述。
[0097]請參考圖1,其示出了本發(fā)明一個(gè)實(shí)施例提供的數(shù)據(jù)拷貝方法的方法流程圖。該數(shù)據(jù)拷貝方法用于包含主邏輯單元和從邏輯單元的數(shù)據(jù)存儲系統(tǒng)中,其中,從邏輯單元中存儲有主邏輯單元中的數(shù)據(jù)的備份。該數(shù)據(jù)拷貝方法可以包括:
[0098]步驟102,獲取差異數(shù)據(jù)對應(yīng)在主邏輯單元中的至少一個(gè)數(shù)據(jù)塊的標(biāo)識,該差異數(shù)據(jù)為該主邏輯單元與從邏輯單元之間存在差異的數(shù)據(jù),該從邏輯單元為該主邏輯單元的備份。
[0099]步驟104,將該至少一個(gè)數(shù)據(jù)塊的標(biāo)識依次添加至拷貝隊(duì)列中的緩存區(qū)的末尾;該拷貝隊(duì)列包括已拷貝區(qū)、拷貝區(qū)和緩存區(qū);該已拷貝區(qū)中的元素為已經(jīng)完成拷貝的數(shù)據(jù)塊的標(biāo)識,該拷貝區(qū)中的元素為正在進(jìn)行拷貝的數(shù)據(jù)塊的標(biāo)識,該緩存區(qū)中的元素為尚未開始拷貝的數(shù)據(jù)塊的標(biāo)識。
[0100]步驟106,將待拷貝數(shù)據(jù)塊所存儲的該差異數(shù)據(jù)拷貝至該從邏輯單元,并將該待拷貝數(shù)據(jù)塊的標(biāo)識移動至該拷貝區(qū);該待拷貝數(shù)據(jù)塊為該緩存區(qū)中的第一個(gè)元素對應(yīng)的數(shù)據(jù)塊。
[0101]步驟108,在該拷貝區(qū)中的元素對應(yīng)的數(shù)據(jù)塊所存儲的數(shù)據(jù)已拷貝完成之后,將該數(shù)據(jù)已拷貝完成的元素從該拷貝區(qū)移動至該已拷貝區(qū)。
[0102]綜上所述,本發(fā)明實(shí)施例提供的數(shù)據(jù)拷貝方法,通過設(shè)置包含已拷貝區(qū)、拷貝區(qū)和緩存區(qū)的拷貝隊(duì)列,分別存儲完成拷貝的數(shù)據(jù)塊的標(biāo)識、正在進(jìn)行拷貝的數(shù)據(jù)塊的標(biāo)識以及尚未開始拷貝的數(shù)據(jù)塊的標(biāo)識,不需要對拷貝隊(duì)列進(jìn)行遍歷,僅通過隊(duì)列中不同區(qū)域的數(shù)據(jù)塊的標(biāo)識即可以確定數(shù)據(jù)塊的拷貝狀態(tài),解決了現(xiàn)有技術(shù)中每次從鏈表中添加或者刪除節(jié)點(diǎn)時(shí),都需要遍歷整個(gè)鏈表,從而導(dǎo)致數(shù)據(jù)拷貝效率低的問題,達(dá)到節(jié)約處理時(shí)間,提高拷貝效率的效果。
[0103]請參考圖2,其示出了本發(fā)明另一實(shí)施例提供的數(shù)據(jù)拷貝方法的方法流程圖。該數(shù)據(jù)拷貝方法用于包含主邏輯單元和從邏輯單元的數(shù)據(jù)存儲系統(tǒng)中,其中,從邏輯單元中存儲有主邏輯單元中的數(shù)據(jù)的備份。該數(shù)據(jù)拷貝方法可以包括:
[0104]步驟202,獲取差異數(shù)據(jù)對應(yīng)在主邏輯單元中的至少一個(gè)數(shù)據(jù)塊的標(biāo)識。
[0105]該差異數(shù)據(jù)為該主邏輯單元與從邏輯單元之間存在差異的數(shù)據(jù),該從邏輯單元為該主邏輯單元的備份。
[0106]其中,主LUN可以預(yù)先劃分成若干個(gè)數(shù)據(jù)塊(chunk),各個(gè)數(shù)據(jù)塊對應(yīng)有各自的數(shù)據(jù)塊號,在本實(shí)施例中,數(shù)據(jù)塊的標(biāo)識可以是對應(yīng)的數(shù)據(jù)塊號。
[0107]具體的,可以從該主邏輯單元中存儲的用戶數(shù)據(jù)對應(yīng)的元數(shù)據(jù)中讀取差異信息,該差異信息中包含主邏輯單元中的差異數(shù)據(jù)所在的數(shù)據(jù)塊的標(biāo)識。
[0108]元數(shù)據(jù)為用于描述主LUN中存儲的用戶數(shù)據(jù)的信息,該元數(shù)據(jù)中包含差異信息,該差異信息中可以包含該主LUN中所有被修改過的數(shù)據(jù)所在的數(shù)據(jù)塊的標(biāo)識。這些差異信息所指示的數(shù)據(jù)塊中的數(shù)據(jù)就是需要被拷貝至從LUN中的數(shù)據(jù)。在進(jìn)行數(shù)據(jù)拷貝時(shí),可以直接通過元數(shù)據(jù)讀取該差異信息。
[0109]需要說明的是,在進(jìn)行數(shù)據(jù)拷貝時(shí),通常按照數(shù)據(jù)塊號從小到大的順序依次進(jìn)行拷貝,因此,在獲取差異信息時(shí),也按照數(shù)據(jù)塊號從小到大的順序依次讀取。在讀取差異信息時(shí),可以一次讀取盡量多的差異信息,不必每次從元數(shù)據(jù)中讀取一個(gè)數(shù)據(jù)塊的標(biāo)識,以減少對元數(shù)據(jù)的訪問次數(shù),提高拷貝效率。
[0110]另外,在獲取差異數(shù)據(jù)對應(yīng)在主邏輯單元中的至少一個(gè)數(shù)據(jù)塊的標(biāo)識時(shí),若返回的數(shù)據(jù)塊的標(biāo)識數(shù)目為0,則確定該主邏輯單元與從邏輯單元之間的差異數(shù)據(jù)對應(yīng)在主邏輯單元中的數(shù)據(jù)塊的標(biāo)識已經(jīng)獲取完成。
[0111]步驟204,將該至少一個(gè)數(shù)據(jù)塊的標(biāo)識依次添加至拷貝隊(duì)列中的緩存區(qū)的末尾;該拷貝隊(duì)列包括已拷貝區(qū)、拷貝區(qū)和緩存區(qū)。
[0112]該已拷貝區(qū)中的元素為已經(jīng)完成拷貝的數(shù)據(jù)塊的標(biāo)識,該拷貝區(qū)中的元素為正在進(jìn)行拷貝的數(shù)據(jù)塊的標(biāo)識,該緩存區(qū)中的元素為尚未開始拷貝的數(shù)據(jù)塊的標(biāo)識。
[0113]拷貝隊(duì)列的示意圖可以如圖3所示,其中,隊(duì)列最前方為已拷貝區(qū),中間為拷貝區(qū),隊(duì)列末尾為緩存區(qū)。從元數(shù)據(jù)中讀取的數(shù)據(jù)塊依次添加至隊(duì)列的最后方,其中,拷貝區(qū)中的第一個(gè)元素為整個(gè)拷貝隊(duì)列中第一個(gè)已經(jīng)開始但未完成拷貝的數(shù)據(jù)塊的標(biāo)識,拷貝區(qū)的最后一個(gè)元素為整個(gè)拷貝隊(duì)列中最后一個(gè)已經(jīng)開始但未完成拷貝的數(shù)據(jù)塊的標(biāo)識。
[0114]在本實(shí)施例中,同樣將讀取到的數(shù)據(jù)塊號按照從小到大的順序依次添加入緩存區(qū)的末尾。
[0115]步驟206,將待拷貝數(shù)據(jù)塊所存儲的該差異數(shù)據(jù)拷貝至該從邏輯單元,并將該待拷貝數(shù)據(jù)塊的標(biāo)識移動至該拷貝區(qū)。
[0116]其中,該待拷貝數(shù)據(jù)塊為該緩存區(qū)中的第一個(gè)元素對應(yīng)的數(shù)據(jù)塊。
[0117]在對待拷貝數(shù)據(jù)塊進(jìn)行數(shù)據(jù)拷貝之前,首先檢測該待拷貝數(shù)據(jù)塊的地址與寫入鏈表中的寫入地址是否存在沖突,該寫入鏈表中存儲有未完成的主機(jī)輸入輸出(英文:Input/Output,縮寫:10)請求的寫入地址;若該待拷貝數(shù)據(jù)塊的地址與該寫入鏈表中的寫入地址存在沖突,則等待該寫入鏈表中,與該待拷貝數(shù)據(jù)塊的地址沖突的寫入地址所對應(yīng)的主機(jī)1請求完成后,再執(zhí)行將該待拷貝數(shù)據(jù)塊所存儲的該差異數(shù)據(jù)拷貝至該從邏輯單元的步驟。
[0118]在數(shù)據(jù)拷貝的過程中,主邏輯單元依然接收主機(jī)下發(fā)的數(shù)據(jù)讀寫請求(主機(jī)1請求),對于同一個(gè)數(shù)據(jù)塊,若對該數(shù)據(jù)塊的主機(jī)1請求和數(shù)據(jù)拷貝同時(shí)進(jìn)行,則可能發(fā)生沖突,導(dǎo)致數(shù)據(jù)錯誤。
[0119]為了避免數(shù)據(jù)拷貝與主機(jī)1請求的數(shù)據(jù)寫入產(chǎn)生沖突,可以預(yù)先設(shè)置一個(gè)寫入鏈表,寫入鏈表中包含正在進(jìn)行數(shù)據(jù)寫入的地址,對待拷貝數(shù)據(jù)塊進(jìn)行拷貝之前,首先檢查該待拷貝數(shù)據(jù)塊的地址是否與寫入鏈表中的寫入地址沖突,若是,則等待該待拷貝數(shù)據(jù)塊寫入完成后,再進(jìn)行數(shù)據(jù)拷貝。若待拷貝數(shù)據(jù)塊的地址與寫入鏈表中的寫入地址不沖突,則立刻開始對待拷貝數(shù)據(jù)塊中的數(shù)據(jù)進(jìn)行拷貝。
[0120]以圖3所示的拷貝隊(duì)列為例,緩存區(qū)中的第一個(gè)元素為待拷貝數(shù)據(jù)塊的標(biāo)識,對待拷貝數(shù)據(jù)塊啟動拷貝之前,首先檢查該待拷貝數(shù)據(jù)塊的地址與寫入鏈表中的寫入地址是否沖突,若該待拷貝數(shù)據(jù)塊的地址與寫入鏈表中的所有寫入地址都不沖突,則開始對待拷貝數(shù)據(jù)塊中的數(shù)據(jù)進(jìn)行拷貝,同時(shí),將拷貝區(qū)的后邊界向后移動一位,使待拷貝數(shù)據(jù)塊的標(biāo)識進(jìn)入拷貝區(qū)。若該待拷貝數(shù)據(jù)塊的地址與寫入鏈表中的部分寫入地址沖突,則等待對該待拷貝數(shù)據(jù)塊的寫入完成之后,再開始對待拷貝數(shù)據(jù)塊中的數(shù)據(jù)進(jìn)行拷貝,并將拷貝區(qū)的后邊界向后移動一位,使待拷貝數(shù)據(jù)塊的標(biāo)識進(jìn)入拷貝區(qū)。
[0121]此外,檢測該主機(jī)1請求的寫入地址與該緩存區(qū)中的元素對應(yīng)的數(shù)據(jù)塊的地址是否存在沖突的步驟可以如下:
[0122]I)檢測該主機(jī)1請求的寫入地址對應(yīng)的數(shù)據(jù)塊的標(biāo)識是否存在于該緩存區(qū)中;
[0123]2)若檢測結(jié)果為該主機(jī)1請求的寫入地址對應(yīng)的數(shù)據(jù)塊的標(biāo)識存在于該緩存區(qū)中,則獲取該主機(jī)1請求的寫入地址對應(yīng)的數(shù)據(jù)塊的位圖,該位圖用于指示該主機(jī)1請求的寫入地址對應(yīng)的數(shù)據(jù)塊中的差異單元,該差異單元為存儲有該差異數(shù)據(jù)的最小數(shù)據(jù)單元;
[0124]3)檢測該主機(jī)1請求的寫入地址與該差異單元的地址是否存在沖突;
[0125]4)若檢測結(jié)果為該主機(jī)1請求的寫入地址與該差異單元的地址存在沖突,則確定該主機(jī)1請求的寫入地址與該緩存區(qū)中的元素對應(yīng)的后臺拷貝的數(shù)據(jù)塊的地址存在沖關(guān)。
[0126]5)若該主機(jī)1請求的寫入地址對應(yīng)的數(shù)據(jù)塊的標(biāo)識不存在于該緩存區(qū)中,或者,該主機(jī)1請求的寫入地址對應(yīng)的數(shù)據(jù)塊的標(biāo)識存在于該緩存區(qū)中,但是該主機(jī)1請求的寫入地址與該差異單元的地址不存在沖突,則確定該主機(jī)1請求的寫入地址與該緩存區(qū)中的元素對應(yīng)的后臺拷貝的數(shù)據(jù)塊不存在沖突。
[0127]在進(jìn)行數(shù)據(jù)寫入,尤其是進(jìn)行小數(shù)據(jù)量(比如Ik或者2k)時(shí),可能只對數(shù)據(jù)塊中的部分地址進(jìn)行寫入,為了進(jìn)一步提高數(shù)據(jù)拷貝和效率,可以將數(shù)據(jù)塊劃分為多個(gè)存儲單元,同時(shí),每個(gè)數(shù)據(jù)塊對應(yīng)有各自的位圖,該位圖用于描述各個(gè)存儲單元是否被修改。具體的,數(shù)據(jù)塊的位圖結(jié)構(gòu)示意圖可以如圖4所示,其中,一個(gè)數(shù)據(jù)塊劃分為8個(gè)存儲單元,每個(gè)存儲單元為主邏輯單元中的最小數(shù)據(jù)單元,每個(gè)存儲單元對應(yīng)位圖中的一個(gè)元素,元素為O標(biāo)識對應(yīng)的存儲單元未被修改,不需要拷貝,該存儲單元可以進(jìn)行寫入操作;元素為I標(biāo)識對應(yīng)的存儲單元被修改,需要拷貝,當(dāng)該存儲單元拷貝時(shí),無法進(jìn)行寫入操作。在接收到一個(gè)寫入請求后,可以首先檢測該寫入請求對應(yīng)的寫入地址是否對應(yīng)緩存區(qū)中的元素對應(yīng)的數(shù)據(jù)塊,若是,則進(jìn)一步檢測該寫入地址是否對應(yīng)該數(shù)據(jù)塊中的位圖元素為I的存儲單元,若是,則確定該請求對應(yīng)的寫入地址與該緩存區(qū)中的元素對應(yīng)的數(shù)據(jù)塊沖突。若該寫入請求對應(yīng)的寫入地址與緩存區(qū)中的元素對應(yīng)的數(shù)據(jù)塊不對應(yīng),或者,該寫入請求對應(yīng)的寫入地址與緩存區(qū)中的元素對應(yīng)的數(shù)據(jù)塊對應(yīng),但是與該數(shù)據(jù)塊中的位圖元素為I的存儲單元不對應(yīng),則確定該寫入地址與緩存區(qū)中的元素對應(yīng)的數(shù)據(jù)塊不沖突。
[0128]其中,位圖是在從元數(shù)據(jù)獲取差異時(shí),根據(jù)實(shí)際差異數(shù)據(jù)的大小進(jìn)行設(shè)置。元數(shù)據(jù)中除了包含需要進(jìn)行拷貝的數(shù)據(jù)塊的標(biāo)識之外,還包含需要進(jìn)行拷貝的數(shù)據(jù)塊中的差異數(shù)據(jù)的大小,在訪問元數(shù)據(jù)以讀取需要進(jìn)行拷貝的數(shù)據(jù)塊的標(biāo)識時(shí),可以根據(jù)讀取的數(shù)據(jù)塊的標(biāo)識對應(yīng)的數(shù)據(jù)塊中存儲的差異數(shù)據(jù)的大小確定數(shù)據(jù)塊中的存儲單元的個(gè)數(shù),比如,I個(gè)數(shù)據(jù)塊的數(shù)據(jù)量為1M,差異數(shù)據(jù)大小2Kb,可以根據(jù)差異數(shù)據(jù)的大小將數(shù)據(jù)塊劃分為8個(gè)存儲單元,同時(shí)設(shè)置該8個(gè)存儲單元在位圖中對應(yīng)的元素,其中,包含差異數(shù)據(jù)的存儲單元對應(yīng)在位圖中的元素設(shè)為I,不包含差異數(shù)據(jù)的存儲單元對應(yīng)在位圖中的元素設(shè)為O。
[0129]此外,在將待拷貝數(shù)據(jù)塊所存儲的該差異數(shù)據(jù)拷貝至該從邏輯單元時(shí),可以獲取該待拷貝數(shù)據(jù)塊的位圖,并根據(jù)該待拷貝數(shù)據(jù)塊的位圖,將該待拷貝數(shù)據(jù)塊的差異單元中的數(shù)據(jù)拷貝至該從邏輯單元。
[0130]在將主邏輯單元中的數(shù)據(jù)拷貝至從邏輯單元時(shí),可以根據(jù)位圖查詢數(shù)據(jù)塊中的差異單元,并將差異單元中的數(shù)據(jù)拷貝到從邏輯單元,而存儲差異數(shù)據(jù)的數(shù)據(jù)塊中的非差異單元,則不予拷貝,這樣可以減少拷貝的數(shù)據(jù)量,提高拷貝效率。
[0131]步驟208,在該拷貝區(qū)中的元素對應(yīng)的數(shù)據(jù)塊所存儲的數(shù)據(jù)已拷貝完成之后,將該數(shù)據(jù)已拷貝完成的元素從該拷貝區(qū)移動至該已拷貝區(qū)。
[0132]同樣以圖3所示的拷貝隊(duì)列為例,當(dāng)拷貝區(qū)中的第一個(gè)元素對應(yīng)的數(shù)據(jù)塊完成拷貝(比如,接收到從LUN返回的該數(shù)據(jù)塊拷貝完成的響應(yīng)),則將拷貝區(qū)的前邊界向后移動一位,使拷貝區(qū)中的第一個(gè)元素進(jìn)入已拷貝區(qū)。需要說明的時(shí),若拷貝區(qū)中的第一個(gè)元素對應(yīng)的數(shù)據(jù)塊尚未拷貝完成,而拷貝區(qū)中有其它元素對應(yīng)的數(shù)據(jù)塊已經(jīng)拷貝完成(比如,拷貝區(qū)中的第一個(gè)元素對應(yīng)的數(shù)據(jù)塊尚未拷貝完成,而拷貝區(qū)中的第二個(gè)元素對應(yīng)的數(shù)據(jù)塊已經(jīng)拷貝完成),此時(shí),拷貝區(qū)的前邊界不變,直至拷貝區(qū)中的第一個(gè)元素對應(yīng)的數(shù)據(jù)塊拷貝完成。
[0133]步驟210,檢測該已拷貝區(qū)中的元素的個(gè)數(shù)是否達(dá)到預(yù)定閾值;若已拷貝區(qū)中的元素的個(gè)數(shù)達(dá)到該預(yù)定閾值,則將該已拷貝區(qū)中的元素從差異信息中刪除。
[0134]當(dāng)一個(gè)數(shù)據(jù)塊中的數(shù)據(jù)拷貝完成后,需要在元數(shù)據(jù)中將該數(shù)據(jù)塊號從差異信息刪除,每次刪除操作都需要對元數(shù)據(jù)進(jìn)行依次訪問。在本實(shí)施例中,可以等待已拷貝區(qū)中的元素累積到一定數(shù)量之后,再一次從元數(shù)據(jù)的差異信息中刪除,以減小訪問元數(shù)據(jù)的次數(shù),進(jìn)一步提聞拷貝效率。
[0135]同樣的,在讀取元數(shù)據(jù)中的差異信息時(shí),也可以通過一次讀取盡可能多的差異信息來減少元數(shù)據(jù)的訪問次數(shù)。
[0136]步驟212,判斷主機(jī)10請求的寫入地址與該拷貝區(qū)中的元素對應(yīng)的后臺拷貝的數(shù)據(jù)塊的地址是否存在沖突;若是,進(jìn)入步驟216,否則,進(jìn)入步驟214。
[0137]當(dāng)該主邏輯單元接收到主機(jī)輸入輸出10請求時(shí),判斷該主機(jī)10請求的寫入地址與該拷貝區(qū)中的元素對應(yīng)的后臺拷貝的數(shù)據(jù)塊的地址是否存在沖突。
[0138]其中,判斷該主機(jī)10請求的寫入地址與該拷貝區(qū)中的元素對應(yīng)的后臺拷貝的數(shù)據(jù)塊的地址是否存在沖突的過程可以如下:
[0139]1)檢測該主機(jī)10請求的寫入地址對應(yīng)的數(shù)據(jù)塊的標(biāo)識是否存在于該拷貝區(qū)中;
[0140]2)若檢測結(jié)果為該主機(jī)10請求的寫入地址對應(yīng)的數(shù)據(jù)塊的標(biāo)識存在于該拷貝區(qū)中,則獲取該主機(jī)10請求的寫入地址對應(yīng)的數(shù)據(jù)塊的位圖,該位圖用于指示該主機(jī)10請求的寫入地址對應(yīng)的數(shù)據(jù)塊中的差異單元,該差異單元為存儲有該差異數(shù)據(jù)的最小數(shù)據(jù)單元;
[0141]3)檢測該主機(jī)10請求的寫入地址與該差異單元的地址是否存在沖突;
[0142]4)若檢測結(jié)果為該主機(jī)10請求的寫入地址與該差異單元的地址存在沖突,則確定該主機(jī)10請求的寫入地址與該拷貝區(qū)中的元素對應(yīng)的后臺拷貝的數(shù)據(jù)塊存在沖突。
[0143]5)若該主機(jī)10請求的寫入地址對應(yīng)的數(shù)據(jù)塊的標(biāo)識不存在于該拷貝區(qū)中,或者,該主機(jī)10請求的寫入地址對應(yīng)的數(shù)據(jù)塊的標(biāo)識存在于該拷貝區(qū)中,但是該主機(jī)10請求的寫入地址與該差異單元的地址不存在沖突,則確定該主機(jī)10請求的寫入地址與該拷貝區(qū)中的元素對應(yīng)的后臺拷貝的數(shù)據(jù)塊不存在沖突。
[0144]其中,上述檢查待拷貝數(shù)據(jù)塊的地址是否與寫入鏈表中的寫入地址沖突的方法與步驟206中判斷主機(jī)10請求的寫入地址與緩存區(qū)中的元素對應(yīng)的數(shù)據(jù)塊是否存在沖突的方法類似,此處不再贅述。
[0145]本實(shí)施例所示的方法,通過將數(shù)據(jù)塊劃分為多個(gè)存儲單元,在檢測出主機(jī)10請求的寫入地址與正在進(jìn)行拷貝的數(shù)據(jù)塊或者將要進(jìn)行拷貝的數(shù)據(jù)塊產(chǎn)生沖突之后,進(jìn)一步檢測該寫入地址是否與數(shù)據(jù)塊中正在進(jìn)行拷貝或者將要進(jìn)行拷貝的數(shù)據(jù)單元相沖突,支持更低粒度的沖突檢測,進(jìn)一步提高了數(shù)據(jù)拷貝或者數(shù)據(jù)寫入的效率。
[0146]步驟214,立即執(zhí)行該主機(jī)10請求。
[0147]若判斷出主機(jī)1請求的寫入地址與拷貝區(qū)中的元素對應(yīng)的數(shù)據(jù)塊不沖突,則可以立刻執(zhí)行寫入操作。
[0148]其中,主機(jī)1請求的寫入地址與拷貝區(qū)中的元素對應(yīng)的數(shù)據(jù)塊不沖突的情形有如下幾種:主機(jī)1請求的寫入地址對應(yīng)的數(shù)據(jù)塊的標(biāo)識為拷貝區(qū)中的元素,且主機(jī)1請求的寫入地址與對應(yīng)數(shù)據(jù)塊中的差異單元不沖突;主機(jī)1請求的寫入地址對應(yīng)的數(shù)據(jù)塊的標(biāo)識為緩存區(qū)中的元素;主機(jī)1請求的寫入地址對應(yīng)的數(shù)據(jù)塊的標(biāo)識為已拷貝區(qū)中的元素;或者,主機(jī)1請求的寫入地址對應(yīng)的數(shù)據(jù)塊的標(biāo)識尚未被添加入該拷貝隊(duì)列。
[0149]本發(fā)明實(shí)施例針對上述幾種情形分別做如下處理:
[0150]I)若主機(jī)1請求的寫入地址對應(yīng)的數(shù)據(jù)塊的標(biāo)識為拷貝區(qū)中的元素,且主機(jī)1請求的寫入地址與對應(yīng)數(shù)據(jù)塊中的差異單元不沖突,則立刻執(zhí)行該主機(jī)1請求,且不需要將該1請求的寫入地址添加至寫入鏈表。
[0151]2)若該主機(jī)1請求的寫入地址對應(yīng)的數(shù)據(jù)塊的標(biāo)識為緩存區(qū)中的元素,則進(jìn)一步的,若該主機(jī)1請求的寫入地址與數(shù)據(jù)塊中的差異單元沖突,則立刻執(zhí)行該主機(jī)1請求的同時(shí),將該1請求的寫入地址添加至寫入鏈表;若該主機(jī)1請求的寫入地址與數(shù)據(jù)塊中的差異單元不沖突,則將該立刻執(zhí)行該主機(jī)1請求的同時(shí),不需要將該1請求的寫入地址添加至寫入鏈表。
[0152]3)若主機(jī)1請求的寫入地址對應(yīng)的數(shù)據(jù)塊的標(biāo)識為已拷貝區(qū)中的元素,則將該立刻執(zhí)行該主機(jī)1請求的同時(shí),不需要將該1請求的寫入地址添加至寫入鏈表。
[0153]4)若主機(jī)1請求的寫入地址對應(yīng)的數(shù)據(jù)塊的標(biāo)識尚未被添加入該拷貝隊(duì)列,則檢測該主機(jī)1請求的寫入地址對應(yīng)的數(shù)據(jù)塊中是否存儲有該差異數(shù)據(jù);若該主機(jī)1請求的寫入地址對應(yīng)的數(shù)據(jù)塊中存儲有該差異數(shù)據(jù),則立即執(zhí)行該主機(jī)1請求,同時(shí)將該主機(jī)1請求的寫入地址添加入寫入鏈表。
[0154]進(jìn)一步的,在獲取差異信息時(shí),若按照數(shù)據(jù)塊號從小到大的順序依次讀取差異數(shù)據(jù)對應(yīng)的數(shù)據(jù)塊,則處于緩存區(qū)中的最后一個(gè)數(shù)據(jù)塊之前的各個(gè)尚未被添加入拷貝隊(duì)列的數(shù)據(jù)塊都已經(jīng)被確定為不包含差異數(shù)據(jù),本實(shí)施例中可以不考慮其處理方式,因此,只有當(dāng)主機(jī)1請求的寫入地址處于主邏輯單元中的第一個(gè)數(shù)據(jù)塊的地址到緩存區(qū)中的最后一個(gè)數(shù)據(jù)塊的地址之外(或者判斷出該主機(jī)1請求的寫入地址對應(yīng)的數(shù)據(jù)塊號大于緩存區(qū)中的最后一個(gè)元素對應(yīng)的數(shù)據(jù)塊號)時(shí),才進(jìn)一步檢測該主機(jī)1請求的寫入地址對應(yīng)的數(shù)據(jù)塊中是否存儲有該差異數(shù)據(jù),若是,則立即執(zhí)行該主機(jī)1請求,同時(shí)將該主機(jī)1請求的寫入地址添加入寫入鏈表。
[0155]步驟216,等待地址與該主機(jī)1請求的寫入地址存在沖突的數(shù)據(jù)塊拷貝完成后,再執(zhí)行該主機(jī)1請求。
[0156]若判斷出主機(jī)1請求的寫入地址與拷貝區(qū)中的元素對應(yīng)的數(shù)據(jù)塊沖突,則說明該主機(jī)1請求的寫入地址中的數(shù)據(jù)正在被拷貝至從LUN,此時(shí)可以等待該數(shù)據(jù)塊中的數(shù)據(jù)拷貝完成后,再執(zhí)行主機(jī)1請求的寫入操作。
[0157]綜上所述,本發(fā)明實(shí)施例提供的數(shù)據(jù)拷貝方法,通過設(shè)置包含已拷貝區(qū)、拷貝區(qū)和緩存區(qū)的拷貝隊(duì)列,分別存儲完成拷貝的數(shù)據(jù)塊的標(biāo)識、正在進(jìn)行拷貝的數(shù)據(jù)塊的標(biāo)識以及尚未開始拷貝的數(shù)據(jù)塊的標(biāo)識,不需要對拷貝隊(duì)列進(jìn)行遍歷,僅通過隊(duì)列中不同區(qū)域的數(shù)據(jù)塊的標(biāo)識即可以確定數(shù)據(jù)塊的拷貝狀態(tài),解決了現(xiàn)有技術(shù)中每次從鏈表中添加或者刪除節(jié)點(diǎn)時(shí),都需要遍歷整個(gè)鏈表,從而導(dǎo)致數(shù)據(jù)拷貝效率低的問題,達(dá)到節(jié)約處理時(shí)間,提高拷貝效率的效果。
[0158]此外,本發(fā)明實(shí)施例提供的數(shù)據(jù)拷貝方法,只需要將待拷貝的數(shù)據(jù)塊的標(biāo)識添加入拷貝隊(duì)列,拷貝隊(duì)列中的元素的數(shù)量取決于后臺并發(fā)拷貝的數(shù)據(jù)塊的數(shù)量,與寫入操作的并發(fā)數(shù)無關(guān),內(nèi)存資源占用量小。
[0159]其次,本發(fā)明實(shí)施例提供的數(shù)據(jù)拷貝方法,將數(shù)據(jù)塊劃分為更小粒度的存儲單元,只有判斷出寫入地址與正在或者即將拷貝的存儲單元發(fā)生沖突時(shí),才確定寫入操作與拷貝操作沖突,提高了對小數(shù)據(jù)量寫入操作的判斷精度,提高寫入或者拷貝性能。
[0160]另外,本發(fā)明實(shí)施例提供的數(shù)據(jù)拷貝方法,根據(jù)數(shù)據(jù)塊中的差異數(shù)據(jù)的大小劃分?jǐn)?shù)據(jù)塊,能夠靈活的確定判斷精度,進(jìn)一步提高寫入或者拷貝性能。
[0161]最后,本發(fā)明實(shí)施例提供的數(shù)據(jù)拷貝方法,在讀取差異信息中需要進(jìn)行拷貝的數(shù)據(jù)塊的標(biāo)識,或者,將拷貝完成的數(shù)據(jù)塊的標(biāo)識從差異信息中刪除時(shí),可以一次讀取或者刪除盡可能多的數(shù)據(jù)塊的標(biāo)識,以減少元數(shù)據(jù)的訪問次數(shù),提高拷貝效率。
[0162]請參考圖5,其示出了本發(fā)明一個(gè)實(shí)施例提供的數(shù)據(jù)拷貝裝置的裝置結(jié)構(gòu)圖。該數(shù)據(jù)拷貝裝置可以用于在存儲系統(tǒng)中的主邏輯單元中,執(zhí)行如圖1或圖2所示的數(shù)據(jù)拷貝方法。該存儲系統(tǒng)中包含有該主機(jī)邏輯單元和從邏輯單元,其中,從邏輯單元中存儲有主邏輯單元中的數(shù)據(jù)的備份。該數(shù)據(jù)拷貝裝置可以包括:
[0163]標(biāo)識獲取模塊301,用于獲取差異數(shù)據(jù)對應(yīng)在主邏輯單元中的至少一個(gè)數(shù)據(jù)塊的標(biāo)識,所述差異數(shù)據(jù)為所述主邏輯單元與從邏輯單元之間存在差異的數(shù)據(jù),所述從邏輯單元為所述主邏輯單元的備份;
[0164]標(biāo)識添加模塊302,用于將所述至少一個(gè)數(shù)據(jù)塊的標(biāo)識依次添加至拷貝隊(duì)列中的緩存區(qū)的末尾;所述拷貝隊(duì)列包括已拷貝區(qū)、拷貝區(qū)和緩存區(qū);所述已拷貝區(qū)中的元素為已經(jīng)完成拷貝的數(shù)據(jù)塊的標(biāo)識,所述拷貝區(qū)中的元素為正在進(jìn)行拷貝的數(shù)據(jù)塊的標(biāo)識,所述緩存區(qū)中的元素為尚未開始拷貝的數(shù)據(jù)塊的標(biāo)識;
[0165]拷貝模塊303,用于將待拷貝數(shù)據(jù)塊所存儲的所述差異數(shù)據(jù)拷貝至所述從邏輯單元,所述待拷貝數(shù)據(jù)塊為所述緩存區(qū)中的第一個(gè)元素對應(yīng)的數(shù)據(jù)塊;
[0166]第一移動模塊304,用于將所述待拷貝數(shù)據(jù)塊的標(biāo)識移動至所述拷貝區(qū);
[0167]第二移動模塊305,用于在所述拷貝區(qū)中的元素對應(yīng)的數(shù)據(jù)塊所存儲的數(shù)據(jù)已拷貝完成后,將所述數(shù)據(jù)已拷貝完成的元素從所述拷貝區(qū)移動至所述已拷貝區(qū)。
[0168]綜上所述,本發(fā)明實(shí)施例提供的數(shù)據(jù)拷貝裝置,通過設(shè)置包含已拷貝區(qū)、拷貝區(qū)和緩存區(qū)的拷貝隊(duì)列,分別存儲完成拷貝的數(shù)據(jù)塊的標(biāo)識、正在進(jìn)行拷貝的數(shù)據(jù)塊的標(biāo)識以及尚未開始拷貝的數(shù)據(jù)塊的標(biāo)識,不需要對拷貝隊(duì)列進(jìn)行遍歷,僅通過隊(duì)列中不同區(qū)域的數(shù)據(jù)塊的標(biāo)識即可以確定數(shù)據(jù)塊的拷貝狀態(tài),解決了現(xiàn)有技術(shù)中每次從鏈表中添加或者刪除節(jié)點(diǎn)時(shí),都需要遍歷整個(gè)鏈表,從而導(dǎo)致數(shù)據(jù)拷貝效率低的問題,達(dá)到節(jié)約處理時(shí)間,提高拷貝效率的效果。
[0169]請參考圖6,其示出了本發(fā)明另一實(shí)施例提供的數(shù)據(jù)拷貝裝置的裝置結(jié)構(gòu)圖。該數(shù)據(jù)拷貝裝置可以用于在存儲系統(tǒng)中的主邏輯單元中,執(zhí)行如圖1或圖2所示的數(shù)據(jù)拷貝方法。該存儲系統(tǒng)中包含有該主機(jī)邏輯單元和從邏輯單元,其中,從邏輯單元中存儲有主邏輯單元中的數(shù)據(jù)的備份。該數(shù)據(jù)拷貝裝置可以包括:
[0170]標(biāo)識獲取模塊301,用于獲取差異數(shù)據(jù)對應(yīng)在主邏輯單元中的至少一個(gè)數(shù)據(jù)塊的標(biāo)識,所述差異數(shù)據(jù)為所述主邏輯單元與從邏輯單元之間存在差異的數(shù)據(jù),所述從邏輯單元為所述主邏輯單元的備份;
[0171]標(biāo)識添加模塊302,用于將所述至少一個(gè)數(shù)據(jù)塊的標(biāo)識依次添加至拷貝隊(duì)列中的緩存區(qū)的末尾;所述拷貝隊(duì)列包括已拷貝區(qū)、拷貝區(qū)和緩存區(qū);所述已拷貝區(qū)中的元素為已經(jīng)完成拷貝的數(shù)據(jù)塊的標(biāo)識,所述拷貝區(qū)中的元素為正在進(jìn)行拷貝的數(shù)據(jù)塊的標(biāo)識,所述緩存區(qū)中的元素為尚未開始拷貝的數(shù)據(jù)塊的標(biāo)識;
[0172]拷貝模塊303,用于將待拷貝數(shù)據(jù)塊所存儲的所述差異數(shù)據(jù)拷貝至所述從邏輯單元;
[0173]第一移動模塊304,用于將所述待拷貝數(shù)據(jù)塊的標(biāo)識移動至所述拷貝區(qū);所述待拷貝數(shù)據(jù)塊為所述緩存區(qū)中的第一個(gè)元素對應(yīng)的數(shù)據(jù)塊;
[0174]第二移動模塊305,用于在所述拷貝區(qū)中的元素對應(yīng)的數(shù)據(jù)塊所存儲的數(shù)據(jù)已拷貝完成后,將所述數(shù)據(jù)已拷貝完成的元素從所述拷貝區(qū)移動至所述已拷貝區(qū)。
[0175]可選的,所述裝置還包括:
[0176]判斷模塊306,用于當(dāng)所述主邏輯單元接收到主機(jī)1請求時(shí),判斷所述主機(jī)1請求的寫入地址與所述拷貝區(qū)中的元素對應(yīng)的后臺拷貝的數(shù)據(jù)塊的地址是否存在沖突;
[0177]第一執(zhí)行模塊307,用于若所述判斷模塊306的判斷結(jié)果為所述主機(jī)1請求的寫入地址與所述拷貝區(qū)中的元素對應(yīng)的后臺拷貝的數(shù)據(jù)塊的地址不存在沖突,則執(zhí)行所述主機(jī)1請求;
[0178]第二執(zhí)行模塊308,用于若所述判斷模塊306的判斷結(jié)果為所述主機(jī)1請求的寫入地址與所述拷貝區(qū)中的元素對應(yīng)的后臺拷貝的數(shù)據(jù)塊的地址存在沖突,則等待與所述主機(jī)1請求的寫入地址存在沖突的數(shù)據(jù)塊拷貝完成后,再執(zhí)行所述主機(jī)1請求。
[0179]進(jìn)一步的,所述判斷模塊306,包括:
[0180]第一檢測單元306a,用于檢測所述主機(jī)1請求的寫入地址對應(yīng)的數(shù)據(jù)塊的標(biāo)識是否存在于所述拷貝區(qū)中;
[0181]第一位圖獲取單元306b,用于若所述第一檢測單元306a的檢測結(jié)果為所述主機(jī)1請求的寫入地址對應(yīng)的數(shù)據(jù)塊的標(biāo)識存在于所述拷貝區(qū)中,則獲取所述主機(jī)1請求的寫入地址對應(yīng)的數(shù)據(jù)塊的位圖,所述位圖用于指示所述主機(jī)1請求的寫入地址對應(yīng)的數(shù)據(jù)塊中的差異單元,所述差異單元為存儲有所述差異數(shù)據(jù)的最小數(shù)據(jù)單元;
[0182]第二檢測單元306c,用于檢測所述主機(jī)1請求的寫入地址與所述差異單元的地址是否存在沖突;
[0183]第一確定單元306d,用于若所述第二檢測單元306c的檢測結(jié)果為所述主機(jī)1請求的寫入地址與所述差異單元的地址存在沖突,則確定所述主機(jī)1請求的寫入地址與所述拷貝區(qū)中的元素對應(yīng)的后臺拷貝的數(shù)據(jù)塊的地址存在沖突。
[0184]可選的,所述拷貝模塊303,包括:
[0185]第二位圖獲取單元303a,用于獲取所述待拷貝數(shù)據(jù)塊的位圖;
[0186]拷貝單元303b,用于根據(jù)所述待拷貝數(shù)據(jù)塊的位圖,將所述待拷貝數(shù)據(jù)塊的差異單元中的數(shù)據(jù)拷貝至所述從邏輯單元。
[0187]可選的,所述裝置包括:
[0188]第一檢測模塊309,用于在所述拷貝模塊303將待拷貝數(shù)據(jù)塊所存儲的所述差異數(shù)據(jù)拷貝至所述從邏輯單元之前,檢測所述待拷貝數(shù)據(jù)塊的地址與寫入鏈表中的寫入地址是否存在沖突,所述寫入鏈表中存儲有未完成的主機(jī)1請求的寫入地址;
[0189]所述拷貝模塊303,用于若所述待拷貝數(shù)據(jù)塊的地址與所述寫入鏈表中的寫入地址存在沖突,則等待所述寫入鏈表中,與所述待拷貝數(shù)據(jù)塊的地址沖突的寫入地址所對應(yīng)的主機(jī)1請求完成后,再執(zhí)行將所述待拷貝數(shù)據(jù)塊所存儲的所述差異數(shù)據(jù)拷貝至所述從邏輯單元的步驟。
[0190]可選的,所述裝置還包括:
[0191]第二檢測模塊310,用于若所述判斷模塊306的判斷結(jié)果為所述主機(jī)1請求的寫入地址與所述拷貝區(qū)中的元素對應(yīng)的后臺拷貝的數(shù)據(jù)塊的地址不存在沖突,則檢測所述主機(jī)1請求的寫入地址與所述緩存區(qū)中的元素對應(yīng)的數(shù)據(jù)塊的地址是否存在沖突;
[0192]第一地址添加模塊311,用于若所述主機(jī)1請求的寫入地址與所述緩存區(qū)中的元素對應(yīng)的數(shù)據(jù)塊的地址存在地址沖突,則將所述主機(jī)1請求的寫入地址添加入所述寫入鏈表。
[0193]可選的,所述第二檢測模塊310,包括:
[0194]第三檢測單元310a,用于檢測所述主機(jī)1請求的寫入地址對應(yīng)的數(shù)據(jù)塊的標(biāo)識是否存在于所述緩存區(qū)中;
[0195]第三位圖獲取單元310b,用于若所述第三檢測單元310a的檢測結(jié)果為所述主機(jī)1請求的寫入地址對應(yīng)的數(shù)據(jù)塊的標(biāo)識存在于所述緩存區(qū)中,則獲取所述主機(jī)1請求的寫入地址對應(yīng)的數(shù)據(jù)塊的位圖,所述位圖用于指示所述主機(jī)1請求的寫入地址對應(yīng)的數(shù)據(jù)塊中的差異單元,所述差異單元為存儲有所述差異數(shù)據(jù)的最小數(shù)據(jù)單元;
[0196]第四檢測單元310c,用于檢測所述主機(jī)1請求的寫入地址與所述差異單元的地址是否存在沖突;
[0197]第二確定單元310d,用于若所述第四檢測單元310c的檢測結(jié)果為所述主機(jī)1請求的寫入地址與所述差異單元的地址存在沖突,則確定所述主機(jī)1請求的寫入地址與所述緩存區(qū)中的元素對應(yīng)的后臺拷貝的數(shù)據(jù)塊的地址存在沖突。
[0198]可選的,所述裝置還包括:
[0199]第三檢測模塊312,用于若所述主機(jī)1請求的寫入地址對應(yīng)的數(shù)據(jù)塊的標(biāo)識尚未被添加入所述拷貝隊(duì)列,則檢測所述主機(jī)1請求的寫入地址對應(yīng)的數(shù)據(jù)塊中是否存儲有所述差異數(shù)據(jù);
[0200]第二地址添加模塊313,用于若所述主機(jī)1請求的寫入地址對應(yīng)的數(shù)據(jù)塊中存儲有所述差異數(shù)據(jù),則將所述主機(jī)1請求的寫入地址添加入所述寫入鏈表;
[0201]第三執(zhí)行模塊314,用于立即執(zhí)行所述主機(jī)1請求。
[0202]可選的,所述裝置還包括:
[0203]第四執(zhí)行模塊315,用于若所述主機(jī)1請求的寫入地址為所述已拷貝區(qū)中的元素對應(yīng)的數(shù)據(jù)塊的地址,則立刻執(zhí)行所述主機(jī)1請求。
[0204]可選的,所述裝置還包括:
[0205]確定模塊316,用于在所述標(biāo)識獲取模塊301獲取差異數(shù)據(jù)對應(yīng)在主邏輯單元中的至少一個(gè)數(shù)據(jù)塊的標(biāo)識時(shí),若返回的數(shù)據(jù)塊的標(biāo)識數(shù)目為O,則確定所述主邏輯單元與所述從邏輯單元之間的差異數(shù)據(jù)對應(yīng)在主邏輯單元中的數(shù)據(jù)塊的標(biāo)識已經(jīng)獲取完成。
[0206]可選的,所述裝置還包括:
[0207]第四檢測模塊317,用于檢測所述已拷貝區(qū)中的元素的個(gè)數(shù)是否達(dá)到預(yù)定閾值;
[0208]刪除模塊318,用于若所述第四檢測模塊317的檢測結(jié)果為所述已拷貝區(qū)中的元素的個(gè)數(shù)達(dá)到所述預(yù)定閾值,則將所述已拷貝區(qū)中的元素從差異信息中刪除;
[0209]其中,所述差異信息包含于元數(shù)據(jù)中,且包含所述差異數(shù)據(jù)所在的各個(gè)數(shù)據(jù)塊的標(biāo)識;所述元數(shù)據(jù)用于描述所述主邏輯單元中存儲的用戶數(shù)據(jù)。
[0210]綜上所述,本發(fā)明實(shí)施例提供的數(shù)據(jù)拷貝裝置,通過設(shè)置包含已拷貝區(qū)、拷貝區(qū)和緩存區(qū)的拷貝隊(duì)列,分別存儲完成拷貝的數(shù)據(jù)塊的標(biāo)識、正在進(jìn)行拷貝的數(shù)據(jù)塊的標(biāo)識以及尚未開始拷貝的數(shù)據(jù)塊的標(biāo)識,不需要對拷貝隊(duì)列進(jìn)行遍歷,僅通過隊(duì)列中不同區(qū)域的數(shù)據(jù)塊的標(biāo)識即可以確定數(shù)據(jù)塊的拷貝狀態(tài),解決了現(xiàn)有技術(shù)中每次從鏈表中添加或者刪除節(jié)點(diǎn)時(shí),都需要遍歷整個(gè)鏈表,從而導(dǎo)致數(shù)據(jù)拷貝效率低的問題,達(dá)到節(jié)約處理時(shí)間,提高拷貝效率的效果。
[0211]此外,本發(fā)明實(shí)施例提供的數(shù)據(jù)拷貝裝置,只需要將待拷貝的數(shù)據(jù)塊的標(biāo)識添加入拷貝隊(duì)列,拷貝隊(duì)列中的元素的數(shù)量取決于后臺并發(fā)拷貝的數(shù)據(jù)塊的數(shù)量,與寫入操作的并發(fā)數(shù)無關(guān),內(nèi)存資源占用量小。
[0212]其次,本發(fā)明實(shí)施例提供的數(shù)據(jù)拷貝裝置,將數(shù)據(jù)塊劃分為更小粒度的存儲單元,只有判斷出寫入地址與正在或者即將拷貝的存儲單元發(fā)生沖突時(shí),才確定寫入操作與拷貝操作沖突,提高了對小數(shù)據(jù)量寫入操作的判斷精度,提高寫入或者拷貝性能。
[0213]另外,本發(fā)明實(shí)施例提供的數(shù)據(jù)拷貝裝置,根據(jù)數(shù)據(jù)塊中的差異數(shù)據(jù)的大小劃分?jǐn)?shù)據(jù)塊,能夠靈活的確定判斷精度,進(jìn)一步提高寫入或者拷貝性能。
[0214]最后,本發(fā)明實(shí)施例提供的數(shù)據(jù)拷貝裝置,在將拷貝完成的數(shù)據(jù)塊的標(biāo)識從差異信息中刪除時(shí),可以一次刪除盡可能多的數(shù)據(jù)塊的標(biāo)識,以減少元數(shù)據(jù)的訪問次數(shù),提高拷貝效率。
[0215]需要說明的是:上述實(shí)施例提供的數(shù)據(jù)拷貝裝置在進(jìn)行數(shù)據(jù)拷貝或者執(zhí)行主機(jī)10請求時(shí),僅以上述各功能模塊的劃分進(jìn)行舉例說明,實(shí)際應(yīng)用中,可以根據(jù)需要而將上述功能分配由不同的功能模塊完成,即將裝置的內(nèi)部結(jié)構(gòu)劃分成不同的功能模塊,以完成以上描述的全部或者部分功能。另外,上述實(shí)施例提供的數(shù)據(jù)拷貝裝置與數(shù)據(jù)拷貝方法實(shí)施例屬于同一構(gòu)思,其具體實(shí)現(xiàn)過程詳見方法實(shí)施例,這里不再贅述。
[0216]上述本發(fā)明實(shí)施例序號僅僅為了描述,不代表實(shí)施例的優(yōu)劣。
[0217]本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例的全部或部分步驟可以通過硬件來完成,也可以通過程序來指令相關(guān)的硬件完成,所述的程序可以存儲于一種計(jì)算機(jī)可讀存儲介質(zhì)中,上述提到的存儲介質(zhì)可以是只讀存儲器,磁盤或光盤等。
[0218]以上所述僅為本發(fā)明的較佳實(shí)施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
【權(quán)利要求】
1.一種數(shù)據(jù)拷貝方法,其特征在于,所述方法包括: 獲取差異數(shù)據(jù)對應(yīng)在主邏輯單元中的至少一個(gè)數(shù)據(jù)塊的標(biāo)識,所述差異數(shù)據(jù)為所述主邏輯單元與從邏輯單元之間存在差異的數(shù)據(jù),所述從邏輯單元為所述主邏輯單元的備份; 將所述至少一個(gè)數(shù)據(jù)塊的標(biāo)識依次添加至拷貝隊(duì)列中的緩存區(qū)的末尾;所述拷貝隊(duì)列包括已拷貝區(qū)、拷貝區(qū)和緩存區(qū);所述已拷貝區(qū)中的元素為已經(jīng)完成拷貝的數(shù)據(jù)塊的標(biāo)識,所述拷貝區(qū)中的元素為正在進(jìn)行拷貝的數(shù)據(jù)塊的標(biāo)識,所述緩存區(qū)中的元素為尚未開始拷貝的數(shù)據(jù)塊的標(biāo)識; 將待拷貝數(shù)據(jù)塊所存儲的所述差異數(shù)據(jù)拷貝至所述從邏輯單元,并將所述待拷貝數(shù)據(jù)塊的標(biāo)識移動至所述拷貝區(qū);所述待拷貝數(shù)據(jù)塊為所述緩存區(qū)中的第一個(gè)元素對應(yīng)的數(shù)據(jù)塊; 在所述拷貝區(qū)中的元素對應(yīng)的數(shù)據(jù)塊所存儲的數(shù)據(jù)已拷貝完成之后,將所述數(shù)據(jù)已拷貝完成的元素從所述拷貝區(qū)移動至所述已拷貝區(qū)。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述方法還包括: 當(dāng)所述主邏輯單元接收到主機(jī)輸入輸出1請求時(shí),判斷所述主機(jī)1請求的寫入地址與所述拷貝區(qū)中的元素對應(yīng)的后臺拷貝的數(shù)據(jù)塊的地址是否存在沖突; 若所述主機(jī)1請求的寫入地址與所述拷貝區(qū)中的元素對應(yīng)的后臺拷貝的數(shù)據(jù)塊的地址不存在沖突,則執(zhí)行所述主機(jī)1請求; 若所述主機(jī)1請求的寫入地址與所述拷貝區(qū)中的元素對應(yīng)的后臺拷貝的數(shù)據(jù)塊的地址存在沖突,則等待與所述主機(jī)1請求的寫入地址存在沖突的數(shù)據(jù)塊拷貝完成后,再執(zhí)行所述主機(jī)1請求。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述判斷所述主機(jī)1請求的寫入地址與所述拷貝區(qū)中的元素對應(yīng)的后臺拷貝的數(shù)據(jù)塊的地址是否存在沖突,包括: 檢測所述主機(jī)1請求的寫入地址對應(yīng)的數(shù)據(jù)塊的標(biāo)識是否存在于所述拷貝區(qū)中; 若檢測結(jié)果為所述主機(jī)1請求的寫入地址對應(yīng)的數(shù)據(jù)塊的標(biāo)識存在于所述拷貝區(qū)中,則獲取所述主機(jī)1請求的寫入地址對應(yīng)的數(shù)據(jù)塊的位圖,所述位圖用于指示所述主機(jī)1請求的寫入地址對應(yīng)的數(shù)據(jù)塊中的差異單元,所述差異單元為存儲有所述差異數(shù)據(jù)的最小數(shù)據(jù)單元; 檢測所述主機(jī)1請求的寫入地址與所述差異單元的地址是否存在沖突; 若檢測結(jié)果為所述主機(jī)1請求的寫入地址與所述差異單元的地址存在沖突,則確定所述主機(jī)1請求的寫入地址與所述拷貝區(qū)中的元素對應(yīng)的后臺拷貝的數(shù)據(jù)塊的地址存在沖突。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,所述將待拷貝數(shù)據(jù)塊所存儲的所述差異數(shù)據(jù)拷貝至所述從邏輯單元,包括: 獲取所述待拷貝數(shù)據(jù)塊的位圖; 根據(jù)所述待拷貝數(shù)據(jù)塊的位圖,將所述待拷貝數(shù)據(jù)塊的差異單元中的數(shù)據(jù)拷貝至所述從邏輯單元。
5.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述將待拷貝數(shù)據(jù)塊所存儲的所述差異數(shù)據(jù)拷貝至所述從邏輯單元之前,所述方法包括: 檢測所述待拷貝數(shù)據(jù)塊的地址與寫入鏈表中的寫入地址是否存在沖突,所述寫入鏈表中存儲有未完成的主機(jī)1請求的寫入地址; 若所述待拷貝數(shù)據(jù)塊的地址與所述寫入鏈表中的寫入地址存在沖突,則等待所述寫入鏈表中,與所述待拷貝數(shù)據(jù)塊的地址沖突的寫入地址所對應(yīng)的主機(jī)1請求完成后,再執(zhí)行將所述待拷貝數(shù)據(jù)塊所存儲的所述差異數(shù)據(jù)拷貝至所述從邏輯單元的步驟。
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,若所述主機(jī)1請求的寫入地址與所述拷貝區(qū)中的元素對應(yīng)的后臺拷貝的數(shù)據(jù)塊的地址不存在沖突,所述方法還包括: 檢測所述主機(jī)1請求的寫入地址與所述緩存區(qū)中的元素對應(yīng)的數(shù)據(jù)塊的地址是否存在沖突; 若所述主機(jī)1請求的寫入地址與所述緩存區(qū)中的元素對應(yīng)的數(shù)據(jù)塊的地址存在地址沖突,則將所述主機(jī)1請求的寫入地址添加入所述寫入鏈表。
7.根據(jù)權(quán)利要求6所述的方法,其特征在于,所述檢測所述主機(jī)1請求的寫入地址與所述緩存區(qū)中的元素對應(yīng)的數(shù)據(jù)塊的地址是否存在沖突,包括: 檢測所述主機(jī)1請求的寫入地址對應(yīng)的數(shù)據(jù)塊的標(biāo)識是否存在于所述緩存區(qū)中; 若檢測結(jié)果為所述主機(jī)1請求的寫入地址對應(yīng)的數(shù)據(jù)塊的標(biāo)識存在于所述緩存區(qū)中,則獲取所述主機(jī)1請求的寫入地址對應(yīng)的數(shù)據(jù)塊的位圖,所述位圖用于指示所述主機(jī)1請求的寫入地址對應(yīng)的數(shù)據(jù)塊中的差異單元,所述差異單元為存儲有所述差異數(shù)據(jù)的最小數(shù)據(jù)單元; 檢測所述主機(jī)1請求的寫入地址與所述差異單元的地址是否存在沖突; 若檢測結(jié)果為所述主機(jī)1請求的寫入地址與所述差異單元的地址存在沖突,則確定所述主機(jī)1請求的寫入地址與所述緩存區(qū)中的元素對應(yīng)的后臺拷貝的數(shù)據(jù)塊的地址存在沖突。
8.根據(jù)權(quán)利要求5至7任一所述的方法,其特征在于,所述方法還包括: 若所述主機(jī)1請求的寫入地址對應(yīng)的數(shù)據(jù)塊的標(biāo)識尚未被添加入所述拷貝隊(duì)列,則檢測所述主機(jī)1請求的寫入地址對應(yīng)的數(shù)據(jù)塊中是否存儲有所述差異數(shù)據(jù); 若所述主機(jī)1請求的寫入地址對應(yīng)的數(shù)據(jù)塊中存儲有所述差異數(shù)據(jù),則將所述主機(jī)1請求的寫入地址添加入所述寫入鏈表,立即執(zhí)行所述主機(jī)1請求。
9.根據(jù)權(quán)利要求2至7任一所述的方法,其特征在于,所述方法還包括: 若所述主機(jī)1請求的寫入地址為所述已拷貝區(qū)中的元素對應(yīng)的數(shù)據(jù)塊的地址,則立刻執(zhí)行所述主機(jī)1請求。
10.根據(jù)權(quán)利要求1至7任一所述的方法,其特征在于,所述方法還包括: 在獲取差異數(shù)據(jù)對應(yīng)在主邏輯單元中的數(shù)據(jù)塊的標(biāo)識時(shí),若返回的數(shù)據(jù)塊的標(biāo)識數(shù)目為0,則確定所述主邏輯單元與所述從邏輯單元之間的差異數(shù)據(jù)對應(yīng)在主邏輯單元中的數(shù)據(jù)塊的標(biāo)識已經(jīng)獲取完成。
11.根據(jù)權(quán)利要求1至7任一所述的方法,其特征在于,所述方法還包括: 檢測所述已拷貝區(qū)中的元素的個(gè)數(shù)是否達(dá)到預(yù)定閾值; 若所述已拷貝區(qū)中的元素的個(gè)數(shù)達(dá)到所述預(yù)定閾值,則將所述已拷貝區(qū)中的元素從差異信息中刪除; 其中,所述差異信息包含于元數(shù)據(jù)中,且包含所述差異數(shù)據(jù)所在的各個(gè)數(shù)據(jù)塊的標(biāo)識;所述元數(shù)據(jù)用于描述所述主邏輯單元中存儲的用戶數(shù)據(jù)。
12.—種數(shù)據(jù)拷貝裝置,其特征在于,所述裝置包括: 標(biāo)識獲取模塊,用于獲取差異數(shù)據(jù)對應(yīng)在主邏輯單元中的至少一個(gè)數(shù)據(jù)塊的標(biāo)識,所述差異數(shù)據(jù)為所述主邏輯單元與從邏輯單元之間存在差異的數(shù)據(jù),所述從邏輯單元為所述主邏輯單元的備份; 標(biāo)識添加模塊,用于將所述至少一個(gè)數(shù)據(jù)塊的標(biāo)識依次添加至拷貝隊(duì)列中的緩存區(qū)的末尾;所述拷貝隊(duì)列包括已拷貝區(qū)、拷貝區(qū)和緩存區(qū);所述已拷貝區(qū)中的元素為已經(jīng)完成拷貝的數(shù)據(jù)塊的標(biāo)識,所述拷貝區(qū)中的元素為正在進(jìn)行拷貝的數(shù)據(jù)塊的標(biāo)識,所述緩存區(qū)中的元素為尚未開始拷貝的數(shù)據(jù)塊的標(biāo)識; 拷貝模塊,用于將待拷貝數(shù)據(jù)塊所存儲的所述差異數(shù)據(jù)拷貝至所述從邏輯單元;所述待拷貝數(shù)據(jù)塊為所述緩存區(qū)中的第一個(gè)元素對應(yīng)的數(shù)據(jù)塊; 第一移動模塊,用于將所述待拷貝數(shù)據(jù)塊的標(biāo)識移動至所述拷貝區(qū); 第二移動模塊,用于在所述拷貝區(qū)中的元素對應(yīng)的數(shù)據(jù)塊所存儲的數(shù)據(jù)已拷貝完成后,將所述數(shù)據(jù)已拷貝完成的元素從所述拷貝區(qū)移動至所述已拷貝區(qū)。
13.根據(jù)權(quán)利要求12所述的裝置,其特征在于,所述裝置還包括: 判斷模塊,用于當(dāng)所述主邏輯單元接收到主機(jī)1請求時(shí),判斷所述主機(jī)1請求的寫入地址與所述拷貝區(qū)中的元素對應(yīng)的后臺拷貝的數(shù)據(jù)塊的地址是否存在沖突;第一執(zhí)行模塊,用于若所述判斷模塊的判斷結(jié)果為所述主機(jī)1請求的寫入地址與所述拷貝區(qū)中的元素對應(yīng)的后臺拷貝的數(shù)據(jù)塊的地址不存在沖突,則執(zhí)行所述主機(jī)1請求;第二執(zhí)行模塊,用于若所述判斷模塊的判斷結(jié)果為所述主機(jī)1請求的寫入地址與所述拷貝區(qū)中的元素對應(yīng)的后臺拷貝的數(shù)據(jù)塊的地址存在沖突,則等待與所述主機(jī)1請求的寫入地址存在沖突的數(shù)據(jù)塊拷貝完成后,再執(zhí)行所述主機(jī)1請求。
14.根據(jù)權(quán)利要求13所述的裝置,其特征在于,所述判斷模塊,包括: 第一檢測單元,用于檢測所述主機(jī)1請求的寫入地址對應(yīng)的數(shù)據(jù)塊的標(biāo)識是否存在于所述拷貝區(qū)中; 第一位圖獲取單元,用于若所述第一檢測單元的檢測結(jié)果為所述主機(jī)1請求的寫入地址對應(yīng)的數(shù)據(jù)塊的標(biāo)識存在于所述拷貝區(qū)中,則獲取所述主機(jī)1請求的寫入地址對應(yīng)的數(shù)據(jù)塊的位圖,所述位圖用于指示所述主機(jī)1請求的寫入地址對應(yīng)的數(shù)據(jù)塊中的差異單元,所述差異單元為存儲有所述差異數(shù)據(jù)的最小數(shù)據(jù)單元; 第二檢測單元,用于檢測所述主機(jī)1請求的寫入地址與所述差異單元的地址是否存在沖突; 第一確定單元,用于若所述第二檢測單元的檢測結(jié)果為所述主機(jī)1請求的寫入地址與所述差異單元的地址存在沖突,則確定所述主機(jī)1請求的寫入地址與所述拷貝區(qū)中的元素對應(yīng)的后臺拷貝的數(shù)據(jù)塊的地址存在沖突。
15.根據(jù)權(quán)利要求14所述的裝置,其特征在于,所述拷貝模塊,包括: 第二位圖獲取單元,用于獲取所述待拷貝數(shù)據(jù)塊的位圖; 拷貝單元,用于根據(jù)所述待拷貝數(shù)據(jù)塊的位圖,將所述待拷貝數(shù)據(jù)塊的差異單元中的數(shù)據(jù)拷貝至所述從邏輯單元。
16.根據(jù)權(quán)利要求13所述的裝置,其特征在于,所述裝置包括: 第一檢測模塊,用于在所述拷貝模塊將待拷貝數(shù)據(jù)塊所存儲的所述差異數(shù)據(jù)拷貝至所述從邏輯單元之前,檢測所述待拷貝數(shù)據(jù)塊的地址與寫入鏈表中的寫入地址是否存在沖突,所述寫入鏈表中存儲有未完成的主機(jī)1請求的寫入地址; 所述拷貝模塊,用于若所述待拷貝數(shù)據(jù)塊的地址與所述寫入鏈表中的寫入地址存在沖突,則等待所述寫入鏈表中,與所述待拷貝數(shù)據(jù)塊的地址沖突的寫入地址所對應(yīng)的主機(jī)1請求完成后,再執(zhí)行將所述待拷貝數(shù)據(jù)塊所述存儲的所述差異數(shù)據(jù)拷貝至所述從邏輯單元的步驟。
17.根據(jù)權(quán)利要求16所述的裝置,其特征在于,所述裝置還包括: 第二檢測模塊,用于若所述判斷模塊的判斷結(jié)果為所述主機(jī)1請求的寫入地址與所述拷貝區(qū)中的元素對應(yīng)的后臺拷貝的數(shù)據(jù)塊的地址不存在沖突,則檢測所述主機(jī)1請求的寫入地址與所述緩存區(qū)中的元素對應(yīng)的數(shù)據(jù)塊的地址是否存在沖突; 第一地址添加模塊,用于若所述主機(jī)1請求的寫入地址與所述緩存區(qū)中的元素對應(yīng)的數(shù)據(jù)塊的地址存在地址沖突,則將所述主機(jī)1請求的寫入地址添加入所述寫入鏈表。
18.根據(jù)權(quán)利要求17所述的裝置,其特征在于,所述第二檢測模塊,包括: 第三檢測單元,用于檢測所述主機(jī)1請求的寫入地址對應(yīng)的數(shù)據(jù)塊的標(biāo)識是否存在于所述緩存區(qū)中; 第三位圖獲取單元,用于若所述第三檢測單元的檢測結(jié)果為所述主機(jī)1請求的寫入地址對應(yīng)的數(shù)據(jù)塊的標(biāo)識存在于所述緩存區(qū)中,則獲取所述主機(jī)1請求的寫入地址對應(yīng)的數(shù)據(jù)塊的位圖,所述位圖用于指示所述主機(jī)1請求的寫入地址對應(yīng)的數(shù)據(jù)塊中的差異單元,所述差異單元為存儲有所述差異數(shù)據(jù)的最小數(shù)據(jù)單元; 第四檢測單元,用于檢測所述主機(jī)1請求的寫入地址與所述差異單元的地址是否存在沖突; 第二確定單元,用于若所述第四檢測單元的檢測結(jié)果為所述主機(jī)1請求的寫入地址與所述差異單元的地址存在沖突,則確定所述主機(jī)1請求的寫入地址與所述緩存區(qū)中的元素對應(yīng)的后臺拷貝的數(shù)據(jù)塊的地址存在沖突。
19.根據(jù)權(quán)利要求16或18任一所述的裝置,其特征在于,所述裝置還包括: 第三檢測模塊,用于若所述主機(jī)1請求的寫入地址對應(yīng)的數(shù)據(jù)塊的標(biāo)識尚未被添加入所述拷貝隊(duì)列,則檢測所述主機(jī)1請求的寫入地址對應(yīng)的數(shù)據(jù)塊中是否存儲有所述差異數(shù)據(jù); 第二地址添加模塊,用于若所述主機(jī)1請求的寫入地址對應(yīng)的數(shù)據(jù)塊中存儲有所述差異數(shù)據(jù),則將所述主機(jī)1請求的寫入地址添加入所述寫入鏈表; 第三執(zhí)行模塊,用于立即執(zhí)行所述主機(jī)1請求。
20.根據(jù)權(quán)利要求13或18所述的裝置,其特征在于,所述裝置還包括: 第四執(zhí)行模塊,用于若所述主機(jī)1請求的寫入地址為所述已拷貝區(qū)中的元素對應(yīng)的數(shù)據(jù)塊的地址,則立刻執(zhí)行所述主機(jī)1請求。
21.根據(jù)權(quán)利要求12至18任一所述的裝置,其特征在于,所述裝置還包括: 確定模塊,用于在所述標(biāo)識獲取模塊獲取差異數(shù)據(jù)對應(yīng)在主邏輯單元中的至少一個(gè)數(shù)據(jù)塊的標(biāo)識時(shí),若返回的數(shù)據(jù)塊的標(biāo)識數(shù)目為0,則確定所述主邏輯單元與所述從邏輯單元之間的差異數(shù)據(jù)對應(yīng)在主邏輯單元中的數(shù)據(jù)塊的標(biāo)識已經(jīng)獲取完成。
22.根據(jù)權(quán)利要求12至18任一所述的裝置,其特征在于,所述裝置還包括: 第四檢測模塊,用于檢測所述已拷貝區(qū)中的元素的個(gè)數(shù)是否達(dá)到預(yù)定閾值; 刪除模塊,用于若所述第四檢測模塊的檢測結(jié)果為所述已拷貝區(qū)中的元素的個(gè)數(shù)達(dá)到所述預(yù)定閾值,則將所述已拷貝區(qū)中的元素從差異信息中刪除; 其中,所述差異信息包含于元數(shù)據(jù)中,且包含所述差異數(shù)據(jù)所在的各個(gè)數(shù)據(jù)塊的標(biāo)識;所述元數(shù)據(jù)用于描述所述主邏輯單元中存儲的用戶數(shù)據(jù)。
【文檔編號】G06F12/02GK104360953SQ201410548580
【公開日】2015年2月18日 申請日期:2014年10月16日 優(yōu)先權(quán)日:2014年10月16日
【發(fā)明者】嚴(yán)俊 申請人:華為技術(shù)有限公司