最新的毛片基地免费,国产国语一级毛片,免费国产成人高清在线电影,中天堂国产日韩欧美,中国国产aa一级毛片,国产va欧美va在线观看,成人不卡在线

數(shù)據(jù)塊的多副本存儲方法、存儲設(shè)備、數(shù)據(jù)讀取方法與流程

文檔序號:11176979閱讀:1801來源:國知局
數(shù)據(jù)塊的多副本存儲方法、存儲設(shè)備、數(shù)據(jù)讀取方法與流程

本申請涉及數(shù)據(jù)存儲技術(shù)領(lǐng)域,尤其涉及一種數(shù)據(jù)塊的多副本存儲方法、存儲設(shè)備、數(shù)據(jù)讀取方法。



背景技術(shù):

數(shù)據(jù)安全是計算機以及網(wǎng)絡(luò)等學(xué)科的重要研究課題之一,它不僅關(guān)系到個人、企業(yè),更重要的是它可能直接影響國家安全,因此對于重要的數(shù)據(jù),需要進行備份等操作,避免由于底層存儲異常導(dǎo)致數(shù)據(jù)丟失,例如避免由于raid(redundantarraysofindependentdisks,獨立磁盤冗余陣列)故障丟失數(shù)據(jù)。

針對上述場景需求,現(xiàn)有技術(shù)中有多種解決方案,例如,數(shù)據(jù)備份、數(shù)據(jù)鏡像、雙活、以及遠(yuǎn)程復(fù)制等。但是存在的問題是,目前重要數(shù)據(jù)和非重要數(shù)據(jù)一般位于同一個lun(logicalunitnumber,邏輯單元)上,很難進行分離,因此只能針對整個lun進行備份等操作,那么很多非重要數(shù)據(jù)也會被順帶一起備份等操作,就會導(dǎo)致存儲空間的嚴(yán)重浪費。

為解決上述備份等操作中存儲空間浪費的問題,現(xiàn)有技術(shù)中提出一種針對文件級別的數(shù)據(jù)的處理方案,即使用特定軟件針對部分重要的文件進行備份等操作。這種方法可以在很大程度上節(jié)省存儲空間,但是存在的問題是如果文件損壞,需要通過對應(yīng)的軟件來進行修復(fù),必須等待文件從備份數(shù)據(jù)中修復(fù)之后,才能恢復(fù)業(yè)務(wù),該修復(fù)過程需要一定的時間,對于業(yè)務(wù)的連續(xù)性造成一定的影響。



技術(shù)實現(xiàn)要素:

有鑒于此,本申請?zhí)峁┮环N數(shù)據(jù)塊的多副本存儲方法、存儲設(shè)備、數(shù)據(jù)讀取方法,在確保數(shù)據(jù)高可靠性的前提下,解決了現(xiàn)有技術(shù)中數(shù)據(jù)備份等操作導(dǎo)致的存儲資源浪費以及文件修復(fù)造成的業(yè)務(wù)連續(xù)性受損的技術(shù)問題。

具體地,本申請是通過如下技術(shù)方案實現(xiàn)的:

第一方面,本申請實施例提供了一種數(shù)據(jù)塊的多副本存儲方法,應(yīng)用于存儲設(shè)備,所述方法包括如下步驟:

接收用于對數(shù)據(jù)塊執(zhí)行寫操作的scsi寫命令;

從所述scsi寫命令中獲取指定字段,所述指定字段用于指示所述數(shù)據(jù)塊的副本的數(shù)量;

根據(jù)所述指定字段指示的數(shù)量寫入所述數(shù)據(jù)塊的副本。

可選地,所述根據(jù)所述指定字段指示的數(shù)量寫入所述數(shù)據(jù)塊的副本包括如下步驟:

確定所述數(shù)據(jù)塊寫入的raid;

從除所述raid之外的raid中選擇與所述數(shù)量相同的raid,將所述副本分別寫入至選擇的各個raid。

可選地,所述方法還包括如下步驟:

