專利名稱:通過遠(yuǎn)程協(xié)議的遠(yuǎn)程文件更新的制作方法
技術(shù)領(lǐng)域:
本發(fā)明通常涉及客戶-服務(wù)器協(xié)議,更特別地涉及該協(xié)議的擴(kuò)展以便能夠可靠和有效地更新遠(yuǎn)程文件。
背景隨著移動(dòng)技術(shù)的發(fā)展,越來越多的公司為網(wǎng)絡(luò)訪問提供了關(guān)鍵用戶數(shù)據(jù),該數(shù)據(jù)被連續(xù)從客戶機(jī)移開并移到服務(wù)器上。即使當(dāng)他們從網(wǎng)絡(luò)斷開連接時(shí)移動(dòng)用戶仍可獲得該網(wǎng)絡(luò)數(shù)據(jù)是非常有益的。例如,當(dāng)從網(wǎng)絡(luò)斷開連接時(shí)繼續(xù)訪問網(wǎng)絡(luò)數(shù)據(jù)以允許用戶在旅行時(shí),在家工作時(shí),或者當(dāng)網(wǎng)絡(luò)停止時(shí)對(duì)文件進(jìn)行工作。當(dāng)從網(wǎng)絡(luò)斷開連接時(shí)訪問網(wǎng)絡(luò)數(shù)據(jù)的另一個(gè)好處是,它降低了通過網(wǎng)絡(luò)在客戶機(jī)與服務(wù)器之間傳送數(shù)據(jù)的總量。
客戶端高速緩存是從網(wǎng)絡(luò)斷開連接時(shí)移動(dòng)用戶繼續(xù)訪問網(wǎng)絡(luò)數(shù)據(jù)的主要方法。例如,客戶端高速緩存允許移動(dòng)用戶存儲(chǔ)通過網(wǎng)絡(luò)在服務(wù)器上所訪問文件的本地復(fù)制。從網(wǎng)絡(luò)斷開連接后,用戶仍然能夠編輯文件的本地復(fù)制。重新連接到網(wǎng)絡(luò)后,可以更新服務(wù)器上文件的副本。
所存在的客戶-服務(wù)器協(xié)議的各種實(shí)施使客戶端高速緩存變得容易并且使計(jì)算機(jī)上的客戶應(yīng)用程序能夠讀取文件,創(chuàng)建文件,更新文件,并且通過遠(yuǎn)程計(jì)算機(jī)上的服務(wù)器程序在網(wǎng)絡(luò)上執(zhí)行其他文件系統(tǒng)的任務(wù)。服務(wù)器消息塊協(xié)議(SMB協(xié)議)是該協(xié)議的一個(gè)例子,其可以通過因特網(wǎng)用在TCP/IP協(xié)議或其他網(wǎng)絡(luò)協(xié)議之上,諸如網(wǎng)絡(luò)報(bào)文分組交換和NetBEUI。具有該協(xié)議的操作的典型模式是,對(duì)于客戶產(chǎn)生的請(qǐng)求服務(wù)器送回響應(yīng)。因此,該協(xié)議使客戶能夠調(diào)用與遠(yuǎn)程服務(wù)器上的文件系統(tǒng)相關(guān)的某些“文件系統(tǒng)控制”操作。
目前的客戶端高速緩存方法的一個(gè)缺點(diǎn)是,當(dāng)在客戶和服務(wù)器之間傳送數(shù)據(jù)時(shí)會(huì)遇到顯著的延遲和響應(yīng)時(shí)間。用戶想要編輯文件,例如,首先通過網(wǎng)絡(luò)將全部文件下載到客戶機(jī)上。然后用戶可以與網(wǎng)絡(luò)斷開連接并且編輯該文件。通過網(wǎng)絡(luò)重新與服務(wù)器連接后,所有被編輯的文件在同步的過程中被上載到服務(wù)器。無論原始文件所改變的大小或數(shù)量如何,全部被編輯的文件必須通過網(wǎng)絡(luò)推回到服務(wù)器。因此,即使10兆字節(jié)的文件的最小改變(例如,1千字節(jié)的插入或刪除)也要求整個(gè)10兆字節(jié)的文件通過該網(wǎng)絡(luò)傳送兩次。對(duì)于諸如電話線或衛(wèi)星鏈接的慢速鏈接來說,該傳送的延遲和響應(yīng)時(shí)間可能是特別有問題的。
目前客戶端高速緩存方法的另一個(gè)相關(guān)的缺點(diǎn)是,在客戶和服務(wù)器之間更新文件期間文件損壞的風(fēng)險(xiǎn)。文件同步期間(例如,從客戶到服務(wù)器更新文件),在更新的部分路徑中發(fā)生的網(wǎng)絡(luò)假信號(hào)或網(wǎng)絡(luò)故障可能使服務(wù)器上被更新的文件處于錯(cuò)誤狀態(tài),其可能是自動(dòng)可恢復(fù)的或者不是自動(dòng)可恢復(fù)的。文件更新的時(shí)間越長,在更新期間越容易遇到網(wǎng)絡(luò)問題,并且文件損壞的風(fēng)險(xiǎn)越高。
因此,需要存在一種方法以便增強(qiáng)客戶端高速緩存,該方法可以更加有效和可靠地更新遠(yuǎn)程文件。
概要一種方法和系統(tǒng)使得能夠通過改進(jìn)的遠(yuǎn)程協(xié)議有效和可靠地更新遠(yuǎn)程文件。遠(yuǎn)程協(xié)議的副本收集擴(kuò)展使客戶能夠命令服務(wù)器從服務(wù)器上存在的源文件收集數(shù)據(jù)的一部分并且將數(shù)據(jù)的那些部分復(fù)制到服務(wù)器上新目標(biāo)文件中更合適的偏移量。副本收集擴(kuò)展因此使客戶能夠在目標(biāo)文件中留下空白位置,客戶可以在文件更新期間在該空白位置中寫入新數(shù)據(jù)。副本收集擴(kuò)展也使客戶能夠不從源文件將它們復(fù)制到目標(biāo)文件而有效地刪除源文件的一部分。因此可以執(zhí)行文件更新而不必將整個(gè)文件從客戶機(jī)傳送到服務(wù)器。
附圖的簡(jiǎn)要描述所有附圖中使用的相同的參考數(shù)字涉及相同的部件和特征。
圖1說明了適于通過遠(yuǎn)程協(xié)議實(shí)施遠(yuǎn)程文件更新的典型操作環(huán)境。
圖2說明了配置得用于通過遠(yuǎn)程協(xié)議實(shí)施遠(yuǎn)程文件更新的客戶設(shè)備和服務(wù)器設(shè)備的典型實(shí)施例。
圖3說明了遠(yuǎn)程服務(wù)器上源文件和目標(biāo)文件的例子,以及客戶在客戶機(jī)上復(fù)制源文件的例子。
圖4說明了遠(yuǎn)程服務(wù)器上源文件和目標(biāo)文件的例子,以及客戶在客戶機(jī)上復(fù)制源文件的例子。
圖5-8是流程圖,說明了用于通過遠(yuǎn)程協(xié)議實(shí)施遠(yuǎn)程文件更新的典型方法。
圖9說明了適于實(shí)施客戶計(jì)算機(jī)設(shè)備和服務(wù)器計(jì)算機(jī)設(shè)備諸如參照?qǐng)D1-8所討論的那些的典型計(jì)算環(huán)境。
詳細(xì)說明介紹下面的討論涉及在客戶機(jī)和服務(wù)器設(shè)備之間提供有效和可靠的文件更新的系統(tǒng)和方法。遠(yuǎn)程協(xié)議,一般被配置得使客戶機(jī)容易控制遠(yuǎn)程服務(wù)器上各種文件系統(tǒng)的任務(wù)(例如,文件的讀取,創(chuàng)建,和更新),包括使客戶機(jī)能夠更新服務(wù)器上的文件而不必將整個(gè)文件從客戶機(jī)傳送到服務(wù)器的擴(kuò)展。遠(yuǎn)程協(xié)議的擴(kuò)展是一個(gè)新文件系統(tǒng)控制(fsctl)命令,該命令指導(dǎo)服務(wù)器從存在的源文件收集數(shù)據(jù)塊并且在新目標(biāo)文件中合適的偏移量復(fù)制該數(shù)據(jù)塊。副本收集fsctl命令允許客戶機(jī)在目標(biāo)文件中留下(或制造)“空隙”,然后可以將新數(shù)據(jù)寫入該空隙中,并且通過不將源文件的一部分復(fù)制到目標(biāo)文件中來刪除源文件的一部分。
所描述的系統(tǒng)和方法的優(yōu)點(diǎn)包括,文件更新消耗的帶寬與文件改變的大小成比例,消耗的帶寬不與整個(gè)文件的大小成比例。這減少了文件更新期間的延遲和響應(yīng)時(shí)間,同時(shí)也降低在更新期間的網(wǎng)絡(luò)故障導(dǎo)致文件損壞的風(fēng)險(xiǎn)。
典型實(shí)施例圖1說明了適于通過遠(yuǎn)程協(xié)議實(shí)施遠(yuǎn)程文件更新的典型操作環(huán)境100。該環(huán)境100僅僅是適于操作環(huán)境的一個(gè)例子并且不試圖暗示對(duì)發(fā)明的使用范圍或功能的任何限制。其他可能適合的公知的計(jì)算系統(tǒng),環(huán)境,和/或結(jié)構(gòu)包括,但不限制為,個(gè)人計(jì)算機(jī),手持或膝上型設(shè)備,多處理器系統(tǒng),基于微處理器的系統(tǒng),可編程消費(fèi)者電子儀器,網(wǎng)絡(luò)PC,小型計(jì)算機(jī),主計(jì)算機(jī),包括任意上述系統(tǒng)或設(shè)備的分布式計(jì)算環(huán)境,等等。
典型的操作環(huán)境100包括通過網(wǎng)絡(luò)106操作地耦合到服務(wù)器設(shè)備104(此后一般稱為“服務(wù)器”或“服務(wù)器設(shè)備”)的客戶設(shè)備102(此后一般稱為“客戶機(jī)”或“客戶設(shè)備”)。網(wǎng)絡(luò)106可以表示任何種類的傳統(tǒng)網(wǎng)絡(luò)拓?fù)浜皖愋?包括光學(xué),有線和/或無線網(wǎng)絡(luò)),應(yīng)用任何類型的傳統(tǒng)網(wǎng)絡(luò)協(xié)議(包括公共和/或?qū)S袇f(xié)議)。網(wǎng)絡(luò)106可以包括,例如,本地網(wǎng)絡(luò),企業(yè)網(wǎng)絡(luò),或因特網(wǎng),也可能是一個(gè)或多個(gè)局域網(wǎng)(LAN)和/或廣域網(wǎng)(WAN)的至少一部分。
客戶機(jī)102和服務(wù)器104使用客戶機(jī)/服務(wù)器模式通信,在該模式中客戶機(jī)(客戶程序)向服務(wù)器(服務(wù)器程序)產(chǎn)生服務(wù)請(qǐng)求并且服務(wù)器響應(yīng)該請(qǐng)求??蛻魴C(jī)/服務(wù)器模式基于通信協(xié)議,該協(xié)議通常使客戶應(yīng)用程序能夠訪問和操作遠(yuǎn)程服務(wù)器上的文件(例如,讀取,編輯,更新,以及創(chuàng)建文件)。該遠(yuǎn)程協(xié)議也典型地提供客戶機(jī)訪問其他服務(wù)器資源諸如打印機(jī),郵筒,以及命名管道。該協(xié)議的例子可以包括服務(wù)器消息塊(SMB)協(xié)議,網(wǎng)絡(luò)文件系統(tǒng)(NFS)協(xié)議,WebNFS協(xié)議,公共因特網(wǎng)文件系統(tǒng)(CIFS)協(xié)議,Samba,等等。能夠通過各種網(wǎng)絡(luò)使用該協(xié)議,諸如內(nèi)部網(wǎng)或因特網(wǎng),并且可以在其他協(xié)議上運(yùn)行或者與其他協(xié)議相結(jié)合,諸如TCP/IP協(xié)議,網(wǎng)絡(luò)分組交換協(xié)議,和NetBEUI協(xié)議。如下面討論的有關(guān)典型實(shí)施例,該協(xié)議的擴(kuò)展能夠有效和可靠地更新遠(yuǎn)程文件。雖然下面的典型實(shí)施例結(jié)合SMB協(xié)議描述協(xié)議擴(kuò)展,值得注意的是,SMB協(xié)議僅僅是能夠受益于所述的擴(kuò)展的適當(dāng)協(xié)議的一個(gè)例子。因此,典型實(shí)施例中SMB協(xié)議的使用并不試圖暗示對(duì)擴(kuò)展可以應(yīng)用的其他適當(dāng)協(xié)議的任何限制。
客戶機(jī)102典型地能夠執(zhí)行公共計(jì)算功能,諸如電子郵件,日歷,任務(wù)組織,字處理,網(wǎng)頁瀏覽,等等。客戶機(jī)102可以運(yùn)行開放平臺(tái)操作系統(tǒng),諸如Microsoft的Windows操作系統(tǒng)??蛻魴C(jī)102可以作為任何類型的傳統(tǒng)計(jì)算設(shè)備被實(shí)施,包括,例如,臺(tái)式PC,筆記本或便攜式計(jì)算機(jī),工作站,主計(jì)算機(jī),因特網(wǎng)設(shè)備,游戲控制臺(tái),手持式PC,蜂窩電話或其他無線通信設(shè)備,個(gè)人數(shù)字助理(PDA),機(jī)頂盒,它們的組合,等等。下面參照?qǐng)D9更加詳細(xì)地描述用于實(shí)施客戶機(jī)102的典型計(jì)算環(huán)境。
服務(wù)器104通常被配置為文件服務(wù)器,用于數(shù)據(jù)文件和其他資源的存儲(chǔ)和管理。服務(wù)器104通過網(wǎng)絡(luò)106為授權(quán)客戶機(jī)提供訪問該數(shù)據(jù)和資源。服務(wù)器104可以作為任何類型的傳統(tǒng)計(jì)算設(shè)備被實(shí)施,諸如臺(tái)式PC,工作站,主計(jì)算機(jī),因特網(wǎng)設(shè)備,等等。下面將參照?qǐng)D9更加詳細(xì)地描述用于實(shí)施服務(wù)器104的典型計(jì)算環(huán)境。
典型實(shí)施例圖2說明了被配置得通過遠(yuǎn)程協(xié)議實(shí)施遠(yuǎn)程文件更新的客戶設(shè)備102和服務(wù)器設(shè)備104的典型實(shí)施例??蛻魴C(jī)102包括被配置得執(zhí)行存儲(chǔ)在存儲(chǔ)器202中的應(yīng)用程序204的一個(gè)或多個(gè)處理器200。存儲(chǔ)器202也存儲(chǔ)圖2中稱為客戶端協(xié)議206的遠(yuǎn)程協(xié)議。在本實(shí)施例中,客戶協(xié)議206作為SMB協(xié)議的客戶端部分被實(shí)施。然而,如上所述,客戶協(xié)議206不被限制為SMB協(xié)議,并且可以作為各種其他合適的協(xié)議被實(shí)施,該其他的協(xié)議包括,例如,NFS協(xié)議,WebNFS協(xié)議,CIFS協(xié)議,Samba,等等??蛻魠f(xié)議206的擴(kuò)展在圖2中圖示為副本收集擴(kuò)展(啟動(dòng)程序)208,下面結(jié)合它的相應(yīng)服務(wù)器,副本收集設(shè)備更加詳細(xì)地討論該擴(kuò)展。
服務(wù)器104包括配置得執(zhí)行存儲(chǔ)在存儲(chǔ)器212中的服務(wù)器協(xié)議216的一個(gè)或多個(gè)處理器210。服務(wù)器協(xié)議214作為SMB協(xié)議的服務(wù)器端部分被實(shí)施。如上所述,客戶協(xié)議206的收集復(fù)制啟動(dòng)程序208的相應(yīng)部分為收集復(fù)制設(shè)備216,它是服務(wù)器協(xié)議214的擴(kuò)展。存儲(chǔ)器212也存儲(chǔ)文件存儲(chǔ)器218中的數(shù)據(jù)文件。
客戶協(xié)議206使各種客戶應(yīng)用程序204能夠調(diào)用服務(wù)器104上的某些文件系統(tǒng)控制操作,該服務(wù)器為文件存儲(chǔ)器218中的文件提供某種類型的訪問。所訪問的文件可以包括,例如,讀取文件,更新文件,以及創(chuàng)建新文件。服務(wù)器協(xié)議214通過執(zhí)行請(qǐng)求任務(wù)來響應(yīng)來自客戶機(jī)102的文件系統(tǒng)控制。
遠(yuǎn)程協(xié)議(206,214)的副本收集協(xié)議擴(kuò)展(例如,副本收集啟動(dòng)程序208,副本收集設(shè)備216)為服務(wù)器104提供客戶應(yīng)用程序204可以利用的新的文件系統(tǒng)控制(fsctl)命令,以便作用于客戶機(jī)102的遠(yuǎn)程文件更新。一般,新的副本收集fsctl命令指導(dǎo)服務(wù)器104如何從服務(wù)器104上的源文件復(fù)制源數(shù)據(jù)到服務(wù)器104上的目標(biāo)文件。在一個(gè)實(shí)施例中,副本收集fsctl命令用源文件標(biāo)識(shí)符(恢復(fù)鍵),以及文件區(qū)域陣列處理目標(biāo)文件,并且將從源文件復(fù)制的數(shù)據(jù)的錯(cuò)誤狀態(tài)和字節(jié)總數(shù)返回給目標(biāo)文件。文件區(qū)域陣列中的每個(gè)區(qū)域包括源文件偏移量,目標(biāo)文件偏移量,以及復(fù)制/傳送的數(shù)據(jù)字節(jié)的長度或數(shù)量。因此,定義大塊或塊數(shù)據(jù)的每個(gè)區(qū)域從源文件復(fù)制/傳送到服務(wù)器104上的目標(biāo)文件。源文件偏移量標(biāo)識(shí)源文件中的開始位置,大量的源數(shù)據(jù)字節(jié)(例如,源文件中的數(shù)據(jù)塊)將從該位置被復(fù)制。目標(biāo)文件偏移量標(biāo)識(shí)目標(biāo)文件中的開始位置,一些源數(shù)據(jù)字節(jié)將復(fù)制到該位置。定義字節(jié)數(shù)量的長度從源文件被復(fù)制到目標(biāo)文件。
客戶應(yīng)用程序204可以利用新的副本收集fsctl來有效地僅僅實(shí)施服務(wù)器端的數(shù)據(jù)復(fù)制功能。例如,客戶應(yīng)用程序204可以利用這個(gè)fsctl來更新下面典型序列中的遠(yuǎn)程文件1)應(yīng)用程序打開至少具有READ_DATA訪問的源文件。
2)應(yīng)用程序通過存在的fsctl(FSCTL_SRV_REQUEST_RESUME_KEY)向服務(wù)器請(qǐng)求源文件標(biāo)識(shí)符(恢復(fù)鍵)。
3)應(yīng)用程序創(chuàng)建/打開至少具有WRITE_DATA訪問的目標(biāo)文件。
4)應(yīng)用程序創(chuàng)建從源文件復(fù)制到目標(biāo)文件的數(shù)據(jù)塊的區(qū)域列表。
5)應(yīng)用程序發(fā)布副本收集fsctl命令(FSCTL_SRV_COPYCHUNK)并且檢查被復(fù)制字節(jié)的返回狀態(tài)和數(shù)量。
圖3和4說明了遠(yuǎn)程服務(wù)器104上的源文件300和目標(biāo)文件302的例子,以及客戶機(jī)102上源文件的客戶復(fù)制304的例子。源文件300,目標(biāo)文件302,以及源文件復(fù)制304的例子在使用副本收集協(xié)議擴(kuò)展208,216(副本收集fsctl命令)說明更新遠(yuǎn)程文件的典型過程中是有用的。值得注意的是,圖3和4中的說明試圖提供遠(yuǎn)程文件更新的概念上的例子,并且不用于任何限定,通過實(shí)際機(jī)制或機(jī)制該遠(yuǎn)程文件更新可以發(fā)生。在圖3的例子中,客戶應(yīng)用程序204通過將打開請(qǐng)求傳送到服務(wù)器104而打開了服務(wù)器104上的源文件300??蛻魬?yīng)用程序204至少具有需要從源文件300讀取數(shù)據(jù)的訪問,并且已經(jīng)將源文件副本304傳送到了客戶機(jī)102??蛻魬?yīng)用程序204也向服務(wù)器102請(qǐng)求源文件標(biāo)識(shí)符(恢復(fù)鍵),并且已經(jīng)通過將另一個(gè)打開請(qǐng)求傳送到服務(wù)器104而創(chuàng)建/打開了目標(biāo)文件302??蛻魬?yīng)用程序204至少具有需要將數(shù)據(jù)寫到目標(biāo)文件302的訪問。
服務(wù)器104上源文件300和目標(biāo)文件302之間的箭頭用于指示副本收集fsctl命令已經(jīng)從客戶機(jī)102發(fā)送并且在服務(wù)器104上被執(zhí)行。副本收集處理是文件更新處理的典型部分,在這里客戶機(jī)102上的應(yīng)用程序204的用戶已經(jīng)從服務(wù)器104下載了源文件300,使用應(yīng)用程序204編輯作為客戶副本304的源文件300,然后用被編輯的副本更新服務(wù)器104。
基于客戶機(jī)102上的源文件副本304的改變,客戶機(jī)102上的收集復(fù)制擴(kuò)展啟動(dòng)程序208通過傳送到服務(wù)器104的收集復(fù)制fsctl命令的生成啟動(dòng)收集復(fù)制處理。副本收集fsctl命令指示服務(wù)器104將源文件300的部分以與用戶/應(yīng)用程序204已經(jīng)改變的客戶機(jī)102上的源文件副本304一致的方式復(fù)制到目標(biāo)文件302。服務(wù)器104上的副本收集擴(kuò)展設(shè)備216解釋并且實(shí)施服務(wù)器104上的副本收集fsctl命令。在這個(gè)例子中,源文件300和目標(biāo)文件302之間的箭頭指示收集復(fù)制fsctl命令已經(jīng)提供了源文件偏移量1,確定源文件300中的開始位置,大量的源數(shù)據(jù)字節(jié)將從那里被復(fù)制。副本收集fsctl命令也提供了長度10,其用于確定將被復(fù)制的數(shù)據(jù)字節(jié)的數(shù)量。定義數(shù)據(jù)塊的源文件的偏移量和長度一起從源文件300被復(fù)制到目標(biāo)文件302。在該例子中,由偏移量1開始并且由偏移量10結(jié)束的源數(shù)據(jù)塊306已經(jīng)通過副本收集fsctl命令被定義為從源文件300復(fù)制到目標(biāo)文件302的數(shù)據(jù)塊。
圖示的目標(biāo)文件302表示副本收集fsctl命令也提供了目標(biāo)文件偏移量10,確定目標(biāo)文件302中的開始位置,所識(shí)別的字節(jié)數(shù)量將被復(fù)制到該位置。因此,源數(shù)據(jù)塊306根據(jù)參數(shù)長度10被復(fù)制到由偏移量10開始并且由偏移量20結(jié)束的目標(biāo)文件302。如上所述,副本收集fsctl命令可以包括或定義已經(jīng)從源文件300復(fù)制到目標(biāo)文件302的文件區(qū)域(數(shù)據(jù)塊)陣列。因此,采用與上述類似的方式,結(jié)合圖3描述的副本收集fsctl命令也指導(dǎo)服務(wù)器104(例如,副本收集擴(kuò)展設(shè)備216)從源文件300將源數(shù)據(jù)塊310(源文件偏移量20,長度20)復(fù)制到目標(biāo)文件302(目標(biāo)文件偏移量30,長度20)。
在服務(wù)器104上執(zhí)行了副本收集fsctl命令后,對(duì)于目標(biāo)文件302顯而易見的是,目標(biāo)文件302中的兩部分是左邊空白,或者是空白數(shù)據(jù)。目標(biāo)文件302中的空白部分312,314已經(jīng)通過副本收集fsctl命令被特意地創(chuàng)建,以待新數(shù)據(jù)根據(jù)客戶機(jī)102上源文件副本304的改變被寫入到這些部分312,314。102上源文件副本304示出了2個(gè)新數(shù)據(jù)塊316,318,用戶已經(jīng)將該數(shù)據(jù)塊加入到源文件副本304中的2個(gè)不同的位置。注意到,第一新數(shù)據(jù)塊316已經(jīng)有效地將源數(shù)據(jù)塊306重新安置到源文件副本304中的新偏移位置,而第二新數(shù)據(jù)塊318已經(jīng)代替(例如,刪除或改寫)了源文件300中的原始的源數(shù)據(jù)塊308。因此,副本收集擴(kuò)展啟動(dòng)程序208已經(jīng)生成了副本收集fsctl命令用于指導(dǎo)服務(wù)器104將源數(shù)據(jù)塊306復(fù)制到目標(biāo)文件302中合適的偏移位置,并且根本不復(fù)制源數(shù)據(jù)塊308。因此,源數(shù)據(jù)塊308通過不被復(fù)制到目標(biāo)文件302而有效地被刪除。作為替代,副本收集fsctl命令留下空白部分314,新數(shù)據(jù)將被寫入到其中。
圖4說明了被寫入到目標(biāo)文件302中適當(dāng)位置的客戶機(jī)102上源文件副本304的新數(shù)據(jù)塊316,318。從客戶機(jī)102到服務(wù)器104的數(shù)據(jù)寫入與上述的收集復(fù)制fsctl命令的實(shí)施同時(shí)發(fā)生。然而,值得注意的是,從客戶機(jī)102的數(shù)據(jù)寫入可以在收集復(fù)制fsctl命令被傳送到服務(wù)器104之前或之后發(fā)生。也就是說,一旦根據(jù)客戶機(jī)102的適當(dāng)請(qǐng)求創(chuàng)建/打開了目標(biāo)文件302,響應(yīng)客戶機(jī)102的副本收集fsctl命令,數(shù)據(jù)可以通過服務(wù)器104被復(fù)制到目標(biāo)文件302,或者數(shù)據(jù)可以根據(jù)客戶機(jī)102的數(shù)據(jù)寫入請(qǐng)求被寫入到目標(biāo)文件302。兩種情況下,副本收集fsctl命令指導(dǎo)服務(wù)器104將源文件300的哪些數(shù)據(jù)塊復(fù)制到目標(biāo)文件302以及將數(shù)據(jù)塊復(fù)制到目標(biāo)文件302的什么位置。如果客戶機(jī)102的新數(shù)據(jù)在服務(wù)器104執(zhí)行收集復(fù)制fsctl命令之前或之后被寫入到目標(biāo)文件302,這是沒關(guān)系的。
副本收集協(xié)議擴(kuò)展208的副本收集fsctl命令可以在任何開放的WRITE_DATA訪問處理上被發(fā)布,并且與一個(gè)實(shí)施例相關(guān)的行為可以用下面的方法定義。
輸入緩沖器該輸入緩沖器是SRV_COPYCHUNK_COPY類型,如下定義<pre listing-type="program-listing"><![CDATA[ typedef struct_SRV_COPYCHUNK { LARGE_INTEGER SourceOffset; LARGE_INTEGER DestinationOffset; ULONG Length; }SRV_COPYCHUNK,*PSRV_COPYCHUNK; typedef struct_SRV_COPYCHUNK_COPY { SRV_RESUME_KEY SourceFile; ULONG ChunkCount; ULONG Reserved; SRV_COPYCHUNK Chunk
;//陣列 }SRV_COPYCHUNK_COPY,*PSRV_COPYCHUNK_COPY;]]></pre>在輸入緩沖器中,SourceFile是使用文件的FSCTL_QUERY_RESUME_KEY獲得的恢復(fù)鍵(源文件標(biāo)識(shí)符),用至少READ_DATA訪問打開。ChunkCount是Chunk陣列中SRV_COPYCHUNK結(jié)構(gòu)(源文件區(qū)域)的數(shù)量。對(duì)于每個(gè)SRV_COPYCHUNK結(jié)構(gòu),SourceOffset被設(shè)置為從SourceFile的復(fù)制位置而DestinationOffset被設(shè)置為復(fù)制到目標(biāo)的偏移量。具有字節(jié)數(shù)量的長度將從源偏移量傳送到目標(biāo)偏移量。
輸出緩沖器該輸出緩沖器是SRV_COPYCHUNK_RESPONSE類型,如下定義typedef struct_SRV_COPYCHUNK_RESPONSE
{ULONG ChunksWritten;ULONG ChunkBytesWritten;ULONG TotalBytesWritten;}SRV_COPYCHUNK_RESPONSE,*PSRV_COPYCHUNK_RESPONSE;返回值如果服務(wù)器將所有的指定塊(數(shù)據(jù)塊)從源文件復(fù)制到目標(biāo)文件,副本收集fsctl返回STATUS_SUCCESS。在這種情況下,輸出緩沖器中的ChunksWritten將與輸入緩沖器中的ChunkCount匹配。
如果服務(wù)器104沒能復(fù)制塊(數(shù)據(jù)塊),它將返回一個(gè)指示為什么塊不能被復(fù)制的狀態(tài)代碼。在這種情況下,輸出緩沖器中的ChunksWritten將指示被成功復(fù)制的塊的數(shù)量。注意到,服務(wù)器104按照輸入緩沖器中Chunk陣列指定的順序處理塊,并且將在第一個(gè)故障處停止。
如果客戶機(jī)102的請(qǐng)求超出了所有服務(wù)器104的極限值,服務(wù)器104將返回STATUS_INVALID_PARAMETER。另外,在這種情況下,服務(wù)器104將使用下面的翻譯在SRV_COPYCHUNK_RESPONSE中返回它被配置的最大極限值ChunksWritten=單一操作中允許的最大塊SRV。
ChunkBytesWritten=任意單獨(dú)塊的最大尺寸。
TotalBytesWritten=所有總和塊的最大總長。
如果在指定的總時(shí)間(例如,25秒的默認(rèn)值)沒有完成復(fù)制,服務(wù)器104返回STATUS_IO_TIMEOUT。其他配置參數(shù)的默認(rèn)值可以在注冊(cè)表中設(shè)置,所述參數(shù)包括ChunkMax=在單一的副本收集fsctl命令中將被復(fù)制的塊的最大數(shù)量。例子的默認(rèn)值為256。
ChunkWriteLimit=在單一的塊中將被復(fù)制的數(shù)據(jù)的最大總數(shù),用字節(jié)指定。例子的默認(rèn)值為1MB。
ChunkTotalWriteLimit=在單一的副本收集fsctl命令中將被復(fù)制的數(shù)據(jù)的最大總數(shù),用字節(jié)指定。例子的默認(rèn)值為16MB。
ChunkTimout=當(dāng)處理一個(gè)單一的副本收集fsctl命令時(shí),可以消耗的時(shí)間的最大總數(shù),用秒指定。例子的默認(rèn)值為25秒。
典型方法現(xiàn)在將主要參照流程圖5-8描述通過遠(yuǎn)程協(xié)議實(shí)施遠(yuǎn)程文件更新的方法的例子。該方法一般應(yīng)用于以上結(jié)合附圖1-4討論的典型實(shí)施例。當(dāng)根據(jù)流程圖以及與流程圖的塊相關(guān)的文本公開一個(gè)或多個(gè)方法時(shí),將被理解的是,所述方法的元素不必按照它們被表示的順序執(zhí)行,選擇性的順序可能產(chǎn)生類似的優(yōu)點(diǎn)。此外,該方法并不是唯一的并且可以獨(dú)立地或者相互結(jié)合地執(zhí)行??梢酝ㄟ^任何適當(dāng)?shù)难b置執(zhí)行所述方法的元素,例如,包括通過ASIC上的硬件邏輯塊或通過在處理器可讀介質(zhì)上定義的處理器可讀指令的執(zhí)行。
這里所使用的“處理器可讀介質(zhì)”可以是任何裝置,其可以包含,存儲(chǔ),通信,傳播,或者傳輸指令用于由處理器使用或執(zhí)行。處理器可讀介質(zhì)可以是,但并不限制為,電子,磁性,光學(xué),電磁,紅外線,或半導(dǎo)體系統(tǒng),裝置,設(shè)備,或傳播介質(zhì)。處理器可讀介質(zhì)更具體的例子包括,其中,具有一個(gè)或多個(gè)電線的電連接(電子的),便攜式計(jì)算機(jī)軟盤(磁性的),隨機(jī)存取存儲(chǔ)器(RAM)(磁性的),只讀存儲(chǔ)器(ROM)(磁性的),可擦除可編程只讀存儲(chǔ)器(EPROM或閃存),光纖(光學(xué)的),可重寫光盤(CD-RW)(光學(xué)的),以及便攜式光盤只讀存儲(chǔ)器(CDROM)(光學(xué)的)。
在方法500的塊502,遠(yuǎn)程服務(wù)器104上的源文件被打開。用至少數(shù)據(jù)讀取狀態(tài)打開源文件。由客戶應(yīng)用程序204打開的源文件在客戶機(jī)102上執(zhí)行并且利用遠(yuǎn)程通信協(xié)議諸如服務(wù)器消息塊(SMB)協(xié)議,網(wǎng)絡(luò)文件系統(tǒng)(NFS)協(xié)議,WebNFS協(xié)議,公共因特網(wǎng)文件系統(tǒng)(CIFS)協(xié)議,Samba,等等。在塊504,在遠(yuǎn)程服務(wù)器104上打開目標(biāo)文件。在塊506,檢索源文件的副本或從服務(wù)器104下載到客戶機(jī)102。在塊508,客戶機(jī)102要求識(shí)別源文件的標(biāo)識(shí)符(例如,恢復(fù)鍵)。
在塊510,副本收集文件系統(tǒng)控制(fsctl)命令被傳送到服務(wù)器104用于指導(dǎo)服務(wù)器從源文件收集源數(shù)據(jù)并且從源文件將源數(shù)據(jù)復(fù)制到目標(biāo)文件。遠(yuǎn)程協(xié)議的副本收集擴(kuò)展208根據(jù)從服務(wù)器104檢索的源文件副本的改變生成副本收集(fsctl)命令。根據(jù)源文件副本的改變,文件區(qū)域的陣列被創(chuàng)建,該陣列定義如何從源文件將源數(shù)據(jù)復(fù)制到目標(biāo)文件。文件區(qū)域的陣列,源文件標(biāo)識(shí)符,以及目標(biāo)文件操作按照副本收集fsctl命令被傳送。創(chuàng)建陣列包括,用于陣列中的每個(gè)文件區(qū)域,確定表示源文件中的開始位置的源偏移量,服務(wù)器104將從該位置開始復(fù)制。目標(biāo)偏移量表示目標(biāo)文件中的開始位置,服務(wù)器104將源文件數(shù)據(jù)開始復(fù)制到該位置。也包括用于復(fù)制的字節(jié)的長度或數(shù)量,其用于確定從源文件復(fù)制到目標(biāo)文件的每個(gè)源文件數(shù)據(jù)塊的長度。
在塊512,客戶機(jī)102從服務(wù)器104接收狀態(tài)指示符,該指示符表示從源文件復(fù)制到目標(biāo)文件的具體源數(shù)據(jù)的字節(jié)的總數(shù)。該方法在圖6的塊514繼續(xù)。在塊514,如果服務(wù)器將所有指定的源數(shù)據(jù)從源文件復(fù)制到目標(biāo)文件,客戶機(jī)102從服務(wù)器104接收成功指示符。在塊516,如果服務(wù)器104沒有將所有指定的源數(shù)據(jù)從源文件復(fù)制到目標(biāo)文件,客戶機(jī)102接收狀態(tài)失敗指示符。與狀態(tài)失敗指示符一起,客戶機(jī)102接收表示為什么沒有將所有指定的源數(shù)據(jù)從源文件復(fù)制到目標(biāo)文件的狀態(tài)代碼。
在塊518,如果傳送到服務(wù)器104的副本收集fsctl命令超出了所有服務(wù)器的極限值,客戶機(jī)102從服務(wù)器104接收非法參數(shù)指示符。如果已經(jīng)超出了服務(wù)器的極限值,客戶機(jī)102也從服務(wù)器104接收配置的最大的極限值,該極限值表示為服務(wù)器參數(shù)設(shè)置的最大極限值。所接收的配置的最大極限值包括可以用單一的副本收集fsctl復(fù)制的數(shù)據(jù)塊數(shù)量被配置的最大極限值(例如,256),可以用單一的數(shù)據(jù)塊復(fù)制的數(shù)據(jù)總數(shù)被配置的最大極限值(例如,1MB),可以用單一的副本收集fsctl復(fù)制的數(shù)據(jù)總數(shù)被配置的最大極限值(例如,16MB),以及當(dāng)處理單一的副本收集fsctl命令時(shí),可以消耗的時(shí)間總數(shù)被配置的最大極限值(例如,25秒)。
在塊520,客戶機(jī)102將新數(shù)據(jù)(例如,與源文件數(shù)據(jù)相對(duì))寫入到目標(biāo)文件中左邊的空白位置??蛻魴C(jī)102將寫請(qǐng)求傳送到包括被寫入的新數(shù)據(jù)的服務(wù)器,與目標(biāo)文件中的偏移量一起表示數(shù)據(jù)被寫入的位置。值得注意的是,新數(shù)據(jù)可以在服務(wù)器執(zhí)行副本收集fsctl命令之前或之后被寫入到目標(biāo)文件。
圖7說明了通過遠(yuǎn)程協(xié)議實(shí)施遠(yuǎn)程文件更新的另一種方法700。在該方法700的塊702,服務(wù)器104響應(yīng)客戶機(jī)102的第一打開請(qǐng)求用至少讀數(shù)據(jù)狀態(tài)打開源文件。在塊704,服務(wù)器104響應(yīng)客戶機(jī)102的第二打開請(qǐng)求用至少寫數(shù)據(jù)狀態(tài)打開目標(biāo)文件。在塊706,服務(wù)器104響應(yīng)從客戶機(jī)102接收的副本收集fsctl命令將源數(shù)據(jù)從源文件復(fù)制到目標(biāo)文件。副本收集fsctl命令包括文件區(qū)域陣列,該陣列定義如何將源數(shù)據(jù)從源文件復(fù)制到目標(biāo)文件。根據(jù)位于客戶機(jī)102上源文件副本的改變?cè)诳蛻魴C(jī)102上創(chuàng)建文件區(qū)域陣列。陣列中的每個(gè)文件區(qū)域包括表示源文件中服務(wù)器104將要從中開始復(fù)制的開始位置的源偏移量,表示目標(biāo)文件中服務(wù)器104將源文件數(shù)據(jù)開始復(fù)制到其中的開始位置的目標(biāo)偏移量,以及復(fù)制的字節(jié)的長度或數(shù)量,該長度或數(shù)量確定從源文件復(fù)制到目標(biāo)文件的每個(gè)源文件數(shù)據(jù)塊的長度。副本收集fsctl命令也包括源文件標(biāo)識(shí)符和目標(biāo)文件操作。
在塊708,服務(wù)器104將狀態(tài)指示符傳送到客戶機(jī)102,表示從源文件復(fù)制到目標(biāo)文件的被指定的源數(shù)據(jù)的字節(jié)的總數(shù)。在塊710,如果服務(wù)器已經(jīng)將所有被指定的源數(shù)據(jù)從源文件復(fù)制到目標(biāo)文件,服務(wù)器104將成功指示符傳送到客戶機(jī)102。在塊712,如果服務(wù)器104沒有將所有被指定的源數(shù)據(jù)從源文件復(fù)制到目標(biāo)文件,服務(wù)器104傳送狀態(tài)失敗指示符。與狀態(tài)失敗指示符一起,服務(wù)器104傳送表示為什么沒有將所有被指定的源數(shù)據(jù)從源文件復(fù)制到目標(biāo)文件的狀態(tài)代碼。
方法700在圖8的塊714繼續(xù)。在塊714,如果副本收集fsctl命令超出了所有服務(wù)器的極限值,服務(wù)器104將非法參數(shù)指示符傳送到客戶機(jī)102。如果已經(jīng)超出了服務(wù)器的極限值,服務(wù)器104傳送服務(wù)器104被配置的最大極限值,該極限值表示為服務(wù)器參數(shù)設(shè)置的最大極限值。所傳送的被配置的最大極限值包括可以用單一的副本收集fsctl復(fù)制的數(shù)據(jù)塊被配置的最大極限值(例如,256),可以用單一的數(shù)據(jù)塊復(fù)制的數(shù)據(jù)總量被配置的最大極限值(例如,1MB),可以用單一的副本收集fsctl復(fù)制的數(shù)據(jù)總量被配置的最大極限值(例如,16MB),以及當(dāng)處理單一的副本收集fsctl命令時(shí),可以消耗的時(shí)間總量被配置的最大極限值(例如,25秒)。
在塊716,服務(wù)器104從客戶機(jī)102接收數(shù)據(jù)寫入請(qǐng)求,該客戶機(jī)包括被寫入到目標(biāo)文件左邊空白位置的新數(shù)據(jù)(例如,與源文件數(shù)據(jù)相對(duì))。在塊718,服務(wù)器102根據(jù)該寫入請(qǐng)求將新數(shù)據(jù)寫入到目標(biāo)文件的空白位置。值得注意的是,新數(shù)據(jù)可以在服務(wù)器執(zhí)行副本收集fsctl命令之前或之后被寫入到目標(biāo)文件。
典型的計(jì)算環(huán)境圖9說明了適合實(shí)施計(jì)算機(jī)設(shè)備的典型計(jì)算環(huán)境,諸如參照?qǐng)D1-8在上面討論的客戶設(shè)備102和服務(wù)器設(shè)備104。雖然圖9中示出了一個(gè)具體的結(jié)構(gòu),該計(jì)算設(shè)備可以在其他計(jì)算結(jié)構(gòu)中被實(shí)施。
計(jì)算環(huán)境900包括計(jì)算機(jī)902形式的通用計(jì)算系統(tǒng)。計(jì)算機(jī)902的部件可以包括,但不限制為,一個(gè)或多個(gè)處理器或者處理單元904,系統(tǒng)存儲(chǔ)器906,以及將包括處理器904的各種系統(tǒng)部件耦合到系統(tǒng)存儲(chǔ)器906的系統(tǒng)總線908。
系統(tǒng)總線908表示一個(gè)或多個(gè)任意不同類型的總線結(jié)構(gòu),包括存儲(chǔ)器總線或存儲(chǔ)器控制器,外圍總線,加速圖形端口,以及處理器或使用任何不同總線結(jié)構(gòu)的局部總線。系統(tǒng)總線908的一個(gè)例子可以是外圍部件互連(PCI)總線,也稱作附加板總線。
計(jì)算機(jī)902包括各種計(jì)算機(jī)可讀介質(zhì)。該介質(zhì)可以是計(jì)算機(jī)902可訪問的任何可獲得的介質(zhì)并且包括易失和非易失性介質(zhì),可移動(dòng)和不可移動(dòng)介質(zhì)。系統(tǒng)存儲(chǔ)器906包括易失性存儲(chǔ)器,諸如隨機(jī)存取存儲(chǔ)器(RAM)910,和/或非易失性存儲(chǔ)器形式的計(jì)算機(jī)可讀介質(zhì),諸如只讀存儲(chǔ)器(ROM)912。基本輸入/輸出系統(tǒng)(BIOS)914,包含有助于在計(jì)算機(jī)902中的元件之間傳送信息的基本程序,諸如在啟動(dòng)期間,存儲(chǔ)在ROM912中。RAM910包含立即可訪問的和/或目前由處理單元904操作的數(shù)據(jù)和/或程序模塊。
計(jì)算機(jī)902也可以包括其他可移動(dòng)/不可移動(dòng),易失性/非易失性計(jì)算機(jī)存儲(chǔ)介質(zhì)。舉例來說,圖9說明了用于從不可移動(dòng),非易失性磁介質(zhì)(未示出)讀取數(shù)據(jù)以及向上述介質(zhì)寫入數(shù)據(jù)的硬盤驅(qū)動(dòng)器916,用于從可移動(dòng),非易失性磁盤920(例如,“軟盤”)讀取數(shù)據(jù)并且向上述介質(zhì)寫入數(shù)據(jù)的磁盤驅(qū)動(dòng)器918,以及用于從諸如CD-ROM,DVD-ROM,或其他光學(xué)介質(zhì)的可移動(dòng),非易失性光盤924讀取數(shù)據(jù)和/或向上述介質(zhì)寫入數(shù)據(jù)的光盤驅(qū)動(dòng)器922。硬盤驅(qū)動(dòng)器916,磁盤驅(qū)動(dòng)器918,以及光盤驅(qū)動(dòng)器922通過一個(gè)或多個(gè)數(shù)據(jù)介質(zhì)接口925各自連接到系統(tǒng)總線908?;蛘?,硬盤驅(qū)動(dòng)器916,磁盤驅(qū)動(dòng)器918,以及光盤驅(qū)動(dòng)器922可以通過SCSI接口(未示出)連接到系統(tǒng)總線908。
盤驅(qū)動(dòng)器和其他相關(guān)的計(jì)算機(jī)可讀介質(zhì)提供計(jì)算機(jī)可讀指令的非易失性存儲(chǔ),數(shù)據(jù)結(jié)構(gòu),程序模塊,以及用于計(jì)算機(jī)902的其他數(shù)據(jù)。雖然用硬盤916,可移動(dòng)磁盤920,以及可移動(dòng)光盤924說明了該例子,能夠理解的是,可以存儲(chǔ)計(jì)算機(jī)可訪問的數(shù)據(jù)的其他類型的計(jì)算機(jī)可讀介質(zhì),諸如磁帶或其他磁存儲(chǔ)設(shè)備,閃存卡,CD-ROM,數(shù)字通用盤(DVD)或其他光學(xué)存儲(chǔ)器,隨機(jī)存取存儲(chǔ)器(RAM),只讀存儲(chǔ)器(ROM),電可擦除可編程只讀存儲(chǔ)器(EEPROM),等等,也可以用于實(shí)施該典型的計(jì)算系統(tǒng)和環(huán)境。
任意數(shù)量的程序模塊可以存儲(chǔ)在硬盤916,磁盤920,光盤924,ROM912,和/或RAM910上,舉例來說,包括操作系統(tǒng)926,一個(gè)或多個(gè)應(yīng)用程序928,其他程序模塊930,以及程序數(shù)據(jù)932。每個(gè)這樣的操作系統(tǒng)926,一個(gè)或多個(gè)應(yīng)用程序928,其他程序模塊930,以及程序數(shù)據(jù)932(或它們的一些組合)可以包括用于用戶網(wǎng)絡(luò)接入信息的高速緩存模式的實(shí)施例。
計(jì)算機(jī)902可以包括各種確定為通信介質(zhì)的計(jì)算機(jī)/處理器可讀介質(zhì)。通信介質(zhì)包含計(jì)算機(jī)可讀指令,數(shù)據(jù)結(jié)構(gòu),程序模塊,或被調(diào)制數(shù)據(jù)信號(hào)中的其他數(shù)據(jù)諸如載波或其他傳送機(jī)制并且包括任何信息傳送介質(zhì)。術(shù)語“被調(diào)制的數(shù)據(jù)信號(hào)”意思是具有一個(gè)或多個(gè)它的特征集合或者采用信號(hào)中編碼信息的方式改變的信號(hào)。舉例來說,而不是限定,通信介質(zhì)包括諸如有線網(wǎng)絡(luò)或直接有線連接的有線介質(zhì),以及諸如聲波,射頻,紅外線的無線介質(zhì),以及其他無線介質(zhì)。上述的任意組合也包括在計(jì)算機(jī)可讀介質(zhì)的范圍中。
用戶可以通過諸如鍵盤934和定點(diǎn)設(shè)備936(例如,“鼠標(biāo)”)的輸入設(shè)備將命令和信息輸入到計(jì)算機(jī)系統(tǒng)902。其他的輸入設(shè)備938(沒有具體示出)可以包括麥克風(fēng),操作桿,游戲墊,衛(wèi)星盤,串行端口,掃描儀,等等。這些以及其他的輸入設(shè)備通過耦合到系統(tǒng)總線908的輸入/輸出接口940連接到處理單元904,但是也可以通過其他的接口和總線結(jié)構(gòu)連接,諸如并行端口,游戲端口,或通用串行總線(USB)。
監(jiān)視器942或其他類型的顯示設(shè)備也可以通過諸如視頻適配器944的接口連接到系統(tǒng)總線908。除了監(jiān)視器942以外,其他的輸出外圍設(shè)備可以包括能夠通過輸入/輸出接口940連接到計(jì)算機(jī)902的部件,諸如喇叭(未示出)和打印機(jī)946。
計(jì)算機(jī)902可以使用到一個(gè)或多個(gè)遠(yuǎn)程計(jì)算機(jī)的邏輯連接而在網(wǎng)絡(luò)環(huán)境中操作,諸如遠(yuǎn)程計(jì)算設(shè)備948。舉例來說,遠(yuǎn)程計(jì)算設(shè)備948可以是個(gè)人計(jì)算機(jī),便攜式計(jì)算機(jī),服務(wù)器,路由器,網(wǎng)絡(luò)計(jì)算機(jī),對(duì)等設(shè)備或其他公共網(wǎng)絡(luò)節(jié)點(diǎn),等等。遠(yuǎn)程計(jì)算設(shè)備948作為便攜式計(jì)算機(jī)被說明,該計(jì)算機(jī)可以包括許多或所有這里描述的與計(jì)算機(jī)系統(tǒng)902相關(guān)的元素和特征。
計(jì)算機(jī)902和遠(yuǎn)程計(jì)算機(jī)948之間的邏輯連接被描述為局域網(wǎng)(LAN)950和通用廣域網(wǎng)(WAN)952。該網(wǎng)絡(luò)環(huán)境一般在辦公室,企業(yè)范圍計(jì)算機(jī)網(wǎng)絡(luò),內(nèi)部網(wǎng),以及因特網(wǎng)中。當(dāng)在LAN網(wǎng)絡(luò)環(huán)境中實(shí)施時(shí),計(jì)算機(jī)902通過網(wǎng)絡(luò)接口或適配器954連接到局域網(wǎng)950。當(dāng)在WAN網(wǎng)絡(luò)環(huán)境中實(shí)施時(shí),計(jì)算機(jī)902包括通過廣域網(wǎng)952建立通信的調(diào)制解調(diào)器956或其他裝置。調(diào)制解調(diào)器956對(duì)于計(jì)算機(jī)902來說可以是內(nèi)部的或外部的,可以通過輸入/輸出接口940或其他合適的機(jī)制連接到系統(tǒng)總線908??梢岳斫獾氖?,所說明的網(wǎng)絡(luò)連接是示范性的并且可以使用在計(jì)算機(jī)902和948之間建立通信連接的其他裝置。
在網(wǎng)絡(luò)環(huán)境中,諸如結(jié)合計(jì)算環(huán)境900所說明的,所描述的與計(jì)算機(jī)902相關(guān)的程序模塊,或它的一部分,可以存儲(chǔ)在遠(yuǎn)程存儲(chǔ)器存儲(chǔ)設(shè)備中。舉例來說,遠(yuǎn)程應(yīng)用程序958存儲(chǔ)在遠(yuǎn)程計(jì)算機(jī)948的存儲(chǔ)設(shè)備中。為了說明的目的,應(yīng)用程序和其他的可執(zhí)行程序部分,諸如操作系統(tǒng),在這里作為離散塊被說明,雖然認(rèn)為該程序和部件在不同時(shí)間存儲(chǔ)在計(jì)算機(jī)系統(tǒng)902的不同存儲(chǔ)部件中,并且由計(jì)算機(jī)的數(shù)據(jù)處理器執(zhí)行。
結(jié)論雖然用具體到結(jié)構(gòu)特征和/或方法行為的語言描述了本發(fā)明,將被理解的是,所附權(quán)利要求中定義的發(fā)明不必限定到所述的具體的特征或行為。相反,被公開的具體特征和行為作為實(shí)施發(fā)明權(quán)利要求的典型形式。
權(quán)利要求
1.一種更新文件的方法,包括在遠(yuǎn)程服務(wù)器上打開源文件;在遠(yuǎn)程服務(wù)器上打開目標(biāo)文件;傳送副本收集文件系統(tǒng)控制(fsctl)命令,指導(dǎo)遠(yuǎn)程服務(wù)器將源數(shù)據(jù)從源文件復(fù)制到目標(biāo)文件。
2.如權(quán)利要求1中所述的方法,其中的傳送副本收集fsctl命令包括創(chuàng)建文件區(qū)域陣列,該陣列定義如何將源數(shù)據(jù)從遠(yuǎn)程服務(wù)器上的源文件復(fù)制到遠(yuǎn)程服務(wù)器上的目標(biāo)文件。
3.如權(quán)利要求2中所述的方法,其中文件區(qū)域陣列的創(chuàng)建包括,為陣列中的每個(gè)文件區(qū)域確定源偏移量,目標(biāo)偏移量,和長度;源偏移量表示源文件中的開始位置,大量的源數(shù)據(jù)字節(jié)將從該位置復(fù)制;目標(biāo)偏移量表示目標(biāo)文件中的開始位置,一些源數(shù)據(jù)字節(jié)將復(fù)制到該位置;以及長度定義了字節(jié)的數(shù)量。
4.如權(quán)利要求2中所述的方法,其中的傳送副本收集fsctl命令包括傳送定義如何將源數(shù)據(jù)從遠(yuǎn)程服務(wù)器上的源文件復(fù)制到遠(yuǎn)程服務(wù)器上的目標(biāo)文件的文件區(qū)域陣列;傳送源文件的標(biāo)識(shí)符;以及傳送目標(biāo)文件操作。
5.如權(quán)利要求l中所述的方法,進(jìn)一步包括從遠(yuǎn)程服務(wù)器檢索源文件的副本。
6.如權(quán)利要求1中所述的方法,進(jìn)一步包括向遠(yuǎn)程服務(wù)器請(qǐng)求源文件的標(biāo)識(shí)符。
7.如權(quán)利要求1中所述的方法,進(jìn)一步包括將新數(shù)據(jù)寫入到目標(biāo)文件。
8.如權(quán)利要求7中所述的方法,其中的寫入包括,當(dāng)遠(yuǎn)程服務(wù)器將源數(shù)據(jù)從源文件復(fù)制到目標(biāo)文件時(shí),傳送數(shù)據(jù)寫入指令到遠(yuǎn)程服務(wù)器,該服務(wù)器包括被寫入到所創(chuàng)建目標(biāo)文件中的空白位置的數(shù)據(jù)。
9.如權(quán)利要求1中所述的方法,進(jìn)一步包括接收狀態(tài)指示符,該指示符表示從源文件復(fù)制到目標(biāo)文件的源數(shù)據(jù)的字節(jié)總數(shù)。
10.如權(quán)利要求1中所述的方法,進(jìn)一步包括如果遠(yuǎn)程服務(wù)器將所有指定的源數(shù)據(jù)從源文件復(fù)制到目標(biāo)文件,則從遠(yuǎn)程服務(wù)器接收狀態(tài)成功指示符。
11.如權(quán)利要求1中所述的方法,進(jìn)一步包括如果遠(yuǎn)程服務(wù)器沒有將所有指定的源數(shù)據(jù)從源文件復(fù)制到目標(biāo)文件,從遠(yuǎn)程服務(wù)器接收狀態(tài)失敗指示符;以及接收表示為什么沒有將所有指定的源數(shù)據(jù)從源文件復(fù)制到目標(biāo)文件的狀態(tài)代碼。
12.如權(quán)利要求1中所述的方法,進(jìn)一步包括如果到遠(yuǎn)程服務(wù)器的副本收集fsctl命令超出了任何服務(wù)器的極限值,則從遠(yuǎn)程服務(wù)器接收非法參數(shù)指示符;以及從遠(yuǎn)程服務(wù)器接收所配置的最大極限值,該極限值表示為服務(wù)器參數(shù)設(shè)置的最大極限值。
13.如權(quán)利要求12中所述的方法,其中從遠(yuǎn)程服務(wù)器接收所配置的最大極限值包括接收可以用單一的副本收集fsctl命令復(fù)制到遠(yuǎn)程服務(wù)器的數(shù)據(jù)塊的數(shù)量被配置的最大極限值;接收可以用單一的數(shù)據(jù)塊復(fù)制的數(shù)據(jù)總量被配置的最大極限值;接收可以用單一的副本收集fsctl命令復(fù)制到遠(yuǎn)程服務(wù)器的數(shù)據(jù)最大總量被配置的最大極限值;以及當(dāng)處理單一的副本收集fsctl命令時(shí),接收可以消耗的時(shí)間總量被配置的最大極限值。
14.一種處理器可讀介質(zhì),包括配置得用于執(zhí)行權(quán)利要求1的方法的處理器可執(zhí)行指令。
15.一種方法包括響應(yīng)客戶機(jī)的第一打開請(qǐng)求打開源文件;響應(yīng)客戶機(jī)的第二打開請(qǐng)求打開目標(biāo)文件;響應(yīng)從客戶機(jī)接收的副本收集fsctl命令將源數(shù)據(jù)從源文件復(fù)制到目標(biāo)文件,副本收集fsctl命令指定從源文件復(fù)制到目標(biāo)文件的數(shù)據(jù)塊。
16.如權(quán)利要求15中所述的方法,其中的接收副本收集fsctl命令包括接收定義如何將源數(shù)據(jù)從源文件復(fù)制到目標(biāo)文件的文件區(qū)域陣列;接收源文件的標(biāo)識(shí)符;以及接收目標(biāo)文件操作。
17.如權(quán)利要求15中所述的方法,進(jìn)一步包括從客戶機(jī)接收數(shù)據(jù)寫入請(qǐng)求,該客戶機(jī)包括將被寫入到目標(biāo)文件的新數(shù)據(jù);以及將新數(shù)據(jù)寫入到目標(biāo)文件中缺少源文件數(shù)據(jù)的偏移位置。
18.如權(quán)利要求15中所述的方法,進(jìn)一步包括將狀態(tài)指示符傳送到客戶機(jī),該狀態(tài)指示符表示從源文件復(fù)制到目標(biāo)文件的源數(shù)據(jù)的字節(jié)總數(shù)。
19.如權(quán)利要求15中所述的方法,進(jìn)一步包括如果用副本收集fsctl命令將所有指定的源數(shù)據(jù)從源文件復(fù)制到目標(biāo)文件,則將狀態(tài)成功指示符傳送到客戶機(jī)。
20.如權(quán)利要求15中所述的方法,進(jìn)一步包括如果用副本收集fsctl命令沒有將所有指定的源數(shù)據(jù)從源文件傳送到目標(biāo)文件,則將狀態(tài)失敗指示符傳送到客戶機(jī);以及傳送表示為什么沒有將所有指定的源數(shù)據(jù)從源文件復(fù)制到目標(biāo)文件的狀態(tài)代碼。
21.如權(quán)利要求15中所述的方法,進(jìn)一步包括如果副本收集fsctl命令超出了任何服務(wù)器的極限值,將非法參數(shù)指示符傳送到客戶機(jī);以及將所配置的最大極限值傳送到客戶機(jī),該極限值表示為服務(wù)器參數(shù)設(shè)置的最大極限值。
22.如權(quán)利要求21中所述的方法,其中將所配置的最大極限值傳送到客戶機(jī)包括傳送可以用單一的副本收集fsctl命令復(fù)制的數(shù)據(jù)數(shù)量被配置的最大極限值;傳送可以用單一的數(shù)據(jù)塊復(fù)制的數(shù)據(jù)總量被配置的最大極限值;傳送可以用單一的副本收集fsctl命令復(fù)制的數(shù)據(jù)最大總數(shù)被配置的最大極限值;當(dāng)處理單一的副本收集fsctl命令時(shí),傳送可以消耗的時(shí)間總量被配置的最大極限值。
23.如權(quán)利要求15中所述的方法,進(jìn)一步包括將源文件標(biāo)識(shí)符傳送到客戶機(jī)。
24.一種處理器可讀介質(zhì),包括配置得用于執(zhí)行權(quán)利要求15的方法的處理器可執(zhí)行指令。
25.一種處理器可讀介質(zhì),包括處理器可執(zhí)行指令,配置得用于指導(dǎo)遠(yuǎn)程服務(wù)器打開源文件并且提供訪問源文件的至少讀數(shù)據(jù);向遠(yuǎn)程服務(wù)器請(qǐng)求源文件的標(biāo)識(shí)符;指導(dǎo)遠(yuǎn)程服務(wù)器打開目標(biāo)文件以及提供訪問目標(biāo)文件的至少寫數(shù)據(jù);創(chuàng)建文件區(qū)域陣列,該陣列識(shí)別從源文件復(fù)制到目標(biāo)文件的數(shù)據(jù)塊;以及指導(dǎo)遠(yuǎn)程服務(wù)器將所識(shí)別的數(shù)據(jù)塊從源文件復(fù)制到目標(biāo)文件中特殊的偏移位置。
26.如權(quán)利要求25中所述的處理器可讀介質(zhì),其中指導(dǎo)遠(yuǎn)程服務(wù)器復(fù)制所識(shí)別的數(shù)據(jù)塊進(jìn)一步包括如果遠(yuǎn)程服務(wù)器成功地將所有被識(shí)別的數(shù)據(jù)塊從源文件復(fù)制到目標(biāo)文件,則從遠(yuǎn)程服務(wù)器接收狀態(tài)指示符;以及接收從源文件復(fù)制到目標(biāo)文件的數(shù)據(jù)字節(jié)的總數(shù)。
27.如權(quán)利要求25中所述的處理器可讀介質(zhì),其中創(chuàng)建文件區(qū)域陣列包括,為陣列中的每個(gè)文件區(qū)域確定源偏移量,該偏移量表示大量源數(shù)據(jù)字節(jié)將要從源文件中復(fù)制的開始位置;確定目標(biāo)偏移量,該偏移量表示將源數(shù)據(jù)字節(jié)數(shù)復(fù)制到目標(biāo)文件中的開始位置;確定將被復(fù)制的源數(shù)據(jù)的字節(jié)數(shù)。
28.如權(quán)利要求25中所述的處理器可讀介質(zhì),其中指導(dǎo)遠(yuǎn)程服務(wù)器復(fù)制被識(shí)別的數(shù)據(jù)塊包括,將副本收集文件系統(tǒng)控制(fsctl)命令發(fā)布到遠(yuǎn)程服務(wù)器,該副本收集命令包括表示從源文件復(fù)制到目標(biāo)文件的數(shù)據(jù)塊的文件區(qū)域陣列。
29.一種包括權(quán)利要求25中所述的處理器可讀介質(zhì)的計(jì)算機(jī)。
30.一種客戶計(jì)算機(jī)包括應(yīng)用程序;使應(yīng)用程序能夠訪問并操作遠(yuǎn)程服務(wù)器上的數(shù)據(jù)文件的協(xié)議;以及使應(yīng)用程序能夠通過副本收集文件系統(tǒng)控制(fsctl)命令更新遠(yuǎn)程服務(wù)器上的數(shù)據(jù)文件的協(xié)議的副本收集擴(kuò)展,該副本收集fsctl命令指導(dǎo)遠(yuǎn)程服務(wù)器將源數(shù)據(jù)塊從服務(wù)器上的源文件復(fù)制到服務(wù)器上目標(biāo)文件的指定位置。
31.如權(quán)利要求30中所述的客戶計(jì)算機(jī),其中的副本收集fsctl命令包括定義如何將源數(shù)據(jù)塊從遠(yuǎn)程服務(wù)器上的源文件復(fù)制到遠(yuǎn)程服務(wù)器上的目標(biāo)文件的文件區(qū)域陣列;源文件標(biāo)識(shí)符;以及目標(biāo)文件操作。
32.如權(quán)利要求30中所述的客戶計(jì)算機(jī),其中從組中選擇的協(xié)議包括服務(wù)器消息塊(SMB)協(xié)議;網(wǎng)絡(luò)文件系統(tǒng)(NFS)協(xié)議;WebNFS協(xié)議;公共因特網(wǎng)文件系統(tǒng)(CIFS)協(xié)議;以及Samba協(xié)議。
33.一種服務(wù)器計(jì)算機(jī)包括文件存儲(chǔ)器;配置得響應(yīng)客戶應(yīng)用程序的命令從文件存儲(chǔ)器訪問源文件并且打開目標(biāo)文件的協(xié)議;以及配置得響應(yīng)客戶應(yīng)用程序的副本收集文件系統(tǒng)控制(fsctl)命令將源數(shù)據(jù)從源文件復(fù)制到目標(biāo)文件中的指定位置的協(xié)議擴(kuò)展。
34.如權(quán)利要求33中所述的服務(wù)器計(jì)算機(jī),其中的副本收集fsctl命令包括定義源文件中的源數(shù)據(jù)塊并且指導(dǎo)服務(wù)器將源數(shù)據(jù)塊復(fù)制到目標(biāo)文件的什么位置的文件區(qū)域陣列;識(shí)別源文件的恢復(fù)鍵;以及目標(biāo)文件操作。
35.如權(quán)利要求33中所述的服務(wù)器計(jì)算機(jī),其中從組中選擇的協(xié)議包括服務(wù)器消息塊(SMB)協(xié)議;網(wǎng)絡(luò)文件系統(tǒng)(NFS)協(xié)議;WebNFS協(xié)議;公共因特網(wǎng)文件系統(tǒng)(CIFS)協(xié)議;以及Samba協(xié)議。
全文摘要
一種改進(jìn)的遠(yuǎn)程協(xié)議,能夠有效和可靠地更新遠(yuǎn)程服務(wù)器上的文件。遠(yuǎn)程協(xié)議的副本收集擴(kuò)展使客戶機(jī)能夠指導(dǎo)服務(wù)器從服務(wù)器上存在的源文件中收集數(shù)據(jù)的一部分并且將數(shù)據(jù)的這些部分復(fù)制到服務(wù)器上新目標(biāo)文件中合適的偏移量。副本收集擴(kuò)展因此使客戶機(jī)能夠在目標(biāo)文件中留下空白位置,在文件更新期間客戶機(jī)可以將新數(shù)據(jù)寫入到該位置。副本收集擴(kuò)展也使客戶機(jī)能夠通過不將它們從源文件復(fù)制到目標(biāo)文件而有效地刪除源文件的一部分。因此文件可以被更新而不必將整個(gè)文件從客戶機(jī)傳送到服務(wù)器。
文檔編號(hào)H04L29/06GK1744603SQ20051009239
公開日2006年3月8日 申請(qǐng)日期2005年7月19日 優(yōu)先權(quán)日2004年7月19日
發(fā)明者A·H·穆罕默德, D·M·克魯澤, T·A·蘭根 申請(qǐng)人:微軟公司