專(zhuān)利名稱(chēng):三者間的異步復(fù)制的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)存儲(chǔ)設(shè)備,特別是涉及在存儲(chǔ)設(shè)備之間傳輸數(shù)據(jù)的領(lǐng)域。
背景技術(shù):
主處理機(jī)系統(tǒng)可使用存儲(chǔ)設(shè)備保存和檢索數(shù)據(jù),存儲(chǔ)設(shè)備包含多個(gè)主機(jī)接口裝置(主機(jī)適配器)、磁盤(pán)驅(qū)動(dòng)器、及磁盤(pán)接口裝置(磁盤(pán)適配器)。這樣的存儲(chǔ)設(shè)備可由麻薩諸塞州Hopkinton的伊姆西公司提供,且其在授權(quán)給Yanai等的美國(guó)專(zhuān)利5,206,939、授權(quán)給Galtzur等的美國(guó)專(zhuān)利5,778,394、授權(quán)給Vishlitzky等的美國(guó)專(zhuān)利5,845,147、及授權(quán)給Ofek等的美國(guó)專(zhuān)利5,857,208中公開(kāi)。主機(jī)系統(tǒng)通過(guò)多個(gè)隨其提供的通道訪問(wèn)存儲(chǔ)設(shè)備。主機(jī)系統(tǒng)通過(guò)通道提供數(shù)據(jù)和訪問(wèn)控制信息給存儲(chǔ)設(shè)備,存儲(chǔ)設(shè)備也通過(guò)通道提供數(shù)據(jù)給主機(jī)系統(tǒng)。主機(jī)系統(tǒng)不直接尋址存儲(chǔ)設(shè)備的磁盤(pán)驅(qū)動(dòng)器,而是訪問(wèn)對(duì)主機(jī)系統(tǒng)表現(xiàn)為多個(gè)邏輯磁盤(pán)機(jī)的裝置。邏輯磁盤(pán)機(jī)可以也可不對(duì)應(yīng)于實(shí)際的磁盤(pán)驅(qū)動(dòng)器。允許多個(gè)主機(jī)系統(tǒng)訪問(wèn)單個(gè)存儲(chǔ)設(shè)備將允許主機(jī)系統(tǒng)共享保存于其中是數(shù)據(jù)。
在某些情形下,可能希望將數(shù)據(jù)從一個(gè)存儲(chǔ)設(shè)備復(fù)制到另一存儲(chǔ)設(shè)備。例如,如果主機(jī)寫(xiě)數(shù)據(jù)到第一存儲(chǔ)設(shè)備,則可能希望將該數(shù)據(jù)復(fù)制到位于不同位置的第二存儲(chǔ)設(shè)備,使得當(dāng)致使第一存儲(chǔ)設(shè)備不能工作的災(zāi)難出現(xiàn)時(shí)主機(jī)(或另一主機(jī))可使用第二存儲(chǔ)設(shè)備的數(shù)據(jù)恢復(fù)運(yùn)行。這樣的性能可由麻薩諸塞州Hopkinton的伊姆西公司提供的遠(yuǎn)程數(shù)據(jù)鏡像(RDF)產(chǎn)品提供。具有RDF功能的第一存儲(chǔ)設(shè)備(標(biāo)注為“主存儲(chǔ)設(shè)備”或“R1”)連接到主機(jī)。一個(gè)或多個(gè)其它存儲(chǔ)設(shè)備(稱(chēng)為“輔助存儲(chǔ)設(shè)備”或“R2”)接收由主機(jī)寫(xiě)到主存儲(chǔ)設(shè)備的數(shù)據(jù)的拷貝。主機(jī)與主存儲(chǔ)設(shè)備直接相互作用,但主存儲(chǔ)設(shè)備的任何數(shù)據(jù)變化均使用RDF自動(dòng)提供給一個(gè)或多個(gè)輔助存儲(chǔ)設(shè)備。主和輔助存儲(chǔ)設(shè)備可由數(shù)據(jù)鏈路連接,數(shù)據(jù)鏈路如ESCON鏈路、光纖通道鏈路、和/或吉比特以太網(wǎng)鏈路。RDF功能可使用在每一存儲(chǔ)設(shè)備處提供的RDF適配器(RA)而得以促進(jìn)。
RDF允許同步數(shù)據(jù)傳輸,其中在數(shù)據(jù)從主機(jī)寫(xiě)到主存儲(chǔ)設(shè)備之后,該數(shù)據(jù)通過(guò)使用RDF從主存儲(chǔ)設(shè)備傳輸?shù)捷o助存儲(chǔ)設(shè)備,由輔助存儲(chǔ)設(shè)備向主存儲(chǔ)設(shè)備確認(rèn)數(shù)據(jù)的接收,主存儲(chǔ)設(shè)備接下來(lái)將寫(xiě)確認(rèn)提供回主機(jī)。因此,在同步模式中,主機(jī)不從主存儲(chǔ)設(shè)備接收寫(xiě)確認(rèn),直到對(duì)輔助存儲(chǔ)設(shè)備的RDF傳輸已被完成并由輔助存儲(chǔ)設(shè)備確認(rèn)為止。
同步RDF系統(tǒng)的缺點(diǎn)在于每一寫(xiě)操作的等待時(shí)間將由于等待RDF傳輸?shù)拇_認(rèn)而增加。在主存儲(chǔ)設(shè)備和輔助存儲(chǔ)設(shè)備之間距離較長(zhǎng)時(shí),該問(wèn)題更加突出。由于傳輸延遲,進(jìn)行RDF傳輸及隨后在傳輸完成后等待確認(rèn)回饋所需要的時(shí)延可能是不可接受的。
也可能以半同步方式使用RDF,在這種情況下,數(shù)據(jù)從主機(jī)寫(xiě)到主存儲(chǔ)設(shè)備,主存儲(chǔ)設(shè)備立即確認(rèn)寫(xiě),接著,同時(shí)開(kāi)始將數(shù)據(jù)傳輸?shù)捷o助存儲(chǔ)設(shè)備的步驟。因此,對(duì)于單一數(shù)據(jù)傳輸,該方案克服了以同步方式使用RDF的一些缺點(diǎn)。然而,對(duì)于數(shù)據(jù)完整性目的,半同步傳輸不允許主存儲(chǔ)設(shè)備傳輸數(shù)據(jù)給輔助存儲(chǔ)設(shè)備,直到先前的傳輸由輔助存儲(chǔ)設(shè)備確認(rèn)為止。因此,與以同步方式使用RDF相關(guān)聯(lián)的瓶頸在于由一次重復(fù)造成的簡(jiǎn)單的延遲,因?yàn)榈诙?shù)據(jù)量的傳輸不會(huì)發(fā)生,直到先前數(shù)據(jù)的傳輸為輔助存儲(chǔ)設(shè)備確認(rèn)為止。
另一種可能是使主機(jī)以異步方式寫(xiě)數(shù)據(jù)到主存儲(chǔ)設(shè)備并使主存儲(chǔ)設(shè)備在背后將數(shù)據(jù)復(fù)制到輔助存儲(chǔ)設(shè)備。后臺(tái)復(fù)制包括順序輪轉(zhuǎn)通過(guò)主存儲(chǔ)設(shè)備的每一磁軌,當(dāng)確定特定的數(shù)據(jù)塊自上次復(fù)制該數(shù)據(jù)塊后已被修改時(shí),數(shù)據(jù)塊被從主存儲(chǔ)設(shè)備傳輸?shù)捷o助存儲(chǔ)設(shè)備。盡管該機(jī)制可減輕與同步及半同步數(shù)據(jù)傳輸方式相關(guān)的等待時(shí)間問(wèn)題,但困難依然存在,因?yàn)椴荒鼙WC主存儲(chǔ)設(shè)備和輔助存儲(chǔ)設(shè)備之間的數(shù)據(jù)一致性。如果發(fā)生問(wèn)題,如主系統(tǒng)不能工作,則輔助系統(tǒng)可能以使得數(shù)據(jù)不可用的無(wú)序變化結(jié)束工作。
所提出的解決該問(wèn)題的方案為對(duì)稱(chēng)自動(dòng)復(fù)制(SAR)方法,其于未決美國(guó)專(zhuān)利申請(qǐng)10/224,918和10/225,021中描述,兩申請(qǐng)均于2002年8月21日申請(qǐng)。SAR使用可鏡像標(biāo)準(zhǔn)邏輯設(shè)備的設(shè)備(BCV)。BCV設(shè)備還可在鏡像后從其標(biāo)準(zhǔn)邏輯設(shè)備分離并可在分離后重新同步(即重新建立為鏡像)到標(biāo)準(zhǔn)邏輯設(shè)備。此外,BCV可使用RDF進(jìn)行遠(yuǎn)程鏡像,在這種情況下,當(dāng)BCV從相應(yīng)的標(biāo)準(zhǔn)邏輯設(shè)備分離時(shí),BCV可將對(duì)其做出的數(shù)據(jù)變化(當(dāng)BCV用作鏡像時(shí))傳播給BCV遠(yuǎn)程鏡像。
然而,使用SAR方法要求大量連續(xù)分離和重新同步BCV設(shè)備的輔助操作。SAR方法還使用主機(jī)控制和管理,其依賴于控制主機(jī)運(yùn)行。此外,SAR方法的實(shí)際實(shí)施的輪轉(zhuǎn)時(shí)間為20-30分鐘,因此,當(dāng)RDF鏈路和/或主設(shè)備出故障時(shí),可能丟失的數(shù)據(jù)量為20-30分鐘的數(shù)據(jù)價(jià)值。
因此,希望具有這樣一種RDF系統(tǒng),其具有上述不同技術(shù)中的每一種的部分有益品質(zhì),同時(shí)還減少了缺點(diǎn)。該系統(tǒng)對(duì)每一主機(jī)寫(xiě)可呈現(xiàn)低等待時(shí)間性,不管主設(shè)備和輔助設(shè)備之間的距離的長(zhǎng)短如何,并可在出現(xiàn)故障時(shí)提供輔助設(shè)備的一致性(可復(fù)原性)。
可能還希望將同步RDF傳輸和異步RDF傳輸?shù)膬?yōu)點(diǎn)結(jié)合起來(lái),從而最新的備份數(shù)據(jù)可被提供在J0遠(yuǎn)程設(shè)備上,J0遠(yuǎn)程設(shè)備離源設(shè)備相當(dāng)近(地理上),同時(shí),備份數(shù)據(jù)還可被提供給離源設(shè)備相當(dāng)遠(yuǎn)的備份設(shè)備??赡苓€希望這樣的系統(tǒng)能在備份設(shè)備之間進(jìn)行適當(dāng)?shù)臄?shù)據(jù)恢復(fù)。
發(fā)明內(nèi)容
根據(jù)本發(fā)明,保存恢復(fù)數(shù)據(jù)包括提供數(shù)據(jù)塊給遠(yuǎn)程目的地,其中每一數(shù)據(jù)塊代表在第一時(shí)間之前及第二時(shí)間之后寫(xiě)的數(shù)據(jù),其中某一特定數(shù)據(jù)塊的第二時(shí)間對(duì)應(yīng)于特定數(shù)據(jù)塊的隨后數(shù)據(jù)塊的第一時(shí)間,提供對(duì)應(yīng)于數(shù)據(jù)塊的同步數(shù)據(jù)給小型存儲(chǔ)器本地目的地,其中小型存儲(chǔ)器本地目的地包含未被保存在遠(yuǎn)程目的地上的數(shù)據(jù),且遠(yuǎn)程目的地包含未被保存在小型存儲(chǔ)器本地目的地的數(shù)據(jù),當(dāng)正提供新數(shù)據(jù)塊時(shí)提供指示符。包含在遠(yuǎn)程目的地上但未包含在小型存儲(chǔ)器本地目的地上的數(shù)據(jù)可比包含在小型存儲(chǔ)器本地目的地上但未包含在遠(yuǎn)程目的地上的數(shù)據(jù)更舊。由小型存儲(chǔ)器本地目的地接收的同步數(shù)據(jù)可保存在鏈表單元中。單元可根據(jù)數(shù)據(jù)的源存儲(chǔ)設(shè)備位置排序。單元可根據(jù)在小型存儲(chǔ)器本地目的地的數(shù)據(jù)的接收順序排序。每一單元可包括標(biāo)識(shí)符,其用于特定數(shù)據(jù)塊對(duì)應(yīng)于每一單元的同步數(shù)據(jù)。保存恢復(fù)數(shù)據(jù)還可包括在小型存儲(chǔ)器遠(yuǎn)程目的地提供周期次數(shù),響應(yīng)于接收指明新數(shù)據(jù)塊正被提供的指示符,遞增本地指示符。由小型存儲(chǔ)器本地目的地接收的同步數(shù)據(jù)可保存在鏈表單元中。每一單元可包括用于特定數(shù)據(jù)塊對(duì)應(yīng)于每一單元的同步數(shù)據(jù)的標(biāo)識(shí)符且標(biāo)識(shí)符可對(duì)應(yīng)于本地周期次數(shù)。
根據(jù)本發(fā)明,提供在計(jì)算機(jī)可讀介質(zhì)中的保存恢復(fù)數(shù)據(jù)的計(jì)算機(jī)軟件,其包括提供數(shù)據(jù)塊給遠(yuǎn)程目的地的可執(zhí)行代碼,其中每一數(shù)據(jù)塊代表在第一時(shí)間之前及第二時(shí)間之后寫(xiě)的數(shù)據(jù),其中某一特定數(shù)據(jù)塊的第二時(shí)間對(duì)應(yīng)于特定數(shù)據(jù)塊的隨后數(shù)據(jù)塊的第一時(shí)間,提供對(duì)應(yīng)于數(shù)據(jù)塊的同步數(shù)據(jù)給小型存儲(chǔ)器本地目的地的可執(zhí)行代碼,其中小型存儲(chǔ)器本地目的地包含未被保存在遠(yuǎn)程目的地上的數(shù)據(jù),且遠(yuǎn)程目的地包含未被保存在小型存儲(chǔ)器本地目的地的數(shù)據(jù),當(dāng)正提供新數(shù)據(jù)塊時(shí)提供指示符的可執(zhí)行代碼。包含在遠(yuǎn)程目的地上但未包含在小型存儲(chǔ)器本地目的地上的數(shù)據(jù)可比包含在小型存儲(chǔ)器本地目的地上但未包含在遠(yuǎn)程目的地上的數(shù)據(jù)更舊。由小型存儲(chǔ)器本地目的地接收的同步數(shù)據(jù)可保存在鏈表單元中。單元可根據(jù)數(shù)據(jù)的源存儲(chǔ)設(shè)備位置排序。單元可根據(jù)在小型存儲(chǔ)器本地目的地的數(shù)據(jù)的接收順序排序。每一單元可包括標(biāo)識(shí)符,其用于特定數(shù)據(jù)塊對(duì)應(yīng)于每一單元的同步數(shù)據(jù)。計(jì)算機(jī)軟件還可包括在小型存儲(chǔ)器遠(yuǎn)程目的地提供本地周期次數(shù)的可執(zhí)行代碼,及響應(yīng)于接收指明新數(shù)據(jù)塊正被提供的指示符而遞增本地指示符的可執(zhí)行代碼。由小型存儲(chǔ)器本地目的地接收的同步數(shù)據(jù)可保存在鏈表單元中。每一單元可包括用于特定數(shù)據(jù)塊對(duì)應(yīng)于每一單元的同步數(shù)據(jù)的標(biāo)識(shí)符且標(biāo)識(shí)符可對(duì)應(yīng)于本地周期次數(shù)。
根據(jù)本發(fā)明,用于保存恢復(fù)數(shù)據(jù)的系統(tǒng)包括源組、連接到源組以從其接收數(shù)據(jù)塊的遠(yuǎn)程目的地,其中每一數(shù)據(jù)塊代表在第一時(shí)間之前及第二時(shí)間之后寫(xiě)的數(shù)據(jù),其中某一特定數(shù)據(jù)塊的第二時(shí)間對(duì)應(yīng)于特定數(shù)據(jù)塊的隨后數(shù)據(jù)塊的第一時(shí)間,小型存儲(chǔ)器本地目的地連接到源組以從其接收同步數(shù)據(jù),其中小型存儲(chǔ)器本地目的地包含未被保存在遠(yuǎn)程目的地上的數(shù)據(jù),且遠(yuǎn)程目的地包含未被保存在小型存儲(chǔ)器本地目的地的數(shù)據(jù),且當(dāng)正提供新數(shù)據(jù)塊時(shí)源組提供指示符。包含在遠(yuǎn)程目的地上但未包含在小型存儲(chǔ)器本地目的地上的數(shù)據(jù)可比包含在小型存儲(chǔ)器本地目的地上但未包含在遠(yuǎn)程目的地上的數(shù)據(jù)更舊。
根據(jù)本發(fā)明,保存恢復(fù)數(shù)據(jù)包括提供數(shù)據(jù)塊給遠(yuǎn)程目的地,其中每一數(shù)據(jù)塊代表在第一時(shí)間之前及第二時(shí)間之后寫(xiě)的數(shù)據(jù),其中某一特定數(shù)據(jù)塊的第二時(shí)間對(duì)應(yīng)于特定數(shù)據(jù)塊的隨后數(shù)據(jù)塊的第一時(shí)間,其還包括提供同步數(shù)據(jù)給本地目的地,提供指示符給本地目的地并產(chǎn)生新數(shù)據(jù)塊以用于存儲(chǔ)在遠(yuǎn)程目的地。本地目的地可保持多個(gè)映射,每一映射將正提供給其的同步數(shù)據(jù)與特定的數(shù)據(jù)塊相關(guān)聯(lián)。響應(yīng)于接收指示符及新數(shù)據(jù)塊的產(chǎn)生,本地目的地可指向新的映射??梢杂袃蓚€(gè)或兩個(gè)以上的映射。響應(yīng)于本地目的地未能確認(rèn)提供給其的同步數(shù)據(jù),遠(yuǎn)程目的地可保留向其寫(xiě)的數(shù)據(jù)的映射。保存恢復(fù)數(shù)據(jù)可包括,響應(yīng)于本地目的地未能確認(rèn)提供給其的同步數(shù)據(jù),遠(yuǎn)程目的地保留新數(shù)據(jù)塊被創(chuàng)建的次數(shù)的計(jì)數(shù)。
根據(jù)本發(fā)明,恢復(fù)保存在本地目的地和遠(yuǎn)程目的地上的數(shù)據(jù)包括確定本地目的地和遠(yuǎn)程目的地中哪一個(gè)具有最新的數(shù)據(jù),如果遠(yuǎn)程目的地具有最新數(shù)據(jù)則將遠(yuǎn)程目的地的數(shù)據(jù)復(fù)制到本地目的地,如果本地目的地具有最新數(shù)據(jù)則將本地目的地的數(shù)據(jù)復(fù)制到遠(yuǎn)程目的地。確定本地目的地和遠(yuǎn)程目的地中哪一個(gè)具有最新數(shù)據(jù)可包括檢查遠(yuǎn)程目的地提供的標(biāo)記,其指明保存在遠(yuǎn)程目的地上但未保存在本地目的地上的新數(shù)據(jù)的量。標(biāo)記可指明在本地存儲(chǔ)設(shè)備未能確認(rèn)提供給其的數(shù)據(jù)之后提供給遠(yuǎn)程存儲(chǔ)設(shè)備的新數(shù)據(jù)塊的量,其中每一數(shù)據(jù)塊代表在第一時(shí)間之前及第二時(shí)間之后寫(xiě)的數(shù)據(jù),且某一特定數(shù)據(jù)塊的第二時(shí)間對(duì)應(yīng)于特定數(shù)據(jù)塊的隨后數(shù)據(jù)塊的第一時(shí)間。從遠(yuǎn)程目的地復(fù)制數(shù)據(jù)到本地目的地可包括復(fù)制由映射指示的數(shù)據(jù),該映射對(duì)應(yīng)于寫(xiě)到遠(yuǎn)程目的地的、未被確認(rèn)為寫(xiě)到本地目的地的數(shù)據(jù)。從本地目的地復(fù)制數(shù)據(jù)到遠(yuǎn)程目的地可包括復(fù)制由多個(gè)映射指示的數(shù)據(jù),這些映射對(duì)應(yīng)于寫(xiě)到本地目的地的、未被確認(rèn)為寫(xiě)到遠(yuǎn)程目的地的數(shù)據(jù)??梢杂袃蓚€(gè)或兩個(gè)以上的映射。
根據(jù)本發(fā)明,保存恢復(fù)數(shù)據(jù)的軟件包括提供數(shù)據(jù)塊給遠(yuǎn)程目的地的可執(zhí)行代碼,其中每一數(shù)據(jù)塊代表在第一時(shí)間之前及第二時(shí)間之后寫(xiě)的數(shù)據(jù),其中某一特定數(shù)據(jù)塊的第二時(shí)間對(duì)應(yīng)于特定數(shù)據(jù)塊的隨后數(shù)據(jù)塊的第一時(shí)間,其還包括提供同步數(shù)據(jù)給本地目的地的可執(zhí)行代碼,提供指示符給本地目的地并產(chǎn)生新數(shù)據(jù)塊以用于在遠(yuǎn)程目的地的存儲(chǔ)的可執(zhí)行代碼。本地目的地可包括保持多個(gè)映射的可執(zhí)行代碼,每一映射將正提供給其的同步數(shù)據(jù)與特定的數(shù)據(jù)塊相關(guān)聯(lián)。響應(yīng)于接收指示符及新數(shù)據(jù)塊的產(chǎn)生,本地目的地可指向新的映射。可以有兩個(gè)或兩個(gè)以上的映射。軟件還可包括,響應(yīng)于本地目的地未能確認(rèn)提供給其的同步數(shù)據(jù),在遠(yuǎn)程目的地保留提供給其的數(shù)據(jù)的映射的可執(zhí)行代碼。軟件可包括,響應(yīng)于本地目的地未能確認(rèn)提供給其的同步數(shù)據(jù),在遠(yuǎn)程目的地保留新數(shù)據(jù)塊被創(chuàng)建的次數(shù)的計(jì)數(shù)的可執(zhí)行代碼。
根據(jù)本發(fā)明,恢復(fù)保存在本地目的地和遠(yuǎn)程目的地上的數(shù)據(jù)的軟件包括確定本地目的地和遠(yuǎn)程目的地中哪一個(gè)具有最新的數(shù)據(jù)的可執(zhí)行代碼,如果遠(yuǎn)程目的地具有最新數(shù)據(jù)則將遠(yuǎn)程目的地的數(shù)據(jù)復(fù)制到本地目的地的可執(zhí)行代碼,如果本地目的地具有最新數(shù)據(jù)則將本地目的地的數(shù)據(jù)復(fù)制到遠(yuǎn)程目的地的可執(zhí)行代碼。確定本地目的地和遠(yuǎn)程目的地中哪一個(gè)具有最新數(shù)據(jù)的可執(zhí)行代碼可包括檢查遠(yuǎn)程目的地提供的標(biāo)記的可執(zhí)行代碼,標(biāo)記指明保存在遠(yuǎn)程目的地上但未保存在本地目的地上的新數(shù)據(jù)的量。標(biāo)記可指明在本地存儲(chǔ)設(shè)備未能確認(rèn)提供給其的數(shù)據(jù)之后提供給遠(yuǎn)程存儲(chǔ)設(shè)備的新數(shù)據(jù)塊的量,其中每一數(shù)據(jù)塊代表在第一時(shí)間之前及第二時(shí)間之后寫(xiě)的數(shù)據(jù),且某一特定數(shù)據(jù)塊的第二時(shí)間對(duì)應(yīng)于特定數(shù)據(jù)塊的隨后數(shù)據(jù)塊的第一時(shí)間。從遠(yuǎn)程目的地復(fù)制數(shù)據(jù)到本地目的地的可執(zhí)行代碼可包括復(fù)制由映射指示的數(shù)據(jù)的可執(zhí)行代碼,該映射對(duì)應(yīng)于寫(xiě)到遠(yuǎn)程目的地的、未被確認(rèn)為寫(xiě)到本地目的地的數(shù)據(jù)。從本地目的地復(fù)制數(shù)據(jù)到遠(yuǎn)程目的地的可執(zhí)行代碼可包括復(fù)制由多個(gè)映射指示的數(shù)據(jù)的可執(zhí)行代碼,這些映射對(duì)應(yīng)于寫(xiě)到本地目的地的、未被確認(rèn)為寫(xiě)到遠(yuǎn)程目的地的數(shù)據(jù)??梢杂袃蓚€(gè)或兩個(gè)以上的映射。
根據(jù)本發(fā)明,用于保存恢復(fù)數(shù)據(jù)的系統(tǒng)包括源組、連接到源組以從其接收數(shù)據(jù)塊的遠(yuǎn)程目的地,其中每一數(shù)據(jù)塊代表在第一時(shí)間之前及第二時(shí)間之后寫(xiě)的數(shù)據(jù),其中某一特定數(shù)據(jù)塊的第二時(shí)間對(duì)應(yīng)于特定數(shù)據(jù)塊的隨后數(shù)據(jù)塊的第一時(shí)間,及連接到源組以從其接收同步數(shù)據(jù)的本地目的地,其中源組連同用于存儲(chǔ)在遠(yuǎn)程目的地的新數(shù)據(jù)塊的產(chǎn)生一起,提供指示符給本地目的地。
根據(jù)本發(fā)明,用于恢復(fù)數(shù)據(jù)的系統(tǒng)包括產(chǎn)生數(shù)據(jù)的源組、連接到源組以從其接收同步數(shù)據(jù)的本地目的地、連接到源組以從其接收同步數(shù)據(jù)的遠(yuǎn)程目的地、用于確定本地目的地和遠(yuǎn)程目的地中哪一個(gè)具有最新數(shù)據(jù)的裝置、在遠(yuǎn)程目的地具有最新數(shù)據(jù)時(shí)用于將數(shù)據(jù)從遠(yuǎn)程目的地復(fù)制到本地目的地的裝置、在本地目的地具有最新數(shù)據(jù)時(shí)用于將數(shù)據(jù)從本地目的地復(fù)制到遠(yuǎn)程目的地的裝置。
根據(jù)本發(fā)明,保存恢復(fù)數(shù)據(jù)包括主處理機(jī)寫(xiě)數(shù)據(jù)到本地存儲(chǔ)設(shè)備,主處理機(jī)使本地存儲(chǔ)設(shè)備積聚對(duì)應(yīng)于主處理機(jī)的寫(xiě)的數(shù)據(jù)塊,其中每一數(shù)據(jù)塊代表在第一時(shí)間之前及第二時(shí)間之后寫(xiě)的數(shù)據(jù),且特定數(shù)據(jù)塊的第二時(shí)間對(duì)應(yīng)于該特定數(shù)據(jù)塊隨后的數(shù)據(jù)塊的第一時(shí)間,將數(shù)據(jù)塊從本地存儲(chǔ)設(shè)備傳輸?shù)竭h(yuǎn)程目的地,從本地存儲(chǔ)設(shè)備提供同步數(shù)據(jù)給本地目的地;及,主處理機(jī)連同存儲(chǔ)在遠(yuǎn)程目的地的新數(shù)據(jù)塊的產(chǎn)生,使得一指示符被提供給本地目的地。本地目的地可保持多個(gè)映射,其中每一映射將正提供給其的同步數(shù)據(jù)與特定的數(shù)據(jù)塊相關(guān)聯(lián)。響應(yīng)于接收與新數(shù)據(jù)塊的產(chǎn)生有關(guān)的指示符,本地目的地可指向新的映射??梢杂袃蓚€(gè)或兩個(gè)以上的映射。響應(yīng)于本地目的地未能確認(rèn)提供給其的同步數(shù)據(jù),遠(yuǎn)程目的地可保留向其寫(xiě)的數(shù)據(jù)的映射。保存恢復(fù)數(shù)據(jù)可包括,響應(yīng)于本地目的地未能確認(rèn)提供給其的同步數(shù)據(jù),遠(yuǎn)程目的地保留新數(shù)據(jù)塊被創(chuàng)建的次數(shù)的計(jì)數(shù)。主處理機(jī)可寫(xiě)數(shù)據(jù)給一個(gè)以上的本地存儲(chǔ)設(shè)備,這些本地存儲(chǔ)設(shè)備同步傳輸數(shù)據(jù)給一個(gè)以上的本地目的地。
根據(jù)本發(fā)明,恢復(fù)保存在本地目的地和遠(yuǎn)程目的地上的數(shù)據(jù)包括使主機(jī)本地訪問(wèn)本地目的地和遠(yuǎn)程目的地之一,主機(jī)確定本地目的地和遠(yuǎn)程目的地中的哪一個(gè)具有最新數(shù)據(jù),如果遠(yuǎn)程目的地具有最新數(shù)據(jù),則主機(jī)使得數(shù)據(jù)從遠(yuǎn)程目的地復(fù)制到本地目的地,及如果本地目的地具有最新數(shù)據(jù),則主機(jī)使得數(shù)據(jù)從本地目的地復(fù)制到遠(yuǎn)程目的地。主機(jī)確定本地目的地和遠(yuǎn)程目的地中哪一個(gè)具有最新數(shù)據(jù)可包括主機(jī)檢查遠(yuǎn)程目的地提供的標(biāo)記,標(biāo)記指明保存在遠(yuǎn)程目的地上但未保存在本地目的地上的新數(shù)據(jù)的量。標(biāo)記可指明在本地存儲(chǔ)設(shè)備未能確認(rèn)提供給其的數(shù)據(jù)之后提供給遠(yuǎn)程存儲(chǔ)設(shè)備的新數(shù)據(jù)塊的量,其中每一數(shù)據(jù)塊代表在第一時(shí)間之前及第二時(shí)間之后寫(xiě)的數(shù)據(jù),且某一特定數(shù)據(jù)塊的第二時(shí)間對(duì)應(yīng)于特定數(shù)據(jù)塊的隨后數(shù)據(jù)塊的第一時(shí)間。主機(jī)從遠(yuǎn)程目的地復(fù)制數(shù)據(jù)到本地目的地可包括主機(jī)復(fù)制由映射指示的數(shù)據(jù),該映射對(duì)應(yīng)于寫(xiě)到遠(yuǎn)程目的地的、未被確認(rèn)為寫(xiě)到本地目的地的數(shù)據(jù)。主機(jī)從本地目的地復(fù)制數(shù)據(jù)到遠(yuǎn)程目的地可包括主機(jī)復(fù)制由多個(gè)映射指示的數(shù)據(jù),這些映射對(duì)應(yīng)于寫(xiě)到本地目的地的、未被確認(rèn)為寫(xiě)到遠(yuǎn)程目的地的數(shù)據(jù)??梢杂袃蓚€(gè)或兩個(gè)以上的映射。
附圖簡(jiǎn)要說(shuō)明
圖1為連同在此描述的系統(tǒng)使用的主機(jī)、本地存儲(chǔ)設(shè)備及遠(yuǎn)程數(shù)據(jù)存儲(chǔ)設(shè)備的示意圖。
圖2為連同在此描述的系統(tǒng)使用的主機(jī)、本地存儲(chǔ)設(shè)備及遠(yuǎn)程數(shù)據(jù)存儲(chǔ)設(shè)備之間的數(shù)據(jù)流的示意圖。
圖3為根據(jù)在此描述的系統(tǒng),示出用于構(gòu)建和利用本地存儲(chǔ)設(shè)備上的數(shù)據(jù)塊的項(xiàng)目的示意圖。
圖4示出了連同在此描述的系統(tǒng)使用的槽的數(shù)據(jù)結(jié)構(gòu)。
圖5為根據(jù)在此描述的系統(tǒng),響應(yīng)于主機(jī)的寫(xiě),主機(jī)適配器(HA)的操作流程圖。
圖6為根據(jù)在此描述的系統(tǒng),將數(shù)據(jù)從本地存儲(chǔ)設(shè)備傳輸?shù)竭h(yuǎn)程存儲(chǔ)設(shè)備的流程圖。
圖7為根據(jù)在此描述的系統(tǒng),示出用于構(gòu)建和利用遠(yuǎn)程存儲(chǔ)設(shè)備上的數(shù)據(jù)塊的項(xiàng)目的示意圖。
圖8為根據(jù)在此描述的系統(tǒng),由遠(yuǎn)程存儲(chǔ)設(shè)備執(zhí)行的、與從本地存儲(chǔ)設(shè)備接收提交指示符有關(guān)的步驟的流程圖。
圖9為根據(jù)在此描述的系統(tǒng),將所傳輸?shù)臄?shù)據(jù)保存在遠(yuǎn)程存儲(chǔ)設(shè)備中的流程圖。
圖10為根據(jù)在此描述的系統(tǒng),所執(zhí)行的與本地存儲(chǔ)設(shè)備增加序號(hào)有關(guān)的步驟的流程圖。
圖11為根據(jù)在此描述的系統(tǒng)的另一實(shí)施例,用于構(gòu)建和利用本地存儲(chǔ)設(shè)備上的數(shù)據(jù)塊的項(xiàng)目的示意圖。
圖12為根據(jù)在此描述的系統(tǒng)的另一實(shí)施例,響應(yīng)于主機(jī)的寫(xiě),主機(jī)適配器(HA)的操作流程圖。
圖13為根據(jù)在此描述的系統(tǒng)的另一實(shí)施例,將數(shù)據(jù)從本地存儲(chǔ)設(shè)備傳輸?shù)竭h(yuǎn)程存儲(chǔ)設(shè)備的流程圖。
圖14為根據(jù)在此描述的系統(tǒng),多個(gè)本地和遠(yuǎn)程存儲(chǔ)設(shè)備與主機(jī)的示意圖。
圖15為連同在此描述的系統(tǒng)使用的多盒模式(multi-box mode)表。
圖16為根據(jù)在此描述的系統(tǒng)修改多盒模式表的流程圖。
圖17為根據(jù)在此描述的系統(tǒng),主機(jī)轉(zhuǎn)換周期的流程圖。
圖18為根據(jù)在此描述的系統(tǒng)連同本地存儲(chǔ)設(shè)備遞增序號(hào)所執(zhí)行的步驟的流程圖。
圖19為根據(jù)在此描述的系統(tǒng),將數(shù)據(jù)從本地存儲(chǔ)設(shè)備傳輸?shù)竭h(yuǎn)程存儲(chǔ)設(shè)備的流程圖。
圖20為根據(jù)在此描述的系統(tǒng)的另一實(shí)施例,將數(shù)據(jù)從本地存儲(chǔ)設(shè)備傳輸?shù)竭h(yuǎn)程存儲(chǔ)設(shè)備的流程圖。
圖21為根據(jù)在此描述的系統(tǒng),從遠(yuǎn)程存儲(chǔ)設(shè)備提供活動(dòng)態(tài)空指示符消息給相應(yīng)的本地存儲(chǔ)設(shè)備的流程圖。
圖22為根據(jù)在此描述的系統(tǒng),示出多個(gè)本地和遠(yuǎn)程存儲(chǔ)設(shè)備與多個(gè)主機(jī)的示意圖。
圖23為根據(jù)在此描述的系統(tǒng),由遠(yuǎn)程存儲(chǔ)設(shè)備執(zhí)行的與數(shù)據(jù)恢復(fù)有關(guān)的處理的流程圖。
圖24為根據(jù)在此描述的系統(tǒng),由主機(jī)執(zhí)行的與數(shù)據(jù)恢復(fù)有關(guān)的處理的流程圖。
圖25為根據(jù)在此描述的系統(tǒng),示出存儲(chǔ)設(shè)備、存儲(chǔ)器、多個(gè)導(dǎo)向器、及通信模塊的示意圖。
圖26為根據(jù)在此描述的系統(tǒng),示出源組、本地目的地和遠(yuǎn)程目的地的示意圖。
圖27為根據(jù)在此描述的系統(tǒng),由本地目的地執(zhí)行的初始化數(shù)據(jù)恢復(fù)參數(shù)的過(guò)程的流程圖。
圖28A為根據(jù)在此描述的系統(tǒng),在非故障方式期間由本地目的地執(zhí)行的與接收數(shù)據(jù)有關(guān)的過(guò)程的流程圖。
圖28B為根據(jù)在此描述的系統(tǒng),在非故障方式期間由本地目的地執(zhí)行的與接收數(shù)據(jù)有關(guān)的另一過(guò)程的流程圖。
圖28C為根據(jù)在此描述的系統(tǒng),在非故障方式期間由本地目的地執(zhí)行的與接收數(shù)據(jù)有關(guān)的另一過(guò)程的流程圖。
圖29為根據(jù)在此描述的系統(tǒng),由本地目的地執(zhí)行的初始化數(shù)據(jù)恢復(fù)參數(shù)的過(guò)程的流程圖。
圖30為根據(jù)在此描述的系統(tǒng),由遠(yuǎn)程目的地執(zhí)行的與收集故障恢復(fù)數(shù)據(jù)有關(guān)的過(guò)程的流程圖。
圖31為根據(jù)在此描述的系統(tǒng),所執(zhí)行的與故障恢復(fù)有關(guān)的過(guò)程的流程圖。
圖32為根據(jù)在此描述的系統(tǒng),所執(zhí)行的與終止排序的寫(xiě)有關(guān)的處理的流程圖。
圖33為根據(jù)在此描述的系統(tǒng),所執(zhí)行的與從本地目的地發(fā)送數(shù)據(jù)到遠(yuǎn)程目的地有關(guān)的處理的流程圖。
圖34為根據(jù)在此描述的系統(tǒng),由本地目的地執(zhí)行的與重新設(shè)置錯(cuò)誤恢復(fù)參數(shù)有關(guān)的過(guò)程的流程圖。
圖35為根據(jù)在此描述的系統(tǒng),由遠(yuǎn)程目的地執(zhí)行的與重新設(shè)置錯(cuò)誤恢復(fù)參數(shù)有關(guān)的過(guò)程的流程圖。
圖36為根據(jù)在此描述的系統(tǒng)的源組的結(jié)構(gòu)圖。
圖37為根據(jù)在此描述的系統(tǒng)的源組的另一結(jié)構(gòu)圖。
圖38為根據(jù)在此描述的系統(tǒng),從本地存儲(chǔ)設(shè)備傳輸數(shù)據(jù)給遠(yuǎn)程存儲(chǔ)設(shè)備的另一實(shí)施例的流程圖。
圖39為根據(jù)在此描述的系統(tǒng),用于構(gòu)建和操作遠(yuǎn)程存儲(chǔ)設(shè)備上的數(shù)據(jù)塊的項(xiàng)目的示意圖。
圖40為根據(jù)在此描述的系統(tǒng),用于將邏輯設(shè)備位置映射到包含由遠(yuǎn)程存儲(chǔ)設(shè)備接收的數(shù)據(jù)的槽的表。
圖41為根據(jù)在此描述的系統(tǒng),用于將邏輯設(shè)備位置映射到包含由遠(yuǎn)程存儲(chǔ)設(shè)備接收的數(shù)據(jù)的槽的表的另一實(shí)施例。
圖42為根據(jù)在此描述的系統(tǒng)的一實(shí)施例的源組、小型存儲(chǔ)器本地目的地、及遠(yuǎn)程目的地的示意圖。
圖43為根據(jù)在此描述的系統(tǒng)的一實(shí)施例,示出在小型存儲(chǔ)器本地目的地的數(shù)據(jù)存儲(chǔ)的示意圖。
圖44為根據(jù)在此描述的系統(tǒng)的一實(shí)施例,用于在小型存儲(chǔ)器本地目的地的數(shù)據(jù)存儲(chǔ)的數(shù)據(jù)單元的圖。
圖45為根據(jù)在此描述的系統(tǒng)的一實(shí)施例,所執(zhí)行的與小型存儲(chǔ)器本地目的地接收數(shù)據(jù)有關(guān)的步驟的流程圖。
圖46為根據(jù)在此描述的系統(tǒng)的一實(shí)施例,所執(zhí)行的與小型存儲(chǔ)器本地目的地添加數(shù)據(jù)有關(guān)的步驟的流程圖。
圖47為根據(jù)在此描述的系統(tǒng)的另一實(shí)施例,所執(zhí)行的與小型存儲(chǔ)器本地目的地添加數(shù)據(jù)有關(guān)的步驟的流程圖。
圖48為根據(jù)在此描述的系統(tǒng)的一實(shí)施例,所執(zhí)行的與小型存儲(chǔ)器本地目的地除去數(shù)據(jù)有關(guān)的步驟的流程圖。
圖49為根據(jù)在此描述的系統(tǒng)的一實(shí)施例,所執(zhí)行的與數(shù)據(jù)恢復(fù)有關(guān)的步驟的流程圖。
圖50為根據(jù)在此描述的系統(tǒng)的另一實(shí)施例,示出連接到小型存儲(chǔ)器本地目的地的多個(gè)源組和遠(yuǎn)程目的地的示意圖。
具體實(shí)施例方式
參考圖1,圖表20示出了主機(jī)22、本地存儲(chǔ)設(shè)備24和遠(yuǎn)程存儲(chǔ)設(shè)備26之間的關(guān)系。主機(jī)22經(jīng)主機(jī)適配器(HA)28從本地存儲(chǔ)設(shè)備讀數(shù)據(jù)及寫(xiě)數(shù)據(jù)到本地存儲(chǔ)設(shè)備,主機(jī)適配器便于主機(jī)22和本地存儲(chǔ)設(shè)備24之間的連接。盡管圖表20僅示出了一個(gè)主機(jī)22和一個(gè)HA28,本領(lǐng)域一般技術(shù)人員可以意識(shí)到的是,可使用多個(gè)HA,且一個(gè)或多個(gè)HA可有一個(gè)或多個(gè)主機(jī)與其連接。
來(lái)自本地存儲(chǔ)設(shè)備24的數(shù)據(jù)經(jīng)RDF鏈路29復(fù)制到遠(yuǎn)程存儲(chǔ)設(shè)備26以使遠(yuǎn)程存儲(chǔ)設(shè)備26上的數(shù)據(jù)與本地存儲(chǔ)設(shè)備24上的數(shù)據(jù)一樣。盡管只示出了一個(gè)鏈路29,在存儲(chǔ)設(shè)備24、26之間及在存儲(chǔ)設(shè)備24、26之一或二者與其它存儲(chǔ)設(shè)備(未示出)之間具有另外的鏈路是可能的。此外,鏈路29還可使用直接連接(有線、無(wú)線、或其某種結(jié)合)、網(wǎng)絡(luò)(如因特網(wǎng))、或任何其它適當(dāng)?shù)挠糜趥魉蛿?shù)據(jù)的設(shè)施提供。注意,在從本地存儲(chǔ)設(shè)備24到遠(yuǎn)程存儲(chǔ)設(shè)備26的數(shù)據(jù)傳輸之間可能有時(shí)間延遲,從而遠(yuǎn)程存儲(chǔ)設(shè)備26可能,在某些時(shí)間點(diǎn),某些數(shù)據(jù)與本地存儲(chǔ)設(shè)備上的數(shù)據(jù)不一樣。使用RDF的通信在美國(guó)專(zhuān)利5,742,792中描述,其通過(guò)引用組合于此。
本地存儲(chǔ)設(shè)備24包括第一多個(gè)RDF適配器單元(RA)30a、30b、30c,遠(yuǎn)程存儲(chǔ)設(shè)備26包括第二多個(gè)RA32a-32c。RA30a-30c、32a-32c均連接到RDF鏈路29且均類(lèi)似于主機(jī)適配器28,但用于在存儲(chǔ)設(shè)備24、26之間傳輸數(shù)據(jù)。連同RA30a-30c、32a-32c使用的軟件將在下文中詳細(xì)描述。
存儲(chǔ)設(shè)備24、26可包括一個(gè)或多個(gè)磁盤(pán),每一磁盤(pán)包含保存在每一存儲(chǔ)設(shè)備24、26上的數(shù)據(jù)的不同部分。圖1示出了存儲(chǔ)設(shè)備24包括多個(gè)磁盤(pán)33a、33b、33c,及存儲(chǔ)設(shè)備26包括多個(gè)磁盤(pán)34a、34b、34c。在此描述的RDF功能可被應(yīng)用,使得本地存儲(chǔ)設(shè)備24的磁盤(pán)33a-33c的至少一部分的數(shù)據(jù)可使用RDF復(fù)制到遠(yuǎn)程存儲(chǔ)設(shè)備26的磁盤(pán)34a-34c的至少一部分中。存儲(chǔ)設(shè)備24、26的其它數(shù)據(jù)不在存儲(chǔ)設(shè)備24、26之間進(jìn)行復(fù)制是可能的,因而不完全相同。
磁盤(pán)33a-33c中的每一個(gè)被連接到對(duì)應(yīng)的磁盤(pán)適配器單元(DA)35a、35b、35c,其提供數(shù)據(jù)給磁盤(pán)33a-33c中的對(duì)應(yīng)磁盤(pán)并從磁盤(pán)33a-33c中的對(duì)應(yīng)磁盤(pán)接收數(shù)據(jù)。類(lèi)似地,遠(yuǎn)程存儲(chǔ)設(shè)備26的多個(gè)DA36a、36b、36c均用于提供數(shù)據(jù)給磁盤(pán)34a-34c中的對(duì)應(yīng)磁盤(pán)并從磁盤(pán)34a-34c中的對(duì)應(yīng)磁盤(pán)接收數(shù)據(jù)。在本地存儲(chǔ)設(shè)備24的DA35a-35c、HA28和RA30a-30c之間存在內(nèi)部數(shù)據(jù)通路。類(lèi)似地,在遠(yuǎn)程存儲(chǔ)設(shè)備的DA36a-36c和RA32a-32c之間也存在內(nèi)部數(shù)據(jù)通路。注意,在其它實(shí)施例中,DA服務(wù)于一個(gè)以上的磁盤(pán)是可能的,且一個(gè)以上的DA服務(wù)于一個(gè)磁盤(pán)也是可能的。
本地存儲(chǔ)設(shè)備24還包括全局存儲(chǔ)器37,其可用于幫助在DA35a-35c、HA28和RA30a-30c之間的數(shù)據(jù)傳輸。存儲(chǔ)器37可包含將由DA35a-35c、HA28和RA30a-30c中的一個(gè)或多個(gè)執(zhí)行的任務(wù),及包含用于從磁盤(pán)33a-33c中的一個(gè)或多個(gè)取回的數(shù)據(jù)的高速緩存器。類(lèi)似地,遠(yuǎn)程存儲(chǔ)設(shè)備26包括全局存儲(chǔ)器38,其可包含將由DA36a-36c和RA32a-32c中的一個(gè)或多個(gè)執(zhí)行的任務(wù),及包含用于從磁盤(pán)34a-34c中的一個(gè)或多個(gè)取回的數(shù)據(jù)的高速緩存器。存儲(chǔ)器37、38的使用將在下文中詳細(xì)描述。
本地存儲(chǔ)設(shè)備24中對(duì)應(yīng)于磁盤(pán)33a-33c的存儲(chǔ)空間可被再分為多個(gè)卷或邏輯設(shè)備。邏輯設(shè)備可以也可不對(duì)應(yīng)于磁盤(pán)33a-33c的物理存儲(chǔ)空間。因而,例如,磁盤(pán)33a可包含多個(gè)邏輯設(shè)備,或者單個(gè)邏輯設(shè)備可橫跨兩個(gè)磁盤(pán)33a、33b。類(lèi)似地,遠(yuǎn)程存儲(chǔ)設(shè)備26的包括磁盤(pán)34a-34c的存儲(chǔ)空間可被再分為多個(gè)卷或邏輯設(shè)備,其中每一邏輯設(shè)備可以也可不對(duì)應(yīng)于磁盤(pán)34a-34c中的一個(gè)或多個(gè)。
假設(shè)在本地存儲(chǔ)設(shè)備24和遠(yuǎn)程存儲(chǔ)設(shè)備26的部分之間進(jìn)行映射的RDF包括,在遠(yuǎn)程存儲(chǔ)設(shè)備26上建立邏輯設(shè)備,其是對(duì)本地存儲(chǔ)設(shè)備24上的邏輯設(shè)備的遠(yuǎn)程鏡像。主機(jī)22從本地存儲(chǔ)設(shè)備24上的邏輯設(shè)備讀數(shù)據(jù)并寫(xiě)數(shù)據(jù)到該邏輯設(shè)備,且RDF映射使得已修改的數(shù)據(jù)將通過(guò)使用RA30a-30c、32a-32c和RDF鏈路而從本地存儲(chǔ)設(shè)備24傳輸?shù)竭h(yuǎn)程存儲(chǔ)設(shè)備26。在穩(wěn)態(tài)工作情況下,遠(yuǎn)程存儲(chǔ)設(shè)備26上的邏輯設(shè)備包含的數(shù)據(jù)與本地存儲(chǔ)設(shè)備24上的邏輯設(shè)備的數(shù)據(jù)完全一樣。本地存儲(chǔ)設(shè)備24上為主機(jī)22所訪問(wèn)的邏輯設(shè)備被稱(chēng)為“R1卷”(或“R1”),而遠(yuǎn)程存儲(chǔ)設(shè)備26上包含R1卷上的數(shù)據(jù)的拷貝的邏輯設(shè)備被稱(chēng)為“R2卷”(或“R2”)。因此,主機(jī)從R1卷讀數(shù)據(jù)并將數(shù)據(jù)寫(xiě)到R1卷,及RDF處理從R1卷到R2卷的數(shù)據(jù)的自動(dòng)復(fù)制和更新。在此描述的系統(tǒng)可使用軟件、硬件、和/或軟件和硬件的結(jié)合進(jìn)行實(shí)施,其中軟件可保存在適當(dāng)?shù)拇鎯?chǔ)介質(zhì)中并由一個(gè)或多個(gè)處理器執(zhí)行。
參考圖2,其示出了從主機(jī)22到本地存儲(chǔ)設(shè)備24和遠(yuǎn)程存儲(chǔ)設(shè)備26的數(shù)據(jù)通路。如本地存儲(chǔ)設(shè)備24的數(shù)據(jù)元51所示,從主機(jī)22寫(xiě)到本地存儲(chǔ)設(shè)備24的數(shù)據(jù)被本地保存。由主機(jī)22寫(xiě)到本地存儲(chǔ)設(shè)備24的數(shù)據(jù)還被本地存儲(chǔ)設(shè)備24保持并由本地存儲(chǔ)設(shè)備24經(jīng)鏈路29發(fā)送給遠(yuǎn)程存儲(chǔ)設(shè)備26。
在在此描述的系統(tǒng)中,主機(jī)22的每一數(shù)據(jù)寫(xiě)(如記錄、多個(gè)記錄、磁軌等的寫(xiě))均被分配以序號(hào)。序號(hào)可在與寫(xiě)相關(guān)聯(lián)的適當(dāng)數(shù)據(jù)字段中提供。在圖2中,主機(jī)22的寫(xiě)被示為被分配以序號(hào)N。由主機(jī)執(zhí)行的、被分配以序號(hào)N的所有寫(xiě)均被收集在一個(gè)數(shù)據(jù)塊52中。數(shù)據(jù)塊52代表由主機(jī)22執(zhí)行的、幾乎在同時(shí)發(fā)生的多個(gè)單獨(dú)的寫(xiě)。
通常,本地存儲(chǔ)設(shè)備24積聚一個(gè)序號(hào)的數(shù)據(jù)塊,同時(shí)將先前積聚的數(shù)據(jù)塊(具有在前的序號(hào))傳輸給遠(yuǎn)程存儲(chǔ)設(shè)備26。因而,當(dāng)本地存儲(chǔ)設(shè)備24正積聚來(lái)自主機(jī)的、被分配以序號(hào)N的寫(xiě)時(shí),已發(fā)生的、在前序號(hào)(N-1)的寫(xiě)由本地存儲(chǔ)設(shè)備24經(jīng)鏈路29傳輸給遠(yuǎn)程存儲(chǔ)設(shè)備26。數(shù)據(jù)塊54代表來(lái)自主機(jī)22的、被分配以序號(hào)N-1的、尚未傳輸給遠(yuǎn)程存儲(chǔ)設(shè)備26的寫(xiě)。
遠(yuǎn)程存儲(chǔ)設(shè)備26從對(duì)應(yīng)于被分配以序號(hào)N-1的寫(xiě)的數(shù)據(jù)塊接收數(shù)據(jù)并為具有序號(hào)N-1的主機(jī)寫(xiě)建立新的數(shù)據(jù)塊56。數(shù)據(jù)可使用適當(dāng)?shù)腞DF協(xié)議進(jìn)行傳輸,其確認(rèn)跨鏈路29發(fā)送的數(shù)據(jù)。當(dāng)遠(yuǎn)程存儲(chǔ)設(shè)備26已從數(shù)據(jù)塊54接收所有的數(shù)據(jù)時(shí),本地存儲(chǔ)設(shè)備24發(fā)送提交信息給遠(yuǎn)程存儲(chǔ)設(shè)備26以提交被分配以N-1序號(hào)的所有數(shù)據(jù),其對(duì)應(yīng)于數(shù)據(jù)塊56。通常,一旦對(duì)應(yīng)于特定序號(hào)的數(shù)據(jù)塊被提交,則數(shù)據(jù)塊可被寫(xiě)到邏輯存儲(chǔ)設(shè)備。這在圖2中用數(shù)據(jù)塊58圖示,其對(duì)應(yīng)于被分配以序號(hào)N-2(即,主機(jī)22到本地存儲(chǔ)設(shè)備24的寫(xiě)正使用的當(dāng)前序號(hào)之前的第二個(gè)序號(hào))的寫(xiě)。在圖2中,數(shù)據(jù)塊58被示出為正被寫(xiě)到數(shù)據(jù)元62,其代表遠(yuǎn)程存儲(chǔ)設(shè)備26的磁盤(pán)存儲(chǔ)。因而,遠(yuǎn)程存儲(chǔ)設(shè)備26正接收和積聚對(duì)應(yīng)于序號(hào)N-1的數(shù)據(jù)塊56,同時(shí)對(duì)應(yīng)于在前序號(hào)(N-2)的數(shù)據(jù)塊58正被寫(xiě)到遠(yuǎn)程存儲(chǔ)設(shè)備26的磁盤(pán)存儲(chǔ),如數(shù)據(jù)元62所示。在一實(shí)施例中,數(shù)據(jù)塊58的數(shù)據(jù)因?yàn)閷?xiě)(但不是必需立即寫(xiě))而被標(biāo)記,而數(shù)據(jù)塊56的數(shù)據(jù)則未被標(biāo)記。
因此,在運(yùn)行中,主機(jī)寫(xiě)數(shù)據(jù)到本地存儲(chǔ)設(shè)備24,該數(shù)據(jù)被本地保存在數(shù)據(jù)元51中并被積聚在數(shù)據(jù)塊52中。一旦特定序號(hào)的所有數(shù)據(jù)均已被積聚(在本文的其它地方描述),本地存儲(chǔ)設(shè)備24遞增序號(hào)。對(duì)應(yīng)于小于當(dāng)前序號(hào)的序號(hào)的數(shù)據(jù)塊54的數(shù)據(jù)經(jīng)鏈路29從本地存儲(chǔ)設(shè)備24傳輸?shù)竭h(yuǎn)程存儲(chǔ)設(shè)備26。數(shù)據(jù)塊58對(duì)應(yīng)于已由本地存儲(chǔ)設(shè)備24通過(guò)發(fā)送消息給遠(yuǎn)程存儲(chǔ)設(shè)備26進(jìn)行提交的序號(hào)的數(shù)據(jù)。數(shù)據(jù)塊58的數(shù)據(jù)被寫(xiě)到遠(yuǎn)程存儲(chǔ)設(shè)備26的磁盤(pán)存儲(chǔ)。
應(yīng)注意的是,在數(shù)據(jù)塊52、54、56、58特定之一內(nèi)的寫(xiě)不是必須被排序。然而,如本文中其它地方所詳細(xì)描述的,在開(kāi)始對(duì)應(yīng)于序號(hào)N-1的數(shù)據(jù)塊54、56的任何寫(xiě)之前,對(duì)應(yīng)于序號(hào)N-2的數(shù)據(jù)塊58的每一寫(xiě)均已開(kāi)始。此外,在開(kāi)始對(duì)應(yīng)于序號(hào)N的數(shù)據(jù)塊52的任何寫(xiě)之前,對(duì)應(yīng)于序號(hào)N-1的數(shù)據(jù)塊54、56的每一寫(xiě)均已開(kāi)始。因此,如果本地存儲(chǔ)設(shè)備24和遠(yuǎn)程存儲(chǔ)設(shè)備26之間通信失敗,遠(yuǎn)程存儲(chǔ)設(shè)備26可簡(jiǎn)單地結(jié)束最后提交的數(shù)據(jù)塊(在圖2的例子中為數(shù)據(jù)塊58)的寫(xiě),并可被保證遠(yuǎn)程存儲(chǔ)設(shè)備26處的數(shù)據(jù)的狀態(tài)被排序,其中數(shù)據(jù)元62包含在某一時(shí)間點(diǎn)之前開(kāi)始的所有寫(xiě)且不包含該時(shí)間點(diǎn)之后開(kāi)始的寫(xiě)。因而,R2總是包含R1的即時(shí)拷貝且從R2設(shè)備重新建立一致的映射是可能的。
參考圖3,圖表70示出了用于構(gòu)建和保持?jǐn)?shù)據(jù)塊52、54的項(xiàng)目。標(biāo)準(zhǔn)邏輯設(shè)備72包含由主機(jī)22寫(xiě)入的數(shù)據(jù)并對(duì)應(yīng)于圖2的數(shù)據(jù)元51和圖1的磁盤(pán)33a-33c。標(biāo)準(zhǔn)邏輯設(shè)備72包含由主機(jī)22寫(xiě)到本地存儲(chǔ)設(shè)備24的數(shù)據(jù)。
兩個(gè)指針的鏈表74、76與標(biāo)準(zhǔn)邏輯設(shè)備72一起使用。鏈表74、76對(duì)應(yīng)于可被保存在本地存儲(chǔ)設(shè)備24的存儲(chǔ)器37中的數(shù)據(jù)。鏈表74包含多個(gè)指針81-85,每一指針指向與本地存儲(chǔ)設(shè)備24一起使用的高速緩存器88的槽。類(lèi)似地,鏈表76包含多個(gè)指針91-95,每一指針指向高速緩存器88的槽。在一些實(shí)施例中,高速緩存器88可被提供在本地存儲(chǔ)設(shè)備24的存儲(chǔ)器37中。高速緩存器88包含多個(gè)緩存槽102-104,其可連同向標(biāo)準(zhǔn)邏輯設(shè)備72寫(xiě)一起使用,同時(shí),可連同鏈表74、76一起使用。
鏈表74、76中的每一個(gè)均可用于數(shù)據(jù)塊52、54之一,使得鏈表74可對(duì)應(yīng)于序號(hào)N的數(shù)據(jù)塊52,而鏈表76可對(duì)應(yīng)于序號(hào)N-1的數(shù)據(jù)塊54。因而,當(dāng)數(shù)據(jù)由主機(jī)22寫(xiě)到本地存儲(chǔ)設(shè)備24時(shí),數(shù)據(jù)被提供給高速緩存器88,在某些情況下(在本文其它地方描述),鏈表74的適當(dāng)指針被產(chǎn)生。應(yīng)注意,數(shù)據(jù)將不會(huì)從高速緩存器88去除,直到數(shù)據(jù)被降級(jí)(destage)到標(biāo)準(zhǔn)邏輯設(shè)備72且數(shù)據(jù)不再被鏈表74的任一指針81-85指向?yàn)橹?,如本文其它地方所述?br>
在在此的實(shí)施例中,鏈表74、76之一被視為“活動(dòng)態(tài)”,而另一個(gè)被視為“非活動(dòng)態(tài)”。因此,當(dāng)序號(hào)N為偶數(shù)時(shí),鏈表74可以是活動(dòng)態(tài),而鏈表76是非活動(dòng)態(tài)。鏈表74、76中的活動(dòng)態(tài)鏈表處理來(lái)自主機(jī)22的寫(xiě),而非活動(dòng)態(tài)鏈表對(duì)應(yīng)于正從本地存儲(chǔ)設(shè)備24傳輸?shù)竭h(yuǎn)程存儲(chǔ)設(shè)備26的數(shù)據(jù)。
在由主機(jī)22寫(xiě)的數(shù)據(jù)通過(guò)使用鏈表74、76中的活動(dòng)態(tài)鏈表進(jìn)行積聚時(shí)(對(duì)于序號(hào)N),對(duì)應(yīng)于鏈表74、76中的非活動(dòng)態(tài)鏈表的數(shù)據(jù)(對(duì)于在前的序號(hào)N-1)被從本地存儲(chǔ)設(shè)備24傳輸?shù)竭h(yuǎn)程存儲(chǔ)設(shè)備26。RA30a-30c使用鏈表74、76確定數(shù)據(jù)從本地存儲(chǔ)設(shè)備24傳輸?shù)竭h(yuǎn)程存儲(chǔ)設(shè)備26。
一旦對(duì)應(yīng)于鏈表74、76之一中的指針的特定指針的數(shù)據(jù)已被傳輸給遠(yuǎn)程存儲(chǔ)設(shè)備26,指針中的特定指針可從鏈表74、76中的適當(dāng)鏈表去除。此外,假如槽中的數(shù)據(jù)不再因其它目的需要(如降級(jí)到標(biāo)準(zhǔn)邏輯設(shè)備72),數(shù)據(jù)還可被標(biāo)記以從高速緩存器88去除(即槽可被返回到槽池以用于隨后的、不相干的使用)。一機(jī)制可被用于確保數(shù)據(jù)不被從高速緩存器88去除,直到所有設(shè)備不再使用該數(shù)據(jù)為止。這樣的機(jī)制在1996年7月16日授予的美國(guó)專(zhuān)利5,537,568、及2003年7月15日授予的美國(guó)專(zhuān)利6,594,742中有所描述,二者均通過(guò)引用組合于此。
參考圖4,槽120,與高速緩存器88的槽102-104之一類(lèi)似,包括標(biāo)題122和數(shù)據(jù)124。標(biāo)題122對(duì)應(yīng)于系統(tǒng)用以管理槽120的內(nèi)務(wù)信息。數(shù)據(jù)124為來(lái)自磁盤(pán)的、正被(暫時(shí))保存在槽120中的相應(yīng)數(shù)據(jù)。標(biāo)題122中的信息包括指回到磁盤(pán)的指針、時(shí)間標(biāo)簽等。
標(biāo)題122還包括與在此描述的系統(tǒng)一起使用的緩存標(biāo)簽126。在在此的實(shí)施例中,緩存標(biāo)簽126為8個(gè)字節(jié)。其中兩個(gè)字節(jié)為“密碼”,其表明槽120是否正由在此描述的系統(tǒng)使用。在其它實(shí)施例中,密碼可以是一個(gè)字節(jié),而其后的字節(jié)用于填充。如本文其它地方所描述的,等于特定值的兩字節(jié)密碼(或一字節(jié))表明槽120被鏈表74、76的至少一項(xiàng)指向。不等于特定值的密碼表明槽120未被鏈表74、76的項(xiàng)指向。密碼的使用將在本文其它地方描述。
緩存標(biāo)簽126還包括一兩字節(jié)字段,其指明槽120的數(shù)據(jù)124的序號(hào)(如N、N-1、N-2等)。如本文其它地方所描述的,緩存標(biāo)簽126的序號(hào)字段可用于幫助在此描述的處理。緩存標(biāo)簽126的其余四個(gè)字節(jié)可用于指針,如本文其它地方所描述的那樣。當(dāng)然,序號(hào)的兩個(gè)字節(jié)和指針的四個(gè)字節(jié)僅在密碼等于特定值時(shí)是有效的,其中特定值表明槽120被列表74、76之一中的至少一項(xiàng)指向。
參考圖5,流程圖140示出了連同主機(jī)22執(zhí)行寫(xiě)操作,由HA28執(zhí)行的步驟。當(dāng)然,當(dāng)主機(jī)22執(zhí)行寫(xiě)時(shí),處理出現(xiàn)以用一般方式處理寫(xiě),而不管數(shù)據(jù)是否是R1/R2RDF組的一部分。例如,當(dāng)主機(jī)22對(duì)磁盤(pán)的一部分寫(xiě)數(shù)據(jù)時(shí),對(duì)緩存槽的寫(xiě)發(fā)生,其最后被降級(jí)到磁盤(pán)。緩存槽或可以是新的緩存槽,或可以是已經(jīng)存在的、連同先前對(duì)同一磁軌進(jìn)行的讀和/或?qū)懖僮鳟a(chǎn)生的緩存槽。
處理開(kāi)始于第一步驟142,其中對(duì)應(yīng)于寫(xiě)的槽被鎖定。在在此的實(shí)施例中,高速緩存器88的每一槽102-104對(duì)應(yīng)于標(biāo)準(zhǔn)邏輯設(shè)備上的數(shù)據(jù)磁道。在步驟142鎖定槽阻止另外的過(guò)程在HA28執(zhí)行的、對(duì)應(yīng)于流程圖140的步驟的處理期間在相應(yīng)的槽上運(yùn)行。
在步驟142之后是步驟144,其中序號(hào)N的值被設(shè)定。如本文別處所描述的,在步驟144獲得的序號(hào)的值在HA28執(zhí)行的整個(gè)寫(xiě)操作期間均被保持,同時(shí)槽被鎖定。如本文別處所描述的,序號(hào)被分配給每一寫(xiě)以設(shè)定寫(xiě)屬于數(shù)據(jù)塊52、54中的哪一個(gè)。主機(jī)22執(zhí)行的寫(xiě)被分配以當(dāng)前序號(hào)。單一寫(xiě)操作始終保持同一序號(hào)是有用的。
在步驟144之后是測(cè)定步驟146,其確定緩存槽的密碼字段是否有效。如上所述,在此描述的系統(tǒng)將密碼字段設(shè)定為預(yù)先確定的值以表明緩存槽已經(jīng)在指針的鏈表74、76之一中。如果在測(cè)定步驟146確定密碼字段無(wú)效(表明槽是新的且沒(méi)有列表74、76的指針指向該槽),則控制從步驟146轉(zhuǎn)到步驟148,新槽的緩存標(biāo)簽被設(shè)定,其中將密碼設(shè)定為預(yù)先確定的值、將序號(hào)字段設(shè)定為N、將指針字段設(shè)定為空。在其它實(shí)施例中,指針字段可被設(shè)定為指向槽本身。
在步驟148之后是步驟152,指向新槽的指針被添加到指針列表74、76中的活動(dòng)態(tài)列表。在在此的一實(shí)施例中,列表74、76為周期雙向鏈表,且新指針被以傳統(tǒng)方式添加到周期雙向鏈表中。當(dāng)然,其它適當(dāng)?shù)臄?shù)據(jù)結(jié)構(gòu)也可用于管理列表74、76。在步驟152之后是步驟154,其中標(biāo)志被設(shè)定。在步驟154,RDF_WP標(biāo)志(RDF寫(xiě)懸掛標(biāo)志)被設(shè)定以表明該槽需要通過(guò)使用RDF傳輸給遠(yuǎn)程存儲(chǔ)設(shè)備26。此外,在步驟154,IN_CACHE標(biāo)志被設(shè)定以表明該槽需要被降級(jí)到標(biāo)準(zhǔn)邏輯設(shè)備72。在步驟154之后是步驟156,由主機(jī)22和HA28寫(xiě)的數(shù)據(jù)被寫(xiě)到該槽中。在步驟156之后是步驟158,該槽被解鎖。在步驟158之后,處理結(jié)束。
如果在測(cè)定步驟146確定槽的密碼字段有效(表明該槽已經(jīng)被列表74、76的至少一指針指向),則控制從步驟146轉(zhuǎn)到測(cè)定步驟162,其確定該槽的序號(hào)字段是否等于當(dāng)前序號(hào)N。應(yīng)注意,對(duì)于具有有效密碼的槽的序號(hào)字段有兩種有效的可能性。序號(hào)字段等于N(當(dāng)前序號(hào))是可能的。這在槽對(duì)應(yīng)于具有序號(hào)N的在前寫(xiě)的情況下發(fā)生。另一種可能性是序號(hào)字段等于N-1。這在槽對(duì)應(yīng)于具有序號(hào)N-1的在前寫(xiě)的情況下發(fā)生。序號(hào)字段的任何其它值均是無(wú)效的。因此,對(duì)于某些實(shí)施例,在步驟162中包括錯(cuò)誤/有效性檢查或在單獨(dú)的步驟中進(jìn)行錯(cuò)誤/有效性檢查是可能的。這樣的錯(cuò)誤可以任何適當(dāng)?shù)姆绞教幚?,其可包括提供消息給用戶。
如果在測(cè)定步驟162確定槽的序號(hào)字段中的值等于當(dāng)前序號(hào)N,則不要求特殊的處理且控制從步驟162轉(zhuǎn)到步驟156,如上所述,數(shù)據(jù)被寫(xiě)到槽中。否則,如果序號(hào)字段的值為N-1(唯一另外的有效值),則控制從步驟162轉(zhuǎn)到步驟164,新槽被獲得。在步驟164獲得的新槽可用于保存正被寫(xiě)的數(shù)據(jù)。
在步驟164之后是步驟166,來(lái)自舊槽的數(shù)據(jù)被復(fù)制到小步驟164獲得的新槽。應(yīng)注意,所復(fù)制的數(shù)據(jù)包括RDF WP標(biāo)志,其應(yīng)在該槽被第一次創(chuàng)建時(shí)已被設(shè)定(步驟154)。在步驟166之后是步驟168,新槽的緩存標(biāo)簽被設(shè)定,其將密碼字段設(shè)定為適當(dāng)?shù)闹?、將序?hào)字段設(shè)定為當(dāng)前序號(hào)N、及將指針字段設(shè)定為指向舊槽。在步驟168之后是步驟172,指向新槽的指針被添加到鏈表74、76中的活動(dòng)態(tài)鏈表。在步驟172之后是步驟156,如上所述,數(shù)據(jù)被寫(xiě)到槽中,在該例子中,其是新槽。
參考圖6,流程圖200示出了連同RA30a-30c掃描鏈表72、74中的非活動(dòng)態(tài)鏈表所執(zhí)行的步驟以將RDF數(shù)據(jù)從本地存儲(chǔ)設(shè)備24傳輸?shù)竭h(yuǎn)程存儲(chǔ)設(shè)備26。如上所述,當(dāng)N周期正由主機(jī)使用鏈表72、74中的活動(dòng)態(tài)鏈表寫(xiě)到R1設(shè)備時(shí),鏈表72、74中的非活動(dòng)態(tài)鏈表指向?qū)?yīng)于R1設(shè)備的N-1周期的槽。
處理開(kāi)始于第一步驟202,其確定在列表72、74的非活動(dòng)態(tài)表中是否有任何項(xiàng)。當(dāng)數(shù)據(jù)被傳輸時(shí),相應(yīng)的項(xiàng)被從列表72、74的非活動(dòng)態(tài)列表中去除。此外,新的寫(xiě)被提供給列表72、74中的活動(dòng)態(tài)列表且通常不提供給列表72、74中的非活動(dòng)態(tài)列表。因此,列表72、74中的非活動(dòng)態(tài)列表在某些時(shí)間不包含數(shù)據(jù)是可能的(也是所希望的,如本文別處所述的)。如果在步驟202確定沒(méi)有數(shù)據(jù)將被傳輸,則列表72、74中的非活動(dòng)態(tài)列表繼續(xù)被輪詢直到數(shù)據(jù)可用為止。用于發(fā)送的數(shù)據(jù)變得可用同時(shí)周期切換(在本文別處描述),其中列表72、74中的非活動(dòng)態(tài)列表變成列表72、74中的活動(dòng)態(tài)列表,反之亦然。
如果在步驟202確定有數(shù)據(jù)可用于發(fā)送,則控制從步驟202轉(zhuǎn)到步驟204,其中槽被驗(yàn)證為是正確的。在步驟204執(zhí)行的處理是隨意的“精神健全檢查”,其可包括驗(yàn)證密碼字段是正確的及驗(yàn)證序號(hào)字段是正確的。如果在槽中有不正確的(意外的)數(shù)據(jù),則可執(zhí)行錯(cuò)誤處理,其可包括通知用戶該錯(cuò)誤及可能的錯(cuò)誤校正處理。
在步驟204之后是步驟212,數(shù)據(jù)以傳統(tǒng)方式經(jīng)RDF進(jìn)行發(fā)送。在在此的一實(shí)施例中,整個(gè)槽均未被傳輸。而是,只有槽內(nèi)具有適當(dāng)?shù)溺R像位設(shè)置(表明記錄已改變)的記錄被傳輸給遠(yuǎn)程存儲(chǔ)設(shè)備26。然而,在其它實(shí)施例中,則可能傳輸整個(gè)槽,假如遠(yuǎn)程存儲(chǔ)設(shè)備26只寫(xiě)對(duì)應(yīng)于具有適當(dāng)鏡像位設(shè)置的數(shù)據(jù)并忽略該磁軌的其它數(shù)據(jù),其可能是也可能不是有效的。在步驟212之后是測(cè)定步驟214,其確定被傳輸?shù)臄?shù)據(jù)是否已被R2設(shè)備確認(rèn)。如果沒(méi)有,則數(shù)據(jù)被按照從步驟214回到步驟212的流程的指示重新發(fā)送。在其它實(shí)施例中,不同的及更多有關(guān)的處理可用于發(fā)送數(shù)據(jù)及確認(rèn)其接收。這樣的處理可包括錯(cuò)誤報(bào)告及在一定數(shù)量的發(fā)送數(shù)據(jù)的努力已失敗之后執(zhí)行的另外的處理。
一旦在測(cè)定步驟214確定數(shù)據(jù)已被成功發(fā)送,控制從步驟214轉(zhuǎn)到步驟216以清除RDF_WP標(biāo)志(因?yàn)閿?shù)據(jù)已經(jīng)RDF成功發(fā)送)。在步驟216之后是測(cè)定步驟218,其確定該槽是否是連同向已經(jīng)具有列表72、74的非活動(dòng)態(tài)列表中的現(xiàn)存項(xiàng)的槽進(jìn)行寫(xiě)而創(chuàng)建的復(fù)制槽。這種可能性已在上面連同步驟162、164、166、168、172進(jìn)行描述。如果在測(cè)定步驟218確定該槽是復(fù)制槽,則控制從步驟218轉(zhuǎn)到步驟222,該槽被返回到可用的槽池中(將被重新使用)。此外,槽還可被老化(或具有某些應(yīng)用于其的其它適當(dāng)機(jī)制)以在其它槽之前提供用于立即的重新使用,因?yàn)樵摬壑刑峁┑臄?shù)據(jù)對(duì)于任何其它目的均不是有效的。在步驟222或步驟218(如果槽不是復(fù)制槽)之后是步驟224,槽的標(biāo)題的密碼字段被清零,使得當(dāng)槽被重新使用時(shí),在圖5的步驟146的測(cè)定可正確地將該槽分類(lèi)為新槽。
在步驟224之后是步驟226,列表72、74的非活動(dòng)態(tài)列表中的項(xiàng)被移除。在步驟226之后,控制轉(zhuǎn)回到步驟202,如上所述,其確定在列表72、74的非活動(dòng)態(tài)列表上是否有另外的項(xiàng)對(duì)應(yīng)于需要被傳輸?shù)臄?shù)據(jù)。
參考圖7,圖表240示出了遠(yuǎn)程存儲(chǔ)設(shè)備26所使用的數(shù)據(jù)塊56、58的產(chǎn)生和處理。由遠(yuǎn)程存儲(chǔ)設(shè)備26接收的數(shù)據(jù)經(jīng)鏈路29提供給遠(yuǎn)程存儲(chǔ)設(shè)備26的高速緩存器242。高速緩存器242可被提供在遠(yuǎn)程存儲(chǔ)設(shè)備26的存儲(chǔ)器38中。高速緩存器242包括多個(gè)緩存槽244-246,每一緩存槽可被映射到標(biāo)準(zhǔn)邏輯存儲(chǔ)設(shè)備252的磁軌。高速緩存器242類(lèi)似于圖3的高速緩存器88并可包含可被降級(jí)到遠(yuǎn)程存儲(chǔ)設(shè)備26的標(biāo)準(zhǔn)邏輯存儲(chǔ)設(shè)備252的數(shù)據(jù)。標(biāo)準(zhǔn)邏輯存儲(chǔ)設(shè)備252對(duì)應(yīng)于圖2中所示的數(shù)據(jù)元62及圖1中所示的磁盤(pán)34a-34c。
遠(yuǎn)程存儲(chǔ)設(shè)備26還包含一對(duì)只緩存虛擬設(shè)備254、256。只緩存虛擬設(shè)備254、256對(duì)應(yīng)可能保存在遠(yuǎn)程存儲(chǔ)設(shè)備26的存儲(chǔ)器38中的設(shè)備表。每一只緩存虛擬設(shè)備254、256的表的每一磁軌項(xiàng)(trackentry)或指向標(biāo)準(zhǔn)邏輯設(shè)備252的磁軌或指向高速緩存器242的槽。只緩存虛擬設(shè)備在2003年3月25日申請(qǐng)的、題為“CACHE-ONLY虛擬設(shè)備”的美國(guó)未決專(zhuān)利申請(qǐng)10/396,800中描述,其通過(guò)引用組合于此。
多個(gè)緩存槽244-246可與向標(biāo)準(zhǔn)邏輯設(shè)備252進(jìn)行寫(xiě)一起使用,同時(shí),也可與只緩存虛擬設(shè)備254、256一起使用。在在此的實(shí)施例中,只緩存虛擬設(shè)備254、256的每一磁軌表項(xiàng)包含一空值以表明該磁軌的數(shù)據(jù)被保存在標(biāo)準(zhǔn)邏輯設(shè)備252的對(duì)應(yīng)磁軌上。否則,每一只緩存虛擬設(shè)備的磁軌表中的項(xiàng)包含指向高速緩存器242中的槽244-246之一的指針。
每一只緩存虛擬設(shè)備254、256對(duì)應(yīng)于數(shù)據(jù)塊56、58之一。因而,例如,只緩存虛擬設(shè)備254可對(duì)應(yīng)于數(shù)據(jù)塊56,而只緩存虛擬設(shè)備256可對(duì)應(yīng)于數(shù)據(jù)塊58。在在此的實(shí)施例中,只緩存虛擬設(shè)備254、256之一可被視為“活動(dòng)態(tài)”,而只緩存虛擬設(shè)備254、256中的另一個(gè)可被視為“非活動(dòng)態(tài)”。只緩存虛擬設(shè)備254、256中的非活動(dòng)態(tài)虛擬設(shè)備可對(duì)應(yīng)于正從本地存儲(chǔ)設(shè)備24接收的數(shù)據(jù)(即數(shù)據(jù)塊56),而只緩存虛擬設(shè)備254、256中的活動(dòng)態(tài)虛擬設(shè)備對(duì)應(yīng)于正被恢復(fù)(寫(xiě))到標(biāo)準(zhǔn)邏輯設(shè)備252的數(shù)據(jù)。
來(lái)自本地存儲(chǔ)設(shè)備24的、經(jīng)鏈路29接收的數(shù)據(jù)可被放置在高速緩存器242的槽244-246之一中。只緩存虛擬設(shè)備254、256中的非活動(dòng)態(tài)虛擬設(shè)備的相應(yīng)指針可被設(shè)置為指向所接收的數(shù)據(jù)。隨后的具有相同序號(hào)的數(shù)據(jù)可以類(lèi)似的方式進(jìn)行處理。在某一時(shí)間,本地存儲(chǔ)設(shè)備24提供消息,其提交所有使用同一序號(hào)發(fā)送的數(shù)據(jù)。一旦特定序號(hào)的數(shù)據(jù)已被提交,只緩存虛擬設(shè)備254、256中的非活動(dòng)態(tài)設(shè)備變成活動(dòng)態(tài),反之亦然。在這時(shí),來(lái)自只緩存虛擬設(shè)備254、256的當(dāng)前活動(dòng)態(tài)設(shè)備的數(shù)據(jù)被復(fù)制到標(biāo)準(zhǔn)邏輯設(shè)備252,而只緩存虛擬設(shè)備254、256中的非活動(dòng)態(tài)設(shè)備被用于接收從本地存儲(chǔ)設(shè)備24傳輸給遠(yuǎn)程存儲(chǔ)設(shè)備26的新數(shù)據(jù)(具有新的序號(hào))。
當(dāng)從只緩存虛擬設(shè)備254、256中的活動(dòng)態(tài)設(shè)備移除數(shù)據(jù)時(shí)(在本文別處描述),只緩存虛擬設(shè)備254、256中的活動(dòng)態(tài)設(shè)備中的對(duì)應(yīng)項(xiàng)可被設(shè)為空值。此外,假如槽中的數(shù)據(jù)不再為其它目的所需要(如將被降級(jí)到標(biāo)準(zhǔn)邏輯設(shè)備252),數(shù)據(jù)還可從高速緩存器244中移除(即該槽被返回到空閑槽池中以供后用)。一機(jī)制可用于確保數(shù)據(jù)不從高速緩存器242中移除,直到所有鏡像(包括只緩存虛擬設(shè)備254、256)均不再使用該數(shù)據(jù)為止。這樣的機(jī)制在1996年7月16日授予的美國(guó)專(zhuān)利5,537,568及2003年7月15日授予的美國(guó)專(zhuān)利6,594,742中描述,二者均通過(guò)引用組合于此。
在本文別處討論的一些實(shí)施例中,遠(yuǎn)程存儲(chǔ)設(shè)備26可包含鏈表258、262,類(lèi)似于本地存儲(chǔ)設(shè)備24使用的鏈表74、76。鏈表258、262可包含這樣的信息,其確定相應(yīng)的只緩存虛擬設(shè)備254、256中已被修改的槽,其中列表258、262之一對(duì)應(yīng)于只緩存虛擬設(shè)備254、256之一,及列表258、262中的另一列表對(duì)應(yīng)于只緩存虛擬設(shè)備254、256中的另一個(gè)。如本文別處所描述的,列表258、262可用于幫助從只緩存虛擬設(shè)備254、256恢復(fù)數(shù)據(jù)到標(biāo)準(zhǔn)邏輯設(shè)備252中。
參考圖8,流程圖270示出了與處理用于序號(hào)提交的數(shù)據(jù)有關(guān)的、由遠(yuǎn)程存儲(chǔ)設(shè)備26執(zhí)行的步驟,其中所述數(shù)據(jù)由本地存儲(chǔ)設(shè)備24傳輸給遠(yuǎn)程存儲(chǔ)設(shè)備26。如本文別處所描述的,本地存儲(chǔ)設(shè)備24定期遞增序號(hào)。當(dāng)其發(fā)生時(shí),本地存儲(chǔ)設(shè)備24結(jié)束在前序號(hào)的所有數(shù)據(jù)的傳輸并繼而發(fā)送一用于在前序號(hào)的提交信息。
處理開(kāi)始于第一步驟272,其接收提交。在步驟272之后是測(cè)定步驟274,其確定遠(yuǎn)程存儲(chǔ)設(shè)備26的只緩存虛擬設(shè)備254、256中的活動(dòng)態(tài)虛擬設(shè)備是否是空的。如本文別處所描述的,遠(yuǎn)程存儲(chǔ)設(shè)備26的只緩存虛擬設(shè)備254、256中的非活動(dòng)態(tài)虛擬設(shè)備用于積聚來(lái)自本地存儲(chǔ)設(shè)備24的使用RDF發(fā)送的數(shù)據(jù),而只緩存虛擬設(shè)備254、256中的活動(dòng)態(tài)虛擬設(shè)備被恢復(fù)到標(biāo)準(zhǔn)邏輯設(shè)備252。
如果在測(cè)定步驟274確定只緩存虛擬設(shè)備254、256中的活動(dòng)態(tài)虛擬設(shè)備不是空的,則控制從測(cè)定步驟274轉(zhuǎn)到步驟276,其中,在執(zhí)行進(jìn)一步的處理之前只緩存虛擬設(shè)備254、256中的活動(dòng)態(tài)虛擬設(shè)備的恢復(fù)被完成。從只緩存虛擬設(shè)備254、256中的活動(dòng)態(tài)虛擬設(shè)備恢復(fù)數(shù)據(jù)將在本文別處詳細(xì)描述。在處理提交并開(kāi)始恢復(fù)下一序號(hào)的數(shù)據(jù)之前只緩存虛擬設(shè)備254、256中的活動(dòng)態(tài)虛擬設(shè)備為空是有用的。
在步驟276之后或在步驟274之后(如果只緩存虛擬設(shè)備254、256中的活動(dòng)態(tài)虛擬設(shè)備被確定為空)是步驟278,只緩存虛擬設(shè)備254、256中的活動(dòng)態(tài)虛擬設(shè)備被使得為非活動(dòng)態(tài)。在步驟278之后是步驟282,只緩存虛擬設(shè)備254、256中先前非活動(dòng)態(tài)的虛擬設(shè)備(即在執(zhí)行步驟278之前為非活動(dòng)態(tài)的虛擬設(shè)備)被變成活動(dòng)態(tài)。在步驟278、282交換活動(dòng)態(tài)及非活動(dòng)態(tài)只緩存虛擬設(shè)備254、256準(zhǔn)備了只緩存虛擬設(shè)備254、256中的當(dāng)前非活動(dòng)態(tài)(及空)的虛擬設(shè)備以開(kāi)始從本地存儲(chǔ)設(shè)備24接收下一序號(hào)的數(shù)據(jù)。
在步驟282之后是步驟284,只緩存虛擬設(shè)備254、256中的活動(dòng)態(tài)虛擬設(shè)備被恢復(fù)到遠(yuǎn)程存儲(chǔ)設(shè)備26的標(biāo)準(zhǔn)邏輯設(shè)備252。將只緩存虛擬設(shè)備254、256中的活動(dòng)態(tài)虛擬設(shè)備恢復(fù)到標(biāo)準(zhǔn)邏輯設(shè)備252將在下文中詳細(xì)描述。然而,應(yīng)注意,在一些實(shí)施例中,恢復(fù)過(guò)程在步驟284開(kāi)始,但不必在步驟284就結(jié)束。在步驟284之后是步驟286,已從本地存儲(chǔ)設(shè)備24發(fā)送到遠(yuǎn)程存儲(chǔ)設(shè)備26的提交被確認(rèn)回到本地存儲(chǔ)設(shè)備24,使得本地存儲(chǔ)設(shè)備24被通知提交成功。在步驟286之后,處理結(jié)束。
參考圖9,流程圖300更詳細(xì)地示出了圖8的步驟276、284,其中遠(yuǎn)程存儲(chǔ)設(shè)備26恢復(fù)只緩存虛擬設(shè)備254、256中的活動(dòng)態(tài)虛擬設(shè)備。處理開(kāi)始于第一步驟302,指針被設(shè)定為指向只緩存虛擬設(shè)備254、256中的活動(dòng)態(tài)虛擬設(shè)備的第一槽。指針用于重復(fù)通過(guò)只緩存虛擬設(shè)備254、256中的活動(dòng)態(tài)虛擬設(shè)備的每一磁軌表項(xiàng),每一磁軌表項(xiàng)均被單獨(dú)處理。在步驟302之后是測(cè)定步驟304,其確定只緩存虛擬設(shè)備254、256中的活動(dòng)態(tài)虛擬設(shè)備的正被處理的磁軌是否指向標(biāo)準(zhǔn)邏輯設(shè)備252。如果是,則沒(méi)有東西需要恢復(fù)。否則,控制從步驟304轉(zhuǎn)到步驟306,只緩存虛擬設(shè)備254、256中的活動(dòng)態(tài)虛擬設(shè)備的相應(yīng)槽被鎖定。
在步驟306之后是測(cè)定步驟308,其確定標(biāo)準(zhǔn)邏輯設(shè)備252的相應(yīng)槽是否已經(jīng)在遠(yuǎn)程存儲(chǔ)設(shè)備26的高速緩存器中。如果是,則控制從測(cè)定步驟308轉(zhuǎn)到步驟312,標(biāo)準(zhǔn)邏輯設(shè)備的槽被鎖定。在步驟312之后是步驟314,來(lái)自只緩存虛擬設(shè)備254、256中的活動(dòng)態(tài)虛擬設(shè)備的數(shù)據(jù)與用于標(biāo)準(zhǔn)邏輯設(shè)備252的高速緩存器中的數(shù)據(jù)合并。在步驟314合并數(shù)據(jù)包括用只緩存虛擬設(shè)備254、256中的活動(dòng)態(tài)虛擬設(shè)備的新數(shù)據(jù)蓋寫(xiě)標(biāo)準(zhǔn)邏輯設(shè)備的數(shù)據(jù)。應(yīng)注意,在對(duì)記錄級(jí)標(biāo)志提供的實(shí)施例中,則可能簡(jiǎn)單地將新記錄從只緩存虛擬設(shè)備254、256中的活動(dòng)態(tài)虛擬設(shè)備或(OR)到高速緩存器中的標(biāo)準(zhǔn)邏輯設(shè)備252的記錄。即,如果記錄被交叉存取,則只需使用來(lái)自只緩存虛擬設(shè)備254、256中的活動(dòng)態(tài)虛擬設(shè)備的已改變的記錄,并將記錄提供給標(biāo)準(zhǔn)邏輯設(shè)備252的緩存槽。在步驟314之后是步驟316,標(biāo)準(zhǔn)邏輯設(shè)備252的槽被解鎖。在步驟316之后是步驟318,只緩存虛擬設(shè)備254、256中的活動(dòng)態(tài)虛擬設(shè)備的正被處理的槽也被解鎖。
如果在測(cè)定步驟308確定標(biāo)準(zhǔn)邏輯設(shè)備252的相應(yīng)槽不在高速緩存器中,則控制從測(cè)定步驟308轉(zhuǎn)到步驟322,改變標(biāo)準(zhǔn)邏輯設(shè)備252的槽的磁軌項(xiàng)以表明標(biāo)準(zhǔn)邏輯設(shè)備252的槽在高速緩存器中(如可設(shè)置IN_CACHE標(biāo)志)并需要被降級(jí)。如本文別處所述,在一些實(shí)施例中,只有具有適當(dāng)鏡像位設(shè)置的磁軌的記錄才需要被降級(jí)。在步驟322之后是步驟324,可設(shè)置磁軌的標(biāo)志以表明該磁軌的數(shù)據(jù)在高速緩存器中。
在步驟324之后是步驟326,標(biāo)準(zhǔn)邏輯設(shè)備252的槽指針被改變?yōu)橹赶蚋咚倬彺嫫髦械牟邸T诓襟E326之后是測(cè)定步驟328,其確定在步驟322、324、326執(zhí)行的操作是否已成功。在某些情況下,一稱(chēng)為“比較和交換”的操作可用于執(zhí)行步驟322、324、326。如果這些操作因任何原因而沒(méi)有成功,則控制從步驟328轉(zhuǎn)回到步驟308以重新檢查標(biāo)準(zhǔn)邏輯設(shè)備252的相應(yīng)磁軌是否在高速緩存器中。否則,如果在測(cè)定步驟328確定先前的操作均已成功,則控制從測(cè)定步驟328轉(zhuǎn)到步驟318,如上所述。
在步驟318之后是測(cè)定步驟332,其確定只緩存虛擬設(shè)備254、256中的活動(dòng)態(tài)虛擬設(shè)備的緩存槽(其正被恢復(fù))依然在使用。在某些情況下,只緩存虛擬設(shè)備254、256中的活動(dòng)態(tài)虛擬設(shè)備的槽可能依然正由另一鏡像使用。如果在測(cè)定步驟332確定只緩存虛擬設(shè)備的槽正由另一鏡像使用,則控制從測(cè)定步驟332轉(zhuǎn)到步驟334,釋放槽以為其它過(guò)程使用(如恢復(fù)到可用槽池中,如本文別處所述)。在步驟334之后是步驟336,指向下一槽以處理只緩存虛擬設(shè)備254、256中的活動(dòng)態(tài)虛擬設(shè)備的下一槽。應(yīng)注意,步驟336還可從測(cè)定步驟332到達(dá),如果在步驟332確定只緩存虛擬設(shè)備254、256中的活動(dòng)態(tài)虛擬設(shè)備仍然由另一鏡像使用的話。應(yīng)注意,如果在步驟304確定對(duì)于正處理的槽,只緩存虛擬設(shè)備254、256中的活動(dòng)態(tài)虛擬設(shè)備指向標(biāo)準(zhǔn)邏輯設(shè)備252,步驟336也可從測(cè)定步驟304到達(dá)。在步驟336之后是測(cè)定步驟338,其確定只緩存虛擬設(shè)備254、256中的活動(dòng)態(tài)虛擬設(shè)備是否有更多的槽要被處理。如果不是,則處理結(jié)束。否則,控制從測(cè)定步驟338轉(zhuǎn)回到步驟304。
在另一實(shí)施例中,可能對(duì)所接收的數(shù)據(jù)塊56建立已修改的槽的列表,數(shù)據(jù)塊56對(duì)應(yīng)于遠(yuǎn)程存儲(chǔ)設(shè)備26上的N-1周期,所述列表如圖7中所示的列表258、262。當(dāng)數(shù)據(jù)被接收時(shí),遠(yuǎn)程存儲(chǔ)設(shè)備26建立已修改的槽的鏈表。所建立的鏈表可以是周期的、線性的(具有NULL終止)、或任何其它適當(dāng)?shù)脑O(shè)計(jì)。鏈表接著可用于恢復(fù)只緩存虛擬設(shè)備254、256中的活動(dòng)態(tài)虛擬設(shè)備。
圖9的流程圖300示出了兩個(gè)二選一的通路342、344,其圖示了使用已修改的槽的列表的實(shí)施例的實(shí)施。在步驟302,指針(用于重復(fù)通過(guò)已修改的槽的列表)被使得指向列表的第一單元。在步驟302之后是步驟306,其由另一通路342到達(dá)。在使用已修改的槽的列表的實(shí)施例中,不需要測(cè)定步驟304,因?yàn)榱斜砩蠜](méi)有槽應(yīng)指向標(biāo)準(zhǔn)邏輯設(shè)備252。
在步驟306之后,如上以先前實(shí)施例所述,處理繼續(xù),除了步驟336為遍歷已修改的槽的列表而不是指向COVD中的下一槽以外。類(lèi)似地,在步驟338的測(cè)試確定指針是否在列表的末尾(或在周期鏈表的情況下回到開(kāi)始)。同樣,如果在步驟338確定有更多的槽要處理,則控制從步驟338轉(zhuǎn)到步驟306,如另一通路344所示。如上所述,對(duì)于使用已修改的槽的列表的實(shí)施例,步驟304可被排除。
參考圖10,流程圖350示出了連同本地存儲(chǔ)設(shè)備24增加序號(hào)執(zhí)行的步驟。處理開(kāi)始于第一步驟352,在增加序號(hào)之前本地存儲(chǔ)設(shè)備24等待至少M(fèi)秒。在在此的實(shí)施例中,M為30,當(dāng)然,M可以為任何數(shù)字。如果存儲(chǔ)設(shè)備24、26之間的通信中斷,較大的M值增加了可能丟失的數(shù)據(jù)的量。然而,較小的M值可能因更頻繁地遞增序號(hào)而增加內(nèi)務(wù)操作的總量。
在步驟352之后是測(cè)定步驟354,其確定是否本地存儲(chǔ)設(shè)備24的所有HA已設(shè)置位,其表明HA已完成在前序號(hào)的所有I/O。當(dāng)序號(hào)改變時(shí),每一HA注意到該改變并設(shè)置位,其表明在前序號(hào)的所有I/O完成。例如,如果序號(hào)從N-1變?yōu)镹,HA將在HA已完成序號(hào)N-1的所有I/O時(shí)設(shè)置位。注意,在某些情況下,HA的單一I/O可能需要很長(zhǎng)時(shí)間并可能在序號(hào)已改變之后仍然在進(jìn)行之中。還應(yīng)注意,對(duì)于某些系統(tǒng),可使用不同的機(jī)制來(lái)確定所有HA已完成它們的N-1I/O。不同的機(jī)制可包括檢查存儲(chǔ)器37中的設(shè)備表。
如果在測(cè)定步驟354確定來(lái)自在前序號(hào)的I/O已被完成,則控制從步驟354轉(zhuǎn)到測(cè)定步驟356,其確定列表74、76中的不活動(dòng)態(tài)列表是否是空的。應(yīng)注意,可不進(jìn)行序號(hào)轉(zhuǎn)換,除非及直到對(duì)應(yīng)于列表74、76的不活動(dòng)態(tài)列表的所有數(shù)據(jù)已使用RDF協(xié)議全部從本地存儲(chǔ)設(shè)備24傳輸?shù)竭h(yuǎn)程存儲(chǔ)設(shè)備26為止。一旦列表74、76中的不活動(dòng)態(tài)列表被確定為空,則控制從步驟356轉(zhuǎn)到步驟358,在前序號(hào)的提交從本地存儲(chǔ)設(shè)備24發(fā)送到遠(yuǎn)程存儲(chǔ)設(shè)備26。如上所述,遠(yuǎn)程存儲(chǔ)設(shè)備26接收特定序號(hào)的提交信息將使得遠(yuǎn)程存儲(chǔ)設(shè)備26開(kāi)始恢復(fù)對(duì)應(yīng)于序號(hào)的數(shù)據(jù)。
在步驟358之后是步驟362,對(duì)列表74、76中的不活動(dòng)態(tài)列表的數(shù)據(jù)復(fù)制被暫停。如本文別處所述,不活動(dòng)態(tài)列表被掃描以將相應(yīng)的數(shù)據(jù)從本地存儲(chǔ)設(shè)備24發(fā)送到遠(yuǎn)程存儲(chǔ)設(shè)備26。暫停復(fù)制數(shù)據(jù)直到序號(hào)轉(zhuǎn)換完成為止是有用的。在在此的實(shí)施例中,暫停通過(guò)發(fā)送消息給RA 30a-30c實(shí)現(xiàn)。然而,本領(lǐng)域一般技術(shù)人員應(yīng)該意識(shí)到的是,對(duì)于使用其它組件來(lái)幫助使用在此描述的系統(tǒng)發(fā)送數(shù)據(jù)的實(shí)施例,暫停復(fù)制可通過(guò)發(fā)送適當(dāng)?shù)南?指令給其它組件實(shí)現(xiàn)。
在步驟362之后是步驟364,其增加序號(hào)。在步驟364之后是步驟366,在測(cè)定步驟354中使用的HA的位均被清零,使得這些位可連同序號(hào)的增加而被再次設(shè)置。在步驟366之后是測(cè)定步驟372,其確定遠(yuǎn)程存儲(chǔ)設(shè)備26是否已確認(rèn)在步驟358發(fā)送的提交信息。確認(rèn)提交信息已在上面結(jié)合圖8進(jìn)行了描述。一旦確定遠(yuǎn)程存儲(chǔ)設(shè)備26已確認(rèn)在步驟358發(fā)送的提交信息,控制從步驟372轉(zhuǎn)到步驟374,在步驟362提供的暫停復(fù)制設(shè)定被解除,使得復(fù)制可重新開(kāi)始。在步驟374之后,處理結(jié)束。注意,從步驟374回到步驟352以開(kāi)始新的周期從而連續(xù)增加序號(hào)是可能的。
使用R1設(shè)備上的COVD來(lái)收集與活動(dòng)態(tài)數(shù)據(jù)和非活動(dòng)態(tài)數(shù)據(jù)塊相關(guān)的槽也是可能的。在這種情況下,正象R2設(shè)備處那樣,一COVD可與非活動(dòng)態(tài)序號(hào)相關(guān)聯(lián),而另一COVD可與活動(dòng)態(tài)序號(hào)相關(guān)聯(lián)。這將在下面討論。
參考圖11,圖表400示出了用于構(gòu)建和保持?jǐn)?shù)據(jù)塊52、54的項(xiàng)目。標(biāo)準(zhǔn)邏輯設(shè)備402包含由主機(jī)22寫(xiě)的數(shù)據(jù)并對(duì)應(yīng)于圖2的數(shù)據(jù)單元51和圖1的磁盤(pán)33a-33c。標(biāo)準(zhǔn)邏輯設(shè)備402包含由主機(jī)22寫(xiě)到本地存儲(chǔ)設(shè)備24的數(shù)據(jù)。
兩個(gè)只緩存虛擬設(shè)備404、406可與標(biāo)準(zhǔn)邏輯設(shè)備402一起使用。只緩存虛擬設(shè)備404、406對(duì)應(yīng)可能保存在本地存儲(chǔ)設(shè)備24的存儲(chǔ)器37中的設(shè)備表。每一只緩存虛擬設(shè)備404、406的表的每一磁軌項(xiàng)或指向標(biāo)準(zhǔn)邏輯設(shè)備402的磁軌或指向連同本地存儲(chǔ)設(shè)備24使用的高速緩存器408的槽。在某些實(shí)施例中,高速緩存器408可被提供在本地存儲(chǔ)設(shè)備24的存儲(chǔ)器37中。
高速緩存器408包含多個(gè)緩存槽412-414,其可連同對(duì)標(biāo)準(zhǔn)邏輯設(shè)備402進(jìn)行寫(xiě)一起使用,同時(shí),還可連同只緩存虛擬設(shè)備404、406一起使用。在在此的實(shí)施例中,只緩存虛擬設(shè)備404、406的每一磁軌表項(xiàng)包含一空值以指向標(biāo)準(zhǔn)邏輯設(shè)備402的相應(yīng)磁軌。否則,每一只緩存虛擬設(shè)備404、406的磁軌表中的項(xiàng)包含指向高速緩存器408中的槽412-414之一的指針。
每一只緩存虛擬設(shè)備404、406可用于數(shù)據(jù)塊52、54之一,從而,例如,只緩存虛擬設(shè)備404可對(duì)應(yīng)于數(shù)據(jù)塊52(序號(hào)N),而只緩存虛擬設(shè)備406可對(duì)應(yīng)于數(shù)據(jù)塊54(序號(hào)N-1)。因此,當(dāng)數(shù)據(jù)由主機(jī)22寫(xiě)到本地存儲(chǔ)設(shè)備24時(shí),數(shù)據(jù)被提供給高速緩存器408且只緩存虛擬設(shè)備404的適當(dāng)指針被調(diào)整。應(yīng)注意,數(shù)據(jù)將不從高速緩存器408中移除,直到數(shù)據(jù)被降級(jí)到標(biāo)準(zhǔn)邏輯設(shè)備402為止,且數(shù)據(jù)還由只緩存虛擬設(shè)備404釋放,如本文別處所述。
在在此的實(shí)施例中,只緩存虛擬設(shè)備404、406之一被視為“活動(dòng)態(tài)”,而另一只緩存虛擬設(shè)備被視為“非活動(dòng)態(tài)”。因而,例如,當(dāng)序號(hào)N為偶數(shù)時(shí),只緩存虛擬設(shè)備404可以為活動(dòng)態(tài),而只緩存虛擬設(shè)備406為非活動(dòng)態(tài)。只緩存虛擬設(shè)備404、406中的活動(dòng)態(tài)虛擬設(shè)備處理來(lái)自主機(jī)22的寫(xiě),而只緩存虛擬設(shè)備404、406中的非活動(dòng)態(tài)虛擬設(shè)備對(duì)應(yīng)于正從本地存儲(chǔ)設(shè)備24傳輸?shù)竭h(yuǎn)程存儲(chǔ)設(shè)備26的數(shù)據(jù)。
當(dāng)主機(jī)22所寫(xiě)的數(shù)據(jù)使用只緩存虛擬設(shè)備404、406中的活動(dòng)態(tài)虛擬設(shè)備進(jìn)行積聚時(shí)(對(duì)于序號(hào)N),對(duì)應(yīng)于只緩存虛擬設(shè)備404、406中的非活動(dòng)態(tài)虛擬設(shè)備的數(shù)據(jù)(對(duì)于在前序號(hào)N-1)從本地存儲(chǔ)設(shè)備24傳輸?shù)竭h(yuǎn)程存儲(chǔ)設(shè)備26。對(duì)于本實(shí)施例及有關(guān)的實(shí)施例,本地存儲(chǔ)設(shè)備的DA 35a-35c處理對(duì)只緩存虛擬設(shè)備404、406的不活動(dòng)態(tài)虛擬設(shè)備的掃描以將復(fù)制請(qǐng)求發(fā)送給一個(gè)或多個(gè)RA 30a-30c從而將數(shù)據(jù)從本地存儲(chǔ)設(shè)備24傳輸?shù)竭h(yuǎn)程存儲(chǔ)設(shè)備26。因而,上述與暫停和重新開(kāi)始復(fù)制有關(guān)的步驟362、374可包括提供消息/指令給DA35a-35c。
一旦數(shù)據(jù)已被傳輸給遠(yuǎn)程存儲(chǔ)設(shè)備26,只緩存虛擬設(shè)備404、406的非活動(dòng)態(tài)虛擬設(shè)備中的對(duì)應(yīng)項(xiàng)可被設(shè)定為空值。此外,如果槽中的數(shù)據(jù)不再因另外的目的所需要(如要被降級(jí)到標(biāo)準(zhǔn)邏輯設(shè)備402),數(shù)據(jù)還可從高速緩存器408中移除(即槽被返回到槽池中以供后用)。一機(jī)制可用于確保數(shù)據(jù)不被從高速緩存器408移除,直到所有鏡像(包括只緩存虛擬設(shè)備404、406)不再使用該數(shù)據(jù)為止。這樣的機(jī)制在1996年7月16日授予的美國(guó)專(zhuān)利5,537,568及2003年7月15日授予的美國(guó)專(zhuān)利6,594,742中描述,二者均通過(guò)引用組合于此。
參考圖12,流程圖400示出了連同主機(jī)22執(zhí)行寫(xiě)操作由HA28執(zhí)行的步驟,其是針對(duì)兩個(gè)COVD均由R1設(shè)備使用以提供在此描述的系統(tǒng)的實(shí)施例。處理開(kāi)始于第一步驟442,對(duì)應(yīng)于寫(xiě)的槽被鎖定。在在此的實(shí)施例中,高速緩存器408的每一槽412-414對(duì)應(yīng)于標(biāo)準(zhǔn)邏輯設(shè)備402上的數(shù)據(jù)磁軌。在步驟442鎖定槽可在HA28執(zhí)行的處理期間阻止另外的過(guò)程在相應(yīng)的槽上運(yùn)行,所述HA28執(zhí)行的處理對(duì)應(yīng)于流程圖440的步驟。
在步驟442之后為步驟444,序號(hào)N的值被設(shè)定。正象使用列表而不是在R1側(cè)上使用COVD的實(shí)施例那樣,在步驟444獲得的序號(hào)的值在HA28執(zhí)行的整個(gè)寫(xiě)操作期間均被保持,且槽被鎖定。如本文別處所述,序號(hào)被分配給每一寫(xiě)以設(shè)定數(shù)據(jù)塊52、54之一屬于哪一寫(xiě)。主機(jī)22執(zhí)行的寫(xiě)被分配以當(dāng)前序號(hào)。單一寫(xiě)操作始終保持相同的序號(hào)是有用的。
在步驟444之后是測(cè)定步驟446,其確定只緩存虛擬設(shè)備404、406中的非活動(dòng)態(tài)虛擬設(shè)備是否已經(jīng)指向在步驟442鎖定的槽。這可能在序號(hào)小于當(dāng)前序號(hào)時(shí)如果對(duì)同一槽的寫(xiě)已被提供的情況下發(fā)生。對(duì)應(yīng)于在前序號(hào)的寫(xiě)的數(shù)據(jù)可能尚未被傳輸給遠(yuǎn)程存儲(chǔ)設(shè)備26。
如果在測(cè)定步驟446確定只緩存虛擬設(shè)備404、406中的非活動(dòng)態(tài)虛擬設(shè)備沒(méi)有指向該槽,則控制從測(cè)定步驟446轉(zhuǎn)到另一測(cè)定步驟448,其確定只緩存虛擬設(shè)備404、406中的活動(dòng)態(tài)虛擬設(shè)備是否指向該槽。如果在序號(hào)與當(dāng)前序號(hào)相同時(shí)先前已有對(duì)該槽的寫(xiě),則只緩存虛擬設(shè)備404、406中的活動(dòng)態(tài)虛擬設(shè)備指向該槽是可能的。如果在測(cè)定步驟448確定只緩存虛擬設(shè)備404、406中的活動(dòng)態(tài)虛擬設(shè)備沒(méi)有指向該槽,則控制從測(cè)定步驟448轉(zhuǎn)到步驟452,為數(shù)據(jù)獲得新槽。在步驟452之后是步驟454,只緩存虛擬設(shè)備404、406中的活動(dòng)態(tài)虛擬設(shè)備被使得指向該槽。
在步驟454之后或在步驟448之后(如果只緩存虛擬設(shè)備404、406的活動(dòng)態(tài)虛擬設(shè)備指向該槽)是步驟456,設(shè)置標(biāo)志。在步驟456,RDF_WP標(biāo)志(RDF寫(xiě)未決標(biāo)志)被設(shè)定以表明該槽需要使用RDF傳輸給遠(yuǎn)程存儲(chǔ)設(shè)備26。此外,在步驟456,IN_CACHE標(biāo)志被設(shè)定以表明該槽需要被降級(jí)到標(biāo)準(zhǔn)邏輯設(shè)備402。應(yīng)注意,在某些情況下,如果只緩存虛擬設(shè)備404、406的活動(dòng)態(tài)虛擬設(shè)備已經(jīng)指向該槽(如在步驟448確定),則RDF_WP和IN_CACHE標(biāo)志在執(zhí)行步驟456前已被設(shè)定是可能的。然而,在步驟456設(shè)置標(biāo)志確保標(biāo)志被正確地設(shè)置,而不管先前的狀態(tài)如何。
在步驟456之后是步驟458,指向該槽的磁軌表中的間接標(biāo)志被清零,以表明有關(guān)數(shù)據(jù)被提供在該槽中而不是在間接指向其的另外的槽中。在步驟458之后是步驟462,正由主機(jī)22和HA28寫(xiě)的數(shù)據(jù)被寫(xiě)到該槽中。在步驟462之后是步驟464,其解鎖槽。在步驟464之后,處理結(jié)束。
如果在測(cè)定步驟446確定只緩存虛擬設(shè)備404、406中的非活動(dòng)態(tài)虛擬設(shè)備指向該槽,則控制從步驟446轉(zhuǎn)到步驟472,其獲得新槽。在步驟472獲得的新槽可用于只緩存虛擬設(shè)備404、406的非活動(dòng)態(tài)虛擬設(shè)備以實(shí)現(xiàn)RDF傳輸,同時(shí)舊槽可與只緩存虛擬設(shè)備404、406的活動(dòng)態(tài)虛擬設(shè)備相關(guān)聯(lián),如下所述。
在步驟472之后是步驟474,舊槽的數(shù)據(jù)被復(fù)制到在步驟472獲得的新槽。在步驟474之后是步驟476,(上述的)間接標(biāo)志被設(shè)定以表明只緩存虛擬設(shè)備404、406的非活動(dòng)態(tài)虛擬設(shè)備的磁軌表項(xiàng)指向舊槽及表明數(shù)據(jù)在舊槽所指向的新槽中。因此,在步驟476設(shè)置間接標(biāo)志影響只緩存虛擬設(shè)備404、406的非活動(dòng)態(tài)虛擬設(shè)備的磁軌表從而導(dǎo)致磁軌表項(xiàng)表明數(shù)據(jù)在新槽中。
在步驟476之后是步驟478,新槽中的記錄的鏡像位被調(diào)整。當(dāng)數(shù)據(jù)在步驟474從舊槽復(fù)制到新槽時(shí),被復(fù)制的任何本地鏡像位均被清零,因?yàn)樾虏鄣哪康闹皇呛?jiǎn)單地實(shí)現(xiàn)對(duì)只緩存虛擬設(shè)備的非活動(dòng)態(tài)虛擬設(shè)備的RDF傳輸。舊槽將用于處理任何本地鏡像。在步驟478之后是步驟462,數(shù)據(jù)被寫(xiě)到槽中。在步驟462之后是步驟464,解鎖槽。在步驟464之后,處理結(jié)束。
參考圖13,流程圖500示出了連同本地存儲(chǔ)設(shè)備24將數(shù)據(jù)塊54傳輸給遠(yuǎn)程存儲(chǔ)設(shè)備26所執(zhí)行的步驟。傳輸實(shí)質(zhì)上包括對(duì)只緩存虛擬設(shè)備404、406的非活動(dòng)態(tài)虛擬設(shè)備先前在活動(dòng)態(tài)時(shí)的重復(fù)操作期間已寫(xiě)到那里的磁軌,掃描只緩存虛擬設(shè)備404、406的非活動(dòng)態(tài)虛擬設(shè)備。在該實(shí)施例中,本地存儲(chǔ)設(shè)備24的DA35a-35c掃描只緩存虛擬設(shè)備404、406的非活動(dòng)態(tài)虛擬設(shè)備以通過(guò)一個(gè)或多個(gè)RA30a-30c、使用RDF協(xié)議將需要傳輸?shù)臄?shù)據(jù)復(fù)制到遠(yuǎn)程存儲(chǔ)設(shè)備26。
處理開(kāi)始于第一步驟502,指向只緩存虛擬設(shè)備404、406的非活動(dòng)態(tài)虛擬設(shè)備的第一磁軌以開(kāi)始通過(guò)所有磁軌的重復(fù)過(guò)程。在第一步驟502之后是測(cè)定步驟504,其確定RDF_WP標(biāo)志是否已被設(shè)定。如本文別處所述,RDF_WP標(biāo)志被用于表明槽(磁軌)包含需要經(jīng)RDF鏈路傳輸?shù)臄?shù)據(jù)。被設(shè)置的RDF_WP標(biāo)志表明槽(磁軌)中的至少部分?jǐn)?shù)據(jù)將使用RDF傳輸。在在此的實(shí)施例中,整個(gè)槽均不被傳輸。而是,只有槽內(nèi)具有適當(dāng)?shù)溺R像位設(shè)置(表明記錄已改變)的記錄才被傳輸給遠(yuǎn)程存儲(chǔ)設(shè)備26。然而,在其它實(shí)施例中,假如遠(yuǎn)程存儲(chǔ)設(shè)備26只寫(xiě)對(duì)應(yīng)于具有適當(dāng)鏡像位設(shè)置的記錄的數(shù)據(jù)并忽略磁軌的其它數(shù)據(jù),則可能傳輸整個(gè)槽,其可以是也可不是有效的。
如果在測(cè)定步驟504確定被處理的緩存器具有RDF_WP標(biāo)志設(shè)置,則控制從步驟504轉(zhuǎn)到測(cè)定步驟505,其確定槽是否包含數(shù)據(jù)或確定槽是否是指向包含相關(guān)數(shù)據(jù)的另一槽的間接槽。在某些情況下,槽可能不包含對(duì)應(yīng)于槽的磁盤(pán)部分的數(shù)據(jù)。即槽可能是指向包含數(shù)據(jù)的另一槽的間接槽。如果在步驟505確定槽是間接槽,則控制從步驟505轉(zhuǎn)到步驟506,獲取數(shù)據(jù)(從間接槽指向的槽獲取)。因而,如果槽是直接槽,正由RDF發(fā)送的數(shù)據(jù)被保存在該槽中,而如果槽是間接槽,則正由RDF發(fā)送的數(shù)據(jù)被保存在由間接槽所指向的另一槽中。
在步驟506之后或步驟505(如果槽是直接槽)是步驟507,正被發(fā)送的數(shù)據(jù)(直接或間接從槽)由DA 35a-35c之一復(fù)制以使用RDF協(xié)議從本地存儲(chǔ)設(shè)備24發(fā)送到遠(yuǎn)程存儲(chǔ)設(shè)備26。在步驟507之后是測(cè)定步驟508,其確定遠(yuǎn)程存儲(chǔ)設(shè)備26是否已確認(rèn)數(shù)據(jù)的接收。如果否,則控制從步驟508轉(zhuǎn)回到步驟507以重新發(fā)送數(shù)據(jù)。在其它實(shí)施例中,不同的及更多有關(guān)的處理可用于發(fā)送數(shù)據(jù)并確認(rèn)其接收。這樣的處理可包括錯(cuò)誤報(bào)告及其它處理,其是在一定量的發(fā)送數(shù)據(jù)的嘗試失敗之后執(zhí)行的處理。
一旦在測(cè)定步驟508確定數(shù)據(jù)已被成功發(fā)送,控制從步驟508轉(zhuǎn)到步驟512以清零RDF_WP標(biāo)志(因?yàn)閿?shù)據(jù)已經(jīng)RDF成功發(fā)送)。在步驟512之后是步驟514,適當(dāng)?shù)溺R像標(biāo)志被清零以表明至少RDF鏡像(R2)不再需要數(shù)據(jù)。在在此的實(shí)施例中,作為槽(磁軌)的一部分的每一記錄具有各自的鏡像標(biāo)志,其表明哪些鏡像使用特定的記錄。R2設(shè)備是每一記錄的鏡像之一且是對(duì)應(yīng)于R2設(shè)備的標(biāo)志在步驟514被清零。
在步驟514之后是測(cè)定步驟516,其確定正被處理的磁軌的任意記錄是否具有任意其它鏡像標(biāo)志設(shè)置(對(duì)于其它鏡像設(shè)備)。如果否,則控制從步驟516轉(zhuǎn)到步驟518,其釋放槽(即不再被使用)。在一些實(shí)施例中,未使用的槽可被保持在可用槽池中。應(yīng)注意,對(duì)于槽的一些記錄,如果另外的標(biāo)志仍被設(shè)置,則可能意味著記錄需要被降級(jí)到標(biāo)準(zhǔn)邏輯設(shè)備402或正由一些其它鏡像(包括另一R2設(shè)備)使用。在步驟518之后,或在步驟516之后(如果更多的鏡像標(biāo)志存在)是步驟522,用于重復(fù)通過(guò)只緩存虛擬設(shè)備404、406的非活動(dòng)態(tài)虛擬設(shè)備的每一磁軌項(xiàng)的指針被使得指向下一磁軌。在步驟522之后是測(cè)定步驟524,其確定只緩存虛擬設(shè)備404、406中的非活動(dòng)態(tài)虛擬設(shè)備是否有更多的磁軌要被處理。如果否,則處理結(jié)束。否則,控制轉(zhuǎn)回到測(cè)定步驟504,如上所述。注意,如果確定對(duì)于正被處理的磁軌RDF_WP標(biāo)志未被設(shè)置,步驟522還可從測(cè)定步驟504到達(dá)。
參考圖14,圖表700示出了主機(jī)702連接到多個(gè)本地存儲(chǔ)設(shè)備703-705。圖表700還示出了多個(gè)遠(yuǎn)程存儲(chǔ)設(shè)備706-708。盡管圖表700中只示出了三個(gè)本地存儲(chǔ)設(shè)備703-705和三個(gè)遠(yuǎn)程存儲(chǔ)設(shè)備706-708,在此描述的系統(tǒng)可擴(kuò)展到使用任意數(shù)量的本地和遠(yuǎn)程存儲(chǔ)設(shè)備。
本地存儲(chǔ)設(shè)備703-705中的每一個(gè)連接到相應(yīng)的遠(yuǎn)程存儲(chǔ)設(shè)備706-708,從而,例如,本地存儲(chǔ)設(shè)備703連接到遠(yuǎn)程存儲(chǔ)設(shè)備706,本地存儲(chǔ)設(shè)備704連接到遠(yuǎn)程存儲(chǔ)設(shè)備707,及本地存儲(chǔ)設(shè)備705連接到遠(yuǎn)程存儲(chǔ)設(shè)備708。本地存儲(chǔ)設(shè)備703-705和遠(yuǎn)程存儲(chǔ)設(shè)備706-708可使用在此描述的排序的寫(xiě)機(jī)制進(jìn)行連接,從而,例如,本地存儲(chǔ)設(shè)備703可使用排序的寫(xiě)機(jī)制連接到遠(yuǎn)程存儲(chǔ)設(shè)備706。如本文別處所述,排序的寫(xiě)機(jī)制允許在本地存儲(chǔ)設(shè)備和/或主機(jī)停止工作和/或丟失數(shù)據(jù)的情況下通過(guò)使用遠(yuǎn)程存儲(chǔ)設(shè)備而進(jìn)行數(shù)據(jù)恢復(fù)。
在一些情況下,主機(jī)702可運(yùn)行單個(gè)應(yīng)用程序,其同時(shí)使用一個(gè)以上的本地存儲(chǔ)設(shè)備703-705。在這種情況下,應(yīng)用程序可被配置以確保如果主機(jī)702要在任意時(shí)間中止工作和/或如果本地存儲(chǔ)設(shè)備703-705之一發(fā)生故障,則應(yīng)用數(shù)據(jù)是一致的(可恢復(fù)的)。然而,由于本地存儲(chǔ)設(shè)備703-705和遠(yuǎn)程存儲(chǔ)設(shè)備706-708之間的每一排序的寫(xiě)連接與其它連接不同步,則不能確保用于應(yīng)用程序的數(shù)據(jù)將在遠(yuǎn)程存儲(chǔ)設(shè)備706-708是一致的(因而可恢復(fù))。即,例如,即使本地存儲(chǔ)設(shè)備703和遠(yuǎn)程存儲(chǔ)設(shè)備706(第一本地/遠(yuǎn)程對(duì))之間的數(shù)據(jù)連接是一致的,且本地存儲(chǔ)設(shè)備704和遠(yuǎn)程存儲(chǔ)設(shè)備707(第二本地/遠(yuǎn)程對(duì))之間的數(shù)據(jù)連接是一致的,如果在第一和第二本地/遠(yuǎn)程對(duì)之間沒(méi)有同步,則遠(yuǎn)程存儲(chǔ)設(shè)備706、707上的數(shù)據(jù)不必定總是一致的。
對(duì)于主機(jī)702上同時(shí)使用多個(gè)本地存儲(chǔ)設(shè)備703-705的應(yīng)用程序,可能希望使數(shù)據(jù)在遠(yuǎn)程存儲(chǔ)設(shè)備706-708是一致且可恢復(fù)的。這可由主機(jī)702控制每一本地存儲(chǔ)設(shè)備703-705處的周期轉(zhuǎn)換(cycleswitch)實(shí)現(xiàn),從而來(lái)自主機(jī)702上運(yùn)行的應(yīng)用程序的數(shù)據(jù)在遠(yuǎn)程存儲(chǔ)設(shè)備706-708是一致且可恢復(fù)的。該功能由在主機(jī)702上運(yùn)行的特別應(yīng)用程序提供,其將多個(gè)本地存儲(chǔ)設(shè)備703-705轉(zhuǎn)換為多盒模式,如下所詳述的。
參考圖15,表730具有多個(gè)項(xiàng)732-734。每一項(xiàng)732-734對(duì)應(yīng)于存儲(chǔ)設(shè)備的單一本地/遠(yuǎn)程對(duì),例如,項(xiàng)732可對(duì)應(yīng)于本地存儲(chǔ)設(shè)備703和遠(yuǎn)程存儲(chǔ)設(shè)備706的對(duì),項(xiàng)733可對(duì)應(yīng)于本地存儲(chǔ)設(shè)備704和遠(yuǎn)程存儲(chǔ)設(shè)備707的對(duì),而項(xiàng)734可對(duì)應(yīng)于本地存儲(chǔ)設(shè)備705和遠(yuǎn)程存儲(chǔ)設(shè)備708的對(duì)。項(xiàng)732-734中的每一項(xiàng)具有多個(gè)字段,其中第一字段736a-736c代表相應(yīng)的本地存儲(chǔ)設(shè)備的序號(hào),第二字段738a-738c代表多盒組(multi-box group)使用的會(huì)話數(shù)量,第三字段742a-742c代表本地/遠(yuǎn)程對(duì)的相應(yīng)遠(yuǎn)程存儲(chǔ)設(shè)備的序號(hào),第四字段744a-744c代表多盒組的會(huì)話數(shù)量。連同在多盒模式下工作,表730由主機(jī)702構(gòu)建和保持。此外,表730被傳達(dá)給本地存儲(chǔ)設(shè)備和遠(yuǎn)程存儲(chǔ)設(shè)備中的每一個(gè),這些設(shè)備是多盒組的一部分。表730可用于幫助恢復(fù),如下詳述的那樣。
不同的本地/遠(yuǎn)程對(duì)可以任何順序在任何時(shí)間單獨(dú)進(jìn)入和退出多盒模式。主機(jī)702管理本地存儲(chǔ)設(shè)備/遠(yuǎn)程存儲(chǔ)設(shè)備對(duì)進(jìn)入和退出多盒模式。這將在下面詳述。
參考圖16,流程圖750示出了主機(jī)702執(zhí)行的與本地/遠(yuǎn)程對(duì)進(jìn)入或退出多盒模式有關(guān)的步驟。處理開(kāi)始于第一步驟752,多盒模式操作被臨時(shí)暫停。在步驟752臨時(shí)暫停多盒操作可用于促進(jìn)連同遠(yuǎn)程/本地對(duì)進(jìn)入或退出多盒模式做出的變化。在步驟752之后是步驟754,象圖15的表730的表被修改以添加或刪除項(xiàng),合理地進(jìn)行。在步驟754之后是步驟756,修改后的表被傳送給多盒組的本地存儲(chǔ)設(shè)備和遠(yuǎn)程存儲(chǔ)設(shè)備。在步驟756傳送表有利于恢復(fù),如本文別處所詳細(xì)描述的。
在步驟756之后是步驟758,消息被發(fā)送給受影響的本地存儲(chǔ)設(shè)備以提供該變化。本地存儲(chǔ)設(shè)備可配置其自身以在或不在多盒模式下運(yùn)行,如本文別處所詳細(xì)描述的。如下面詳細(xì)描述的,處理排序的寫(xiě)的本地存儲(chǔ)設(shè)備根據(jù)其是否作為多盒組的一部分運(yùn)行而不同地運(yùn)行。如果本地存儲(chǔ)設(shè)備正被添加到多盒組,則在步驟758發(fā)送的消息向本地存儲(chǔ)設(shè)備指明其正被添加到多盒組,從而本地存儲(chǔ)設(shè)備應(yīng)配置其自身以在多盒模式下運(yùn)行?;蛘?,如果本地存儲(chǔ)設(shè)備正被從多盒組中移除,在步驟758發(fā)送的消息向本地存儲(chǔ)設(shè)備指明其正被從多盒組中移除,從而本地存儲(chǔ)設(shè)備應(yīng)配置其自身以不在多盒模式下運(yùn)行。
在步驟758之后是測(cè)定步驟762,其確定本地/遠(yuǎn)程對(duì)是否正被添加到多盒組中(與被移除相反)。如果是,則控制從測(cè)定步驟762轉(zhuǎn)到步驟764,標(biāo)簽值被發(fā)送給正被添加的本地存儲(chǔ)設(shè)備。標(biāo)簽值被提供給從本地存儲(chǔ)設(shè)備傳輸給遠(yuǎn)程存儲(chǔ)設(shè)備的數(shù)據(jù),其方式類(lèi)似于給數(shù)據(jù)提供序號(hào)。標(biāo)簽值由主機(jī)控制和設(shè)定,從而所有本地/遠(yuǎn)程對(duì)在同一周期期間發(fā)送具有同一標(biāo)簽值的數(shù)據(jù)。標(biāo)簽值的使用將在下面詳細(xì)討論。在步驟764之后或步驟762之后(如果新的本地/遠(yuǎn)程對(duì)未被添加)是步驟766,重新開(kāi)始多盒操作。在步驟766之后,處理結(jié)束。
參考圖17,流程圖780示出了所執(zhí)行的與主機(jī)管理多個(gè)本地/遠(yuǎn)程對(duì)的周期切換有關(guān)的步驟,多個(gè)本地/遠(yuǎn)程對(duì)作為多盒模式下的組運(yùn)行。如本文別處所論述的,多盒模式包括使主機(jī)同步一個(gè)以上遠(yuǎn)程/本地對(duì)的周期轉(zhuǎn)換以在遠(yuǎn)程存儲(chǔ)設(shè)備之間保持?jǐn)?shù)據(jù)一致性。周期轉(zhuǎn)換由主機(jī)調(diào)整而不是由本地存儲(chǔ)設(shè)備內(nèi)部產(chǎn)生。這將在下面詳述。
流程圖780的處理開(kāi)始于測(cè)定步驟782,其確定M秒是否已逝去。正如非多盒操作那樣,周期轉(zhuǎn)換每M秒就發(fā)生一次,其中M是選擇來(lái)優(yōu)化多個(gè)性能參數(shù)的數(shù)字。當(dāng)M增加時(shí),與轉(zhuǎn)換相關(guān)的內(nèi)務(wù)操作量則減少。然而,增加M也使得與故障有關(guān)的潛在數(shù)據(jù)損失也增加。在在此的實(shí)施例中,M被選擇為30秒,盡管也可使用其它M值。
如果在測(cè)定步驟782確定M秒尚未逝去,則控制轉(zhuǎn)回到步驟782以繼續(xù)等待直到M秒已逝去為止。一旦在測(cè)定步驟782確定M秒已逝去,控制從步驟782轉(zhuǎn)到步驟784,主機(jī)詢問(wèn)多盒組中的所有本地存儲(chǔ)設(shè)備以確定是否所有本地/遠(yuǎn)程對(duì)均已準(zhǔn)備好轉(zhuǎn)換。準(zhǔn)備好轉(zhuǎn)換的本地/遠(yuǎn)程對(duì)將在下文中詳述。
在步驟784之后是測(cè)定步驟786,其確定是否所有本地/遠(yuǎn)程對(duì)均已準(zhǔn)備好轉(zhuǎn)換。如果否,控制轉(zhuǎn)回到步驟784以重新開(kāi)始詢問(wèn)。在在此的實(shí)施例中,只需要詢問(wèn)先前未準(zhǔn)備好轉(zhuǎn)換的本地/遠(yuǎn)程對(duì),因?yàn)椋坏┍镜?遠(yuǎn)程對(duì)準(zhǔn)備好轉(zhuǎn)換,該對(duì)保持這種狀態(tài)直到轉(zhuǎn)換發(fā)生為止。
一旦在測(cè)定步驟786確定多盒組中的所有本地/遠(yuǎn)程對(duì)均準(zhǔn)備轉(zhuǎn)換,控制從步驟786轉(zhuǎn)到步驟788,下標(biāo)變量N被設(shè)定為等于1。下標(biāo)變量N用于重復(fù)通過(guò)所有本地/遠(yuǎn)程對(duì)(即圖15的表730的所有項(xiàng)732-734)。在步驟788之后是測(cè)定步驟792,其確定下標(biāo)變量N是否大于多盒組中的本地/遠(yuǎn)程對(duì)的數(shù)量。如果否,則控制從步驟792轉(zhuǎn)到步驟794,對(duì)第N對(duì)的第N本地存儲(chǔ)設(shè)備進(jìn)行開(kāi)窗口,其通過(guò)主機(jī)發(fā)送指令(如適當(dāng)?shù)南到y(tǒng)指令)給第N本地存儲(chǔ)設(shè)備進(jìn)行。在步驟794對(duì)第N本地存儲(chǔ)設(shè)備開(kāi)窗口將導(dǎo)致第N本地存儲(chǔ)設(shè)備暫停寫(xiě),從而由主機(jī)進(jìn)行的、不是在步驟794開(kāi)窗口之前開(kāi)始的任何寫(xiě)將不被完成,直到窗口關(guān)閉為止(如下述)。未完成寫(xiě)操作將阻止第二依賴的寫(xiě)在完成周期轉(zhuǎn)換之前出現(xiàn)。任何進(jìn)行中的、在開(kāi)窗口之前開(kāi)始的寫(xiě)可在窗口關(guān)閉之前完成。
在步驟794之后是步驟796,第N本地存儲(chǔ)設(shè)備的周期轉(zhuǎn)換被執(zhí)行。在步驟796執(zhí)行周期轉(zhuǎn)換包括從主機(jī)702發(fā)送指令給第N本地存儲(chǔ)設(shè)備。第N本地存儲(chǔ)設(shè)備處理來(lái)自主機(jī)的指令將在下面詳細(xì)描述。在步驟796執(zhí)行的處理的一部分可包括使主機(jī)向分配給數(shù)據(jù)的標(biāo)簽提供新值。標(biāo)簽在本文別處詳細(xì)描述。在另一實(shí)施例中,在步驟794、796執(zhí)行的操作可被執(zhí)行為單一合成步驟797,其被圖示為在步驟794、796周?chē)?huà)的框。
在步驟796之后是步驟798,遞增下標(biāo)變量N。在步驟798之后,控制轉(zhuǎn)回到測(cè)定步驟792以確定下標(biāo)變量N是否大于本地/遠(yuǎn)程對(duì)的數(shù)量。
如果在測(cè)定步驟792確定下標(biāo)變量N大于本地/遠(yuǎn)程對(duì)的數(shù)量,則控制從測(cè)定步驟792轉(zhuǎn)到步驟802,下標(biāo)變量N被設(shè)定為等于1。在步驟802之后是測(cè)定步驟804,其確定下標(biāo)變量N是否大于本地/遠(yuǎn)程對(duì)。如果否,則控制從步驟804轉(zhuǎn)到步驟806,第N本地存儲(chǔ)設(shè)備的窗口被關(guān)閉。在步驟806關(guān)閉窗口由主機(jī)發(fā)送指令給第N本地存儲(chǔ)設(shè)備以使第N本地存儲(chǔ)設(shè)備重新開(kāi)始寫(xiě)操作進(jìn)行。因而,在執(zhí)行步驟806之后,任何由在步驟794開(kāi)窗口暫停的、進(jìn)行中的寫(xiě)現(xiàn)在可被完成。在步驟806之后,控制轉(zhuǎn)到步驟808,遞增下標(biāo)變量N。在步驟808之后,控制轉(zhuǎn)回到測(cè)定步驟804以確定下標(biāo)變量N是否大于本地/遠(yuǎn)程對(duì)的數(shù)量。如果是,則控制從測(cè)定步驟804轉(zhuǎn)回到步驟782以開(kāi)始下一周期轉(zhuǎn)換的處理。
參考圖18,流程圖830示出了本地存儲(chǔ)設(shè)備執(zhí)行的與周期轉(zhuǎn)換有關(guān)的步驟。在本地存儲(chǔ)設(shè)備既支持多盒發(fā)生又支持非多盒模式的情況下,圖18的流程圖830代替圖10的流程圖350。即,流程圖830示出了所執(zhí)行的與圖10的流程圖350類(lèi)似的步驟以支持非多盒模式,此外還包括支持多盒模式的步驟。
處理開(kāi)始于第一測(cè)定步驟832,其確定本地存儲(chǔ)設(shè)備是否正在多盒模式下工作。應(yīng)注意,圖16的流程圖750示出了步驟758,其中主機(jī)發(fā)送消息給本地存儲(chǔ)設(shè)備。在步驟758發(fā)送的消息向本地存儲(chǔ)設(shè)備指明本地存儲(chǔ)設(shè)備是否在多盒模式下工作。在接收主機(jī)在步驟758發(fā)送的消息的基礎(chǔ)上,本地存儲(chǔ)設(shè)備設(shè)置內(nèi)部變量以指明本地存儲(chǔ)設(shè)備是否在多盒模式下工作??稍跍y(cè)定步驟832檢查該內(nèi)部變量。
如果在測(cè)定步驟832確定本地存儲(chǔ)設(shè)備不是多盒模式,則控制從測(cè)定步驟832轉(zhuǎn)到步驟834以等待M秒進(jìn)行周期轉(zhuǎn)換。如果本地存儲(chǔ)設(shè)備不是在多盒模式下工作,則本地存儲(chǔ)設(shè)備控制其自己的周期轉(zhuǎn)換并因而執(zhí)行步驟834以在開(kāi)始下一周期轉(zhuǎn)換之前等待M秒。
在步驟834之后,或在步驟832之后(如果本地存儲(chǔ)設(shè)備是在多盒模式)是測(cè)定步驟836,其確定是否本地存儲(chǔ)設(shè)備的所有HA均已設(shè)置位,其表明HA已完成在前序號(hào)的所有I/O。當(dāng)序號(hào)改變時(shí),每一HA注意到該變化并設(shè)置位以表明在前序號(hào)的所有I/O已被完成。例如,如果序號(hào)從N-1改變?yōu)镹,當(dāng)HA已完成序號(hào)N-1的所有I/O時(shí)HA將設(shè)置位。注意,在一些情況下,HA的單一I/O可能需要很長(zhǎng)時(shí)間并可能在序號(hào)已改變之后仍然在進(jìn)行中。還應(yīng)注意,對(duì)于某些系統(tǒng),不同的機(jī)制可用于確定是否所有HA已完成它們的N-1I/O。不同的機(jī)制可包括檢查設(shè)備表。一旦在測(cè)定步驟836確定所有HA已設(shè)置適當(dāng)?shù)奈唬刂茝臏y(cè)定步驟836轉(zhuǎn)到步驟888,其確定本地存儲(chǔ)設(shè)備的非活動(dòng)態(tài)數(shù)據(jù)塊是否為空。一旦在測(cè)定步驟888確定非活動(dòng)態(tài)數(shù)據(jù)塊為空,控制從步驟888轉(zhuǎn)到步驟899,暫停將數(shù)據(jù)從本地存儲(chǔ)設(shè)備復(fù)制到遠(yuǎn)程存儲(chǔ)設(shè)備。暫停復(fù)制數(shù)據(jù)直到序號(hào)轉(zhuǎn)換結(jié)束為止是有用的。
在步驟899之后是測(cè)定步驟892,其確定本地存儲(chǔ)設(shè)備是否在多盒模式。如果在測(cè)定步驟892確定本地存儲(chǔ)設(shè)備在多盒模式,則控制從測(cè)定步驟892轉(zhuǎn)到測(cè)定步驟894以確定相應(yīng)的遠(yuǎn)程存儲(chǔ)設(shè)備的活動(dòng)態(tài)數(shù)據(jù)塊是否為空。如下面將詳細(xì)討論的,一旦遠(yuǎn)程存儲(chǔ)設(shè)備已倒空其活動(dòng)態(tài)數(shù)據(jù)塊,其發(fā)送消息給本地存儲(chǔ)設(shè)備。響應(yīng)于該消息,本地存儲(chǔ)設(shè)備設(shè)置在測(cè)定步驟894檢查的內(nèi)部變量。
一旦在測(cè)定步驟894確定遠(yuǎn)程存儲(chǔ)設(shè)備的活動(dòng)態(tài)數(shù)據(jù)塊為空,控制從測(cè)定步驟894轉(zhuǎn)到步驟896,內(nèi)部變量被設(shè)置在本地存儲(chǔ)設(shè)備上以表明本地存儲(chǔ)設(shè)備準(zhǔn)備轉(zhuǎn)換周期。如結(jié)合圖17的流程圖780所述,主機(jī)詢問(wèn)每一本地存儲(chǔ)設(shè)備以確定每一本地存儲(chǔ)設(shè)備均已準(zhǔn)備轉(zhuǎn)換。響應(yīng)于由主機(jī)提供的詢問(wèn),本地存儲(chǔ)設(shè)備檢查在步驟896設(shè)置的內(nèi)部變量并將結(jié)果返回給主機(jī)。
在步驟896之后是測(cè)定步驟898,本地存儲(chǔ)設(shè)備等待以從主機(jī)接收?qǐng)?zhí)行周期轉(zhuǎn)換的指令。如結(jié)合圖17的流程圖780所述,當(dāng)本地存儲(chǔ)設(shè)備在多盒模式下工作時(shí),主機(jī)提供指令給本地存儲(chǔ)設(shè)備以轉(zhuǎn)換周期。因而,本地存儲(chǔ)設(shè)備在步驟898等待指令,只有在本地存儲(chǔ)設(shè)備在多盒模式下工作時(shí)才能到達(dá)該步驟。
一旦本地存儲(chǔ)設(shè)備已從主機(jī)接收到轉(zhuǎn)換指令,控制從步驟898轉(zhuǎn)到步驟902以發(fā)送提交信息給遠(yuǎn)程存儲(chǔ)設(shè)備。注意,如果在測(cè)定步驟892確定本地存儲(chǔ)設(shè)備不是多盒模式,則步驟902也可從測(cè)定步驟892到達(dá)。在步驟902,本地存儲(chǔ)設(shè)備發(fā)送提交信息給遠(yuǎn)程存儲(chǔ)設(shè)備。響應(yīng)于接收特定序號(hào)的提交信息,遠(yuǎn)程存儲(chǔ)設(shè)備將開(kāi)始恢復(fù)對(duì)應(yīng)于該序號(hào)的數(shù)據(jù),如上所述。
在步驟902之后是步驟906,遞增序號(hào)并保存標(biāo)簽的新值(來(lái)自主機(jī))。序號(hào)如上所述。標(biāo)簽是在步驟764和步驟796提供給本地存儲(chǔ)設(shè)備的標(biāo)簽,如上所述。標(biāo)簽用于幫助數(shù)據(jù)恢復(fù),如本文別處所述。
在步驟906之后是步驟907,周期轉(zhuǎn)換的完成被從本地存儲(chǔ)設(shè)備到主機(jī)進(jìn)行確認(rèn),其通過(guò)從本地存儲(chǔ)設(shè)備發(fā)送消息給主機(jī)進(jìn)行。在一些實(shí)施例中,執(zhí)行步驟907的條件在于本地存儲(chǔ)設(shè)備是否在多盒模式,因?yàn)?,如果本地存?chǔ)設(shè)備不在多盒模式,則主機(jī)不必關(guān)注周期轉(zhuǎn)換在何時(shí)出現(xiàn)。
在步驟907之后是步驟908,使用在測(cè)定步驟836中的HA的位均被清零,從而這些位可連同遞增序號(hào)而被再次設(shè)置。在步驟908之后是測(cè)定步驟912,其確定遠(yuǎn)程存儲(chǔ)設(shè)備是否已確認(rèn)提交信息。注意,如果本地/遠(yuǎn)程對(duì)在多盒模式下工作且在步驟894已確定遠(yuǎn)程存儲(chǔ)設(shè)備活動(dòng)態(tài)數(shù)據(jù)塊為空,則遠(yuǎn)程存儲(chǔ)設(shè)備應(yīng)幾乎立即確認(rèn)提交信息,因?yàn)檫h(yuǎn)程存儲(chǔ)設(shè)備將立即準(zhǔn)備用于周期轉(zhuǎn)換,既然其活動(dòng)態(tài)數(shù)據(jù)塊已經(jīng)為空。
一旦在測(cè)定步驟912確定提交信息已被遠(yuǎn)程存儲(chǔ)設(shè)備確認(rèn),控制從步驟912轉(zhuǎn)到步驟914,已在步驟899提供的暫停復(fù)制的設(shè)定被清除,從而,從本地存儲(chǔ)設(shè)備到遠(yuǎn)程存儲(chǔ)設(shè)備的復(fù)制可重新開(kāi)始。在步驟914之后,處理結(jié)束。
參考圖19,流程圖940示出了所執(zhí)行的與RA掃描非活動(dòng)態(tài)緩沖器以將RDF數(shù)據(jù)從本地存儲(chǔ)設(shè)備傳輸?shù)竭h(yuǎn)程存儲(chǔ)設(shè)備有關(guān)的步驟。圖19的流程圖940類(lèi)似于圖6的流程圖200,且類(lèi)似的步驟被給予了相同的附圖標(biāo)記。然而,流程圖940包括兩個(gè)另外的步驟942、944,其未在圖6的流程圖200中發(fā)現(xiàn)。另外的步驟942、944用于幫助多盒處理。在數(shù)據(jù)已在步驟212發(fā)送之后,控制從步驟212轉(zhuǎn)到測(cè)定步驟942,其確定發(fā)送的數(shù)據(jù)是否是本地存儲(chǔ)設(shè)備的非活動(dòng)態(tài)數(shù)據(jù)塊中的最后數(shù)據(jù)。如果否,則控制從步驟942轉(zhuǎn)到步驟214,且處理繼續(xù),如結(jié)合圖6的流程圖200所述的那樣。否則,如果在測(cè)定步驟942確定發(fā)送的數(shù)據(jù)是數(shù)據(jù)塊的最后數(shù)據(jù),則控制從步驟942轉(zhuǎn)到步驟944以從本地存儲(chǔ)設(shè)備發(fā)送特殊的消息給遠(yuǎn)程存儲(chǔ)設(shè)備,其指明最后的數(shù)據(jù)已被發(fā)送。在步驟944之后,控制轉(zhuǎn)到步驟214,且處理繼續(xù),如結(jié)合圖6的流程圖200所述的那樣。在一些實(shí)施例中,步驟942、944可由不同于傳輸數(shù)據(jù)的過(guò)程(和/或硬件設(shè)備)的單獨(dú)的過(guò)程(和/或單獨(dú)的硬件設(shè)備)執(zhí)行。
參考圖20,流程圖950示出了所執(zhí)行的與RA掃描非活動(dòng)態(tài)緩沖器以將RDF數(shù)據(jù)從本地存儲(chǔ)設(shè)備傳輸?shù)竭h(yuǎn)程存儲(chǔ)設(shè)備有關(guān)的步驟。圖20的流程圖950類(lèi)似于圖13的流程圖500,且類(lèi)似的步驟被給予了相同的附圖標(biāo)記。然而,流程圖950包括兩個(gè)另外的步驟952,其未在圖13的流程圖500中發(fā)現(xiàn)。另外的步驟952用于幫助多盒處理且類(lèi)似于圖19的流程圖940的附加步驟944。在測(cè)定步驟524確定沒(méi)有剩下更多的槽將從本地存儲(chǔ)設(shè)備發(fā)送到遠(yuǎn)程存儲(chǔ)設(shè)備之后,控制從步驟524轉(zhuǎn)到步驟952以從本地存儲(chǔ)設(shè)備發(fā)送特殊的消息給遠(yuǎn)程存儲(chǔ)設(shè)備,其表明數(shù)據(jù)塊的最后數(shù)據(jù)已被發(fā)送。在步驟952之后,處理結(jié)束。
參考圖21,流程圖960示出了在遠(yuǎn)程存儲(chǔ)設(shè)備執(zhí)行的、與提供指示有關(guān)的步驟,所述指示是遠(yuǎn)程存儲(chǔ)設(shè)備的活動(dòng)態(tài)數(shù)據(jù)塊為空。流程圖960類(lèi)似于圖9的流程圖300,除了流程圖960示出了新步驟962之外,新步驟962是在遠(yuǎn)程存儲(chǔ)設(shè)備的活動(dòng)態(tài)數(shù)據(jù)塊已被恢復(fù)之后執(zhí)行。在步驟962,遠(yuǎn)程存儲(chǔ)設(shè)備發(fā)送消息給本地存儲(chǔ)設(shè)備,其指明遠(yuǎn)程存儲(chǔ)設(shè)備的活動(dòng)態(tài)數(shù)據(jù)塊為空。在接收在步驟962發(fā)送的消息的基礎(chǔ)上,本地存儲(chǔ)設(shè)備設(shè)置內(nèi)部變量以表明遠(yuǎn)程存儲(chǔ)設(shè)備的非活動(dòng)態(tài)緩沖器為空。本地變量在圖18的流程圖830的測(cè)定步驟894進(jìn)行檢查,如上所述。
參考圖22,圖表980示出了主機(jī)702、本地存儲(chǔ)設(shè)備703-705和遠(yuǎn)程存儲(chǔ)設(shè)備706-708,其如圖14的圖表700所示。圖表980還包括第一備選主機(jī)982,其連接到主機(jī)702和本地存儲(chǔ)設(shè)備703-705。圖表980還包括第二備選主機(jī)984,其連接到遠(yuǎn)程存儲(chǔ)設(shè)備706-708。備選主機(jī)982、984可用于數(shù)據(jù)恢復(fù),如下面將詳述的那樣。
當(dāng)在遠(yuǎn)程站點(diǎn)的數(shù)據(jù)恢復(fù)必要時(shí),假如本地存儲(chǔ)設(shè)備703-705和遠(yuǎn)程存儲(chǔ)設(shè)備706-708之間的鏈路仍然工作的話,恢復(fù)可由主機(jī)702或由主機(jī)982執(zhí)行。如果鏈路不工作,則數(shù)據(jù)恢復(fù)可由連接到遠(yuǎn)程存儲(chǔ)設(shè)備706-708的第二備選主機(jī)984執(zhí)行。第二備選主機(jī)984可被提供在與一個(gè)或多個(gè)遠(yuǎn)程存儲(chǔ)設(shè)備706-708一樣的位置。或者,第二備選主機(jī)984可遠(yuǎn)離所有遠(yuǎn)程存儲(chǔ)設(shè)備706-708。通過(guò)系統(tǒng)傳送的表730連同數(shù)據(jù)恢復(fù)被訪問(wèn)以確定多盒組的成員。
參考圖23,流程圖1000示出了每一遠(yuǎn)程存儲(chǔ)設(shè)備706-708執(zhí)行的與數(shù)據(jù)恢復(fù)操作有關(guān)的步驟。流程圖1000的步驟可由每一遠(yuǎn)程存儲(chǔ)設(shè)備706-708在接收信號(hào)或消息的基礎(chǔ)上執(zhí)行,所述信號(hào)或消息指明數(shù)據(jù)恢復(fù)是必要的。在一些實(shí)施例中,對(duì)于遠(yuǎn)程存儲(chǔ)設(shè)備,其可自動(dòng)感知數(shù)據(jù)恢復(fù)是否是必要的,其使用傳統(tǒng)的規(guī)則如自最后的寫(xiě)之后的時(shí)間長(zhǎng)度進(jìn)行。
處理開(kāi)始于第一步驟1002,遠(yuǎn)程存儲(chǔ)設(shè)備以本文別處描述的方式完成活動(dòng)態(tài)數(shù)據(jù)塊的恢復(fù)。在步驟1002之后是測(cè)定步驟1004,其確定遠(yuǎn)程存儲(chǔ)設(shè)備的非活動(dòng)態(tài)數(shù)據(jù)塊是否完整(即所有數(shù)據(jù)已被寫(xiě)到那里)。應(yīng)注意,遠(yuǎn)程存儲(chǔ)設(shè)備可使用本地存儲(chǔ)設(shè)備在步驟944、952發(fā)送的消息確定非活動(dòng)態(tài)數(shù)據(jù)塊是否完整,如上所述。即,如果本地存儲(chǔ)設(shè)備已在步驟944或步驟952發(fā)送消息,則遠(yuǎn)程存儲(chǔ)設(shè)備可使用該消息的接收來(lái)確認(rèn)非活動(dòng)態(tài)數(shù)據(jù)塊是完整的。
如果在測(cè)定步驟1004確定遠(yuǎn)程存儲(chǔ)設(shè)備的非活動(dòng)態(tài)數(shù)據(jù)塊不完整,則控制從測(cè)定步驟1004轉(zhuǎn)到步驟1006,非活動(dòng)態(tài)數(shù)據(jù)塊的數(shù)據(jù)被放棄。沒(méi)有數(shù)據(jù)恢復(fù)會(huì)使用不完整的非活動(dòng)態(tài)數(shù)據(jù)塊來(lái)進(jìn)行,因?yàn)槠渲械臄?shù)據(jù)可能與相應(yīng)的活動(dòng)態(tài)數(shù)據(jù)塊不一致。因此,數(shù)據(jù)恢復(fù)使用活動(dòng)態(tài)數(shù)據(jù)塊進(jìn)行,在某些情況下,也使用完整的非活動(dòng)態(tài)數(shù)據(jù)塊進(jìn)行。在步驟1006之后,處理結(jié)束。
如果在測(cè)定步驟1004確定非活動(dòng)態(tài)數(shù)據(jù)塊是完整的,則控制從步驟1004轉(zhuǎn)到步驟1008,遠(yuǎn)程存儲(chǔ)設(shè)備等待主機(jī)的干涉。如果是非活動(dòng)態(tài)數(shù)據(jù)塊,主機(jī)702、982、984之一需要檢查多盒組中的所有遠(yuǎn)程存儲(chǔ)設(shè)備的狀態(tài)以確定怎樣執(zhí)行恢復(fù)。這將在下面詳細(xì)討論。
在步驟1008之后是測(cè)定步驟1012,其確定主機(jī)是否已提供指令給所有存儲(chǔ)設(shè)備以放棄非活動(dòng)態(tài)數(shù)據(jù)塊。如果是,則控制從步驟1012轉(zhuǎn)到步驟1006以放棄非活動(dòng)態(tài)數(shù)據(jù)塊。在步驟1006之后,處理結(jié)束。
如果在測(cè)定步驟1002確定主機(jī)已提供指令以恢復(fù)完整的非活動(dòng)態(tài)數(shù)據(jù)塊,則控制從步驟1012轉(zhuǎn)到步驟1014,非活動(dòng)態(tài)數(shù)據(jù)塊被恢復(fù)到遠(yuǎn)程存儲(chǔ)設(shè)備。將非活動(dòng)態(tài)數(shù)據(jù)塊恢復(fù)在遠(yuǎn)程存儲(chǔ)設(shè)備中包括使非活動(dòng)態(tài)數(shù)據(jù)塊變?yōu)榛顒?dòng)態(tài)數(shù)據(jù)塊并繼而將活動(dòng)態(tài)數(shù)據(jù)塊寫(xiě)到本文別處描述的磁盤(pán)中。在步驟1014之后,處理結(jié)束。
參考圖24,流程圖1030示出了所執(zhí)行的與主機(jī)702、982、984之一確定是放棄還是恢復(fù)每一遠(yuǎn)程存儲(chǔ)設(shè)備的每一非活動(dòng)態(tài)數(shù)據(jù)塊有關(guān)的步驟。執(zhí)行恢復(fù)的主機(jī)702、982、984之一與遠(yuǎn)程存儲(chǔ)設(shè)備706-708通信以向其提供指令并從其接收信息,其通過(guò)使用由主機(jī)分配的標(biāo)簽進(jìn)行,如本文別處所述。
處理開(kāi)始于第一步驟1032,其確定遠(yuǎn)程存儲(chǔ)設(shè)備中的任意一個(gè)是否具有完整的非活動(dòng)態(tài)數(shù)據(jù)塊。如果否,則沒(méi)有進(jìn)一步的處理要被執(zhí)行。如上所述,遠(yuǎn)程存儲(chǔ)設(shè)備將自己放棄不完整的數(shù)據(jù)塊,而無(wú)需主機(jī)干涉。否則,控制從測(cè)定步驟1032轉(zhuǎn)到測(cè)定步驟1034,主機(jī)確定是否所有遠(yuǎn)程存儲(chǔ)設(shè)備均具有完整的非活動(dòng)態(tài)數(shù)據(jù)塊。如果是,則控制從測(cè)定步驟1034轉(zhuǎn)到測(cè)定步驟1036,其確定是否所有遠(yuǎn)程存儲(chǔ)設(shè)備的所有完整的非活動(dòng)態(tài)數(shù)據(jù)塊均具有相同的標(biāo)簽號(hào)。如本文別處所述,標(biāo)簽由主機(jī)分配并由系統(tǒng)使用以以類(lèi)似于序號(hào)的方式識(shí)別數(shù)據(jù),除了標(biāo)簽由主機(jī)控制以對(duì)同一周期具有相同值以外。
如果在測(cè)定步驟1036確定所有遠(yuǎn)程存儲(chǔ)設(shè)備對(duì)非活動(dòng)態(tài)數(shù)據(jù)塊均具有相同的標(biāo)簽,則控制從步驟1036轉(zhuǎn)到步驟1038,所有非活動(dòng)態(tài)數(shù)據(jù)塊均被恢復(fù)。執(zhí)行步驟1038確保所有遠(yuǎn)程存儲(chǔ)設(shè)備具有來(lái)自同一周期的數(shù)據(jù)。在步驟1038之后,處理結(jié)束。
如果在測(cè)定步驟1034確定所有非活動(dòng)態(tài)數(shù)據(jù)塊不是完整的,或如果在步驟1036確定所有完整的非活動(dòng)態(tài)數(shù)據(jù)塊不具有相同的標(biāo)簽,則控制轉(zhuǎn)到步驟1042,主機(jī)提供指令給遠(yuǎn)程存儲(chǔ)設(shè)備以恢復(fù)具有較低標(biāo)簽號(hào)的完整非活動(dòng)態(tài)數(shù)據(jù)塊。用于解釋的目的,假定標(biāo)簽號(hào)被遞增,從而較低的標(biāo)簽號(hào)代表較舊的數(shù)據(jù)。作為例子,如果第一遠(yuǎn)程存儲(chǔ)設(shè)備具有標(biāo)簽值為3的完整非活動(dòng)態(tài)數(shù)據(jù)塊,而第二遠(yuǎn)程存儲(chǔ)設(shè)備具有標(biāo)簽值為4的完整非活動(dòng)態(tài)數(shù)據(jù)塊,則步驟1042使第一遠(yuǎn)程存儲(chǔ)設(shè)備(而不是第二)恢復(fù)其非活動(dòng)態(tài)數(shù)據(jù)塊。在步驟1042之后是步驟1044,主機(jī)提供指令給遠(yuǎn)程存儲(chǔ)設(shè)備以放棄具有較高標(biāo)簽號(hào)的完整非活動(dòng)態(tài)緩沖器(如在前例子中的第二遠(yuǎn)程存儲(chǔ)設(shè)備)。在步驟1044之后,處理結(jié)束。
在執(zhí)行步驟1044之后,每一遠(yuǎn)程存儲(chǔ)設(shè)備包含與同一標(biāo)簽值相關(guān)聯(lián)的數(shù)據(jù),該標(biāo)簽值與其它遠(yuǎn)程存儲(chǔ)設(shè)備的數(shù)據(jù)的標(biāo)簽值一樣。因此,恢復(fù)在遠(yuǎn)程存儲(chǔ)設(shè)備706-708上面的數(shù)據(jù)應(yīng)該是一致的。
參考圖25,圖表1120示出了一實(shí)施例,其中存儲(chǔ)設(shè)備1124與存儲(chǔ)設(shè)備24和/或存儲(chǔ)設(shè)備26類(lèi)似,包括多個(gè)連接到存儲(chǔ)器1126的導(dǎo)向器1152a-1152c,存儲(chǔ)器1126與存儲(chǔ)設(shè)備24、26的存儲(chǔ)器37和/或存儲(chǔ)器38類(lèi)似。每一導(dǎo)向器1152a-1152c代表HA、DA和/或RA,其類(lèi)似于存儲(chǔ)設(shè)備的HA28、DA35a-35c、36a-36c和/或RA30a-30c、32a-32c。在在此公開(kāi)的實(shí)施例中,有高達(dá)16個(gè)導(dǎo)向器連接到存儲(chǔ)器1126。當(dāng)然,對(duì)于其它實(shí)施例,可以使用更高或更低最大數(shù)量的導(dǎo)向器。
圖表1120還示出了可選的通信模塊(CM)1154,其在導(dǎo)向器1152a-1152c之間提供另一通信通路。每一導(dǎo)向器1152a-1152c可連接到CM1154,從而導(dǎo)向器1152a-1152c中的任一導(dǎo)向器均可發(fā)送消息和/或數(shù)據(jù)給導(dǎo)向器1152a-1152c中的任何其它導(dǎo)向器,而不需要通過(guò)存儲(chǔ)器1126。CM1154可使用傳統(tǒng)的MUX/路由器技術(shù)實(shí)施,其中導(dǎo)向器1152a-1152c中的發(fā)送導(dǎo)向器提供適當(dāng)?shù)牡刂芬允瓜⒑?或數(shù)據(jù)可由導(dǎo)向器1152a-1152c中的預(yù)定接收導(dǎo)向器接收。此外,導(dǎo)向器1152a-1152c中的發(fā)送導(dǎo)向器能夠同時(shí)傳播消息給所有其它導(dǎo)向器1152a-1152c。
參考圖26,圖表1200示出了一系統(tǒng),其包括源組1202、本地目的地1204和遠(yuǎn)程目的地1206。源組1202與本地目的地1204和遠(yuǎn)程目的地1206通信。源組1202代表單個(gè)存儲(chǔ)設(shè)備、多個(gè)存儲(chǔ)設(shè)備、具有單個(gè)主機(jī)的單個(gè)或多個(gè)存儲(chǔ)設(shè)備、具有多個(gè)主機(jī)的單個(gè)或多個(gè)存儲(chǔ)設(shè)備。數(shù)據(jù)在源組1202產(chǎn)生并保存在源組1202中,且傳輸給本地目的地1204和遠(yuǎn)程目的地1206。在一些實(shí)施例中,本地組可以上面結(jié)合圖14描述的實(shí)施例的方式進(jìn)行工作。
在在此的實(shí)施例中,本地目的地代表相當(dāng)接近源組1202的單個(gè)或多個(gè)存儲(chǔ)設(shè)備以允許從源組1202到本地目的地1204的同步數(shù)據(jù)鏡像。在在此的實(shí)施例中,本地目的地1204與源組1202位于同一建筑物、同一設(shè)施和/或同一公司位置。因而,例如,本地目的地1204可代表由與管理源組1202的個(gè)人同一組的人管理的備份存儲(chǔ)設(shè)備(或多個(gè)存儲(chǔ)設(shè)備)。
遠(yuǎn)程目的地1206代表在地理上遠(yuǎn)離源組1202的位置的存儲(chǔ)設(shè)備和/或多個(gè)存儲(chǔ)設(shè)備。例如,遠(yuǎn)程目的地1206可代表在美國(guó)西海岸的存儲(chǔ)設(shè)備或存儲(chǔ)設(shè)備組,而源組1202位于美國(guó)的東海岸。由于源組1202和遠(yuǎn)程目的地1206之間的相當(dāng)大的地理距離,使用同步或半同步數(shù)據(jù)傳輸模式來(lái)從源組1202鏡像遠(yuǎn)程目的地1206上的數(shù)據(jù)是不切實(shí)際的。即,由于從源組1202到遠(yuǎn)程目的地1206并再回到源組1202需要較長(zhǎng)的往返在途時(shí)間,使用同步或半同步數(shù)據(jù)鏡像是不可行的,該種鏡像在確認(rèn)寫(xiě)到本地組1202的主機(jī)之前要確認(rèn)遠(yuǎn)程目的地1206處的數(shù)據(jù)。在這種情況下,則可能在源組1202和遠(yuǎn)程目的地1206之間使用排序的寫(xiě),從而遠(yuǎn)程目的地1206是源組1202的一致鏡像,盡管有一些時(shí)間延遲。
通信通路1208還可存在于本地目的地1204和遠(yuǎn)程目的地1206之間。只要源組1202在運(yùn)行,則通信通路1208可不被使用。然而,在源組1202沒(méi)有運(yùn)行的情況和/或源組1202和本地目的地1204及遠(yuǎn)程目的地1206之一或二者之間的通信鏈路不能運(yùn)行,則通信通路1208可用于在本地目的地1204和遠(yuǎn)程目的地1206之間同步數(shù)據(jù),如本文別處所詳細(xì)描述的。此外,主機(jī)可被提供給本地目的地1204和遠(yuǎn)程目的地1206之一以在同步之后重新開(kāi)始系統(tǒng)的運(yùn)轉(zhuǎn),如本文別處所詳述的。注意,如果用連接到本地目的地1204的主機(jī)重新開(kāi)始運(yùn)轉(zhuǎn),則通信鏈路1208可被使用,從而遠(yuǎn)程目的地1206是本地目的地1204的鏡像。相反,如果通過(guò)提供主機(jī)給遠(yuǎn)程目的地1206而重新開(kāi)始運(yùn)轉(zhuǎn),則通信鏈路1208可被使用,從而本地目的地1204是遠(yuǎn)程目的地1206的鏡像。
參考圖27,流程圖1230示出了所執(zhí)行的與在本地目的地1204初始化參數(shù)以提供在此討論的恢復(fù)機(jī)制有關(guān)的步驟。在此描述的恢復(fù)機(jī)制使用Symmetrix Differential Data Facility(SDDF),其允許多個(gè)會(huì)話,每一會(huì)話具有隨其與位相關(guān)聯(lián)的位圖,所述位在特定時(shí)間段期間無(wú)論何時(shí)有對(duì)相應(yīng)數(shù)據(jù)位置的寫(xiě)其均被設(shè)定為1。如果沒(méi)有對(duì)特定位置的寫(xiě),相應(yīng)的位保持被清零的狀態(tài)(即保持為0)。在在此的實(shí)施例中,每一位可對(duì)應(yīng)于數(shù)據(jù)磁軌。然而,對(duì)于其它實(shí)施例,可能使每一位對(duì)應(yīng)于較大或較小的數(shù)據(jù)增量,也不能不同的位和/或不同的位設(shè)置對(duì)應(yīng)于不同的數(shù)據(jù)量。
與SDDF會(huì)話相關(guān)聯(lián)的操作包括創(chuàng)建SDDF會(huì)話、激活SDDF會(huì)話、清零SDDF會(huì)話的位圖的位,禁止SDDF會(huì)話、及終止SDDF會(huì)話。創(chuàng)建SDDF會(huì)話、清零其位、及終止SDDF會(huì)話均不需解釋。激活SDDF會(huì)話使得SDDF會(huì)話位圖的位將被設(shè)置,無(wú)論相應(yīng)的磁軌(或其它適當(dāng)?shù)臄?shù)據(jù)增量)在何時(shí)被寫(xiě)。禁止SDDF會(huì)話則暫停位的設(shè)置。在此討論的SDDF機(jī)制可使用美國(guó)專(zhuān)利6,366,986中提供的描述進(jìn)行實(shí)施,其通過(guò)引用組合于此。
流程圖1230的處理開(kāi)始于第一步驟1232,其中第一SDDF會(huì)話SDDF_1被創(chuàng)建。在在此描述的實(shí)施例中,SDDF會(huì)話的創(chuàng)建不會(huì)導(dǎo)致會(huì)話的自動(dòng)激活。在步驟1232之后是步驟1234,在步驟1232創(chuàng)建的SDDF會(huì)話的位圖的位被清零。在步驟1234之后是步驟1236,創(chuàng)建第二SDDF會(huì)話SDDF_2。在步驟1236之后是步驟1238,在步驟1236創(chuàng)建的SDDF會(huì)話的位圖的位被清零。
在步驟1238之后是步驟1242,狀態(tài)被初始化。在步驟1242初始化的狀態(tài)可用于確定SDDF會(huì)話SDDF_1、SDDF_2中哪一個(gè)將被激活。如本文別處所詳述的,有兩種可能的狀態(tài),且在步驟1242的狀態(tài)可被轉(zhuǎn)換以使得SDDF_1會(huì)話和SDDF_2會(huì)話將被二選一地激活。在其它實(shí)施例中,標(biāo)記或一些其它類(lèi)型的變量可用于指示或SDDF_1或SDDF_2的選擇。在步驟1242之后是步驟1244,SDDF_1被激活。在步驟1244激活SDDF_1使得SDDF_1會(huì)話的位圖的位將被設(shè)置,無(wú)論本地目的地1204的磁軌(或其它數(shù)據(jù)增量)在何時(shí)被修改。
SDDF_1和SDDF_2會(huì)話由本地目的地1204使用來(lái)跟蹤源組1202連同源組1202到遠(yuǎn)程目的地1206的排序的寫(xiě)使用的活動(dòng)態(tài)和非活動(dòng)態(tài)緩沖器。如本文別處所詳述的,每次源組1202進(jìn)行與從源組1202到遠(yuǎn)程目的地1206的排序的寫(xiě)有關(guān)的周期轉(zhuǎn)換,源組1202發(fā)送消息給本地目的地1204,其表明周期轉(zhuǎn)換已被執(zhí)行,從而本地目的地1204可轉(zhuǎn)換狀態(tài)(在步驟1242中初始化的狀態(tài),如上所述)。本地目的地1204使用周期轉(zhuǎn)換信息在本文別處詳細(xì)描述。
參考圖28A,流程圖1250示出了由本地目的地1204執(zhí)行的與在正常運(yùn)行(非故障)期間從源組1202接收I/O有關(guān)的步驟。處理開(kāi)始于第一步驟1252,I/O被本地目的地1204接收。在步驟1252之后是測(cè)定步驟1254,其確定從源組1202接收的I/O是否表明本地組1202已準(zhǔn)備好與本地組1202和遠(yuǎn)程目的地1206之間的排序的寫(xiě)有關(guān)的轉(zhuǎn)換。準(zhǔn)備好轉(zhuǎn)換的本地組1202在本文別處詳述描述。
如果所接收的數(shù)據(jù)表明本地組1202準(zhǔn)備轉(zhuǎn)換,則控制從步驟1254轉(zhuǎn)到步驟1256,其確定SDDF會(huì)話(SDDF_1或SDDF_2)中的非活動(dòng)態(tài)會(huì)話是否清除。在一些實(shí)施例中,SDDF會(huì)話可在步驟1256被清除。在其它情況中,在步驟1256清除SDDF會(huì)話所需要的時(shí)間量將會(huì)是不可接受的,在這種情況下,兩個(gè)以上的SDDF會(huì)話可被使用并可被輪流,從而將被激活的SDDF會(huì)話總是被異步清除。在任何情況下,在步驟1256執(zhí)行的處理涉及清除SDDF_1和SDDF_2中的非活動(dòng)態(tài)會(huì)話,從而在執(zhí)行步驟1256之后,非活動(dòng)態(tài)會(huì)話清除。
在步驟1256之后是步驟1258,SDDF會(huì)話中的非活動(dòng)態(tài)會(huì)話被激活,從而在執(zhí)行步驟1258的處理之后SDDF_1和SDDF_2均被激活。因而,隨后的寫(xiě)被反映在SDDF_1和SDDF_2的位圖中。在步驟1258之后,處理結(jié)束。
如果在步驟1254確定所接收的數(shù)據(jù)不對(duì)應(yīng)于準(zhǔn)備轉(zhuǎn)換的信號(hào),則控制從步驟1254轉(zhuǎn)到測(cè)定步驟1262,其確定所接收的數(shù)據(jù)是否對(duì)應(yīng)于正被執(zhí)行的周期轉(zhuǎn)換。如果是,則控制從步驟1262轉(zhuǎn)到步驟1264,在圖27的流程圖1230的步驟1242初始化的狀態(tài)被轉(zhuǎn)換。如本文別處所述,狀態(tài)被用于確定SDDF_1和SDDF_2中的哪一個(gè)將被激活和禁止。在步驟1264之后是步驟1266,根據(jù)在步驟1264設(shè)定的狀態(tài)的特定值,SDDF會(huì)話SDDF_1或SDDF_2之一被禁止。注意,即使SDDF會(huì)話在步驟1266被禁止,SDDF會(huì)話也不被清除直到接收到下一準(zhǔn)備轉(zhuǎn)換信號(hào)為止。當(dāng)然,如果兩個(gè)以上的SDDF會(huì)話用于SDDF_1和SDDF_2,如上所述,則在步驟1266禁止的SDDF會(huì)話可被保持,同時(shí)另一SDDF會(huì)話被清除以準(zhǔn)備用于在步驟1258進(jìn)行激活,如上述。
如果在步驟1262確定所接收的數(shù)據(jù)不對(duì)應(yīng)于周期轉(zhuǎn)換,則控制從測(cè)定步驟1262轉(zhuǎn)到步驟1268,其中I/O被執(zhí)行。例如,如果I/O是寫(xiě)操作,則在步驟1268,數(shù)據(jù)被寫(xiě)到本地目的地1204的存儲(chǔ)區(qū)。在步驟1268之后是步驟1272,其確定I/O操作是否是寫(xiě)操作。如果否(例如I/O操作是讀操作),則處理結(jié)束。否則,控制從步驟1272轉(zhuǎn)到步驟1274,在SDDF會(huì)話SDDF_1、SDDF_2的適當(dāng)會(huì)話中的位被設(shè)置,或二者的位均被設(shè)置,取決于哪一SDDF會(huì)話被激活。在步驟1274之后,處理結(jié)束。
在某些情況中,可能希望等待以剛好在指向同一SDDF位圖之前清除該SDDF位圖。在這樣的情況下,具有兩個(gè)以上的SDDF位圖是有用的,其中每次兩個(gè)被使用如SDDF_1和SDDF_2,同時(shí)其余SDDF位圖已經(jīng)清除并等待被使用或正使用后臺(tái)過(guò)程進(jìn)行清除。例如,使用三個(gè)位圖SDDF_A、SDDF_和SDDF_C,SDDF_1可對(duì)應(yīng)于SDDF_A,SDDF_2可對(duì)應(yīng)于SDDF_C。在這種情況下,SDDF_B可被清除,同時(shí)處理在SDDF_A和SDDF_C上執(zhí)行。當(dāng)周期轉(zhuǎn)換時(shí),SDDF_B(其已經(jīng)清零)可被使用,同時(shí)SDDF_C被使用后臺(tái)過(guò)程進(jìn)行清零,其即使在周期轉(zhuǎn)換結(jié)束之后及新數(shù)據(jù)正被記入SDDF_B時(shí)也可運(yùn)行。
參考圖28B,流程圖1280示出了使用多個(gè)SDDF位圖SDDF
、SDDF[1]、…SDDF[NMAPS-1]的另一實(shí)施例,其中NMAPS是SDDF位圖的數(shù)量。在在此的實(shí)施例中,NMAPS大于2(如3)。流程圖1280的許多步驟均與圖28A的流程圖1250的步驟相似。
處理開(kāi)始于第一步驟1282,I/O被本地目的地1204接收。在步驟1282之后是測(cè)定步驟1283,其確定從源組1202接收的I/O是否表明本地組1202已準(zhǔn)備好與本地組1202和遠(yuǎn)程目的地1206之間的排序的寫(xiě)有關(guān)的轉(zhuǎn)換。準(zhǔn)備好轉(zhuǎn)換的本地組1202在本文別處詳述描述。
如果所接收的數(shù)據(jù)表明本地組1202準(zhǔn)備轉(zhuǎn)換,則控制從步驟1283轉(zhuǎn)到步驟1284,其中下標(biāo)K被增加且其結(jié)果被設(shè)定為以NMAPS為模。在步驟1284之后是步驟1285,其確認(rèn)SDDF[K]清零。在步驟1285之后是步驟1286,SDDF[K]被激活,從而在執(zhí)行步驟1286的處理之后SDDF[K]和SDDF[K-1]均被激活。因而,隨后的寫(xiě)被反映在SDDF[K]和SDDF[K-1]的位圖中。注意,如果K為0,則SDDF[K-1]實(shí)際上指SDDF[NMAPS-1]。
如果在步驟1283確定所接收的數(shù)據(jù)不對(duì)應(yīng)于準(zhǔn)備轉(zhuǎn)換的信號(hào),則控制從測(cè)定步驟1283轉(zhuǎn)到測(cè)定步驟1287,其確定所接收的數(shù)據(jù)是否對(duì)應(yīng)于周期轉(zhuǎn)換。如果在步驟1287確定所接收的數(shù)據(jù)對(duì)應(yīng)于周期轉(zhuǎn)換(見(jiàn)上面結(jié)合圖28A的流程圖1250所述),則控制從步驟1287轉(zhuǎn)到步驟1288,狀態(tài)(上述)被轉(zhuǎn)換。在步驟1288之后是步驟1289,變量J被設(shè)定為等于(K-2)模NMAPS。因?yàn)镵是用于跟蹤最近激活的SDDF位圖的下標(biāo)變量,在步驟1289設(shè)置J使得J指向第三最近激活的SDDF位圖。在步驟1289之后是步驟1292,啟動(dòng)過(guò)程以清零SDDF[J]位圖。如本文別處所述,為了完成周期轉(zhuǎn)換并開(kāi)始積聚新數(shù)據(jù),在步驟1292開(kāi)始的過(guò)程不是必須被完成。
在步驟1292之后是步驟1294,變量J被設(shè)定為等于(K-1)模NMAPS。因?yàn)镵是用于跟蹤最近激活的SDDF位圖的下標(biāo)變量,在步驟1294設(shè)置J使得J指向第二最近激活的SDDF位圖。在步驟1294之后是步驟1296,SDDF[J]被禁止。然而,即使SDDF[J]在步驟1296被禁止,數(shù)據(jù)仍被保留用于恢復(fù)目的,直到下一周期轉(zhuǎn)換為止。在步驟1296之后,處理結(jié)束。
參考圖28C,流程圖1300示出了涉及本地目的地1204在正常運(yùn)行(非故障)期間從源組1202接收I/O的處理的另一實(shí)施例。處理開(kāi)始于第一步驟1302,I/O被本地目的地1204接收。在步驟1302之后是測(cè)定步驟1304,其確定所接收的數(shù)據(jù)是否對(duì)應(yīng)于準(zhǔn)備執(zhí)行的周期轉(zhuǎn)換。如果是,則控制從步驟1304轉(zhuǎn)到測(cè)定步驟1306,其確定自上次轉(zhuǎn)換狀態(tài)之后是否已出現(xiàn)兩次或兩次以上周期轉(zhuǎn)換。如果否,則處理結(jié)束。否則,控制從步驟1306轉(zhuǎn)到步驟1307,其確定當(dāng)前非活動(dòng)態(tài)SDDF會(huì)話SDDF_X是否清零。如果是,則控制從步驟1307轉(zhuǎn)到步驟1308,在圖27的流程圖1230的步驟1242初始化的狀態(tài)被轉(zhuǎn)換。如本文別處所述,狀態(tài)用于確定SDDF_1和SDDF_2中哪一個(gè)將被激活和禁止。
在步驟1308之后是步驟1309,SDDF會(huì)話SDDF_1或SDDF_2之一按狀態(tài)的指示被激活。在步驟1309之后是步驟1312,另一SDDF會(huì)話被禁止。在步驟1312之后,處理結(jié)束。
如果在測(cè)定步驟1307確定SDDF_X未被清除,則控制從步驟1307轉(zhuǎn)到步驟1313,其確定清除SDDF_X是否已經(jīng)開(kāi)始(即在先前的迭代中)。如果是,則處理結(jié)束。否則,控制從步驟1313轉(zhuǎn)到步驟1314,開(kāi)始清除SDDF_X的過(guò)程。在步驟1314之后,處理結(jié)束。
如果在步驟1304確定所接收的數(shù)據(jù)不對(duì)應(yīng)于周期轉(zhuǎn)換,則控制從測(cè)定步驟1304轉(zhuǎn)到步驟1316,其中I/O被執(zhí)行。例如,如果I/O是寫(xiě)操作,則在步驟1316數(shù)據(jù)被寫(xiě)到本地目的地1204的存儲(chǔ)區(qū)。在步驟1316之后是步驟1317,其確定I/O操作是否是寫(xiě)操作。如果否(如I/O操作是讀操作),則處理結(jié)束。否則,控制從步驟1317轉(zhuǎn)到步驟1318,根據(jù)SDDF會(huì)話中哪一個(gè)被激活,SDDF會(huì)話SDDF_1或SDDF_2(SDDF_X或SDDF_Y)的適當(dāng)會(huì)話中的位被設(shè)置。在步驟1318之后,處理結(jié)束。
參考圖29,流程圖1320示出了所執(zhí)行的與在遠(yuǎn)程目的地1206收集恢復(fù)數(shù)據(jù)有關(guān)的步驟。不像本地目的地1204,其總是在穩(wěn)態(tài)運(yùn)行期間收集恢復(fù)數(shù)據(jù),遠(yuǎn)程目的地1206不可能收集恢復(fù)數(shù)據(jù),除非及直到其接收到信號(hào)要那樣做為止。在在此的實(shí)施例中,源組1202可提供這樣的信號(hào)給遠(yuǎn)程目的地1206,例如,當(dāng)源組1202檢測(cè)到源組1202和本地目的地1204之間的鏈路沒(méi)有工作時(shí)和/或當(dāng)源組1202檢測(cè)到本地目的地1204沒(méi)有適當(dāng)?shù)亟邮栈蛱幚頂?shù)據(jù)時(shí)。在其它實(shí)施例或其它情形中,遠(yuǎn)程目的地1206可從不同于源組1202的位置或單元接收適當(dāng)?shù)男盘?hào)。
處理開(kāi)始于第一步驟1322,創(chuàng)建第三會(huì)話SDDF_3。在步驟1322之后是步驟1324,在步驟1322創(chuàng)建的SDDF會(huì)話的位圖被清除。在步驟1324之后是步驟1326,標(biāo)記值(在本文別處詳述)被設(shè)定為0。在步驟1326之后,處理結(jié)束。
參考圖30,流程圖1330示出了由遠(yuǎn)程目的地1206執(zhí)行的與恢復(fù)數(shù)據(jù)的收集有關(guān)的步驟。處理開(kāi)始于第一步驟1331,遠(yuǎn)程目的地1206等待來(lái)自源組1202或來(lái)自其它源的故障消息。一旦接收到故障消息,控制從步驟1331轉(zhuǎn)到步驟1332,SDDF_3會(huì)話被激活以開(kāi)始收集關(guān)于遠(yuǎn)程目的地1206的磁軌(或其它適當(dāng)?shù)臄?shù)據(jù)增量)的數(shù)據(jù),所述遠(yuǎn)程目的地已被執(zhí)行寫(xiě)。注意,然而,SDDF_3反映已被提交的寫(xiě)(即在當(dāng)前周期正被接收之后的寫(xiě))。
在步驟1332之后是步驟1333,標(biāo)記值(下述)被初始化為0。在步驟1333之后是步驟1334,遠(yuǎn)程目的地1206從源組1202接收I/O。注意,在步驟1334接收的I/O可代表排序的寫(xiě)數(shù)據(jù),其為本地組1202在非故障模式下發(fā)送給遠(yuǎn)程目的地1206的數(shù)據(jù)。
在步驟1334之后是測(cè)定步驟1336,其確定在步驟1334從源組1202接收的I/O是否指明由源組1202進(jìn)行的周期轉(zhuǎn)換。如果否(即數(shù)據(jù)是將被寫(xiě)到遠(yuǎn)程目的地1206的常規(guī)排序的寫(xiě)數(shù)據(jù)或其它類(lèi)型的數(shù)據(jù)),則控制從測(cè)定步驟1336轉(zhuǎn)回到步驟1334以接收下一I/O。
如果在測(cè)定步驟1336確定來(lái)自源組1202的數(shù)據(jù)指明一周期轉(zhuǎn)換,則控制從測(cè)定步驟1336轉(zhuǎn)到步驟1338以遞增標(biāo)記,其跟蹤自開(kāi)始恢復(fù)數(shù)據(jù)的收集以來(lái)周期轉(zhuǎn)換的次數(shù)。在步驟1338之后是步驟1342,SDDF_3的位圖被設(shè)置以反映已提交的周期的已被寫(xiě)的數(shù)據(jù)。注意,在步驟1342的處理可連同激活的SDDF會(huì)話的運(yùn)行而自動(dòng)執(zhí)行,在這種情況下,則可不必使步驟1342作為圖30所示的恢復(fù)過(guò)程的一部分。
注意,已提交的周期是在周期轉(zhuǎn)換之前用于收集數(shù)據(jù)的周期。在步驟1342之后是測(cè)定步驟1344,其確定處理是否結(jié)束(即錯(cuò)誤恢復(fù)數(shù)據(jù)的收集是否結(jié)束)。如果錯(cuò)誤情形已被矯正,例如如果本地目的地1204和遠(yuǎn)程目的地1206正在被同步(下述),則處理可結(jié)束。如果在步驟1344確定處理沒(méi)有結(jié)束,則控制從測(cè)定步驟1344轉(zhuǎn)回到步驟1334以接收另一I/O。否則,控制從步驟1344轉(zhuǎn)回到步驟1331以等待新的故障消息。注意,在某些實(shí)施例中,在步驟1344結(jié)束的處理還可使某些恢復(fù)參數(shù)被重置,如下面所詳述的。
參考圖31,流程圖1360示出了所執(zhí)行的與同步本地目的地1204和遠(yuǎn)程目的地1206有關(guān)的步驟。如上所述,本地目的地1204和遠(yuǎn)程目的地1206可通過(guò)使用通信鏈路1208在其之間傳輸數(shù)據(jù)而同步。在同步之后,系統(tǒng)可在本地目的地1204或在遠(yuǎn)程目的地1206重新啟動(dòng),而使用另一個(gè)作為鏡像。
與同步有關(guān),決定本地目的地1204和遠(yuǎn)程目的地1206中哪一個(gè)具有最新數(shù)據(jù)是有用的,從而數(shù)據(jù)可從遠(yuǎn)程目的地1206和本地目的地1204中具有最新數(shù)據(jù)的那一目的地傳輸給另一目的地。
流程圖1360的處理開(kāi)始于第一步驟1362,在源組1202和本地目的地1204之間的鏈路被撤消,及源組1202和遠(yuǎn)程目的地1206之間的鏈路被撤消。在步驟1362撤消鏈路幫助確保同步過(guò)程將不被破壞。在步驟1362之后是步驟1364,當(dāng)恢復(fù)信息正被收集時(shí)產(chǎn)生的SDDF映射被保持。在步驟1364之后是步驟1366,由于類(lèi)似于在步驟1362撤消鏈路的原因,在源組1202和本地目的地1204之間的排序的寫(xiě)被終止。
在步驟1366之后是測(cè)定步驟1368,其確定標(biāo)記值(上述)是否大于預(yù)定的值N。注意,標(biāo)記值指明自在遠(yuǎn)程目的地1206開(kāi)始收集錯(cuò)誤恢復(fù)數(shù)據(jù)以來(lái)已出現(xiàn)的周期轉(zhuǎn)換次數(shù)。如果在源組1202和本地目的地1204之間的鏈路不再工作且遠(yuǎn)程目的地1206已開(kāi)始恢復(fù)數(shù)據(jù)的收集,則遠(yuǎn)程目的地1206可包含較本地目的地1204更新的數(shù)據(jù)。這可通過(guò)查詢標(biāo)記的值進(jìn)行確定,所述標(biāo)記值指明自遠(yuǎn)程目的地1206接收信號(hào)以開(kāi)始收集恢復(fù)數(shù)據(jù)以來(lái)已出現(xiàn)的周期轉(zhuǎn)換次數(shù)。因此,如果在測(cè)定步驟1368確定標(biāo)記大于某一預(yù)先確定的值N(如2),則控制從測(cè)定步驟1368轉(zhuǎn)到步驟1371,所有SDDF會(huì)話(SDDF_1、SDDF_2和SDDF_3)的位圖均被OR(使用“或”)以確定遠(yuǎn)程目的地1206的磁軌(或其它數(shù)據(jù)量)及本地目的地1204的磁軌,這些磁軌對(duì)應(yīng)于在源組故障之前在源組1202和遠(yuǎn)程目的地1206之間發(fā)送或傳輸?shù)幕顒?dòng)態(tài)及非活動(dòng)態(tài)緩沖器的數(shù)據(jù),及對(duì)應(yīng)于可能在不同本地目的地1204上的可能數(shù)據(jù)。
在步驟1371之后是步驟1372,遠(yuǎn)程目的地1206從對(duì)應(yīng)于位圖的設(shè)定位的磁軌發(fā)送數(shù)據(jù),其是OR SDDF_1、SDDF_2和SDDF_3的三個(gè)位圖的結(jié)果。來(lái)自這些磁軌的數(shù)據(jù)可被復(fù)制到本地目的地1204,從而遠(yuǎn)程目的地1206和本地目的地1204可被同步。在步驟1372之后,處理結(jié)束。在在此的實(shí)施例中,N可被設(shè)定為不小于2。同樣,應(yīng)注意,在完成在步驟1376或步驟1372開(kāi)始的復(fù)制之前,以連接到本地目的地1204或遠(yuǎn)程目的地1206中的適當(dāng)目的地的主機(jī)重新開(kāi)始操作是可能的。
如果在測(cè)定步驟1368確定標(biāo)記不具有大于N的值(如標(biāo)記為0),則控制從測(cè)定步驟1368轉(zhuǎn)到步驟1374,所有會(huì)話(SDDF_1、SDDF_2、及SDDF_3(如果存在))的位圖被OR(使用“或”)以確定本地目的地1204的磁軌(或其它數(shù)據(jù)量),其對(duì)應(yīng)于在源組1202故障之前在源組1202和遠(yuǎn)程目的地1206之間發(fā)送或傳輸?shù)幕顒?dòng)態(tài)和費(fèi)活動(dòng)態(tài)緩沖器的數(shù)據(jù)。在步驟1374之后是步驟1376,對(duì)應(yīng)于位圖的OR的數(shù)據(jù)從本地目的地1204經(jīng)通信鏈路1208發(fā)送到遠(yuǎn)程目的地1206。一旦數(shù)據(jù)從本地目的地1204發(fā)送到遠(yuǎn)程目的地1206,則本地目的地1204和遠(yuǎn)程目的地1206將被同步。在步驟1376之后,處理結(jié)束。
步驟1372、1374、1376可使用任何數(shù)量的適當(dāng)技術(shù)完成。例如,后臺(tái)復(fù)制可被啟動(dòng)以使用由OR SDDF會(huì)話的位圖的結(jié)果指示的位復(fù)制數(shù)據(jù)。在在此的實(shí)施例中,步驟1372、1374、1376可使用RDF執(zhí)行,其中R1/R2被首先建立,其使用在美國(guó)專(zhuān)利申請(qǐng)09/997,810中公開(kāi)的動(dòng)態(tài)RDF機(jī)制進(jìn)行,該專(zhuān)利申請(qǐng)通過(guò)引用組合于此。在其之后,位圖可用于修改本地目的地1204和遠(yuǎn)程目的地1206之一或二者中的設(shè)備表映射,以使RDF機(jī)制執(zhí)行后臺(tái)復(fù)制。
參考圖32,流程圖1380示出了所執(zhí)行的與圖31的流程圖1360的終止排序的寫(xiě)步驟1366有關(guān)的詳細(xì)步驟。注意,當(dāng)源組1202使用單個(gè)存儲(chǔ)設(shè)備時(shí),圖32的處理示出clean up。在源組1202包括一個(gè)以上存儲(chǔ)設(shè)備的情況下,則圖23所示的處理可被代替使用。
處理開(kāi)始于第一測(cè)定步驟1382,其確定遠(yuǎn)程目的地1206從源組1202接收的所有排序的寫(xiě)數(shù)據(jù)是否已被完全處理(由遠(yuǎn)程目的地保存)。即,在測(cè)定步驟1382,其確定在遠(yuǎn)程目的地1206是否有任何數(shù)據(jù)對(duì)應(yīng)于排序的寫(xiě)周期,所述周期尚未被保存在遠(yuǎn)程目的地1206的磁盤(pán)空間上或至少在高速緩存器中并被標(biāo)記為寫(xiě)到磁盤(pán)空間。如果在測(cè)定步驟1382確定所有排序的寫(xiě)數(shù)據(jù)已在遠(yuǎn)程目的地被處理,則處理結(jié)束。
如果在測(cè)定步驟1382確定來(lái)自源組1202的部分排序的寫(xiě)數(shù)據(jù)尚未被處理,則控制從測(cè)定步驟1382轉(zhuǎn)到測(cè)定步驟1384,其確定在遠(yuǎn)程目的地1206的已接收、但未處理的排序的寫(xiě)數(shù)據(jù)是否對(duì)應(yīng)于完成的排序的寫(xiě)周期。注意,當(dāng)源組1202發(fā)送對(duì)應(yīng)于特定周期的數(shù)據(jù)給遠(yuǎn)程目的地1206時(shí),在遠(yuǎn)程目的地1206的周期不是完成的,除非并直到提交信息從源組1202發(fā)送給遠(yuǎn)程目的地1206為止。如果在測(cè)定步驟1384確定未處理的數(shù)據(jù)對(duì)應(yīng)于完成的排序的寫(xiě)周期,則控制從測(cè)定步驟1384轉(zhuǎn)到步驟1385,該周期的數(shù)據(jù)被保存,其通過(guò)將數(shù)據(jù)保存到遠(yuǎn)程目的地1206的磁盤(pán)和/或使數(shù)據(jù)在遠(yuǎn)程存儲(chǔ)設(shè)備1206的高速緩存器中以用于寫(xiě)到其磁盤(pán)上。在步驟1385之后,處理結(jié)束。
如果在測(cè)定步驟1384確定來(lái)自源組1202的未處理的排序的寫(xiě)數(shù)據(jù)不對(duì)應(yīng)于完成的周期,則控制從測(cè)定步驟1384轉(zhuǎn)到步驟1386,在遠(yuǎn)程目的地1206的設(shè)備表上的無(wú)效位被設(shè)置。在步驟1386的無(wú)效位設(shè)定表明遠(yuǎn)程目的地1206的磁軌(或某些其它數(shù)據(jù)增量)包含無(wú)效數(shù)據(jù)并因而需要從另一設(shè)備復(fù)制以導(dǎo)致更新。在這種情況下,其它設(shè)備可以是本地目的地1204,取決于本地目的地1204和遠(yuǎn)程目的地1206中哪一個(gè)包含最新信息。在遠(yuǎn)程目的地1206的設(shè)備表中被設(shè)定無(wú)效的特定磁軌(或其它數(shù)據(jù)單元)對(duì)應(yīng)于由從源組1202接收的未處理排序的寫(xiě)數(shù)據(jù)所指明的磁軌。在步驟1386之后是步驟1387,未完成的周期的未處理的排序的寫(xiě)數(shù)據(jù)被放棄。在步驟1387之后,處理結(jié)束。
參考圖33,流程圖1390示出了所執(zhí)行的與步驟1376或步驟1372有關(guān)的詳細(xì)步驟,其中在步驟1376,數(shù)據(jù)從本地目的地1204復(fù)制到遠(yuǎn)程目的地1206,在步驟1372,數(shù)據(jù)從遠(yuǎn)程目的地1206復(fù)制到本地目的地1204。處理開(kāi)始于第一步驟1392,SDDF_1、SDDF_2和SDDF_3的OR(來(lái)自步驟1374)用于設(shè)置設(shè)備表,無(wú)論本地目的地1204和遠(yuǎn)程目的地1206中哪一個(gè)將是恢復(fù)之后的R1設(shè)備。如果數(shù)據(jù)是從R1設(shè)備復(fù)制到R2設(shè)備,則對(duì)應(yīng)于遠(yuǎn)程磁軌的設(shè)備表位置在步驟1392被設(shè)置。否則,如果數(shù)據(jù)是從R2設(shè)備復(fù)制到R1設(shè)備,則對(duì)應(yīng)于本地磁軌的設(shè)備表位置在步驟1392被設(shè)置。在許多情況下,對(duì)應(yīng)于在步驟1392的表的修改的磁軌將是一樣的或是來(lái)自步驟1386的表的修改的超集,如上所述。
在步驟1392之后是步驟1396,開(kāi)始后臺(tái)復(fù)制過(guò)程。在步驟1396開(kāi)始后臺(tái)復(fù)制過(guò)程使數(shù)據(jù)在后臺(tái)過(guò)程中復(fù)制。在步驟1396之后,處理結(jié)束。
參考圖34,流程圖1450示出了一旦在源組1202、本地目的地1204和遠(yuǎn)程目的地1206之間的正常運(yùn)行被恢復(fù),重新初始化恢復(fù)參數(shù)所執(zhí)行的步驟。處理開(kāi)始于第一步驟1452,兩個(gè)SDDF會(huì)話SDDF_1和SDDF_2均被禁止。在步驟1452之后是步驟1454,SDDF_1被清除。在步驟1454之后是步驟1456,SDDF_2被清除。在步驟1456之后是步驟1458,指向SDDF會(huì)話之一的指針被使得指向SDDF_1。在步驟1458之后是步驟1462,SDDF_1被激活。在步驟1462之后,處理結(jié)束。
參考圖35,流程圖1470示出了與重置遠(yuǎn)程目的地1206使用的恢復(fù)參數(shù)有關(guān)的步驟。處理開(kāi)始于第一步驟1472,SDDF_3被禁止。在步驟1472之后是步驟1474,SDDF_3被清除。在步驟1474之后是步驟1476,遠(yuǎn)程目的地1206使用的標(biāo)記被清零(設(shè)定為0)。在步驟1476之后,處理結(jié)束。注意,在一些實(shí)施例中,在步驟1472或在步驟1472之后終止SDDF_3也是可能的,從而SDDF_3可在圖29的流程圖1320的步驟1322重新創(chuàng)建,如上所述。
參考圖36,圖表示出了源組1202的可能結(jié)構(gòu)。在圖36中,源組1202包括連接到單一本地存儲(chǔ)設(shè)備1504的主機(jī)1502。本地存儲(chǔ)設(shè)備1202被連接到本地目的地1204和遠(yuǎn)程目的地1206。在圖36所示的結(jié)構(gòu)中,所有在此描述的處理均由本地存儲(chǔ)設(shè)備1504執(zhí)行,或者,部分處理可由主機(jī)1502執(zhí)行。
參考圖37,圖表示出了源組1202的另一結(jié)構(gòu),主機(jī)1512連接到多個(gè)本地存儲(chǔ)設(shè)備1514-1516。每一本地存儲(chǔ)設(shè)備1514-1516均被連接到本地目的地1204和遠(yuǎn)程目的地1206。在圖37的結(jié)構(gòu)中,主機(jī)1512可處理在此描述的部分處理,例如,與排序的寫(xiě)有關(guān)的所有本地存儲(chǔ)設(shè)備1514-1516的周期轉(zhuǎn)換。
在一些情況下,如果在源組1202和本地目的地1204之間有數(shù)據(jù)傳輸困難,則可能希望阻止周期轉(zhuǎn)換。當(dāng)然,在本地目的地1204完全失效或源組1202和本地目的地1204之間的鏈路完全失效的情況下,系統(tǒng)可能完全停止工作且恢復(fù)將按如上所述進(jìn)行。然而,在其它情形中,可能是斷續(xù)的故障(如源組1202和本地目的地1204之間的鏈路短暫連接失敗),則可能希望僅僅不在源組1202上進(jìn)行與源組1202和遠(yuǎn)程目的地1206之間的通信有關(guān)的周期轉(zhuǎn)換,除非并直到相應(yīng)的數(shù)據(jù)被首次成功地從源組1202傳輸?shù)奖镜啬康牡?204為止。這將在下面描述。
參考圖38,流程圖200’示出了圖6的流程圖200的修改部分,其示出了所執(zhí)行的與從列表72、74(圖3中所示)的非活動(dòng)態(tài)列表傳輸數(shù)據(jù)給另一存儲(chǔ)設(shè)備有關(guān)的步驟。流程圖200’示出了步驟204和步驟212,這兩個(gè)步驟也在流程圖200中并在上面結(jié)合闡述圖6的文本進(jìn)行了描述。然而,如下面詳細(xì)提出的,流程圖200’包含另外的新步驟,這些步驟沒(méi)有提供在圖6的流程圖200中。
在步驟204之后是測(cè)定步驟1602,其確定正被傳輸給另一存儲(chǔ)設(shè)備的數(shù)據(jù)是否是特殊數(shù)據(jù)。如流程圖200’所使用的,在步驟1602的特殊數(shù)據(jù)指從源組1202傳輸?shù)奖镜啬康牡?204和遠(yuǎn)程目的地1206的數(shù)據(jù)。在在此的實(shí)施例中,特殊數(shù)據(jù)可通過(guò)使用內(nèi)建機(jī)制以確定數(shù)據(jù)是否被排隊(duì)以傳輸給本地目的地1204和遠(yuǎn)程目的地1206而進(jìn)行識(shí)別。當(dāng)然,其它識(shí)別和測(cè)試特殊數(shù)據(jù)的機(jī)制也可使用。
如果在測(cè)定步驟1602確定數(shù)據(jù)不是特殊數(shù)據(jù),則控制從步驟1602轉(zhuǎn)到步驟212以結(jié)合按圖6的流程圖200所述發(fā)送數(shù)據(jù)。在步驟212之后,處理按圖6的流程圖200中所示繼續(xù)并在本文別處描述。如果在測(cè)定步驟1602確定正被發(fā)送的數(shù)據(jù)是特殊數(shù)據(jù)(正從源組1202傳輸給本地目的地1204和遠(yuǎn)程目的地1206),則控制從測(cè)定步驟1602轉(zhuǎn)到測(cè)定步驟1604,其確定正被檢查的特定傳輸是從源組1202到遠(yuǎn)程目的地1206的特殊數(shù)據(jù)的傳輸。如本文別處所述,可能希望避免從源組1202發(fā)送數(shù)據(jù)給遠(yuǎn)程目的地1206,除非并直到數(shù)據(jù)已首先從源組1202成功地發(fā)送到本地目的地1204為止。因而,在步驟1604的測(cè)試確定正被檢查的特殊數(shù)據(jù)傳輸是否是從源組1202到遠(yuǎn)程目的地1206的傳輸。如果否,則控制從測(cè)定步驟1604轉(zhuǎn)到步驟212以繼續(xù)處理,如本文別處所述。否則,如果在測(cè)定步驟1604確定被檢查的數(shù)據(jù)對(duì)應(yīng)于從源組1202到遠(yuǎn)程目的地1206的傳輸,則控制從測(cè)定步驟1604轉(zhuǎn)到測(cè)定步驟1606,其確定相應(yīng)的從源組1202到本地目的地1204的數(shù)據(jù)傳輸是否在先前已成功完成。即,對(duì)于給定的槽或正被傳輸給遠(yuǎn)程目的地1206和本地目的地1204的數(shù)據(jù)的部分,在步驟1606的測(cè)試確定從源組1202到本地目的地1204的傳輸是否已被成功執(zhí)行。如果否,控制從測(cè)定步驟1606轉(zhuǎn)到步驟1607,執(zhí)行錯(cuò)誤處理/測(cè)試。
在某些情況下,不能從源組1202傳輸數(shù)據(jù)給本地目的地1204將使得系統(tǒng)在遠(yuǎn)程目的地1206開(kāi)始積聚數(shù)據(jù),例如,通過(guò)使故障消息被發(fā)送給遠(yuǎn)程目的地(見(jiàn)圖30的流程圖1330及相應(yīng)的描述)及通過(guò)退出圖38的流程圖200’所示的處理,從而不管數(shù)據(jù)是否曾經(jīng)成功地從源組1202發(fā)送給本地目的地1204,數(shù)據(jù)被從源組1202發(fā)送給遠(yuǎn)程目的地1206。其它處理可出現(xiàn),如,對(duì)于未從源組1202傳輸給本地目的地1204的數(shù)據(jù),設(shè)置設(shè)備表中的無(wú)效位。注意,如果源組1202和本地目的地1204之間的連接被重新建立,則可能同步遠(yuǎn)程目的地1206繼而重新開(kāi)始如在此所述的穩(wěn)態(tài)操作(例如,200’的流程圖的步驟)。
確定是否執(zhí)行上述錯(cuò)誤處理的規(guī)則可根據(jù)本領(lǐng)域一般技術(shù)人員可認(rèn)識(shí)的功能因素的數(shù)量進(jìn)行設(shè)置。在在此的實(shí)施例中,規(guī)則可根據(jù)源組1202和本地目的地1204之間的鏈路發(fā)生故障和/或本地目的地1204發(fā)生故障的可能性進(jìn)行設(shè)置。例如,如果一定時(shí)間量已逝去而沒(méi)有數(shù)據(jù)被成功地從源組1202傳輸?shù)奖镜啬康牡?204,則在步驟1607的錯(cuò)誤處理可確定故障已出現(xiàn)。如果在步驟1607的錯(cuò)誤處理確定故障尚未出現(xiàn)(繼而處理應(yīng)繼續(xù)),則控制從步驟1607轉(zhuǎn)到測(cè)定步驟1608,其確定是否有更多的非活動(dòng)態(tài)數(shù)據(jù)將從源組1202發(fā)送給遠(yuǎn)程目的地1206。如果是,則控制從測(cè)定步驟1608轉(zhuǎn)到步驟1612,重復(fù)通過(guò)數(shù)據(jù)(如重復(fù)通過(guò)列表74、76中的非活動(dòng)態(tài)列表的單元)的指針被調(diào)整為指向?qū)⒁l(fā)送的數(shù)據(jù)的下一非活動(dòng)態(tài)塊。在步驟1612之后,控制轉(zhuǎn)回到步驟204,以繼續(xù)本文別處所討論的處理。
如果在測(cè)定步驟1608確定沒(méi)有更多的非活動(dòng)態(tài)數(shù)據(jù)要發(fā)送,則控制從測(cè)定步驟1608轉(zhuǎn)到步驟1614,過(guò)程等待。由于已經(jīng)確定被發(fā)送的數(shù)據(jù)對(duì)應(yīng)于從源組1202到遠(yuǎn)程目的地1206的傳輸(在測(cè)定步驟1604),且已經(jīng)確定從源組1202到本地目的地1204的相應(yīng)傳輸尚未完成(根據(jù)在步驟1606的測(cè)試),則如果在測(cè)定步驟1608確定沒(méi)有更多的數(shù)據(jù)要發(fā)送,則在步驟1614等待是適當(dāng)?shù)模瑥亩蚋嗟姆腔顒?dòng)態(tài)數(shù)據(jù)將被使得可用于發(fā)送,或直到另一過(guò)程將相應(yīng)的數(shù)據(jù)成功地從源組1202傳輸?shù)奖镜啬康牡?204為止,因而改變?cè)跍y(cè)定步驟1606的結(jié)果以用于下一迭代。在步驟1614之后,控制轉(zhuǎn)回到步驟204以繼續(xù)本文別處描述的處理。
如果在測(cè)定步驟1606確定相應(yīng)的到本地目的地1204的傳輸在先前已成功完成,則控制從測(cè)定步驟1606轉(zhuǎn)到另一測(cè)定步驟1616以確定正被傳輸?shù)臄?shù)據(jù)是否具有一個(gè)以上的與其關(guān)聯(lián)的與傳輸有關(guān)的槽(如活動(dòng)態(tài)槽和非活動(dòng)態(tài)槽)。如本文別處所述,在一定條件下,有一個(gè)以上的槽與其關(guān)聯(lián)而不是單個(gè)槽。例如,見(jiàn)上面結(jié)合圖12的流程圖440和步驟446、472、474、476、478的描述。因而,如果在測(cè)定步驟1616確定沒(méi)有一個(gè)以上的槽,則控制從測(cè)定步驟1616轉(zhuǎn)到步驟212,以繼續(xù)本文別處描述的處理。否則,如果在測(cè)定步驟1616確定有一個(gè)以上的相應(yīng)槽,則控制從測(cè)定步驟1616轉(zhuǎn)到測(cè)定步驟1618,其確定傳輸?shù)奖镜啬康牡?204的其它槽的傳輸是否已成功,類(lèi)似于在步驟1606的槽的測(cè)試。如果在測(cè)定步驟1618確定所有其它相應(yīng)的槽均被適當(dāng)?shù)貍鬏斀o本地存儲(chǔ)設(shè)備1204,則控制從測(cè)定步驟1618轉(zhuǎn)到步驟212以繼續(xù)本文別處描述的處理。否則,控制從測(cè)定步驟1618轉(zhuǎn)到步驟1608,同樣如本文別處所述。
在在此描述的系統(tǒng)的另一實(shí)施例中,不象圖7的圖表240中所示那樣使用COVD用于R2設(shè)備是可能的。即,可在R2設(shè)備不使用COVD的情況下實(shí)現(xiàn)異步數(shù)據(jù)的R2接收。
參考圖39,圖表1640示出了提供在接收數(shù)據(jù)的遠(yuǎn)程存儲(chǔ)設(shè)備26中的高速緩存器1642。高速緩存器1642包括多個(gè)槽1652-1654,其中放置從本地存儲(chǔ)設(shè)備24接收的異步數(shù)據(jù)。其還示出了第一周期鏈表1674和第二周期鏈表1676,這些鏈表包含指向高速緩存器1642的槽1652-1654的指針。因而。例如,周期鏈表1674包括多個(gè)指針1681-1685,每一指針指向高速緩存器1642中的槽1652-1654之一。類(lèi)似地,周期鏈表1676包括多個(gè)指針1691-1695,每一指針指向高速緩存器1642的槽1652-1654之一。標(biāo)準(zhǔn)邏輯設(shè)備1698也被映射到高速緩存器1642的部分中。
在在此的實(shí)施例中,列表1674、1676之一對(duì)應(yīng)于非活動(dòng)態(tài)數(shù)據(jù)塊(如圖2中所示的數(shù)據(jù)塊56),而列表1674、1676中的另一列表對(duì)應(yīng)于活動(dòng)態(tài)數(shù)據(jù)塊(如圖2的數(shù)據(jù)塊58)。所接收的數(shù)據(jù)使用非活動(dòng)態(tài)數(shù)據(jù)塊進(jìn)行積聚,而活動(dòng)態(tài)數(shù)據(jù)塊用于保存在標(biāo)準(zhǔn)邏輯設(shè)備1698的數(shù)據(jù),如本文別處結(jié)合圖7的圖表240及相應(yīng)的文本所述。因而,當(dāng)新數(shù)據(jù)到達(dá)時(shí),其被放置在高速緩存器1642中,且新指針被添加到周期鏈表1674、1676中對(duì)應(yīng)于非活動(dòng)態(tài)數(shù)據(jù)塊(接收數(shù)據(jù)時(shí))的那一周期鏈表。
在一些情況下,能夠確定標(biāo)準(zhǔn)邏輯設(shè)備1698(或任何其它邏輯設(shè)備)的一部分在對(duì)應(yīng)于所接收的數(shù)據(jù)的高速緩存器1642中具有與其關(guān)聯(lián)的槽是有用的。當(dāng)然,永遠(yuǎn)可能遍歷列表1674、1676以確定在高速緩存器1642中是否有相應(yīng)的槽。然而,如果有使用特定設(shè)備、柱面(cylinder)及磁頭的值(head value)來(lái)確定在高速緩存器1642中是否有對(duì)應(yīng)的槽1652-1654等待被降級(jí)到設(shè)備的方法則更有用。
參考圖40,圖表1700示出了散列表1702,其包含多個(gè)項(xiàng)1704-1706。在在此的實(shí)施例中,每一項(xiàng)1704-1706或包含空值指針或指向緩存槽1652-1654之一,這些緩存槽對(duì)應(yīng)于已被接收但尚未被保存在標(biāo)準(zhǔn)邏輯設(shè)備1698(或另一標(biāo)準(zhǔn)邏輯設(shè)備)上的數(shù)據(jù)。表1702通過(guò)使用散列函數(shù)進(jìn)行索引,散列函數(shù)使用設(shè)備、柱面及首次分析值執(zhí)行數(shù)學(xué)運(yùn)算以在表1702內(nèi)產(chǎn)生索引從而發(fā)現(xiàn)相應(yīng)的項(xiàng)。因而,當(dāng)R2設(shè)備接收數(shù)據(jù)時(shí),散列函數(shù)被應(yīng)用到設(shè)備、柱面、及磁頭以發(fā)現(xiàn)其在表1702內(nèi)的索引值,繼而指針被寫(xiě)到指向高速緩存器1642中的特定槽1652-1654的相應(yīng)項(xiàng)1704-1706。一旦所接收的數(shù)據(jù)被適當(dāng)?shù)亟导?jí)到標(biāo)準(zhǔn)邏輯設(shè)備1698(或另一設(shè)備),則項(xiàng)1704-1706中的相應(yīng)項(xiàng)被設(shè)置為空值。在這種情況下,散列表1702允許快速地確定標(biāo)準(zhǔn)邏輯設(shè)備的特定部分是否對(duì)應(yīng)于尚未被降級(jí)的所接收數(shù)據(jù)。對(duì)于在此描述的系統(tǒng),任何適當(dāng)?shù)纳⒘泻瘮?shù)均可用于在表1702內(nèi)產(chǎn)生索引。
在一些情況下,對(duì)于特定的設(shè)備、柱面及磁頭值,在表1702內(nèi)產(chǎn)生與用不同設(shè)備、柱面及磁頭值產(chǎn)生的索引一樣的索引是可能的。這被稱(chēng)為“沖突”。在出現(xiàn)沖突的情況,表1702中的第二項(xiàng)對(duì)應(yīng)于與所提供的索引相同的索引,且第二項(xiàng)被鏈接到第一項(xiàng),從而特定的索引將對(duì)應(yīng)于一個(gè)以上的項(xiàng)。這由單元1708所示,其鏈接到表1702的單元1705。因而,第一設(shè)備、柱面及磁頭值被散列以產(chǎn)生并索引到項(xiàng)1705,同時(shí)不同的設(shè)備、柱面及磁頭值被輸入到散列函數(shù)以產(chǎn)生相同的索引值。在在此的實(shí)施例中,項(xiàng)1705用于指向高速緩存器1642中對(duì)應(yīng)于第一設(shè)備、柱面及磁頭的數(shù)據(jù),而項(xiàng)1708用于指向高速緩存器1642中對(duì)應(yīng)于第二設(shè)備、柱面及磁頭的數(shù)據(jù)。當(dāng)然,當(dāng)數(shù)據(jù)被降級(jí)到適當(dāng)?shù)脑O(shè)備時(shí),項(xiàng)1705、1708中的對(duì)應(yīng)項(xiàng)可從表1700中消除。
注意,任何數(shù)量的項(xiàng)可對(duì)應(yīng)于單一索引,從而,例如,如果導(dǎo)致三個(gè)單獨(dú)的設(shè)備、柱面及磁頭的設(shè)置值產(chǎn)生相同的索引的沖突出現(xiàn),則有三個(gè)(或更多個(gè))項(xiàng)在表1702內(nèi)在特定的索引處鏈接在一起。還應(yīng)注意,其它適當(dāng)?shù)募夹g(shù)可用于處理沖突,包括提供另外的表(如第二表、第三表、第四表等)。
參考圖41,圖表1720示出了散列表1722的另一實(shí)施例,其包含多個(gè)項(xiàng)1724-1726。圖41的實(shí)施例類(lèi)似于圖40的實(shí)施例,但也有幾個(gè)區(qū)別,如在此所述。每一項(xiàng)1724-1726或包含空值指針或指向圖表1720中所示的緩存槽1728、1732、1734之一,這些緩存槽對(duì)應(yīng)于已被接收但尚未被保存在標(biāo)準(zhǔn)邏輯設(shè)備1698(或另一標(biāo)準(zhǔn)邏輯設(shè)備)上的數(shù)據(jù)。表1722通過(guò)使用散列函數(shù)進(jìn)行索引,散列函數(shù)使用設(shè)備、柱面及磁頭的值執(zhí)行數(shù)學(xué)運(yùn)算以在表1722內(nèi)產(chǎn)生索引從而發(fā)現(xiàn)相應(yīng)的項(xiàng)。因而,當(dāng)R2設(shè)備接收數(shù)據(jù)時(shí),散列函數(shù)被應(yīng)用到設(shè)備、柱面、及磁頭以發(fā)現(xiàn)其在表1722內(nèi)的索引值,繼而指針被寫(xiě)到指向特定槽1728、1732、1734的相應(yīng)項(xiàng)1724-1726。一旦所接收的數(shù)據(jù)被適當(dāng)?shù)亟导?jí)到標(biāo)準(zhǔn)邏輯設(shè)備1698(或另一設(shè)備),則項(xiàng)1724-1726中的相應(yīng)項(xiàng)被適當(dāng)?shù)卣{(diào)整。在這種情況下,散列表1722允許快速地確定標(biāo)準(zhǔn)邏輯設(shè)備的特定部分是否對(duì)應(yīng)于尚未被降級(jí)的所接收數(shù)據(jù)。對(duì)于在此描述的系統(tǒng),任何適當(dāng)?shù)纳⒘泻瘮?shù)均可用于在表1722內(nèi)產(chǎn)生索引。
對(duì)于圖41中的實(shí)施例,在出現(xiàn)沖突的情況,由表項(xiàng)指向的第一槽指向?qū)е聸_突的第二槽。因而,例如,如果槽1732和槽1736在表項(xiàng)1725導(dǎo)致沖突,則表項(xiàng)1725指向槽1732,而槽1732指向槽1736。因此,當(dāng)隨后的槽被添加時(shí),沖突不會(huì)導(dǎo)致表1722的任何變化,因?yàn)樘砑与S后的槽僅包括改變先前槽的指針值。當(dāng)然,任何數(shù)量的槽可對(duì)應(yīng)于單一表項(xiàng)。
注意,任何數(shù)量的項(xiàng)可對(duì)應(yīng)于單一索引,從而,例如,如果導(dǎo)致三個(gè)單獨(dú)的設(shè)備、柱面及磁頭的設(shè)置值產(chǎn)生相同的索引的沖突出現(xiàn),則有三個(gè)(或更多個(gè))項(xiàng)在表1722內(nèi)在特定的索引處鏈接在一起。還應(yīng)注意,其它適當(dāng)?shù)募夹g(shù)可用于處理沖突,包括提供另外的表(如第二表、第三表、第四表等)。
在一些情形中,能夠使用圖26的圖表1200中所示的本地目的地1204以外的設(shè)備是有利的。當(dāng)然,如果本地目的地1204不是源組的完全鏡像,則恢復(fù)可在遠(yuǎn)程目的地1206執(zhí)行。然而,遠(yuǎn)程目的地1206可能不包含與從源組1202同步寫(xiě)到本地目的地1204的數(shù)據(jù)一樣新的數(shù)據(jù)。因此,可能希望能夠在遠(yuǎn)程目的地1206恢復(fù)但具有與從源組1202同步寫(xiě)到本地目的地1204的數(shù)據(jù)一樣新的數(shù)據(jù)。
參考圖42,圖表1780示出了包含源組1782的系統(tǒng),其類(lèi)似于圖26的圖表1200的源組1202。該圖表1780還示出了遠(yuǎn)程目的地1786,其類(lèi)似于圖26的圖表1200的遠(yuǎn)程目的地1206。
圖表1780還示出了小型存儲(chǔ)器本地目的地1788,其用于從源組1782接收同步的數(shù)據(jù)寫(xiě)。在在此的實(shí)施例中,小型存儲(chǔ)器本地目的地1788對(duì)源組1782而言表現(xiàn)為存儲(chǔ)設(shè)備,類(lèi)似于圖26的圖表1200的本地目的地1204。然而,在在此的實(shí)施例中,小型存儲(chǔ)器本地目的地1788不是源組1782的鏡像。而是,小型存儲(chǔ)器本地目的地1788用于保存在恢復(fù)必要時(shí)將被傳輸給遠(yuǎn)程目的地1786的數(shù)據(jù)。在在此的實(shí)施例中,所有恢復(fù)均在遠(yuǎn)程目的地1786執(zhí)行。在其它實(shí)施例中,源組1782可能知道其被連接到小型存儲(chǔ)器本地目的地1788。
源組1782可象圖26的圖表1200的源組1202那樣工作。因而,源組1782提供同步的寫(xiě)給小型存儲(chǔ)器本地目的地1788并提供排序的寫(xiě)給遠(yuǎn)程目的地1786。小型存儲(chǔ)器本地目的地1788,不是作為源組1782的鏡像,而是保存來(lái)自源組1782的最近的同步的寫(xiě),從而,在恢復(fù)必要的情況下,小型存儲(chǔ)器本地目的地1788可將最近的寫(xiě)傳輸給遠(yuǎn)程目的地1786。當(dāng)數(shù)據(jù)從源組1782傳輸給遠(yuǎn)程目的地1786時(shí),相應(yīng)的數(shù)據(jù)被從小型存儲(chǔ)器本地目的地1788除去,從而小型存儲(chǔ)器本地目的地1788僅保留(例如)最近兩個(gè)周期的排序的寫(xiě)數(shù)據(jù),因?yàn)槿魏伪葍蓚€(gè)最近周期舊的周期均已被保存在遠(yuǎn)程存儲(chǔ)設(shè)備1786上。
參考圖43,數(shù)據(jù)結(jié)構(gòu)1800示出了在小型存儲(chǔ)器本地目的地1788的數(shù)據(jù)的存儲(chǔ)。在在此的實(shí)施例中,數(shù)據(jù)結(jié)構(gòu)1800為具有多個(gè)單元1802-1805的鏈表。鏈表頂部指針指向第一單元1802。第一單元指向第二單元1803,第二單元指向第三單元1804,等等。鏈表1800還具有最后的單元1805,其指向作為下一單元的空值指針以指明鏈表的末尾。當(dāng)然,其它適當(dāng)?shù)臄?shù)據(jù)結(jié)構(gòu)也可使用。
在在此的實(shí)施例中,鏈表1800根據(jù)標(biāo)準(zhǔn)邏輯設(shè)備上的磁軌和磁頭位置進(jìn)行排序,從而,例如,單元1802在標(biāo)準(zhǔn)邏輯設(shè)備的單元順序中可能是第一單元,第二單元1803緊隨第一單元1802等。在另一實(shí)施例中,鏈表1800可根據(jù)數(shù)據(jù)寫(xiě)從源組1782提供給小型存儲(chǔ)器本地目的地1788的順序進(jìn)行排序。兩個(gè)實(shí)施例均將在下面詳述。
參考圖44,圖表詳細(xì)示出了鏈表1800的數(shù)據(jù)單元1820。數(shù)據(jù)單元1820包括TRACK字段1822,其指明用于保存相應(yīng)的標(biāo)準(zhǔn)邏輯設(shè)備上的數(shù)據(jù)的磁軌號(hào)。其它數(shù)據(jù)存儲(chǔ)位置可代替磁軌號(hào)進(jìn)行使用,如區(qū)段編號(hào)、自標(biāo)準(zhǔn)邏輯設(shè)備的開(kāi)始的偏移、或任何其它適當(dāng)?shù)闹甘痉?br>
數(shù)據(jù)單元1820還包括周期次數(shù)1824(CYCNO),其指明用于將數(shù)據(jù)從源組1782傳輸?shù)竭h(yuǎn)程目的地1786的周期,如本文別處所述。當(dāng)數(shù)據(jù)從源組1782傳輸?shù)叫⌒痛鎯?chǔ)器本地目的地1788時(shí),小型存儲(chǔ)器本地目的地1788跟蹤對(duì)應(yīng)于源組1782和遠(yuǎn)程目的地1786之間的傳輸?shù)闹芷谧兓⒎峙溥m當(dāng)?shù)闹芷诖螖?shù)給數(shù)據(jù)單元1820,如本文別處所詳述的。
數(shù)據(jù)單元1820還包括數(shù)據(jù)字段1826(DATA),其對(duì)應(yīng)于已從源組1782傳輸?shù)叫⌒痛鎯?chǔ)器本地目的地1788的數(shù)據(jù)。數(shù)據(jù)單元1820還包括下一字段1828(NEXT),其用于指向鏈表1800中的下一數(shù)據(jù)單元。
參考圖45,流程圖1850示出了由小型存儲(chǔ)器本地目的地1788執(zhí)行的與接收由源組1782提供給小型存儲(chǔ)器本地目的地1788的數(shù)據(jù)有關(guān)的步驟。如本文別處所述,小型存儲(chǔ)器本地目的地1788對(duì)源組1782可表現(xiàn)為源組1782的鏡像。然而如在此所述的,小型存儲(chǔ)器本地目的地1788不必須是源組1782的鏡像,而是包含來(lái)自源組1782的最近數(shù)據(jù)。在恢復(fù)必要的情況下,小型存儲(chǔ)器本地目的地1788將保存于其上的數(shù)據(jù)傳輸給遠(yuǎn)程目的地1786以幫助恢復(fù)。
流程圖1850的處理開(kāi)始于步驟1852,本地周期次數(shù)CYCNO被設(shè)定為0。在步驟1852設(shè)置本地周期次數(shù)用于跟蹤源組1782的周期變化。注意,本地周期次數(shù)不必準(zhǔn)確對(duì)應(yīng)于在源組1782使用的特定周期次數(shù)。而是,在步驟1852設(shè)置的周期次數(shù)跟蹤源組1782的周期轉(zhuǎn)換即足夠了。
在步驟1852之后是步驟1854,從源組1782接收數(shù)據(jù)。在步驟1854之后是測(cè)定步驟1856,其確定所接收的數(shù)據(jù)是否對(duì)應(yīng)于源組1782提供的周期轉(zhuǎn)換。測(cè)定步驟1856類(lèi)似于圖28A的測(cè)定步驟1262,如上所述。
如果在測(cè)定步驟1856確定所接收的數(shù)據(jù)不對(duì)應(yīng)于周期轉(zhuǎn)換,則控制從測(cè)定步驟1856轉(zhuǎn)到步驟1858,所接收的數(shù)據(jù)被添加到小型存儲(chǔ)器本地目的地1788的存儲(chǔ)器中。在步驟1858將數(shù)據(jù)添加到小型存儲(chǔ)器本地目的地1788的存儲(chǔ)器將在本文別處詳細(xì)描述。在步驟1858之后是步驟1862,所接收的數(shù)據(jù)由小型存儲(chǔ)器本地目的地1788向源組1782確認(rèn)。在步驟1862確認(rèn)數(shù)據(jù)可用于使小型存儲(chǔ)器本地目的地1788對(duì)源組1782表現(xiàn)為全同步鏡像(即在步驟1862提供的確認(rèn)與全同步鏡像提供的確認(rèn)一樣)。在步驟1862之后,控制轉(zhuǎn)回到步驟1854以接收更多的數(shù)據(jù)。
如果在測(cè)定步驟1856確定在步驟1854接收的數(shù)據(jù)對(duì)應(yīng)于周期轉(zhuǎn)換,則控制從步驟1856轉(zhuǎn)到步驟1864,與小型存儲(chǔ)器本地目的地1788一起使用的內(nèi)部周期次數(shù)CYCNO被增加。在在此的實(shí)施例中,有一個(gè)最大周期次數(shù)MAXCYCNO,從而在步驟1864增加周期次數(shù)是通過(guò)對(duì)CYCNO加1并取其模MAXCYCNO的結(jié)果。
在步驟1864之后是步驟1866,對(duì)應(yīng)于先前周期次數(shù)的數(shù)據(jù)被放棄。如本文別處所討論的,小型存儲(chǔ)器本地目的地1788保存對(duì)應(yīng)于兩個(gè)最近周期次數(shù)的數(shù)據(jù)。任何比兩個(gè)周期次數(shù)舊的數(shù)據(jù)應(yīng)已被成功從源組1782傳輸?shù)竭h(yuǎn)程目的地1786。因此,由于恢復(fù)將在遠(yuǎn)程目的地1786提供,則小型存儲(chǔ)器本地目的地1788僅需要保存對(duì)應(yīng)于當(dāng)前周期次數(shù)的數(shù)據(jù)及對(duì)應(yīng)于在前周期次數(shù)的數(shù)據(jù)。在其它實(shí)施例中,保持不同的數(shù)據(jù)(如三個(gè)或四個(gè)最近周期的數(shù)據(jù))是可能的。在步驟1866放棄數(shù)據(jù)在本文別處詳細(xì)討論。在步驟1866之后,控制轉(zhuǎn)回到步驟1854,如上述,以接收另外的數(shù)據(jù)。
參考圖46,流程圖1900詳細(xì)地示出了由小型存儲(chǔ)器本地目的地1788執(zhí)行的與步驟1858有關(guān)的步驟,其中所接收的數(shù)據(jù)被添加到保存在小型存儲(chǔ)器本地目的地1788的數(shù)據(jù)。處理開(kāi)始于第一步驟1902,臨時(shí)變量P1被設(shè)定為等于list top,指針指向保存在小型存儲(chǔ)器本地目的地1788的數(shù)據(jù)的鏈表1800。
在步驟1902之后是測(cè)定步驟1904,其確定臨時(shí)變量P1是否等于空值。如果是,則沒(méi)有數(shù)據(jù)保存在鏈表1800中且由流程圖1900的步驟保存的數(shù)據(jù)對(duì)應(yīng)于被保存在小型存儲(chǔ)器本地目的地1788的第一數(shù)據(jù)。如果在測(cè)定步驟1904確定P1等于空值,則控制從測(cè)定步驟1904轉(zhuǎn)到步驟1906,則使用用于臨時(shí)變量T的malloc指令(或其它適當(dāng)?shù)念?lèi)似指令)從堆棧(或其它適當(dāng)?shù)念?lèi)似物)獲得存儲(chǔ)器,所述變量T用于暫時(shí)保存數(shù)據(jù)。在步驟1906之后是步驟1908,數(shù)據(jù)記錄T(T.TRACK)的磁軌號(hào)字段被設(shè)定為等于標(biāo)準(zhǔn)邏輯設(shè)備的磁軌,標(biāo)準(zhǔn)邏輯設(shè)備上的數(shù)據(jù)被保存在源組1782。在步驟1908之后是步驟1912,T.CYCNO被設(shè)定為等于在小型存儲(chǔ)器本地目的地1788的當(dāng)前本地周期次數(shù)。
在步驟1912之后是步驟1914,所接收的數(shù)據(jù)被復(fù)制到數(shù)據(jù)字段T(即T.DATA)。在步驟1914之后是步驟1916,下一字段(T.NEXT)被設(shè)定為等于空值。在步驟1916之后是步驟1918,list top被設(shè)定為等于T。在步驟1918之后,處理結(jié)束。
如果在測(cè)定步驟1904確定變量P1不等于空值,則控制從測(cè)定步驟1904轉(zhuǎn)到測(cè)定步驟1922,其確定對(duì)應(yīng)于已被接收的數(shù)據(jù)的磁軌號(hào)是否等于由P1指向的數(shù)據(jù)單元的磁軌號(hào)。如果是,則控制從測(cè)定步驟1922轉(zhuǎn)到步驟1924,所接收的數(shù)據(jù)被寫(xiě)到數(shù)據(jù)字段P1.DATA(可能蓋寫(xiě)現(xiàn)有的數(shù)據(jù))。在步驟1924之后是步驟1926,由P1(P1.CYCNO)指向的單元的周期次數(shù)字段用保存在小型存儲(chǔ)器本地目的地1778的當(dāng)前本地周期次數(shù)(CYCNO)蓋寫(xiě)。在步驟1926之后,處理結(jié)束。
如果在測(cè)定步驟1922確定由P1指向的單元的磁軌號(hào)不等于對(duì)應(yīng)于所接收數(shù)據(jù)的磁軌號(hào),則控制從測(cè)定步驟1922轉(zhuǎn)到步驟1928,另一臨時(shí)變量P2被設(shè)定為等于P1.NEXT。在步驟1928之后是測(cè)定步驟1932,其確定P2是否等于空值(即P1指向在鏈表1800末尾的單元)。如果否,則控制從測(cè)定步驟1932轉(zhuǎn)到測(cè)定步驟1934,其確定對(duì)應(yīng)于由P2指向的單元的磁軌號(hào)是否小于對(duì)應(yīng)于已被接收的數(shù)據(jù)的磁軌號(hào)。在步驟1934的測(cè)試確定所接收的數(shù)據(jù)是否將是插入P1和P2之間的新單元。如果在測(cè)定步驟1934確定由P2指向的單元的磁軌號(hào)不小于對(duì)應(yīng)于所接收的數(shù)據(jù)的磁軌號(hào),則控制從測(cè)定步驟1934轉(zhuǎn)到步驟1936,臨時(shí)變量P1被設(shè)定為等于P2以準(zhǔn)備下一迭代。在步驟1936之后,控制轉(zhuǎn)回到步驟1922的測(cè)試,如上所述。
如果在測(cè)定步驟1932確定P2指向空值,或如果在測(cè)定步驟1934確定由P2指向的數(shù)據(jù)單元的磁軌號(hào)小于對(duì)應(yīng)于所接收數(shù)據(jù)的磁軌號(hào),則控制轉(zhuǎn)到步驟1938,使用臨時(shí)變量T分配新單元(對(duì)列表1800)。在步驟1938之后是步驟1942,T(T.TRACK)的磁軌號(hào)被設(shè)定為等于對(duì)應(yīng)于所接收數(shù)據(jù)的磁軌號(hào)。在步驟1942之后是步驟1944,T(T.CYCNO)的周期次數(shù)字段被設(shè)定為等于在小型存儲(chǔ)器本地目的地1788的本地周期次數(shù)。
在步驟1944之后是步驟1946,所接收的數(shù)據(jù)被寫(xiě)到臨時(shí)存儲(chǔ)區(qū)(T.DATA)的數(shù)據(jù)字段。在步驟1946之后是步驟1948,T(T.NEXT)的下一字段被設(shè)定為等于P2。在步驟1948之后是步驟1952,由P1(P1.NEXT)指向的單元的下一字段被設(shè)定為等于T。在步驟1952之后,處理結(jié)束。
圖46的流程圖1900示出了在小型存儲(chǔ)區(qū)本地目的地1788的鏈表1800根據(jù)對(duì)應(yīng)于所接收的數(shù)據(jù)的磁軌號(hào)排序的實(shí)施例。其還可能根據(jù)在小型存儲(chǔ)區(qū)本地目的地1788的數(shù)據(jù)接收順序排序所接收的數(shù)據(jù)。
參考圖47,流程圖2000示出了由小型存儲(chǔ)區(qū)本地目的地1788在添加數(shù)據(jù)的步驟1858執(zhí)行的步驟。在流程圖2000所示的另一實(shí)施例中,鏈表1800中的數(shù)據(jù)根據(jù)在小型存儲(chǔ)器本地目的地1788的數(shù)據(jù)接收順序進(jìn)行保存。
處理開(kāi)始于第一步驟2002,分配新數(shù)據(jù)單元T。在步驟2002之后是步驟2004,所分配的單元的磁軌號(hào)字段(T.TRACK)被設(shè)定為等于對(duì)應(yīng)于所接收數(shù)據(jù)的磁軌號(hào)。在步驟2004之后是步驟2006,所分配的單元的周期次數(shù)字段(T.CYCNO)被設(shè)定為等于在小型存儲(chǔ)器本地目的地1788提供的本地周期次數(shù)(CYCNO)。
在步驟2006之后是步驟2008,所接收的數(shù)據(jù)被寫(xiě)到所分配的單元的數(shù)據(jù)字段中(T.DATA)。在步驟2008之后是步驟2012,所分配的單元的下一字段(T.NEXT)被設(shè)定為等于空值。在在此的實(shí)施例中,最近接收的數(shù)據(jù)被添加在鏈表1800的末尾。在步驟2012之后是測(cè)定步驟2014,其確定list top(指向鏈表1800的頂部的指針)是否等于空值。注意,當(dāng)?shù)谝粩?shù)據(jù)被寫(xiě)到鏈表1800時(shí),或如果所有數(shù)據(jù)已被從鏈表1800除去時(shí),list top可等于空值。如果在測(cè)定步驟2014確定list top等于空值,則控制從測(cè)定步驟2014轉(zhuǎn)到步驟2016,list top被設(shè)定為指向新分配的數(shù)據(jù)單元T。在步驟2016之后是步驟2018,跟蹤鏈表1800的末尾的鏈表末端單元LE也被設(shè)定為指向新分配的數(shù)據(jù)單元T。在步驟2018之后,處理結(jié)束。
如果在測(cè)定步驟2014確定list top不等于空值,則控制從測(cè)定步驟2014轉(zhuǎn)到步驟2022,由鏈表末端指針指向的數(shù)據(jù)單元的下一字段(LE.NEXT)被設(shè)定為指向新分配的數(shù)據(jù)單元T。在步驟2022之后是步驟2024,鏈表末端指針LE被設(shè)定為等于新分配的數(shù)據(jù)單元T。在步驟2024之后,處理結(jié)束。
參考圖48,流程圖2050示出了由小型存儲(chǔ)器本地目的地1788執(zhí)行的與圖45的流程圖1850的放棄步驟1866有關(guān)的步驟。在在此的實(shí)施例中,同樣的處理可用于放棄,不管數(shù)據(jù)是根據(jù)磁軌號(hào)(圖46的實(shí)施例)還是根據(jù)接收順序(圖47的實(shí)施例)保存在鏈表1800上。注意,用于放棄數(shù)據(jù)的技術(shù)可獨(dú)立于用于添加數(shù)據(jù)的技術(shù)。
流程圖2050的處理開(kāi)始于第一步驟2052,臨時(shí)變量P1被設(shè)定為等于list top變量,其指向鏈表1800的第一單元。在步驟2052之后是測(cè)定步驟2054,其確定P1是否等于空值。如果是,則處理結(jié)束。否則,控制從測(cè)定步驟2054轉(zhuǎn)到步驟2056,另一臨時(shí)變量P2被設(shè)定為等于由P1指向的數(shù)據(jù)單元的下一字段(即被設(shè)定為等于P1.NEXT)。在步驟2056之后是測(cè)定步驟2058,其確定P2是否指向空值。如果是,則處理結(jié)束。否則,控制從測(cè)定步驟2058轉(zhuǎn)到測(cè)定步驟2062,其確定由P2指向的數(shù)據(jù)單元的周期次數(shù)字段(P2.CYCNO)是否等于被放棄的數(shù)據(jù)的周期次數(shù)(如(CYCNO-2)模MAXCYCNO)。如果是,則控制從測(cè)定步驟2062轉(zhuǎn)到步驟2064,由P1指向的單元的下一字段(P1.NEXT)被設(shè)定為等于由P2指向的單元的下一字段(P2.NEXT),因而從鏈表1800除去由P2指向的單元。在步驟2064之后是步驟2066,由P2指向的單元被釋放(即返回到堆棧中)。在步驟2066之后是步驟2068,P1被設(shè)定為等于由P1指向的下一字段(即P1=P1.NEXT)。在步驟2068之后,控制轉(zhuǎn)回到步驟2056以進(jìn)行下一迭代。注意,如果在測(cè)定步驟2062確定由P1指向的單元的周期次數(shù)字段不等于被放棄的數(shù)據(jù)的周期次數(shù),則控制從測(cè)定步驟2062轉(zhuǎn)到步驟2068,如上所述。
注意,對(duì)于結(jié)合圖42-48討論的實(shí)施例,其不必保持SDDF映射,因?yàn)榛謴?fù)總是在遠(yuǎn)程目的地1786執(zhí)行且所有保存的數(shù)據(jù)均從小型存儲(chǔ)器本地目的地1788傳輸給遠(yuǎn)程目的地1786恢復(fù)。因而,不必跟蹤需要被傳輸?shù)木唧w的數(shù)據(jù)。此外,不必具有標(biāo)記或任何其它機(jī)制來(lái)跟蹤哪一設(shè)備將被用于恢復(fù),因?yàn)樵趫D42-48的實(shí)施例中遠(yuǎn)程目的地1786總是被用于恢復(fù)。此外,不必在遠(yuǎn)程目的地執(zhí)行圖29和30的處理,因?yàn)闆](méi)有標(biāo)記或SDDF映射。
參考圖49,流程圖2100示出了所執(zhí)行的與在遠(yuǎn)程目的地1786恢復(fù)有關(guān)的步驟,例如,當(dāng)源組1782中止運(yùn)行時(shí)。處理開(kāi)始于第一步驟2102,其中源組1782、遠(yuǎn)程目的地1786和小型存儲(chǔ)器本地目的地1788之間的鏈路被撤消。在步驟2102撤消鏈路類(lèi)似于在圖31的流程圖1360的步驟1362撤消鏈路。在步驟2102之后是步驟2104,排序的寫(xiě)被終止。在步驟2104終止排序的寫(xiě)類(lèi)似于在圖31的流程圖1360的步驟1366終止排序的寫(xiě)。
在步驟2104之后是步驟2106,所有數(shù)據(jù)均被從小型存儲(chǔ)器本地目的地1788傳輸?shù)竭h(yuǎn)程目的地1786。數(shù)據(jù)可根據(jù)鏈表1800上的數(shù)據(jù)單元的順序進(jìn)行傳輸。因而,例如,如果鏈表1800根據(jù)寫(xiě)到小型存儲(chǔ)器本地目的地1788的時(shí)間順序進(jìn)行保存(圖47所示的實(shí)施例),則數(shù)據(jù)將根據(jù)寫(xiě)的時(shí)間順序從小型存儲(chǔ)器本地目的地1788傳輸給遠(yuǎn)程目的地1786。或者,如果數(shù)據(jù)以相應(yīng)的標(biāo)準(zhǔn)邏輯設(shè)備上的存儲(chǔ)位置順序保存在鏈表1800中(圖46的實(shí)施例),則數(shù)據(jù)可以該順序從小型存儲(chǔ)器本地目的地1788傳輸給遠(yuǎn)程目的地1786。在步驟2106之后,處理結(jié)束且運(yùn)行可使用遠(yuǎn)程存儲(chǔ)設(shè)備1786重新開(kāi)始,其具有最新數(shù)據(jù)。
參考圖50,圖表2120示出了資源的共享。圖表2120包括源組2122和遠(yuǎn)程目的地2126,這二者類(lèi)似于圖42的源組1782和遠(yuǎn)程目的地1786。圖表2120還示出了小型存儲(chǔ)器本地目的地2128,其類(lèi)似于圖42的小型存儲(chǔ)器本地目的地1788,除了小型存儲(chǔ)器本地目的地2128可由無(wú)關(guān)的存儲(chǔ)系統(tǒng)共享以外。注意,小型存儲(chǔ)器本地目的地2128可以是任何類(lèi)型的存儲(chǔ)設(shè)備,包括由EMC公司提供的Symmetrics設(shè)備、個(gè)人計(jì)算機(jī)、或任何其它能夠保存數(shù)據(jù)并提供在此描述的功能的設(shè)備。
圖表還示出了第二源組2126’及第二遠(yuǎn)程目的地2122’。然而,源組2122’傳輸數(shù)據(jù)給小型存儲(chǔ)器本地目的地2128,其也由源組2122使用。當(dāng)對(duì)于源組2122、2122’之一或二者恢復(fù)變得必要時(shí),恢復(fù)數(shù)據(jù)將由小型存儲(chǔ)器本地目的地2128提供給遠(yuǎn)程目的地2126、2126’中的一個(gè)或同時(shí)提供給二者。在在此的實(shí)施例中,小型存儲(chǔ)器本地目的地2128將來(lái)自源組2122的數(shù)據(jù)保存在與保存源組2122’的數(shù)據(jù)的位置不同的位置。
圖表2120還示出了第三源組2122″和第三遠(yuǎn)程目的地2126″。第三源組2122″也傳輸數(shù)據(jù)給小型存儲(chǔ)器本地目的地2128。此外,當(dāng)恢復(fù)變得必要時(shí),小型存儲(chǔ)器本地目的地2128可傳輸恢復(fù)數(shù)據(jù)給遠(yuǎn)程目的地2126″。
連接到小型存儲(chǔ)器本地目的地的源組和遠(yuǎn)程目的地的數(shù)量受限于小型存儲(chǔ)器本地目的地的存儲(chǔ)和處理能力。注意,單個(gè)存儲(chǔ)設(shè)備可用作多個(gè)源組的遠(yuǎn)程目的地。
當(dāng)本發(fā)明已結(jié)合多個(gè)實(shí)施例進(jìn)行公開(kāi)的同時(shí),在其基礎(chǔ)上的修改對(duì)本領(lǐng)域技術(shù)人員而言將是很明顯的。因此,本發(fā)明的實(shí)質(zhì)和范圍在下面的權(quán)利要求中提出。
權(quán)利要求
1.保存恢復(fù)數(shù)據(jù)的方法,包括提供數(shù)據(jù)塊給遠(yuǎn)程目的地,其中每一數(shù)據(jù)塊代表在第一時(shí)間之前及第二時(shí)間之后寫(xiě)的數(shù)據(jù),且其中特定數(shù)據(jù)塊的第二時(shí)間對(duì)應(yīng)于該特定數(shù)據(jù)塊隨后的數(shù)據(jù)塊的第一時(shí)間;提供同步數(shù)據(jù)給本地目的地;及提供與新數(shù)據(jù)塊的形成有關(guān)的指示符給本地目的地以用于在遠(yuǎn)程目的地的存儲(chǔ)。
2.根據(jù)權(quán)利要求1所述的方法,其中本地目的地保持多個(gè)映射,其中每一映射將正提供給其的同步數(shù)據(jù)與特定的數(shù)據(jù)塊相關(guān)聯(lián)。
3.根據(jù)權(quán)利要求2所述的方法,響應(yīng)于接收與新數(shù)據(jù)塊的形成有關(guān)的指示符,本地目的地指向新的映射。
4.根據(jù)權(quán)利要求1所述的方法,還包括響應(yīng)于本地目的地未能確認(rèn)提供給其的同步數(shù)據(jù),遠(yuǎn)程目的地保持寫(xiě)給其的數(shù)據(jù)的映射。
5.保存恢復(fù)數(shù)據(jù)的方法,包括主處理機(jī)將數(shù)據(jù)寫(xiě)到本地存儲(chǔ)設(shè)備;主處理機(jī)使本地存儲(chǔ)設(shè)備積聚對(duì)應(yīng)于主處理機(jī)進(jìn)行的寫(xiě)的數(shù)據(jù)塊,其中每一數(shù)據(jù)塊代表在第一時(shí)間之前及第二時(shí)間之后寫(xiě)的數(shù)據(jù),且其中特定數(shù)據(jù)塊的第二時(shí)間對(duì)應(yīng)于該特定數(shù)據(jù)塊隨后的數(shù)據(jù)塊的第一時(shí)間;將數(shù)據(jù)塊從本地存儲(chǔ)設(shè)備傳輸給遠(yuǎn)程目的地;從本地存儲(chǔ)設(shè)備提供同步數(shù)據(jù)給本地目的地;及主處理機(jī)使得指示符將被提供給本地目的地以用于在遠(yuǎn)程目的地的存儲(chǔ),其中指示符與新數(shù)據(jù)塊的形成有關(guān)。
6.根據(jù)權(quán)利要求5所述的方法,其中本地目的地保持多個(gè)映射,其中每一映射將正提供給其的同步數(shù)據(jù)與特定的數(shù)據(jù)塊相關(guān)聯(lián)。
7.根據(jù)權(quán)利要求6所述的方法,其中,響應(yīng)于接收與新數(shù)據(jù)塊的形成有關(guān)的指示符,本地目的地指向新的映射。
8.保存恢復(fù)數(shù)據(jù)的方法,包括提供數(shù)據(jù)塊給遠(yuǎn)程目的地,其中每一數(shù)據(jù)塊代表在第一時(shí)間之前及第二時(shí)間之后寫(xiě)的數(shù)據(jù),且其中特定數(shù)據(jù)塊的第二時(shí)間對(duì)應(yīng)于該特定數(shù)據(jù)塊隨后的數(shù)據(jù)塊的第一時(shí)間;提供對(duì)應(yīng)于數(shù)據(jù)塊的同步數(shù)據(jù)給小型存儲(chǔ)器本地目的地,其中小型存儲(chǔ)器本地目的地包含未被保存在遠(yuǎn)程目的地上的數(shù)據(jù)且遠(yuǎn)程目的地包含未被保存在小型存儲(chǔ)器本地目的地上的數(shù)據(jù);及當(dāng)新數(shù)據(jù)塊被提供時(shí)提供指示符。
9.根據(jù)權(quán)利要求8所述的方法,其中包含在遠(yuǎn)程目的地上但未包含在小型存儲(chǔ)器本地目的地上的數(shù)據(jù)比包含在小型存儲(chǔ)器本地目的地上但未包含在遠(yuǎn)程目的地上的數(shù)據(jù)舊。
10.根據(jù)權(quán)利要求7所述的方法,還包括在小型存儲(chǔ)器遠(yuǎn)程目的地提供本地周期次數(shù);及響應(yīng)于接收新數(shù)據(jù)塊正被提供的指示符,遞增本地指示符。
全文摘要
保存恢復(fù)數(shù)據(jù)包括提供數(shù)據(jù)塊給遠(yuǎn)程目的地,其中每一數(shù)據(jù)塊代表在第一時(shí)間之前及第二時(shí)間之后寫(xiě)的數(shù)據(jù),且其中特定數(shù)據(jù)塊的第二時(shí)間對(duì)應(yīng)于該特定數(shù)據(jù)塊隨后的數(shù)據(jù)塊的第一時(shí)間;提供同步數(shù)據(jù)給本地目的地;及提供與用于保存在遠(yuǎn)程目的地的新數(shù)據(jù)塊的形成有關(guān)的指示符給本地目的地。本地目的地可保持多個(gè)映射,其中每一映射將正提供給其的同步數(shù)據(jù)與特定的數(shù)據(jù)塊相關(guān)聯(lián)。響應(yīng)于接收與新數(shù)據(jù)塊的形成有關(guān)的指示符,本地目的地可指向新的映射。可以有兩個(gè)或兩個(gè)以上的映射。
文檔編號(hào)G06F13/00GK1779660SQ20051010795
公開(kāi)日2006年5月31日 申請(qǐng)日期2005年9月30日 優(yōu)先權(quán)日2004年9月30日
發(fā)明者道格拉斯·E.·勒克龍, 加里·H.·考克斯, 布雷特·A.·奎因, 戴維·梅雷, 馬克·J.·霍爾斯特德, 本杰明·W.·約德 申請(qǐng)人:伊姆西公司