在所述數(shù)據(jù)塊對應(yīng)的元數(shù)據(jù)中設(shè)置副本標(biāo)識,并利用所述元數(shù)據(jù)記錄所述副本的位置。

可選地,所述指定字段指示的數(shù)據(jù)塊的副本數(shù)量是由與所述存儲設(shè)備連接的外部服務(wù)器依據(jù)用戶發(fā)送的拷貝命令設(shè)置,所述拷貝命令中包含數(shù)據(jù)塊的副本數(shù)量。

可選地,所述指定字段指示的數(shù)據(jù)塊的副本數(shù)量是由與所述存儲設(shè)備連接的外部服務(wù)器依據(jù)從本地數(shù)據(jù)輸入端口獲取的副本數(shù)量設(shè)置。

第二方面,本申請實施例提供了一種存儲設(shè)備,所述設(shè)備包括:

命令接收單元,用于接收用于對數(shù)據(jù)塊執(zhí)行寫操作的scsi寫命令;

字段獲取單元,用于從所述scsi寫命令中獲取指定字段,所述指定字段用于指示所述數(shù)據(jù)塊的副本的數(shù)量;

數(shù)據(jù)寫入單元,用于根據(jù)所述指定字段指示的數(shù)量寫入所述數(shù)據(jù)塊的副本。

可選地,所述數(shù)據(jù)寫入單元包括:

數(shù)據(jù)塊raid確定子單元,用于確定所述數(shù)據(jù)塊寫入的raid;

寫入子單元,用于從除所述raid之外的raid中選擇與所述數(shù)量相同的raid,并將所述副本分別寫入至選擇的各個raid。

可選地,所述存儲設(shè)備還包括元數(shù)據(jù)記錄標(biāo)識單元,所述元數(shù)據(jù)記錄標(biāo)識單元用于在所述數(shù)據(jù)塊對應(yīng)的元數(shù)據(jù)中設(shè)置副本標(biāo)識,并利用所述元數(shù)據(jù)記錄所述副本的位置。

第三方面,本申請實施例提供了一種數(shù)據(jù)讀取方法,所述方法包括如下步驟:

接收數(shù)據(jù)塊讀取指令;

根據(jù)所述數(shù)據(jù)塊讀取指令確定所要讀取的數(shù)據(jù)塊的位置;

從所述數(shù)據(jù)塊的位置開始讀取所述數(shù)據(jù)塊;若讀取失敗,則判斷所述數(shù)據(jù)塊是否具有副本標(biāo)識;其中,所述副本標(biāo)識用于指示所述數(shù)據(jù)塊具有副本;

若所述數(shù)據(jù)塊具有所述副本標(biāo)識,則查找所述數(shù)據(jù)塊的副本的位置,并根據(jù)所述副本的位置讀取所述數(shù)據(jù)塊的副本。

第四方面,本申請實施例提供了一種存儲設(shè)備,所述存儲設(shè)備包括:

指令接收單元,用于接收數(shù)據(jù)塊讀取指令;

位置確定單元,用于根據(jù)所述數(shù)據(jù)塊讀取指令確定所要讀取的數(shù)據(jù)塊的位置;

數(shù)據(jù)讀取單元,用于從所述數(shù)據(jù)塊的位置開始讀取所述數(shù)據(jù)塊;

若讀取失敗,所述數(shù)據(jù)讀取單元還用于則判斷所述數(shù)據(jù)塊是否具有副本標(biāo)識;若所述數(shù)據(jù)塊具有所述副本標(biāo)識,則查找所述數(shù)據(jù)塊的副本的位置,并根據(jù)所述副本的位置讀取所述數(shù)據(jù)塊的副本;其中,所述副本標(biāo)識用于指示所述數(shù)據(jù)塊具有副本。

由上述技術(shù)方案可知,本申請實施例在存儲數(shù)據(jù)時,存儲設(shè)備從接收的scsi寫命令中獲取指定字段,并根據(jù)指定字段指示的副本的數(shù)量寫入數(shù)據(jù)塊的副本。本申請能夠以數(shù)據(jù)塊為單位形成多副本,保證了重要數(shù)據(jù)的高可靠性,同時避免了對整個lun進行備份、鏡像等操作,極大地節(jié)省了存儲設(shè)備的存儲空間。

