一種陣列控制器、陣列和數據處理方法
【專利摘要】本發(fā)明涉及數據處理【技術領域】,尤其涉及陣列控制器、陣列和數據處理方法,用以解決現有采用胖邏輯單元號thick?LUN技術的陣列,若采用數據完整性保證區(qū)域DIF技術,為避免用戶主機訪問未寫入的數據區(qū)域時發(fā)生錯誤,通過額外的數據寫入操作清除殘留數據,造成額外的IO寫入,時間開銷大的問題。本發(fā)明實施例提供的陣列控制器,包括:接口,用于接收用戶主機發(fā)送的讀取數據的命令;處理器,用于從thick?LUN中讀取數據;若邏輯區(qū)塊地址LBA校驗錯誤,且陣列控制器保存的該thick?LUN的第二標識,沒有記錄該thick?LUN上,讀取的數據對應的信息字段中,則確定讀取的數據為殘留數據,從而避免了額外的數據寫入。
【專利說明】—種陣列控制器、陣列和數據處理方法
【技術領域】
[0001]本發(fā)明涉及數據處理【技術領域】,尤其涉及一種陣列控制器、陣列和數據處理方法。
【背景技術】
[0002]數據完整性保證區(qū)域(Data Integrity Field,DIF),是目前常用的數據完整性保護方法。其驗證數據本身是否正確,以及數據否被正確引用。
[0003]對于數據本身是否正確,通常在對數據進行校驗計算后,與之前存放的校驗值進比較,當兩者一致時,表明數據沒有被破壞;否則表明數據已被破壞。
[0004]對于數據是否被正確引用,通常對數據的偏移進行記錄。當再次讀取數據時,傳入讀取的數據偏移,如果該偏移和記錄的偏移一致,則表明數據被正常讀??;否則表明數據讀取位置出現偏差或者偏移記錄被破壞。
[0005]目前,陣列中常用的DIF技術一般符合TlO標準。TlO標準規(guī)定,在每一個512字節(jié)的扇區(qū)(稱為“數據區(qū)域”)后面額外使用8個字節(jié)(稱為“DIF區(qū)域”),如圖1所示。其中,前兩個字節(jié)為校驗和(Guard),然后是2字節(jié)的應用標簽(Applicat1n Tag或MetaTag),通常保存用戶自定義的和應用相關的信息;最后是4字節(jié)的Ref標簽(Ref Tag):通常是邏輯區(qū)塊地址(Logical Block Address, LBA)。
[0006]thick LUN,一種常用的邏輯單元號(Logical Unit Number, LUN)實現技術,通常由多個很大的塊組成一個用戶可見的連續(xù)LUN空間,其中每一個LUN空間包括上述的數據區(qū)域和對應的DIF區(qū)域,在創(chuàng)建LUN后即完成同樣大小的空間分配。
[0007]對于采用了 thick LUN的陣列,若采用DIF進行數據完整性保護,為了避免用戶主機在訪問未寫入的數據區(qū)域時,用戶主機報1錯誤,需要額外進行一次數據寫入的操作,用戶主機必須要等待該次數據寫入的操作完成后再能使用陣列,造成陣列訪問速度慢。并且,該額外的數據寫入的操作會增加硬盤的1數目,從而造成陣列性能降低。
【發(fā)明內容】
[0008]本發(fā)明實施例提供一種陣列控制器、陣列和數據處理方法,用以解決現有采用thick LUN技術的陣列,若采用DIF進行數據完整性保護,為了避免用戶主機在訪問未寫入的數據區(qū)域時發(fā)生錯誤,通過額外的數據寫入操作清除殘留數據,造成額外的1寫入,時間開銷大的問題。
[0009]第一方面,本發(fā)明實施例提供一種陣列控制器,包括:
[0010]接口,用于接收用戶主機發(fā)送的讀取數據的第一命令,所述第一命令攜帶thickLUN的第一標識和第一偏移地址信息;
[0011]處理器,用于根據所述第一標識,確定所述用戶主機待訪問的thick LUN ;從所述確定出的thick LUN中,讀取所述第一命令待讀取的數據;若所述待讀取的數據對應的第一信息字段中記錄的第二偏移地址信息,與所述第一命令中的所述第一偏移地址信息不一致,且所述陣列控制器保存的所述用戶主機要訪問的所述thick LUN的第二標識,沒有記錄在所述待讀取的數據對應的第二信息字段中,則確定所述待讀取的數據為殘留數據,通過所述接口,向所述用戶主機返回零數據,其中,所述第一信息字段為所述thick LUN中的用于記錄數據的所述第二偏移地址信息的字段;所述第二信息字段為所述thick LUN中的用于記錄所述thick LUN的第二標識的字段。
[0012]結合第一方面,在第一種可能的實現方式中,所述處理器還用于:
[0013]若所述待讀取的數據對應的第一信息字段中記錄的所述第二偏移地址信息,與所述第一命令中的所述第一偏移地址信息不一致,但所述陣列控制器保存的所述thick LUN的所述第二標識,記錄在所述待讀取的數據對應的所述第二信息字段中,則
[0014]確定所述待讀取的數據發(fā)生指向錯誤,通過所述接口,向所述用戶主機返回地址校驗錯誤信息。
[0015]結合第一方面,在第二種可能的實現方式中,所述處理器還用于:
[0016]若所述待讀取的數據對應的第一信息字段中記錄的所述第二偏移地址信息,與所述第一命令中的所述第一偏移地址信息一致,且所述陣列控制器保存的所述thick LUN的所述第二標識,記錄在所述待讀取的數據對應的第二信息字段中,則
[0017]確定通過所述接口,向所述用戶主機返回所述待讀取的數據。
[0018]結合第一方面,在第三種可能的實現方式中,所述處理器還用于:
[0019]若所述待讀取的數據對應的第一信息字段中記錄的所述第二偏移地址信息,與所述第一命令中的所述第一偏移地址信息一致,但所述陣列控制器保存的所述thick LUN的所述第二標識,沒有記錄在所述待讀取的數據對應的所述第二信息字段中,則
[0020]確定通過所述接口,向所述用戶主機返回零數據。
[0021]結合第一方面、第一方面的第一種可能的實現方式、第一方面的第二種可能的實現方式、第一方面的第三種可能的實現方式,在第四種可能的實現方式中,
[0022]所述接口還用于:接收創(chuàng)建所述thick LUN的第二命令,所述第二命令中攜帶所述第一標識、以及要創(chuàng)建的所述thick LUN的容量信息;
[0023]所述處理器還用于:創(chuàng)建所述thick LUN,所述thick LUN的容量為所述容量信息指示的容量,保存所述thick LUN的所述第一標識,生成并保存所述thick LUN的第二標識。
[0024]結合第一方面的第四種可能的實現方式,在第五種可能的實現方式中,所述接口還用于:接收向所述thick LUN寫入數據的第三命令,所述第三命令中攜帶所述第一標識、待寫入數據和所述待寫入數據在所述thick LUN上的第三偏移地址信息;
[0025]所述陣列控制器在所述thick LUN上寫入所述待寫入數據,根據所述第三偏移地址信息,在所述待寫入數據對應的第一信息字段中,記錄所述待寫入數據的所述第二偏移地址信息,并將所述thick LUN的第二標識,記錄在所述第二信息字段中。
[0026]第二方面,本發(fā)明實施例提供一種陣列,包括:
[0027]硬盤,以及本發(fā)明第一方面及第一方面的各種可能的實現方式中的陣列控制器,其中所述thick LUN處于所述硬盤上。
[0028]第三方面,本發(fā)明實施例提供一種數據處理的方法,所述方法應用于陣列控制器中,包括:
[0029]所述陣列控制器接收用戶主機發(fā)送的讀取數據的第一命令,所述第一命令攜帶胖邏輯單元號thick LUN的第一標識和第一偏移地址信息;
[0030]所述陣列控制器根據所述第一標識,確定所述用戶主機待訪問的thick LUN ;
[0031]所述陣列控制器從所述確定出的thick LUN中,讀取所述第一命令待讀取的數據;
[0032]若所述待讀取的數據對應的第一信息字段中記錄的第二偏移地址信息,與所述第一命令中的所述第一偏移地址信息不一致,且所述陣列控制器保存的所述thick LUN的第二標識,沒有記錄在所述待讀取的數據對應的第二信息字段中,則所述陣列控制器確定所述待讀取的數據為殘留數據,向所述用戶主機返回零數據,其中,所述第一信息字段為所述thick LUN中的用于記錄數據的所述第二偏移地址信息的字段;所述第二信息字段為所述thick LUN中的用于記錄所述thick LUN的第二標識的字段。
[0033]結合第三方面,在第一種可能的實現方式中,所述方法還包括:
[0034]若所述待讀取的數據對應的第一信息字段中記錄的所述第二偏移地址信息,與所述第一命令中的所述第一偏移地址信息不一致,但所述陣列控制器保存的所述thick LUN的所述第二標識,記錄在所述待讀取的數據對應的所述第二信息字段中,則
[0035]所述陣列控制器確定所述待讀取的數據發(fā)生指向錯誤,向所述用戶主機返回地址校驗錯誤信息。
[0036]結合第三方面,在第二種可能的實現方式中,所述方法還包括:
[0037]若所述待讀取的數據對應的第一信息字段中記錄的所述第二偏移地址信息,與所述第一命令中的所述第一偏移地址信息一致,且所述陣列控制器保存的所述thick LUN的所述第二標識,記錄在所述待讀取的數據對應的第二信息字段中,則
[0038]所述陣列控制器向所述用戶主機返回所述待讀取的數據。
[0039]結合第三方面,在第三種可能的實現方式中,所述方法還包括:
[0040]若所述待讀取的數據對應的第一信息字段中記錄的所述第二偏移地址信息,與所述第一命令中的所述第一偏移地址信息一致,但所述陣列控制器保存的所述thick LUN的所述第二標識,沒有記錄在所述待讀取的數據對應的所述第二信息字段中,則
[0041 ] 所述陣列控制器向所述用戶主機返回零數據。
[0042]結合第三方面、第三方面的第一種可能的實現方式、第三方面的第二種可能的實現方式、第三方面的第三種可能的實現方式,在第四種可能的實現方式中,所述方法還包括:
[0043]所述陣列控制器接收創(chuàng)建所述thick LUN的第二命令,所述第二命令中攜帶所述第一標識、以及要創(chuàng)建的所述thick LUN的容量信息;
[0044]所述thick LUN陣列控制器創(chuàng)建所述thick LUN,所述thick LUN的容量為所述容量信息指示的容量,保存所述thick LUN的所述第一標識,生成并保存所述LUN的第二標識。
[0045]結合第三發(fā)明的第四種可能的實現方式,在第五種可能的實現方式中,在生成LUN并保存所述第二標識之后,還包括:
[0046]所述陣列控制器接收向所述thick LUN寫入數據的第三命令,所述第三命令中攜帶所述第一標識、待寫入數據和所述待寫入數據在所述thick LUN上的第三偏移地址信息;
[0047]所述陣列控制器在所述thick LUN上寫入所述待寫入數據,根據所述第三偏移地址信息,在所述待寫入數據對應的第一信息字段中,記錄所述待寫入數據的所述第二偏移地址信息,并將所述thick LUN的第二標識,記錄在所述第二信息字段中。
[0048]本發(fā)明實施例中,thick LUN除了具有一個與用戶主機交互時使用的第一標識之夕卜,還具有一個內部的第二標識,該標識由本發(fā)明實施例提供的陣列控制器保存,通過對該第二標識進行判斷,即可確定讀取的數據是之前的殘留數據,然后直接向用戶主機返回零數據。無需在創(chuàng)建thick LUN之后,以及在刪除thick LUN之后,在對應的數據空間寫入零數據,在對應的DIF區(qū)域寫入特殊的標志信息,避免了額外的1寫入,節(jié)省了時間開銷。
【專利附圖】
【附圖說明】
[0049]圖1為TlO標準規(guī)定的DIF區(qū)域的格式示意圖;
[0050]圖2為本發(fā)明實施例一的數據系統(tǒng)的結構示意圖;
[0051]圖3為本發(fā)明實施例一數據系統(tǒng)中的陣列控制器的結構示意圖;
[0052]圖4為本發(fā)明實施例二的殘留數據判斷的流程圖;
[0053]圖5為本發(fā)明實施例三的創(chuàng)建thick LUN和向thick LUN寫入數據的流程圖;
[0054]圖6為本發(fā)明實施例四的流程圖;
[0055]圖7為本發(fā)明實施例五的流程圖。
【具體實施方式】
[0056]本發(fā)明實施例提供一種數據處理的方法、陣列控制器和陣列,用以解決現有采用thick LUN技術的陣列,若采用DIF進行數據完整性保護,為了避免用戶主機在訪問未寫入的數據區(qū)域時發(fā)生錯誤,通過額外的數據寫入操作清除殘留數據,造成額外的1寫入,時間開銷大的問題。
[0057]本發(fā)明實施例中,thick LUN除了具有一個與用戶主機交互時使用的第一標識之夕卜,還具有一個內部的第二標識,該標識由本發(fā)明實施例提供的陣列控制器保存,通過對該第二標識進行判斷,即可確定讀取的數據是之前的殘留數據,然后直接向用戶主機返回零數據。無需在創(chuàng)建thick LUN之后,以及在刪除thick LUN之后,在對應的數據空間寫入零數據,在對應的DIF區(qū)域寫入特殊的標志信息,避免了額外的1寫入,節(jié)省了時間開銷。
[0058]下面,結合附圖對本發(fā)明各實施例進行詳細介紹。
[0059]實施例一
[0060]實施例一介紹了本發(fā)明實施例提供的數據系統(tǒng)。如圖2所示,該數據系統(tǒng)包括:
[0061]一個或多個用戶主機201,與一個或多個用戶主機201連接的陣列202 ;其中,陣列202中又包括與各用戶主機201連接的陣列控制器2021和與陣列控制器2021連接的一個或多個硬盤2022。其中,陣列控制器2021可作為陣列控制器,執(zhí)行圖2所示的處理。本發(fā)明實施例中thick LUN處于硬盤2022上。
[0062]為了示意簡單,圖2中僅示出了一個用戶主機201,但實際應用中,可存在多個用戶主機201,它們分別與陣列202連接。
[0063]圖2中,用戶主機201是業(yè)務發(fā)起者,其可執(zhí)行的操作包括但不限于:
[0064]向陣列202發(fā)送命令,請求創(chuàng)建thick LUN ;
[0065]向陣列202發(fā)送命令,請求刪除thick LUN ;
[0066]向陣列202發(fā)送命令,請求讀取thick LUN上的數據;
[0067]向陣列202發(fā)送命令,請求將數據寫入thick LUN。
[0068]陣列202中,陣列控制器2021為主要的業(yè)務執(zhí)行者,其可執(zhí)行的操作包括但不限于:
[0069]在收到用戶主機201發(fā)送的創(chuàng)建thick LUN的命令時,建立thick LUN的LBA到硬盤2022的映射關系;
[0070]在收到用戶主機201發(fā)送的刪除thick LUN的命令時,將thick LUN在硬盤2022上的空間回收,用于后續(xù)thick LUN的使用;
[0071]在收到用戶主機201發(fā)送的讀取thick LUN上的數據的命令時,根據thick LUN的LBA到硬盤2022的映射關系,從硬盤2022上讀取數據;
[0072]在收到用戶主機201發(fā)送的將數據寫入thick LUN的命令后,根據thick LUN的LBA到硬盤2022的映射關系,將數據寫入硬盤2022。
[0073]硬盤2022,主要用于執(zhí)行陣列控制器2021的讀寫請求,并實際存放數據。這里,硬盤2022支持DIF數據完整性保護,可選地,扇區(qū)規(guī)格為520字節(jié)。本發(fā)明實施例中,thickLUN處于硬盤2022上。
[0074]如圖3所示,實施例二中,陣列控制器2021可包括:
[0075]接口 2021a,用于接收用戶主機發(fā)送的讀取數據的第一命令,第一命令攜帶thickLUN的第一標識和第一偏移地址信息;
[0076]處理器2021b,用于根據第一標識,確定用戶主機待訪問的thick LUN ;從確定出的thick LUN中,讀取第一命令待讀取的數據;若待讀取的數據對應的第一信息字段中記錄的第二偏移地址信息,與第一命令中的第一偏移地址信息不一致,且陣列控制器保存的用戶主機要訪問的thick LUN的第二標識,沒有記錄在待讀取的數據對應的第二信息字段中,則確定待讀取的數據為殘留數據,通過接口 2021a,向用戶主機返回零數據,其中,第一信息字段為thick LUN中的用于記錄數據的第二偏移地址信息的字段;第二信息字段為thick LUN中的用于記錄thick LUN的第二標識的字段。
[0077]其中,在圖3中,總線架構可以包括任意數量的互聯(lián)的總線和橋,具體由處理器2021b代表的一個或多個處理器和接口 2021a代表的接口裝置的各種電路鏈接在一起。總線架構還可以將諸如外圍設備、穩(wěn)壓器和功率管理電路等之類的各種其他電路鏈接在一起,這些都是本領域所公知的,因此,本文不再對其進行進一步描述。
[0078]通常,對于采用thick LUN技術的陣列,若采用DIF進行數據完整性保護,一種情況是,在刪除LUN后再次使用對應的數據空間創(chuàng)建LUN時,該數據空間上還保留有原有數據的LBA信息,如果此時用戶主機訪問該數據空間,保留的原有數據的LBA和訪問LBA通常不匹配,會向用戶主機返回LBA校驗失敗的輸入輸出(Input Output, 10)錯誤。另一種情況是,在創(chuàng)建LUN后,未進行數據寫入前,用戶主機訪問對應的數據空間,由于在創(chuàng)建LUN之后,對應的數據空間上會存在一些隨機數據,此時要向用戶主機返回這些隨機數據,而用戶主機并不知道收到的數據自身存在錯誤,還是由于創(chuàng)建LUN后沒有寫入造成,也會引起用戶主機處理的錯誤。
[0079]以上兩種情況都是因為在創(chuàng)建了 LUN后,未發(fā)生數據寫入時用戶主機就直接訪問對應的數據空間而發(fā)生的。針對上述可能發(fā)生的兩種情況,目前無論是在創(chuàng)建LUN空間之后,還是在刪除LUN空間之后,都會在對應的數據空間寫入零數據,在對應的DIF區(qū)域寫入特殊的標志信息,當用戶主機訪問對應的數據區(qū)域時,根據DIF區(qū)域中特殊的標記信息即可判斷對應的數據區(qū)域是否發(fā)生過數據寫入,若確定未發(fā)生過數據寫入,則不進行LBA校驗,也就不會向用戶主機返回1錯誤。
[0080]上述方法的一個缺點是為了保證在訪問未寫入的數據區(qū)域時,不向用戶主機報1錯誤,需要額外進行一次數據寫入的操作,用戶主機必須要等待該次數據寫入的操作完成后再能使用陣列,造成陣列訪問速度慢。并且,該額外的數據寫入的操作會增加硬盤的1數目,從而造成陣列性能降低。
[0081]有鑒于此,本發(fā)明實施例提供的陣列控制器2021可執(zhí)行下面實施例二?實施例五的操作,進行相應的數據處理,以解決上述陣列訪問速度慢、陣列性能低的問題。具體的,下面實施例二?實施例五中的操作都是由陣列控制器2021的處理器執(zhí)行的。
[0082]實施例二、殘留數據的判斷
[0083]實施例二的方法可應用于陣列控制器2021中。圖4為本發(fā)明實施例二的方法流程圖。如圖4所示,該方法包括:
[0084]S401:陣列控制器接收用戶主機發(fā)送的讀取數據的第一命令,該第一命令攜帶thick LUN的第一標識和第一偏移地址信息,根據該第一標識,陣列控制器確定該用戶主機待訪問的thick LUN ;
[0085]S402:陣列控制器從確定出的thick LUN中,讀取第一命令待讀取的數據;
[0086]S403:陣列控制器將待讀取的數據對應的第一信息字段中記錄的第二偏移地址信息,與第一命令中的第一偏移地址信息進行比較,比如:對待讀取的數據進行LBA校驗;
[0087]S404:陣列控制器判斷比較結果,若不一致,則執(zhí)行步驟S405 ;
[0088]S405:陣列控制器判斷保存的該thick LUN的第二標識是否記錄在該待讀取的數據對應的第二信息字段中;若否,則執(zhí)行步驟S406 ;
[0089]S406:陣列控制器確定讀取的數據為殘留數據,向用戶主機返回零數據。
[0090]上述步驟中,第一信息字段為該thick LUN中的用于記錄數據的該第二偏移地址信息的字段,比如:該字段位于圖1所示的DIF區(qū)域的“參考標簽”中;第二信息字段為該thick LUN中的用于記錄該thick LUN的第二標識的字段,比如:該字段位于圖1所示的DIF區(qū)域的“應用標簽”中。
[0091]步驟S403中,第一偏移地址信息與第二偏移地址信息的比較,可通過如下方式實現:
[0092]用戶主機向陣列控制器發(fā)送讀取數據的第一命令時,攜帶待讀取的數據在硬盤上的偏移地址,即:第一偏移地址信息,以及待讀取數據的容量信息。
[0093]陣列控制器按照第一命令中的第一偏移地址信息,以及待讀取數據的容量信息,到確定的thick LUN上讀取數據。比如,從該第一偏移地址信息指示的偏移地址開始讀取數據,讀取數據的總容量為第一命令中攜帶的待讀取數據的容量信息指示的容量,并讀取每一個512字節(jié)的數據對應的DIF區(qū)域中的LBA,即第二偏移地址信息。
[0094]通常,第一命令中攜帶的第一偏移地址信息的長度大于4個字節(jié),而DIF區(qū)域中的LBA為4個字節(jié),因此,將第一偏移地址信息的后4個字節(jié)取出,與讀取的第一個512字節(jié)的數據對應的DIF區(qū)域中的LBA進行比較;將第一偏移地址信息的后4個字節(jié)加上512字節(jié),與讀取的第二個512字節(jié)的數據對應的DIF區(qū)域中的LBA進行比較,以此類推,驗證讀取的數據的每一個512字節(jié)的數據對應的DIF區(qū)域中的LBA,若都一致,則確定LBA校驗正確,否則,確定LBA檢驗錯誤。
[0095]可選地,用于記錄thick LUN第二標識的字段位于DIF區(qū)域的應用標簽中,比如圖1中的應用標簽中。
[0096]步驟S404中,若第一偏移地址信息與第二偏移地址信息不一致,則需要進一步判斷錯誤是由于數據本身被破壞,還是由于讀取了未經寫入的殘留數據而造成的。所以,步驟S405中,對指定thick LUN的標識進一步判斷,當陣列控制器保存的該thick LUN的第二標識沒有記錄在待讀取的數據對應的第二信息字段中,則表明數據是未發(fā)生寫入的殘留數據,該情況下,由于數據未寫入,所以向用戶主機返回零數據即可。
[0097]可選地,若步驟S405的判斷結果為是,即陣列控制器保存的該thick LUN的第二標識,記錄在了該待讀取的數據對應的第二信息字段中,則執(zhí)行步驟S407:向用戶主機返回地址校驗錯誤信息,比如:LBA錯誤信息。
[0098]可選地,若步驟S404的判斷結果為一致,則執(zhí)行步驟S408:判斷陣列控制器保存的該thick LUN的第二標識是否記錄在待讀取的數據對應的第二信息字段中,若是,則執(zhí)行步驟S409:向用戶主機返回讀取的數據,否則執(zhí)行步驟S406:確定讀取的數據為殘留數據,向用戶主機返回零數據。
[0099]當地址校驗正確,比如:LBA校驗正確時,通常都是讀取到了該thick LUN中寫入的有效數據;但為了避免殘留數據的偏移地址信息,這里還是執(zhí)行了步驟S408,進行了該thick LUN的第二標識的判斷。若陣列控制器2021保存的該thick LUN的標識記錄在待讀取的數據對應的第二信息字段中,則確定讀取的數據是該thick LUN寫入的有效數據;否則說明讀取數據時,傳入的讀取數據的數據偏移與殘留的偏移地址信息恰好相同,此時,讀取的數據也是未發(fā)生寫入的數據,所以向用戶主機返回零數據。
[0100]實施例二中,通過判斷陣列控制器的指定thick LUN的標識是否記錄在指定thickLUN上讀取的數據對應的第二信息字段中,確定讀取的數據是之前的殘留數據,然后直接向用戶主機返回零數據即可,無需通過在數據空間寫入零數據,在對應的DIF區(qū)域寫入標識信息來標識數據是未發(fā)生寫入的,減少了硬盤的1數目和時間開銷。
[0101]實施例三、創(chuàng)建thick LUN和向thick LUN寫入數據
[0102]在實施例二的基礎上,進一步地,在步驟S401之前,可選地,如圖5所示,還包括如下步驟:
[0103]S501:陣列控制器接收創(chuàng)建該thick LUN的第二命令,該第二命令中攜帶上述第一標識,以及要創(chuàng)建的該thick LUN的容量信息;
[0104]S502:陣列控制器創(chuàng)建該thick LUN,該thick LUN的容量為上述容量信息指示的容量,保存該thick LUN的上述第一標識,生成并保存該thick LUN的第二標識。
[0105]可選地,實施例三也可應用于圖2所示的數據系統(tǒng),此時,實施例三中的各步驟可由圖2中的陣列控制器2021執(zhí)行。
[0106]可選地,用戶主機主動發(fā)起創(chuàng)建該thick LUN的命令,陣列控制器收到該命令后,生成一個16位的唯一標識(Identificat1n, ID)-即該thick LUN的第二標識,并保存在自身的元數據中。一種簡單可行的生成thick LUN的第二標識的方法是:每次成功創(chuàng)建一個thick LUN,第二標識計數增加I??蛇x地,為了工程使用更方便,可預留前面幾個數作為特殊用途。16位計數可以表示65536次創(chuàng)建,去除少量預留值,也能有效記錄約6萬次創(chuàng)建,這在實際中已經滿足使用要求。當計數器沒有到達翻轉前,都返回成功,并給出該標識的計數值;當計數器已經達到翻轉條件則不再增加計數,而返回錯誤和無效的計數值。可選地,設定最大在計數為65530,設定65535為無效標識值。
[0107]可選地,在步驟S502之后,還包括:
[0108]S503:陣列控制器接收向該thick LUN寫入數據的第三命令,第三命令中攜帶上述第一標識、待寫入數據和待寫入數據在該thick LUN上的第三偏移地址信息;
[0109]S504:陣列控制器在該thick LUN中寫入待寫入的數據,根據上述第三偏移地址信息,在待寫入數據對應的第一信息字段中,記錄待寫入數據的第二偏移地址信息,并將該thick LUN的第二標識,記錄在上述第二信息字段中。
[0110]當該thick LUN進行數據寫入時,陣列控制器可按照現有方法生成DIF區(qū)域的校驗和、Ref標簽,可選地,陣列控制器將保存的該thick LUN的第二標識標識填在該thickLUN中的寫入的數據對應的DIF區(qū)域的應用標簽中。
[0111]步驟S504中,根據上述第三偏移地址信息,在待寫入數據對應的第一信息字段中,記錄待寫入數據的第二偏移地址信息,可通過如下方式實現:
[0112]陣列控制器按照第三命令中的第三偏移地址信息,確定在該thick LUN上寫入數據的位置,并取該第三偏移地址信息的后4字節(jié),作為第二偏移地址信息,寫入第一個512字節(jié)數據對應的DIF區(qū)域;將第三偏移地址信息的后4個字節(jié)加上512字節(jié),作為第二偏移地址信息,寫入第二個512字節(jié)數據對應的DIF區(qū)域;以此類推。在寫入數據的每一個512字節(jié)對應的DIF區(qū)域中,均寫入第二偏移地址信息。
[0113]當實施例三應用于圖2所示的數據系統(tǒng)中時,DIF區(qū)域中的數據可由用戶主機201生成,也可由陣列控制器2021生成。
[0114]實施例三中,16位的thick LUN的第二標識,能夠表示6萬多個thick LUN的創(chuàng)建,能夠滿足絕大部分的應用場景。但為了保證該標識的唯一性,需要對標識溢出進行專門處理。當陣列控制器檢測到標識即將溢出時,比如:已經達到標識計數上限,則不再增加,返回溢出標志。對于溢出后的處理,直接采用現有的寫零方法來進行處理,即在創(chuàng)建LUN空間之后,或在刪除LUN空間之后,在對應的數據空間寫入零數據,在對應的DIF區(qū)域寫入特殊的標志信息。
[0115]目前,DIF技術的TlO標準中,沒有對應用標簽進行數據保護。當在本發(fā)明實施例中使用該應用標簽存放thick LUN的標識時,如果該部分數據被破壞,則會錯誤地返回用戶10。為了保護該部分數據的有效性。在向硬盤寫入數據時,將該部分數據的thick LUN的標識和校驗和進行一次異或,將異或運算后的校驗和寫入DIF區(qū)域;在訪問該thick LUN時,用讀取的DIF區(qū)域應用標簽中的thick LUN的標識對DIF區(qū)域的校驗和再進行一次異或運算,即恢復了原來的校驗和,再和讀取的數據的校驗和進行比較,比較時,數據本身、校驗和或者應用標簽中的thick LUN的標識任何一個發(fā)生錯誤,CRC校驗都無法通過,將返回數據校驗錯誤。
[0116]這樣就能及時發(fā)現數據被破壞的情況,并且保證thick LUN標識的正確性。在和外部對接T1標準時,可以將DIF區(qū)域的校驗和與應用標簽中的thick LUN標識再進行一次異或,即可恢復外部標準。
[0117]以上,對本發(fā)明實施例二殘留數據判斷的方法,以及本發(fā)明實施例三的創(chuàng)建thickLUN和向thick LUN寫入數據的方法進行了介紹。下面,通過實施例四,給出當實施例二應用于本發(fā)明圖2所示的數據系統(tǒng)時,從thick LUN上讀取數據的處理流程;通過實施例五,給出當實施例三應用于本地發(fā)明圖2所示的數據系統(tǒng)時,創(chuàng)建thick LUN和向thick LUN寫入數據的處理流程。
[0118]實施例四
[0119]如圖6所示,實施例四包括如下步驟:
[0120]S601:用戶主機發(fā)送數據讀取命令,命令中指定訪問的thick LUN和偏移地址;
[0121]S602:陣列控制器根據步驟S601中收到的命令,查找數據存放位置;
[0122]S603:陣列控制器向硬盤3022發(fā)送數據讀取命令;
[0123]S604:硬盤3022向陣列控制器返回讀取的數據;
[0124]S605:陣列控制器進行DIF數據校驗;
[0125]S606:陣列控制器判斷LBA是否正確;若正確,則執(zhí)行步驟S607 ;否則執(zhí)行步驟S610 ;
[0126]S607:陣列控制器判斷自身記錄的thick LUN的標識是否記錄在該thick LUN上、讀取的數據對應的DIF區(qū)域中的應用標簽中;若是,則執(zhí)行步驟S608,否則,執(zhí)行步驟S609 ;
[0127]S608:向用戶主機返回讀取的數據;
[0128]S609:向用戶主機返回零數據;
[0129]S610:陣列控制器判斷保存的該thick LUN的第二標識是否記錄在該thick LUN中、讀取的數據對應的DIF區(qū)域中的應用標簽中;若是,則執(zhí)行步驟S611,否則,執(zhí)行步驟S613 ;
[0130]S611:確定數據發(fā)生指向錯誤;
[0131]S612:向用戶主機返回LBA錯誤信息;
[0132]S613:確定讀取的數據為殘留數據;
[0133]S614:向用戶主機返回零數據。
[0134]實施例五
[0135]如圖7所示,實施例五包括如下步驟:
[0136]S701:用戶主機向陣列控制器發(fā)送創(chuàng)建thick LUN的命令;
[0137]S702:陣列控制器生成保存thick LUN的第二標識;
[0138]S703:陣列控制器完成thick LUN的創(chuàng)建;
[0139]S704:陣列控制器向用戶主機返回thick LUN創(chuàng)建成功的消息;
[0140]S705:用戶主機向陣列控制器發(fā)送在thick LUN上寫入數據的命令;
[0141]S706:陣列控制器生成DIF數據,在DIF區(qū)域的應用標簽中寫入該thick LUN的第二標識;
[0142]S707:陣列控制器將帶有DIF區(qū)域的數據寫入硬盤3022 ;
[0143]S708:硬盤3022向陣列控制器返回寫入成功消息;
[0144]S709:陣列控制器向用戶主機返回數據寫入成功消息。
[0145]實施例五中,步驟S701?步驟S704創(chuàng)建thick LUN的過程中的用戶主機,與步驟S705?步驟S709向thick LUN寫入數據的用戶主機可以為同一用戶主機,也可為不同用戶主機。
[0146]綜上,本發(fā)明實施例提供的數據處理的方法、陣列控制器和陣列中,thick LUN除了具有一個與用戶主機交互時使用的第一標識之外,還具有一個內部的第二標識,該標識由本發(fā)明實施例提供的陣列控制器保存,通過對該第二標識進行判斷,即可確定讀取的數據是之前的殘留數據,然后直接向用戶主機返回零數據。無需在創(chuàng)建thick LUN之后,以及在刪除thick LUN之后,在對應的數據空間寫入零數據,在對應的DIF區(qū)域寫入特殊的標志信息,避免了額外的1寫入,節(jié)省了時間開銷。
[0147]本領域內的技術人員應明白,本發(fā)明的實施例可提供為方法、系統(tǒng)、或計算機程序產品。因此,本發(fā)明可采用完全硬件實施例、完全軟件實施例、或結合軟件和硬件方面的實施例的形式。而且,本發(fā)明可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(包括但不限于磁盤存儲器、CD-ROM、光學存儲器等)上實施的計算機程序產品的形式。
[0148]本發(fā)明是參照根據本發(fā)明實施例的方法、設備(系統(tǒng))、和計算機程序產品的流程圖和/或方框圖來描述的。應理解可由計算機程序命令實現流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結合??商峁┻@些計算機程序命令到通用計算機、專用計算機、嵌入式處理機或其他可編程數據處理設備的處理器以產生一個機器,使得通過計算機或其他可編程數據處理設備的處理器執(zhí)行的命令產生用于實現在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。
[0149]這些計算機程序命令也可存儲在能引導計算機或其他可編程數據處理設備以特定方式工作的計算機可讀存儲器中,使得存儲在該計算機可讀存儲器中的命令產生包括命令裝置的制造品,該命令裝置實現在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。
[0150]這些計算機程序命令也可裝載到計算機或其他可編程數據處理設備上,使得在計算機或其他可編程設備上執(zhí)行一系列操作步驟以產生計算機實現的處理,從而在計算機或其他可編程設備上執(zhí)行的命令提供用于實現在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。
[0151]盡管已描述了本發(fā)明的優(yōu)選實施例,但本領域內的技術人員一旦得知了基本創(chuàng)造性概念,則可對這些實施例作出另外的變更和修改。所以,所附權利要求意欲解釋為包括優(yōu)選實施例以及落入本發(fā)明范圍的所有變更和修改。
[0152]顯然,本領域的技術人員可以對本發(fā)明進行各種改動和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權利要求及其等同技術的范圍之內,則本發(fā)明也意圖包含這些改動和變型在內。
【權利要求】
1.一種陣列控制器,其特征在于,包括: 接口,用于接收用戶主機發(fā)送的讀取數據的第一命令,所述第一命令攜帶胖邏輯單元號thick LUN的第一標識和第一偏移地址信息; 處理器,用于根據所述第一標識,確定所述用戶主機待訪問的thick LUN ;從所述確定出的thick LUN中,讀取所述第一命令待讀取的數據;若所述待讀取的數據對應的第一信息字段中記錄的第二偏移地址信息,與所述第一命令中的所述第一偏移地址信息不一致,且所述陣列控制器保存的所述用戶主機要訪問的所述thick LUN的第二標識,沒有記錄在所述待讀取的數據對應的第二信息字段中,則確定所述待讀取的數據為殘留數據,通過所述接口,向所述用戶主機返回零數據,其中,所述第一信息字段為所述thick LUN中的用于記錄數據的所述第二偏移地址信息的字段;所述第二信息字段為所述thick LUN中的用于記錄所述thick LUN的第二標識的字段。
2.如權利要求1所述的陣列控制器,其特征在于,所述處理器還用于: 若所述待讀取的數據對應的第一信息字段中記錄的所述第二偏移地址信息,與所述第一命令中的所述第一偏移地址信息不一致,但所述陣列控制器保存的所述thick LUN的所述第二標識,記錄在所述待讀取的數據對應的所述第二信息字段中,則 確定所述待讀取的數據發(fā)生指向錯誤,通過所述接口,向所述用戶主機返回地址校驗錯誤信息。
3.如權利要求1所述的陣列控制器,其特征在于,所述處理器還用于: 若所述待讀取的數據對應的第一信息字段中記錄的所述第二偏移地址信息,與所述第一命令中的所述第一偏移地址信息一致,且所述陣列控制器保存的所述thick LUN的所述第二標識,記錄在所述待讀取的數據對應的第二信息字段中,則 確定通過所述接口,向所述用戶主機返回所述待讀取的數據。
4.如權利要求1所述的陣列控制器,其特征在于,所述處理器還用于: 若所述待讀取的數據對應的第一信息字段中記錄的所述第二偏移地址信息,與所述第一命令中的所述第一偏移地址信息一致,但所述陣列控制器保存的所述thick LUN的所述第二標識,沒有記錄在所述待讀取的數據對應的所述第二信息字段中,則 確定通過所述接口,向所述用戶主機返回零數據。
5.如權利要求1?4任一項所述的陣列控制器,其特征在于, 所述接口還用于:接收創(chuàng)建所述thick LUN的第二命令,所述第二命令中攜帶所述第一標識、以及要創(chuàng)建的所述thick LUN的容量信息; 所述處理器還用于:創(chuàng)建所述thick LUN,所述thick LUN的容量為所述容量信息指示的容量,保存所述thick LUN的所述第一標識,生成并保存所述thick LUN的第二標識。
6.如權利要求5所述的陣列控制器,其特征在于, 所述接口還用于:接收向所述thick LUN寫入數據的第三命令,所述第三命令中攜帶所述第一標識、待寫入數據和所述待寫入數據在所述thick LUN上的第三偏移地址信息; 所述陣列控制器在所述thick LUN上寫入所述待寫入數據,根據所述第三偏移地址信息,在所述待寫入數據對應的第一信息字段中,記錄所述待寫入數據的所述第二偏移地址信息,并將所述thick LUN的第二標識,記錄在所述第二信息字段中。
7.—種陣列,其特征在于,包括:硬盤和權利要求1?6任一項所述的陣列控制器,其中所述thick LUN處于所述硬盤上。
8.一種數據處理的方法,所述方法應用于陣列控制器中,其特征在于,所述方法包括: 所述陣列控制器接收用戶主機發(fā)送的讀取數據的第一命令,所述第一命令攜帶胖邏輯單兀號thick LUN的第一標識和第一偏移地址信息; 所述陣列控制器根據所述第一標識,確定所述用戶主機待訪問的thickLUN ; 所述陣列控制器從所述確定出的thick LUN中,讀取所述第一命令待讀取的數據;若所述待讀取的數據對應的第一信息字段中記錄的第二偏移地址信息,與所述第一命令中的所述第一偏移地址信息不一致,且所述陣列控制器保存的所述thick LUN的第二標識,沒有記錄在所述待讀取的數據對應的第二信息字段中,則所述陣列控制器確定所述待讀取的數據為殘留數據,向所述用戶主機返回零數據,其中,所述第一信息字段為所述thick LUN中的用于記錄數據的所述第二偏移地址信息的字段;所述第二信息字段為所述thick LUN中的用于記錄所述thick LUN的第二標識的字段。
9.如權利要求8所述的方法,其特征在于,還包括: 若所述待讀取的數據對應的第一信息字段中記錄的所述第二偏移地址信息,與所述第一命令中的所述第一偏移地址信息不一致,但所述陣列控制器保存的所述thick LUN的所述第二標識,記錄在所述待讀取的數據對應的所述第二信息字段中,則 所述陣列控制器確定所述待讀取的數據發(fā)生指向錯誤,向所述用戶主機返回地址校驗錯誤信息。
10.如權利要求8所述的方法,其特征在于,還包括: 若所述待讀取的數據對應的第一信息字段中記錄的所述第二偏移地址信息,與所述第一命令中的所述第一偏移地址信息一致,且所述陣列控制器保存的所述thick LUN的所述第二標識,記錄在所述待讀取的數據對應的第二信息字段中,則所述陣列控制器向所述用戶主機返回所述待讀取的數據。
11.如權利要求8所述的方法,其特征在于,還包括: 若所述待讀取的數據對應的第一信息字段中記錄的所述第二偏移地址信息,與所述第一命令中的所述第一偏移地址信息一致,但所述陣列控制器保存的所述thick LUN的所述第二標識,沒有記錄在所述待讀取的數據對應的所述第二信息字段中,則所述陣列控制器向所述用戶主機返回零數據。
12.如權利要求8?11任一項所述的方法,其特征在于,還包括: 所述陣列控制器接收創(chuàng)建所述thick LUN的第二命令,所述第二命令中攜帶所述第一標識、以及要創(chuàng)建的所述thick LUN的容量信息; 所述thick LUN陣列控制器創(chuàng)建所述thick LUN,所述thick LUN的容量為所述容量信息指示的容量,保存所述thick LUN的所述第一標識,生成并保存所述LUN的第二標識。
13.如權利要求12所述的方法,其特征在于,在生成LUN并保存所述第二標識之后,還包括: 所述陣列控制器接收向所述thick LUN寫入數據的第三命令,所述第三命令中攜帶所述第一標識、待寫入數據和所述待寫入數據在所述thick LUN上的第三偏移地址信息; 所述陣列控制器在所述thick LUN上寫入所述待寫入數據,根據所述第三偏移地址信息,在所述待寫入數據對應的第一信息字段中,記錄所述待寫入數據的所述第二偏移地址信息,并將所述thick LUN的第二標識,記錄在所述第二信息字段中。
【文檔編號】G06F21/64GK104182701SQ201410404926
【公開日】2014年12月3日 申請日期:2014年8月15日 優(yōu)先權日:2014年8月15日
【發(fā)明者】蒲貴友 申請人:華為技術有限公司