本發(fā)明申請實施例在讀取數(shù)據(jù)塊時,存儲設(shè)備根據(jù)數(shù)據(jù)塊讀取指令從數(shù)據(jù)塊的位置開始讀取數(shù)據(jù)塊。若讀取失敗,則判斷該數(shù)據(jù)塊是否具有副本,若該數(shù)據(jù)塊具有副本,則從副本的位置處讀取該數(shù)據(jù)塊的副本。本申請在數(shù)據(jù)塊讀取失敗時,能夠直接利用存儲設(shè)備自動檢測副本并讀取副本,整個數(shù)據(jù)讀取過程的最長時間是毫秒量級的,完全避免了現(xiàn)有技術(shù)中利用修復(fù)軟件修復(fù)文件等操作造成的業(yè)務(wù)連續(xù)性受損的缺陷,大大提高了副本讀取的流暢性,提高了用戶體驗度。

附圖說明

圖1是本申請一示例性實施例示出的一種數(shù)據(jù)塊的多副本存儲方法流程框圖;

圖2是本申請一示例性實施例示出的另一種數(shù)據(jù)塊的多副本存儲方法流程框圖;

圖3是本申請一示例性實施例示出的一種數(shù)據(jù)讀取方法流程框圖;

圖4是本申請一示例性實施例示出的另一種數(shù)據(jù)讀取方法流程框圖;

圖5是本申請一示例性實施例示出的一種存儲設(shè)備框圖;

圖6是本申請一示例性實施例示出的另一種存儲設(shè)備框圖;

圖7~圖11是本申請實施例中scsi寫命令中指定地段位置示意圖。

具體實施方式

這里將詳細(xì)地對示例性實施例進行說明,其示例表示在附圖中。下面的描述涉及附圖時,除非另有表示,不同附圖中的相同數(shù)字表示相同或相似的要素。以下示例性實施例中所描述的實施方式并不代表與本申請相一致的所有實施方式。相反,它們僅是與如所附權(quán)利要求書中所詳述的、本申請的一些方面相一致的裝置和方法的例子。

在本申請使用的術(shù)語是僅僅出于描述特定實施例的目的,而非旨在限制本申請。在本申請和所附權(quán)利要求書中所使用的單數(shù)形式的“一種”、“所述”和“該”也旨在包括多數(shù)形式,除非上下文清楚地表示其他含義。還應(yīng)當(dāng)理解,本文中可能使用到的術(shù)語“和/或”是指并包含一個或多個相關(guān)聯(lián)的列出項目的任何或所有可能組合。

應(yīng)當(dāng)理解,盡管在本申請可能采用術(shù)語第一、第二、第三等來描述各種信息,但這些信息不應(yīng)限于這些術(shù)語。這些術(shù)語僅用來將同一類型的信息彼此區(qū)分開。例如,在不脫離本申請范圍的情況下,第一信息也可以被稱為第二信息,類似地,第二信息也可以被稱為第一信息。取決于語境,如在此所使用的詞語“如果”可以被解釋成為“在……時”或“當(dāng)……時”或“響應(yīng)于確定”。

為方便理解,本申請先對下文中可能用到的名詞進行說明。

raid:redundantarraysofindependentdisks,獨立磁盤冗余陣列,其是由很多價格較便宜的磁盤,組合成一個容量巨大的磁盤組,利用個別磁盤提供數(shù)據(jù)所產(chǎn)生加成效果提升整個磁盤系統(tǒng)效能。

scsi:smallcomputersysteminterface,是一種主機和存儲設(shè)備之間傳送命令、狀態(tài)和塊數(shù)據(jù)等通信操作的規(guī)范的集合。

sbc:scsiblockcommands,scsi塊設(shè)備指令集。

metadata:元數(shù)據(jù),一種記錄管理相關(guān)信息的數(shù)據(jù),也可以理解為是一種用來描述數(shù)據(jù)的數(shù)據(jù),元數(shù)據(jù)存儲在存儲設(shè)備上,例如,lun的元數(shù)據(jù)存儲在raid上。

為解決現(xiàn)有技術(shù)中由備份、鏡像等操作造成的存儲資源浪費的技術(shù)問題,本申請實施例提供了一種數(shù)據(jù)塊的多副本存儲方法,應(yīng)用于存儲設(shè)備,如圖1所示,該方法包括如下步驟:

s11、接收用于對數(shù)據(jù)塊執(zhí)行寫操作的scsi寫命令;

該步驟s11中,執(zhí)行一次scsi寫命令可以形成一個數(shù)據(jù)塊;

s12、從scsi寫命令中獲取指定字段,指定字段用于指示數(shù)據(jù)塊的副本的數(shù)量;

具體地,可以利用該指定字段對應(yīng)的字節(jié)的預(yù)定位來指示副本的數(shù)量,其中預(yù)定位中設(shè)置為二進制數(shù)據(jù),利用設(shè)置的二進制數(shù)據(jù)指示副本的數(shù)量。例如利用該指定字段對應(yīng)的字節(jié)的第5、6位來定義需要寫入的副本的數(shù)量,如果該字節(jié)的第5、6位設(shè)置為01表示該數(shù)據(jù)塊需要寫入的副本的數(shù)量為1個,如果該字節(jié)的第5、6位設(shè)置為10表示該數(shù)據(jù)塊需要寫入的副本的數(shù)量為2個,如果該字節(jié)的第5、6位設(shè)置為11表示該數(shù)據(jù)塊需要寫入的副本的數(shù)量為3個。當(dāng)然該指定字段對應(yīng)的字節(jié)的第5、6位還可以設(shè)置為00,表示該數(shù)據(jù)塊不需要寫入副本。副本的具體份數(shù)可以根據(jù)在不同的應(yīng)用場景中數(shù)據(jù)塊的重要程度進行靈活設(shè)置,保證了重要數(shù)據(jù)的高可靠性,同時有效降低了存儲資源的浪費。另外,本申請不限于用兩位作為預(yù)定位來指示副本的數(shù)量,可以用3位或4位等作為預(yù)定位來指示副本的數(shù)量,例如可以用該指定字段對應(yīng)的字節(jié)的第4、5、6位作為預(yù)定位,來定義需要寫入的副本的數(shù)量。

s13、根據(jù)指定字段指示的數(shù)量寫入數(shù)據(jù)塊的副本。

本領(lǐng)域技術(shù)人員應(yīng)當(dāng)知道的是,本申請在寫入1個或多個副本的同時、之前或之后也寫入了數(shù)據(jù)塊本身。

上述數(shù)據(jù)塊的多副本存儲方法,只是對現(xiàn)有scsi協(xié)議中的write指令進行了一點改進,即在scsi寫指令的預(yù)留字段中設(shè)置了副本的數(shù)量,在執(zhí)行scsi寫指令時就可以在存儲設(shè)備中形成數(shù)據(jù)塊的多個副本,操作簡單便捷,有效保證了數(shù)據(jù)塊的安全性,同時由于本申請是以數(shù)據(jù)塊為單位形成的副本,因此有效節(jié)省了存儲設(shè)備的存儲空間,避免了存儲資源的浪費。

需要說明的是,上述步驟s12中,指定字段是預(yù)先指定的scsi寫命令中任意未定義的字段,在一種實施例中,上述指定字段可以是scsi寫命令中的保留字段,即圖7~圖11中示出的reserved字段。利用保留字段reserved指定副本的數(shù)量不會對原scsi寫命令產(chǎn)生任何影響。sbc協(xié)議中的每個寫指令,即每個scsi寫命令都會有幾個未使用的保留字段,如圖7~圖11所示,每個scsi寫命令中保留地段的位置不同,存儲設(shè)備解析scsi協(xié)議時,會根據(jù)不同的寫指令在對應(yīng)的位置查找保留字段,繼而解析各個scsi寫指令的相關(guān)保留字段中的預(yù)留位,確定副本的數(shù)量。

通過執(zhí)行步驟s13形成了數(shù)據(jù)塊的1個或多個副本。應(yīng)當(dāng)說明的是,每個副本分別位于一個raid中,即不同的副本位于不同raid中,這樣在其中一個raid故障或損壞時不至于影響其他raid中存儲的副本的安全,即實現(xiàn)了在其中一個存儲有副本的raid出現(xiàn)故障時,可以從其他存儲有副本的raid中讀取副本。同樣的,用于存儲數(shù)據(jù)塊的raid與存儲各個副本的raid均不相同,這樣在存儲數(shù)據(jù)塊的raid故障或損壞時不至于影響存儲在其他raid中的副本安全,即實現(xiàn)了存儲數(shù)據(jù)塊的raid故障時,可以從其他存儲有副本的raid中讀取副本。上述在不同的raid中存儲數(shù)據(jù)塊和副本的方法有效地提高了存儲有重要數(shù)據(jù)的數(shù)據(jù)塊的安全性。實現(xiàn)上述寫入操作具體地包括如下步驟:

s131、確定數(shù)據(jù)塊寫入的raid;

s132、從除raid之外的raid中選擇與副本的數(shù)量相同的raid,將副本分別寫入至選擇的各個raid。

需要說明的是,本申請中各個副本還可以位于不同的磁盤柜中或的不同的存儲設(shè)備上。

執(zhí)行上述步驟s11~s13后在存儲設(shè)備中形成的數(shù)據(jù)塊的1個或多個副本,但是只存儲下來,而不能讀取出來是毫無意義的,為實現(xiàn)對存儲的副本的讀取,上述方法還需包括如下步驟:

s14、在lun的元數(shù)據(jù)中,具體地在數(shù)據(jù)塊對應(yīng)的元數(shù)據(jù)中設(shè)置副本標(biāo)識,并利用元數(shù)據(jù)記錄副本的位置。

該步驟s14中,設(shè)置副本標(biāo)識用于指示哪些數(shù)據(jù)塊具有副本,在讀取數(shù)據(jù)塊失敗時,首先判斷該數(shù)據(jù)塊是否具有副本標(biāo)識,即首先判斷該數(shù)據(jù)塊是否具有副本。在確定具有副本之后,在記錄各個數(shù)據(jù)塊的副本的位置的元數(shù)據(jù)中查找該數(shù)據(jù)塊的副本的位置,例如,查找副本所在raid的uuid(用于標(biāo)識副本所在raid)和副本在該raid中的偏移(用于標(biāo)識副本在該raid中的位置),根據(jù)這2個信息就可以確定副本的位置。之后根據(jù)副本的位置就可從存儲設(shè)備中讀取副本。

在數(shù)據(jù)塊對應(yīng)的元數(shù)據(jù)中記錄副本標(biāo)識以及副本的位置后,在后面讀取副本的過程,存儲設(shè)備可以自動完成,讀取副本的時間是毫秒量級的,完全避免了由于現(xiàn)有技術(shù)中文件修復(fù)等操作造成的業(yè)務(wù)中斷。

需要說明的是,上述執(zhí)行數(shù)據(jù)塊寫操作的scsi寫命令由與存儲設(shè)備連接的外部服務(wù)器生成和發(fā)送。scsi寫命令中的指定字段中的副本數(shù)量是由外部服務(wù)器依據(jù)用戶發(fā)送的拷貝命令設(shè)置。在一種實施例中,該外部服務(wù)器通過下面的步驟設(shè)置指定字段中的副本數(shù)量:

s31、外部服務(wù)器接收拷貝命令;

其中該拷貝命令是文件系統(tǒng)中自定義的一個特殊的拷貝命令,用戶或應(yīng)用層通過該拷貝命令可以設(shè)置需要寫入的副本的數(shù)量,例如該拷貝命令是copy2,那么表示目標(biāo)文件中所有數(shù)據(jù)塊需要生成的副本的數(shù)量均是2份。

s32、對拷貝命令進行解析得到副本的數(shù)量,并根據(jù)副本的數(shù)量設(shè)置指定字段。具體地,在調(diào)用底層封裝scsi協(xié)議的模塊時,即scsi指令封裝層封裝scsi指令時,會把生成目標(biāo)文件的所有scsi寫指令中的指定字段均填入解析得到的副本的數(shù)量。

本領(lǐng)域技術(shù)人員應(yīng)當(dāng)清楚的是,從文件系統(tǒng)的角度上,文件是最小的存儲單位,文件所包含的任意一個數(shù)據(jù)塊異常時,該文件都不能正常讀取。因此即使該文件中只有一個數(shù)據(jù)塊的重要,為保證該重要的數(shù)據(jù)塊能夠正常讀取,該文件的其他數(shù)據(jù)塊也必須能夠正常讀取,那么該文件的所有數(shù)據(jù)塊均需要存儲副本。上述第一服務(wù)器將預(yù)定拷貝命令中攜帶的副本的數(shù)量,填入了生成該目標(biāo)文件的所有scsi寫命令的指定字段,那么該目標(biāo)文件的所有數(shù)據(jù)塊具有相同數(shù)量的副本,充分保證了目標(biāo)文件的安全,從而保證了目標(biāo)文件中重要數(shù)據(jù)塊的安全。

需要說明的是,在另一個實施例中上述執(zhí)行數(shù)據(jù)塊寫操作的scsi寫命令中指定字段指示的數(shù)據(jù)塊的副本數(shù)量還可以由與存儲設(shè)備連接的外部服務(wù)器依據(jù)從本地數(shù)據(jù)輸入端口獲取的副本數(shù)量設(shè)置。具體步驟如下:

s41、外部務(wù)器獲取預(yù)定標(biāo)識位信息;

該預(yù)定標(biāo)識位信息可以是在目標(biāo)文件打開的時候自定義的,該預(yù)定標(biāo)識位會傳遞到scsi指令封裝層,即底層封裝scsi協(xié)議的模塊,表示生成該目標(biāo)文件所需要執(zhí)行的所有scsi寫命令的指定字段均需要填入副本數(shù)量。

s42、從數(shù)據(jù)輸入端口獲取副本數(shù)量,并根據(jù)副本的數(shù)量設(shè)置生成該目標(biāo)文件所需要執(zhí)行的所有scsi寫命令中的指定字段。此步驟中,應(yīng)用層在數(shù)據(jù)輸入端口設(shè)置需要寫入的副本的數(shù)量。

在上述實施例中也將生成目標(biāo)文件的所有scsi寫命令的指定字段填入了相同的數(shù)量,即生成的目標(biāo)文件的所有數(shù)據(jù)塊都具有相同數(shù)量的副本。上述步驟s31中拷貝命令中攜帶的副本的數(shù)量以及步驟s41中通過數(shù)據(jù)輸入端口獲取的副本的數(shù)量都是應(yīng)用層根據(jù)實際的需要靈活設(shè)置的。如圖2所示,獲取副本的數(shù)量之后,scsi指令封裝層根據(jù)上述數(shù)量在每個scsi寫指令的指定字段填入相應(yīng)的副本數(shù)量,至此完成了scsi寫指令的改進。

上述利用外部服務(wù)器設(shè)置指定字段的實施例只是利用文件系統(tǒng)封裝scsi指令的一種情景,當(dāng)然還可以利用其它手段封裝scsi指令,例如直接針對塊設(shè)備進行讀寫的應(yīng)用,這些應(yīng)用就可以直接封裝scsi指令,并下發(fā)給存儲設(shè)備。

需要說明的是,如圖2所示,為判斷是否成功地寫入了數(shù)據(jù)塊和/或其副本,在寫入數(shù)據(jù)塊和/或其副本完成之后需要返回寫入成功得標(biāo)識,具體包括兩種情景,第一種情景是,在數(shù)據(jù)塊不需要存儲副本時,寫入數(shù)據(jù)塊完成之后,即可返回一個寫入成功的標(biāo)識。第二種情景是,在數(shù)據(jù)塊需要存儲副本時,需要在數(shù)據(jù)塊以及所有副本都寫入成功之后,才能夠返回寫入成功的標(biāo)識。

如圖2所示,應(yīng)用層設(shè)定的需要寫入的副本的數(shù)量也可能是0,那么就不需要寫入副本,那么scsi寫指令正常寫入數(shù)據(jù)塊后返回寫入成功的標(biāo)識即可。

如圖2所示,在寫入的副本的數(shù)量不為0時,寫入副本的raid一定是可用的raid,即該raid的剩余空間能夠容納副本。

在存儲設(shè)備上寫入副本的具體操作中,以定長的數(shù)據(jù)塊作為副本的最小存儲單位,例如該定長的數(shù)據(jù)塊為4kb。

綜上所述,上述多副本存儲方法的實施例能夠以數(shù)據(jù)塊為單位對重要數(shù)據(jù)生成多副本,確保了重要數(shù)據(jù)的安全,同時節(jié)省了寶貴的存儲資源。同時由于存儲設(shè)備中存儲了副本標(biāo)識以及副本的位置,使得與該方法對應(yīng)的存儲設(shè)備可以自動完成副本的讀取,提高了數(shù)據(jù)塊讀取故障的情境中,相關(guān)讀取業(yè)務(wù)的連續(xù)性,提高了用戶體驗度。

與前述多副本存儲方法的實施例相對應(yīng),本申請還提供了一種存儲設(shè)備的實施例。如圖5所示,該設(shè)備包括:

命令接收單元,用于接收用于對數(shù)據(jù)塊執(zhí)行寫操作的scsi寫命令;

字段獲取單元,用于從scsi寫命令中獲取指定字段,指定字段用于指示數(shù)據(jù)塊的副本的數(shù)量;

數(shù)據(jù)寫入單元,用于根據(jù)指定字段指示的數(shù)量寫入數(shù)據(jù)塊的副本。

需要說明的是,數(shù)據(jù)寫入單元包括:

數(shù)據(jù)塊raid確定子單元,用于確定數(shù)據(jù)塊寫入的raid;

寫入子單元,用于從除raid之外的raid中選擇與數(shù)量相同的raid,并將副本分別寫入至選擇的各個raid。

需要說明的是,存儲設(shè)備還包括元數(shù)據(jù)記錄標(biāo)識單元,元數(shù)據(jù)記錄標(biāo)識單元用于在數(shù)據(jù)塊對應(yīng)的元數(shù)據(jù)中設(shè)置副本標(biāo)識,并利用元數(shù)據(jù)記錄副本的位置。

上述存儲設(shè)備中各個單元或子單元的功能和作用的實現(xiàn)過程具體詳見上述多副本存儲方法中對應(yīng)步驟的實現(xiàn)過程,在此不再贅述。

上述實施例提供了多副本存儲方法,實現(xiàn)了對副本的存儲,下面實施例對應(yīng)于上述的存儲的副本,提供了一種數(shù)據(jù)讀取方法,如圖3所示,該方法包括如下步驟:

s21、接收數(shù)據(jù)塊讀取指令;

此步驟中的數(shù)據(jù)塊讀取指令是由前端應(yīng)用下發(fā)給存儲設(shè)備的,用于讀取數(shù)據(jù)塊;

s22、根據(jù)數(shù)據(jù)塊讀取指令確定所要讀取的數(shù)據(jù)塊的位置;

s23、從數(shù)據(jù)塊的位置開始讀取數(shù)據(jù)塊;若讀取失敗,則判斷數(shù)據(jù)塊是否具有副本標(biāo)識;其中,副本標(biāo)識用于指示數(shù)據(jù)塊具有副本;

若數(shù)據(jù)塊具有副本標(biāo)識,則根據(jù)副本標(biāo)識查找數(shù)據(jù)塊的副本的位置,并根據(jù)副本的位置讀取數(shù)據(jù)塊的副本;

此步驟s23中,具體地在元數(shù)據(jù)中查找副本標(biāo)識以及副本的位置。

需要說明的是,步驟s22中,根據(jù)數(shù)據(jù)塊讀取指令確定所要讀取的數(shù)據(jù)塊的位置具體包括兩種情景,第一種情景是,數(shù)據(jù)塊的位置直接攜帶于數(shù)據(jù)塊讀取指令中,通過解析該數(shù)據(jù)塊讀取指令就能直接確定數(shù)據(jù)塊的位置。第二種情景是,數(shù)據(jù)塊的位置并未攜帶于數(shù)據(jù)塊讀取指令中,數(shù)據(jù)塊去讀取指令中只攜帶有該數(shù)據(jù)塊的一個標(biāo)識,需要進一步的根據(jù)該標(biāo)識確定該數(shù)據(jù)塊的位置。

需要說明的是,步驟s23中,根據(jù)副本的位置讀取數(shù)據(jù)塊的副本包括兩種情景,第一種情景是,副本讀取成功,此時返回讀取的副本即可;第二種情景是,所有副本讀取均失敗,此時該數(shù)據(jù)塊的讀取徹底失敗,需要返回數(shù)據(jù)讀取失敗的信息。

需要說明的是,上述步驟s23中詳細(xì)說明了數(shù)據(jù)塊讀取失敗時讀取副本的步驟,但是在實際讀取過程中存在數(shù)據(jù)塊讀取成功得情景,如圖4所示,若數(shù)據(jù)塊讀取成功,則只需要返回從數(shù)據(jù)塊中讀取到的數(shù)據(jù),不需要進一步判斷該數(shù)據(jù)塊是否具有副本標(biāo)識。

上述步驟s23中詳細(xì)說明了數(shù)據(jù)塊讀取失敗,并且該數(shù)據(jù)塊具有副本時的處理步驟,但是在實際的讀取過程中存在該數(shù)據(jù)塊不具有副本的情景,如圖4所示,此時該數(shù)據(jù)塊的數(shù)據(jù)讀取徹底失敗,需要返回數(shù)據(jù)讀取失敗的信息。

上述實施例提供的多數(shù)據(jù)讀取方法實現(xiàn)了存儲設(shè)備自動跳轉(zhuǎn)到副本位置處讀取副本的功能,整個讀取數(shù)據(jù)的時間是毫秒量級的,不會對客戶讀取數(shù)據(jù)的連續(xù)性造成影響,提高了用戶體驗度,同時保證了數(shù)據(jù)的高可靠性。

與前述數(shù)據(jù)讀取方法的實施例相對應(yīng),本申請還提供了另一種存儲設(shè)備的實施例。如圖6所示,該設(shè)備包括:

指令接收單元,用于接收數(shù)據(jù)塊讀取指令;

位置確定單元,用于根據(jù)數(shù)據(jù)塊讀取指令確定所要讀取的數(shù)據(jù)塊的位置;

數(shù)據(jù)讀取單元,用于從數(shù)據(jù)塊的位置開始讀取數(shù)據(jù)塊;

若讀取失敗,數(shù)據(jù)讀取單元還用于判斷數(shù)據(jù)塊是否具有副本標(biāo)識;若數(shù)據(jù)塊具有副本標(biāo)識,則查找數(shù)據(jù)塊的副本的位置,并根據(jù)副本的位置讀取數(shù)據(jù)塊的副本;其中,副本標(biāo)識用于指示數(shù)據(jù)塊具有副本。

上述存儲設(shè)備中各個單元的功能和作用的實現(xiàn)過程具體詳見上述數(shù)據(jù)讀取方法中對應(yīng)步驟的實現(xiàn)過程,在此不再贅述。

以上所述僅為本申請的較佳實施例而已,并不用以限制本申請,凡在本申請的精神和原則之內(nèi),所做的任何修改、等同替換、改進等,均應(yīng)包含在本申請保護的范圍之內(nèi)。

當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1