rfc1094-NFSv2-zh_第1頁
rfc1094-NFSv2-zh_第2頁
rfc1094-NFSv2-zh_第3頁
rfc1094-NFSv2-zh_第4頁
rfc1094-NFSv2-zh_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、Sun Microsystems, Inc.March 1989Network Worki ng GroupRequest for Comme nts: 1094NFS: Network File System P rotocol Sp ecificationSTATUS OF THIS MEMOThis RFC describes a p rotocol that Sun Microsystems, In c., and others are using. A new versi on of the pr otocol is un der devel opment, but others m

2、ay ben efit from the descri pti ons of the curre nt p rotocol, and discussi on of some of the desig n issues. Distributi on of this memo is un limited.1. INTRODUCTIONrkThe Sun Network Filesystem (NFS) p rotocol pr ovides transparent remote access to shared files across n etworks. The NFS p rotocol i

3、s desig ned to be po rtable across differe nt mach in es, op erat ing systems, n etwo architectures, and transport pr otocols. This po liability is achieved through the use of Remote Pr ocedure Call (R PC) p rimitives built on top of an eXter nal Data Rep rese ntati on (XDR). Imp leme ntati ons alre

4、ady exist for a variety of machi nes, from personal comp uters to sup erco mp uters.The supporting mount p rotocol allows the server to hand out remote access p rivileges to a restricted set of clie nts. It p erforms the op erat ing system-s pecific fun cti ons that allow, for exa mple, to attach re

5、mote directory trees to some local file system.1.1. Remote P rocedure CallSun的RPC( Remote Procedure Call)為遠(yuǎn)程服務(wù)提供了一個(gè)面向過程的接口。每個(gè)服務(wù)提供的程序作為RPC過程集的一部分。NFS就是其中之一。一個(gè)遠(yuǎn)程過程有三部分組成:主機(jī)地址,程序編號(hào),過程編號(hào)。NFS的個(gè)目標(biāo)就是底層協(xié)議無關(guān)性,他的底層可能是其它任何版本的RPC勺實(shí)現(xiàn),但是在本文檔為了更加方便的描述,我們假設(shè)NFS基于Sun RPC實(shí)現(xiàn),詳盡的描述信息參照RFC 1057。1.2. Exter nal Data Repr e

6、se ntati onXDR (eXter nal Data Re prese ntati on)標(biāo)準(zhǔn)為描述網(wǎng)絡(luò)上傳輸?shù)臄?shù)據(jù)類型提供了一種統(tǒng)一的方式。NFS協(xié)議使用RP(數(shù)據(jù)描述語言進(jìn)行詳細(xì)說明。更多的信息請(qǐng)參見RFC 1014"XDR:External Data Rep rese ntation Sta ndard"。 盡管RP C/XDR編譯器會(huì)自動(dòng)產(chǎn)生服務(wù)端和客戶端的“ stubs ”,但是它們對(duì)NFS來說不是必需的。任何提供等效的功能的程序,如果編碼相同,都可以使用,它也可以與其它的NFS實(shí)現(xiàn)進(jìn)行互操作。1.3.無狀態(tài)服務(wù)(Stateless ServersNFS協(xié)

7、議被盡可能設(shè)計(jì)為無狀態(tài)協(xié)議。 何協(xié)議狀態(tài)信息,這是為了功能正確。有著明顯的優(yōu)點(diǎn)。在無狀態(tài)服務(wù)器中,)也就是說,服務(wù)器應(yīng)該不必保持關(guān)于它的客戶端的任在失敗的事件發(fā)生的時(shí)候,無狀態(tài)服務(wù)器比有狀態(tài)服務(wù)器客戶端僅僅需要重發(fā)請(qǐng)求直到服務(wù)器響應(yīng);客戶端甚至不而對(duì)于有狀態(tài)服務(wù)器,其客戶端要么需要檢測),要么使客戶端操作失敗。需要知道服務(wù)器已經(jīng)崩潰或者是網(wǎng)絡(luò)臨時(shí)故障。 服務(wù)器失?。ú⑶以诜?wù)器恢復(fù)的時(shí)候重建服務(wù)器狀態(tài)這可能聽起來不象是一個(gè)重要的問題,但是它在一些意想不到的情況下會(huì)影響協(xié)議。我們 認(rèn)為只要能寫一個(gè)非常簡易的服務(wù)器, 些額外的復(fù)雜性也是值得的。注意:即使使用號(hào)稱“可靠”的傳輸協(xié)議 須能夠處理當(dāng)它們

8、超時(shí)的時(shí)候再次打開連接所產(chǎn)生的服務(wù)的中斷。 使這個(gè)實(shí)現(xiàn)簡化。不需要在崩潰后花費(fèi)昂貴的代價(jià)恢復(fù),即使在協(xié)議中多一TCP的時(shí)候,客戶端也必 因此,無狀態(tài)協(xié)議實(shí)際上可以另一方面,NFS處理文件、目錄這樣本身就有狀態(tài)的對(duì)象。文件本身有什么好處呢?這樣做的目的就是在協(xié)議本身不引入任何額外的狀態(tài)。 作,諸如文件或者記錄鎖定和遠(yuǎn)程執(zhí)行,都作為分開的服務(wù)實(shí)現(xiàn),在此不討論。如果文件不保持它的內(nèi)容的完整對(duì)固有的狀態(tài)操簡化恢復(fù)的基本方法就是盡可能的采取“幕等”操作(為了它們有被重復(fù)的潛力)。這個(gè)協(xié)議版本中的一些操作并不能達(dá)到這個(gè)目的;幸運(yùn)的是,大多數(shù)操作(例如Read和Write )是幕等的。而且,多數(shù)服務(wù)器失敗發(fā)

9、生在操作之間,而不是發(fā)生在收到操作和響應(yīng)之間。最后,盡管實(shí) 際上服務(wù)器的失敗可能很少,但是在復(fù)雜的網(wǎng)絡(luò)中, 的失敗都是很難區(qū)分的。任何網(wǎng)絡(luò),路由器或者網(wǎng)橋的失敗與服務(wù)器2. NFS P ROTOCOL DEFINITIONRPC對(duì)每一個(gè)RPC青求都提供了一個(gè)版本服務(wù)器隨著時(shí)間改變,服務(wù)器使用的協(xié)議也一樣。RFC號(hào)。RFC已經(jīng)定義了 NFS協(xié)議的兩個(gè)版本。即使在第二版中,也有少部分過時(shí)的過程和參數(shù),這 將在以后的版本中被刪除。 NFS協(xié)議第三版的RPC當(dāng)前正在準(zhǔn)備之中。(譯者注:這是相對(duì)此 文檔發(fā)布的時(shí)間來講的,此文檔發(fā)表于 1989,3) 2.1. File System ModelNFS假定

10、文件系統(tǒng)是分層次的,除了最底層是文件, 其它層次都是目錄。 在目錄中的每一個(gè)條目(文件,目錄,設(shè)備等)都有一個(gè)字符串名。不同的操作系統(tǒng)可能在目錄樹的深度或者使用的 名字上有所限制,就象用不同的語義來描述“路徑名”,它是在名字中把所有組成部分(目錄和 文件名)串聯(lián)起來。一個(gè)“文件系統(tǒng)”在一個(gè)單一的服務(wù)器上(通常是一個(gè)磁盤或者物理分區(qū))就是一個(gè)包含根節(jié)點(diǎn)的樹。一些操作系統(tǒng)提供了 “ mount ”操作使所有的文件系統(tǒng)岀現(xiàn)在一棵單一的樹上。 而其它的操作系統(tǒng)保持著一個(gè)文件系統(tǒng)“森林”。文件是由無解釋字節(jié)組成的無結(jié) 構(gòu)流。 第三版的NFS使用更好的文件系統(tǒng)模型。NFS 一次只查詢路徑名中的一個(gè)組成部分

11、。為什么不一次就得到整個(gè)路徑名,返回一個(gè)文件 句柄呢?這里有一些不這樣做的原因。首先,路徑名需要在路徑的組成部分之間有分隔符。不同的操作系統(tǒng)使用不同的分隔符。我們可以定義一種網(wǎng)絡(luò)上標(biāo)準(zhǔn)的路徑表示法,但是每一個(gè)路徑名在每一個(gè)終點(diǎn)上將必須進(jìn)行語法分析和轉(zhuǎn)換。其它的問題在第三節(jié)(NFS實(shí)現(xiàn)中的問題)里討論。盡管文件和目錄在許多方面可以作為相似的對(duì)象,但是讀目錄和讀文件也需要不同的過程。這里提供了描述目錄的網(wǎng)絡(luò)標(biāo)準(zhǔn)格式。 使用象上面相同的參數(shù)來確定一個(gè)過程,此過程在每次 調(diào)用的時(shí)候只返回一個(gè)目錄項(xiàng)。 這種方法產(chǎn)生的問題就是效率不高。 目錄包含著許多目錄項(xiàng), 程調(diào)用要返回每一項(xiàng)將是非常緩慢的。22 Se

12、rver P rocedures這個(gè)協(xié)議被定義為一組過程,這組過程具有用RPC吾言(XDF語言在程序,版本,過程聲明方面的擴(kuò)展)定義的參數(shù)和結(jié)果。每一個(gè)過程功能的簡要描述都應(yīng)該提供足夠允許實(shí)現(xiàn)的信息。2.3節(jié)詳細(xì)地描述了基本數(shù)據(jù)類型??蛻艨梢约俣ù瞬僮饕裌RITE請(qǐng)求可能導(dǎo)致在NFS協(xié)議中的所有過程都假定是同步的。當(dāng)一個(gè)過程返回給客戶端,如果服務(wù)器等待來自遠(yuǎn)程 以便在服務(wù)器崩潰的情況下再次發(fā)送這些請(qǐng)求。經(jīng)完成,與請(qǐng)求相關(guān)的任何數(shù)據(jù)現(xiàn)在在一個(gè)穩(wěn)定的存儲(chǔ)上。例如,客戶端的 服務(wù)器更新數(shù)據(jù)塊,文件系統(tǒng)信息塊(比如間接塊),和文件屬性信息(大小和修改時(shí)間)。當(dāng) WRITE返回給客戶端,客戶端假定這個(gè)寫

13、操作是可靠的。甚至在服務(wù)器崩潰的情況下,它也能丟 棄這些已經(jīng)寫的數(shù)據(jù)。這就是服務(wù)器無狀態(tài)的一個(gè)非常重要的部分。請(qǐng)求的刷新數(shù)據(jù),客戶端必須保存這些請(qǐng)求,/* Remote file service rout ines*/program NFS_P ROGRAM versio n NFS_VERSION voidNFS PROC_NULL(void)=0;attrstatNFS PROC_GETATTR(fha ndle)= 1;attrstatNFS PROC_SETATTR(sattrargs) = 2;voidNFS PROC_ROOT(void)=3;dir opresNFS PROC_L

14、OOK UP (diro pargs)= 4;readli nkresNFS PROC_READLINK(fha ndle)=5;readresNFS PROC_READ(readargs)=6;voidNFS PROC_WRITECACHE(void)=7;attrstatNFS PROC_WRITE(writeargs)=8;dir opresNFS PROC_CREATE(createargs)=9;statNFS PROC_REMOVE(diro pargs)=10;statNFS PROC_RENAME(re nameargs)=11;statNFS PROC_LINK(li nka

15、rgs)=12;2.2.1. Do Nothi ngstatNFS PROC_SYMLINK(symli nkargs) = 13;dir opres=14;=15;NFS PROC_MKDIR(createargs) statNFS PROC_RMDIR(diro pargs) readdirresNFS PROC_READDIR(readdirargs) = 16;statfsresNFS PROC_STATFS(fha ndle)= 17; = 2; = 100003;voidNFS PROC_NULL(void) = 0;這個(gè)過程不做工作,在所有RPC服務(wù)中它可以用來允許服務(wù)器響應(yīng)測試

16、和定時(shí)。222. Get File AttributesattrstatNFS PROC_GETATTR (fha ndle) = 1;如果響應(yīng)狀態(tài)是 NFS_OK,那么響應(yīng)屬性包含由輸入 fhandle指定的文件的屬性。2.2.3. Set File Attributesstruct sattrargs fhan dle file;sattr attributes;attrstatNFS PROC_SETATTR (sattrargs) = 2;"attributes"值參數(shù)包含著一些字段,這些字段要么是-1,要么是"file"的文件屬性的一個(gè)新值。如

17、果響應(yīng)狀態(tài)是NFS_OK那么響應(yīng)屬性在"SETATTR"操作完成之后具有文件的屬性。注意:-1指示在"attributes"中一個(gè)沒有使用的字段,在協(xié)議的下一版本將修改。2.2.6. Read From Symbolic Link2.2.4. Get Filesystem RootvoidNFS PROC_ROOT(void) = 3;因?yàn)檎业揭粋€(gè)文件系統(tǒng)的根文件句柄需要在客戶端和服務(wù)器已經(jīng)過時(shí)。這個(gè)過程不再使用,之間移動(dòng)路徑名。 為了正確的做到這一點(diǎn),我們必須定義一個(gè)路徑名網(wǎng)絡(luò)標(biāo)準(zhǔn)描述。查詢根文件 句柄已經(jīng)由MNTPROC_M過程來實(shí)現(xiàn)。(詳細(xì)情況請(qǐng)參

18、見附錄A,mount協(xié)議定義”)2.2.5. Look Up File Namediro presNFS PROC_LOOK UP (diro pargs) = 4;如果響應(yīng)"status"是NFS_OK響應(yīng)"file" 和響應(yīng)"attributes" 是參數(shù)"dir" 給定的目錄中的文件名的文件句柄和屬性。union readli nkres switch (stat status) case NFS OK:P ath data;default:void;;readii nkresNFS PROC_READLIN

19、K(fha ndle) = 5;如果"status"的值是NFS_OK,響應(yīng)"data"是fhandle參數(shù)引用的文件的符號(hào)鏈接中的數(shù)據(jù)。注意:因?yàn)镹FS總是在客戶端解析路徑名,如果在不同的客戶端或者服務(wù)器上使用不同的語 義,那么在一個(gè)符號(hào)鏈接中的路徑名可能有不同的含義(或者無意義)。2.2.7. Read From Filestruct readargs fhan dle file;un sig ned offset; un sig ned cou nt;un sig ned totalcou nt;union readres switch (stat

20、 status) case NFS OK:fattr attributes; n fsdata data;default:void;readresNFS PROC_READ(readargs) = 6;在由"file"給岀的文件中,個(gè)文件的第一個(gè)字節(jié)是偏移量從“offset ”字節(jié)偏移開始返回"count"個(gè)字節(jié)的"data"0。在讀操作發(fā)生后,文件屬性從"attributes"中返回。注意:參數(shù)"totalcount"沒有使用,在協(xié)議的下一修訂版中將刪除。228. Write to Cache

21、voidNFS PROC_WRITECACHE(void) = 7;將在協(xié)議的下一修訂版中使用。2.2.9. Write to Filestruct writeargs fha ndle file;un sig ned beg ino ffset;un sig ned offset;un sig ned totalcou nt; n fsdata data;;attrstatNFS PROC_WRITE(wnteargs) = 8;從"file" 開頭偏移的"offset"字節(jié)處開始寫數(shù)據(jù)"data"。文件的第一個(gè)字節(jié)是在偏移的位置。

22、如果響應(yīng)狀態(tài)"status"是NFS_OK那么在寫操作完成后響應(yīng)屬性"attributes"著文件的屬性。寫操作是原子的,從這次"WRITE "中寫入的數(shù)據(jù)不會(huì)與客戶端的另一次寫入的數(shù)據(jù)混合在一起。0中包含"WRITE"注意:參數(shù)"beginoffset"和"totalcount"被忽略,在協(xié)議的下一修訂版中將被刪除。2.2.10. Create Filestruct createargs dir op args where; sattr attributes;diro pr

23、esNFS PROC_CREATE(createargs) = 9;文件"name"創(chuàng)建在由"dir"指定的目 錄中。新 文件 的初 始屬 性由"attributes"NFS_OK的響應(yīng)狀態(tài)表明這個(gè)文件被創(chuàng)建。響應(yīng)"file" 和響應(yīng)"attributes"是這個(gè)文件的文件句柄和屬性。任何其它的響應(yīng)狀態(tài)"status"都意味著此操作失敗,沒有文件被創(chuàng)建。決定。注意: 這個(gè)例程可以傳遞一個(gè)排它的創(chuàng)建標(biāo)志,意味著“僅在文件不存在的時(shí)候創(chuàng)建這個(gè)文件”。stat2.2.11. Rem

24、ove FileNFS PROC_REMOVE(diro pargs) = 10;文件"name"從"dir" 確定的目錄中刪除。 NFS OK的響應(yīng)意味著這個(gè)目錄項(xiàng)被刪除。注意:可能不是幕等地操作。2212. Ren ame Filestruct ren ameargs dir op args from;dir op args to;statNFS PROC_RENAME(re nameargs) = 11;在"from.dir" 目錄中的""文件被更名為"to.dir"目錄

25、中的文件名""。如果響應(yīng)是NFS_OK,文件被更名。更名操作在服務(wù)器上是一個(gè)原子操作;它不能在執(zhí)行中被中斷。注意:可能不是冪等地操作。2.2.13. Create Link to FileProcedure 12, Versio n 2.struct lin kargs fha ndle from;dir op args to;statNFS PROC_LINK(li nkargs) = 12;在"to.dir" 目錄中創(chuàng)建文件"",它是已存在的文件值是NFS_OK,一個(gè)鏈接創(chuàng)立。如何返回其它的值表明岀錯(cuò),

26、這個(gè)鏈接沒有創(chuàng)建。硬鏈接應(yīng)該具有這樣的屬性,鏈接的文件中的任何一個(gè)改變都將影響到兩個(gè)文件。當(dāng)硬鏈 接指向一個(gè)文件的時(shí)候,文件屬性中應(yīng)該有一個(gè)表示"n li nk" 的值,這個(gè)值比鏈接前大。"from"的一個(gè)硬鏈接。如果返回注意:可能不是幕等地操作。struct symli nkargs 2.2.14. Create Symbolic Linkdir op args from; p ath to;sattr attributes; ;statNFS PROC_SYMLINK(symli nkargs) = 13;在給定的目錄"from.dir&q

27、uot; 中創(chuàng)建一個(gè)文件類型是 NFLNK的文件""。這個(gè)新文件包 含著路徑名"to",具有"attributes" 指定的初始屬性。如果返回值是 NFS_OK,一個(gè)鏈接被創(chuàng)建。 任何其它的返回值指示錯(cuò)誤,鏈接沒有創(chuàng)建。符號(hào)鏈接是指向另一個(gè)文件的指針。在 "to"中給定的名字不被服務(wù)器解釋,只存儲(chǔ)在新建 的文件中。當(dāng)客戶端引用一個(gè)符號(hào)鏈接文件的時(shí)候, 符號(hào)鏈接中的內(nèi)容通常作為一個(gè)代替的路徑 名重新被解釋。READLINK的操作返回給客戶端要解釋的數(shù)據(jù)。0777的模式。注意:在UNIX服務(wù)器上,at

28、tributes從不使用,因?yàn)榉?hào)鏈接總是具有2.2.15. Create Directorydiro presNFS PROC_MKDIR (createargs) = 14;新目錄""創(chuàng)建在給定的目錄 "where.dir" 中。新目錄的初始屬性由"attributes"確定。一個(gè)NFS_OK的返回值表示新目錄被創(chuàng)建,響應(yīng)"file" 和響應(yīng)"attributes"是這個(gè)新目錄的文件句柄和屬性。返回任何其它的響應(yīng)狀態(tài)"status" 都意味著操作失敗,

29、沒有目錄被創(chuàng)建。注意:可能不是冪等地操作。2.2.16. Remove DirectorystatNFS PROC_RMDIR(diro pargs) = 15;在"dir"指定的目錄中的空的目錄"name"將被刪除,如果響應(yīng)是NFS_OK,目錄被刪除。注意:可能不是幕等地操作。2.2.17. Read From Directorystruct readdirargs fha ndle dir; n fscookie cookie; un sig ned cou nt;struct entry un sig ned fileid; file name n

30、 ame;n fscookie cookie;entry *n exte ntry;union readdirres switch (stat status) case NFS OK:struct entry *en tries;bool eof; readdirok;default:void;;readdirres"cou nt" 個(gè)字節(jié)。如 。每一個(gè)"entry" 包含著- 文件名和一個(gè)指向目錄中NFS PROC_READDIR (readdirargs) = 16;從"dir" 指定的目錄中返回一個(gè)可變數(shù)目的目錄項(xiàng)集合,總的大小

31、是果返回的狀態(tài)值"status" 是NFS_OK那么后跟一組可變數(shù)目的"entry"個(gè)"fileid",這個(gè)"fileid"是由文件系統(tǒng)中唯一標(biāo)識(shí)這個(gè)文件的號(hào)碼,下一個(gè)目錄項(xiàng)的不透明指針"cookie"組成。Cookie使用在下面的READDIF調(diào)用中,以便在這個(gè)目錄中從一個(gè)指定的開始點(diǎn)獲得更多的目錄項(xiàng)。特殊的cookie值0(所有比特都是0)使得從目錄的開始點(diǎn)得到目錄項(xiàng)。"fileid"字段應(yīng)該和在文件屬性中的"fileid"字段中有同樣的值。(見“基本

32、數(shù)據(jù)類型”中的2.3.5節(jié)“fattr ”)如果在目錄中沒有更多的目錄項(xiàng),"eof"標(biāo)志的值是TRUE 2218. Get Filesystem Attributesunion statfsres (stat status) case NFS OK:struct un sig ned tsize; un sig ned bsize;un sig ned blocks;un sig ned bfree;un sig ned bavail; info;default:void;statfsresNFS PROC_STATFS(fha ndle) = 17;如果響應(yīng)狀態(tài)"

33、;status" 是NFS_OK那么響應(yīng)"info" 給岀包含著由輸入文件句柄fhandle弓I用的文件的文件系統(tǒng)的屬性。屬性字段包含著下列值:tsizebsizeblocksbfreebavail用字節(jié)表示的最優(yōu)化的傳輸尺寸。這是服務(wù)器在 最想要的數(shù)據(jù)字節(jié)數(shù)。文件系統(tǒng)用字節(jié)表示的塊尺寸。文件系統(tǒng)中"bsize"塊的總數(shù)。文件系統(tǒng)中自由的“ bsize ”塊的數(shù)目。無特權(quán)用戶可用的"bsize"塊的數(shù)目。READ和WRITE請(qǐng)求中的;注意:如果文件系統(tǒng)具有可變尺寸的塊,這個(gè)調(diào)用不能很好的工作。2.3. Basic Data

34、Types以下XDRe義是在描述其它結(jié)構(gòu)中使用的基本的結(jié)構(gòu)和類型。2.3.1. statenum stat NFS_OK = 0,NFSERR_ PERM=1,NFSERR_NOENT=2,NFSERR_IO=5,NFSERR_NXIO=6,NFSERR_ACCES=13,NFSERR_EXIST=17,NFSERR_NODEV=19,NFSERR_NOTDIR=20,NFSERR_ISDIR=21,NFSERR_FBIG=27,NFSERR_NOS PC=28,NFSERR_ROFS=30,NFSERR_NAMETOOLONG=63,NFSERR_NOTE MP TY=66,NFSERR_D

35、QUOT=69,NFSERR_STALE=70,NFSERR WFLUSH=99在每一個(gè)過程調(diào)用結(jié)果中都有統(tǒng)計(jì)類型"stat" 被返回。NFS_OK的值表示調(diào)用執(zhí)行成功,結(jié)果有效。其它值表示服務(wù)器一側(cè)在過程服務(wù)中產(chǎn)生的某種錯(cuò)誤。這些錯(cuò)誤值來源于 UNIX錯(cuò)誤號(hào)。NFSERR PERM不是所有者,調(diào)用者不是所請(qǐng)求操作的正確的所有者。NFSERR NOENT不存在這樣的文件或者目錄。指定的文件或者目錄不存在。NFSERR 10在操作執(zhí)行的時(shí)候?qū)绗F(xiàn)某種硬件錯(cuò)誤。例如,這可能是一個(gè)磁盤錯(cuò)誤。NFSERR NXI0沒有這樣的設(shè)備或者地址。NFSERR ACCES許可權(quán)限拒絕。調(diào)用者沒

36、有執(zhí)行請(qǐng)求操作的正確的權(quán)限。NFSERR EXIST文件存在。指定的文件已經(jīng)存在。NFSERR N0DEV沒有這樣的設(shè)備。NFSERR NOTDIR不是一個(gè)目錄。 在目錄操作中調(diào)用者指定一個(gè)非目錄。NFSERR ISDIR是一個(gè)目錄。調(diào)用者在一個(gè)非目錄操作中指定一個(gè)目錄。NFSERR FBIG文件太大。操作造成文件增長超過服務(wù)器的限制。NFSERR NOSPC在設(shè)備上沒有剩余的空間。這個(gè)操作導(dǎo)致服務(wù)器文件系統(tǒng)達(dá)到它的極限。NFSERR ROFS只讀文件系統(tǒng)。在一個(gè)只讀文件系統(tǒng)上試圖寫。NFSERR NAMETOOLONG文件名太長。在操作中文件名太長。NFSERR NOTEMPTY目錄不空。試

37、圖刪除一個(gè)不空的目錄。NFSERR DQUOT磁盤限額超岀。客戶在服務(wù)器上的磁盤限額已經(jīng)超岀。NFSERR STALE在參數(shù)中給的文件句柄"fhandle"無效。也就是說,這個(gè)文件句柄引用的文 件不再存在。或者訪問它的設(shè)置已經(jīng)被撤銷。NFSERR WFLUSH使用"WRITECACHE調(diào)用中的服務(wù)器寫緩沖區(qū)得到磁盤刷新。2.32 ftypeenumftype NFNON = 0,NFREG = 1,NFDIR = 2,NFBLK = 3,NFCHR = 4,NFLNK = 5;枚舉"ftype"類型給岀文件的類型。NFNON類型表示不是一個(gè)文件

38、,NFREG表示一個(gè)正常的文件,NFDIR表示一個(gè)目錄。NFBLK表示一個(gè)特定的塊設(shè)備,NFCHR表示一個(gè)特定的字符設(shè)備,NFLNK表示一個(gè)符號(hào)鏈接。2.33 fha ndletyp edef o paque fhan dleFHSIZE;"fha ndle"是一個(gè)在服務(wù)器和客戶端之間傳送的文件句柄。所有文件操作都使用文件句柄來 引用一個(gè)文件或者目錄。文件句柄包含著服務(wù)器需要的區(qū)分一個(gè)單獨(dú)文件的信息。2.3.4. timevalstruct timeval un sig ned int sec on ds;un sig ned int usec onds;1970年一月一日

39、凌晨起計(jì)時(shí)。它"timeval"結(jié)構(gòu)是一個(gè)秒和微秒的數(shù)值,從格林威治時(shí)間使用在傳遞時(shí)間和日期的信息中。2.3.5. fattrstruct fattr ftype type; un sig ned int mode; un sig ned int n li nk;un sig ned int uid;un sig ned int gid;un sig ned int size;un sig ned int blocksize;un sig ned int rdev;un sig ned int blocks;un sig ned int fsid; un sig ned i

40、nt fileid; timeval atime;timeval mtime;timeval ctime;"fattr" 結(jié)構(gòu)包含著文件的屬性;"ty pe"是文件的類型;"n li nk" 是一個(gè)文件的硬鏈接數(shù)(對(duì) 同一個(gè)文件不同的名字的數(shù)目);"uid"是這個(gè)文件的所有者的用戶標(biāo)識(shí)號(hào)碼;"gid"是擁有這個(gè)文件的組的組標(biāo)識(shí)號(hào)碼;"size" 是這個(gè)文件以字節(jié)數(shù)計(jì)算的大小;"blocksize"是這個(gè)文件的一個(gè)塊以字節(jié)計(jì)數(shù)的大?。蝗绻募念愋褪荖FCH

41、R或者NFBLK, "rdev"是這個(gè)文件的設(shè)備號(hào);"blocks"是文件在磁盤上塊的數(shù)量;"fsid" 是包含這個(gè)文件的文件系統(tǒng)的系統(tǒng)標(biāo)識(shí)符;"fileid"是這個(gè)文件在它的文件系統(tǒng)中唯一的標(biāo)識(shí)符號(hào)碼;"atime"是上次文件讀訪問或者寫訪問的時(shí)間;"mtime"是文件數(shù)據(jù)上次被修改時(shí)的時(shí)間(寫); "ctime"是文件狀態(tài)上次改變的時(shí)間。如 果文件的尺寸改變,寫一個(gè)文件也將改變"ctime"。"Mode"是被編碼

42、成一個(gè)比特集合的訪問模式。注意文件類型要么在模式比特中指定,要么 在文件類型中指定。 這實(shí)際上是此協(xié)議中的一個(gè)缺陷,將在未來的版本中修訂。下面的描述使用0040000這是一個(gè)目錄,"type"0020000這是一個(gè)字符特殊文件,0060000這是一個(gè)塊特殊文件,0100000這是一個(gè)正常的文件,0120000這是一個(gè)符號(hào)鏈接文件,字段應(yīng)該是NFDIR。"type"字段應(yīng)該是NFCHR "type" 字段應(yīng)該是NFBLK "type" 字段應(yīng)該是NFREG "type" 字段應(yīng)該是NFLNK ;&

43、quot;type"字段應(yīng)該是NFNON八進(jìn)制數(shù)確定比特的位置0004000設(shè)置在執(zhí)行中的用戶ID0002000設(shè)置在執(zhí)行中的組ID0001000在使用后保存交換文本。0000400對(duì)所有者的讀權(quán)限許可。0000200對(duì)所有者的寫權(quán)限許可。0000100對(duì)所有者的執(zhí)行和搜索權(quán)限許可。0000040對(duì)組的讀權(quán)限許可。0000020對(duì)組的寫權(quán)限許可。0000010對(duì)組的執(zhí)行和搜索權(quán)限許可。0000004對(duì)其他人的讀權(quán)限許可。0000002對(duì)其他人的寫權(quán)限許可。0000001對(duì)其他人的執(zhí)行和搜索權(quán)限許可。0140000這是一個(gè)命名的socket注意:這些比特與UNIX中stat(2)系統(tǒng)調(diào)

44、用中返回的模式比特是一樣的。文件類型要 么在模式比特中要么在文件類型中確定。這在未來的版本中將修改。在屬性結(jié)構(gòu)中"rdev"字段是一個(gè)操作系統(tǒng)特定設(shè)備的標(biāo)識(shí)符。在這個(gè)協(xié)議的下一個(gè) 修訂版中將刪除。2.36 sattrstruct sattr un sig ned int mode; un sig ned int uid;un sig ned int gid; un sig ned int size; timeval atime;timeval mtime;"sattr"結(jié)構(gòu)包含著可以從客戶端設(shè)置的文件的屬性。這些字段與上面的"fattr&quo

45、t; 中的字段的含義是相同的。"size"值為0意味著文件將被截短。一個(gè)-1的值意味著這個(gè)字段將被忽略。2.3.7. file nametyp edef stri ng file name<MAXNAMLEN>"file name"用來傳送文件名或者路徑名的組成部分。2.3.8. pathtyp edef stri ng p ath<MAXPATHLEN>"path"是一個(gè)路徑名。服務(wù)器把它作為一個(gè)沒有內(nèi)部結(jié)構(gòu)的字符串,但是對(duì)客戶端來說它 是文件系統(tǒng)樹中的節(jié)點(diǎn)的名字。2.3.9. attrstatunion a

46、ttrstat switch (stat status) case NFS OK:fattr attributes;default:void;"status",如果這個(gè)調(diào)用成功,它"attrstat"結(jié)構(gòu)是一個(gè)公共的過程結(jié)果。它包含著一個(gè)將也包含操作作用于那個(gè)文件的屬性。2.3.10. diro pargsstruct dir op args fha ndle dir;file name n ame;"diropargs"結(jié)構(gòu)使用在目錄屬性操作中。"dir"是在其中尋找文件"name"的那個(gè)目錄

47、。一個(gè)目錄操作影響這個(gè)目錄。2.3.11. diro presunion dir opres switch (stat status) case NFS OK:struct fha ndle file; fattr attributes; dir op ok;default:void;在"diro pres"中返回目錄操作的結(jié)果。如果這個(gè)調(diào)用成功,與這個(gè)文件相關(guān)的新文件句柄 "file"和文件屬性"attributes" 將連同"status"一起返回。3. NFS IMP LEMENTATION ISSUESNF

48、S 協(xié)議設(shè)計(jì)為允許不同的操作系統(tǒng)共享文件。但是,因?yàn)樗赨NIX環(huán)境中設(shè)計(jì),所以,許多操作與UNIX文件系統(tǒng)的操作語義相似。這一節(jié)討論實(shí)現(xiàn)中特別的細(xì)節(jié)和語義的問題。3.1. Server/Clie nt Relatio nshipNFS協(xié)議被設(shè)計(jì)為讓服務(wù)器盡可能的簡單和通用。有時(shí)候如果客戶端想實(shí)現(xiàn)復(fù)雜的文件系統(tǒng) 語義,服務(wù)器的簡單性可能是一個(gè)難題。例如,一些操作系統(tǒng)允許刪除打開的文件。一個(gè)進(jìn)程能夠打開文件,當(dāng)文件打開的時(shí)候,從目錄中刪除它。 只要進(jìn)程保持文件打開,這個(gè)文件就可以被讀寫,即使這個(gè)文件在文件系統(tǒng)中沒有名字。對(duì)于無狀態(tài)服務(wù)器來說,實(shí)現(xiàn)這些語義是不可能的??蛻舳丝梢允褂靡恍┘记桑T如在

49、刪除時(shí)重命名這個(gè)文件,只在它關(guān)閉的時(shí)候刪除它。我們相信服務(wù)器提供了足夠的功能在客戶 端上實(shí)現(xiàn)大多數(shù)文件系統(tǒng)的語義。每一個(gè)NFS客戶端也是一個(gè)潛在的服務(wù)器,遠(yuǎn)程和本地安裝的文件系統(tǒng)可以自由的混合在 一起。當(dāng)客戶端瀏覽遠(yuǎn)程文件系統(tǒng)的目錄樹,到達(dá)在服務(wù)器上另一個(gè)遠(yuǎn)程系統(tǒng)的mount點(diǎn)的時(shí)候,將會(huì)岀現(xiàn)一些有趣的問題。要允許服務(wù)器跟隨第二個(gè)遠(yuǎn)程 mount就需要循環(huán)檢測,服務(wù)器查找和 用戶重新生效。代替的做法是,我們決定不讓客戶端越過服務(wù)器的安裝點(diǎn)。.當(dāng)客戶端在一個(gè)服務(wù)器已經(jīng)mount 了文件系統(tǒng)的目錄中查詢的時(shí)候,客戶端將看見下面的目錄而不是安裝的目錄。例如,如果服務(wù)器有一個(gè)叫做"/usr&

50、quot;的文件系統(tǒng),把另一個(gè)文件系統(tǒng)安裝在"/usr/src" 上,如果客戶端安裝了 "/usr",它將看不到"/usr/src"的mount版本??蛻舳四茏鲞h(yuǎn)程 mount以配合服務(wù)器的安裝點(diǎn)保持服務(wù)器的視圖。在這個(gè)例子中,客戶端應(yīng)該除了mount"/usr"之外,還要mount"/usr/src",即使它們是來自同一臺(tái)服務(wù)器。32 P ath name Interp retati on路徑名總是在客戶端解析的規(guī)則有點(diǎn)復(fù)雜。例如,符號(hào)鏈接在不同的客戶端可以有不同的解釋。對(duì)于非UNIX實(shí)現(xiàn)的另

51、一個(gè)共同的問題就是路徑"."的專門的解釋是給定的目錄的父目錄。此協(xié)議的下一個(gè)修訂版將使用一個(gè)明確的標(biāo)志指示父目錄。AUTH_UNIX 類 "uid",有 使用它們來檢查許可。使用這種方法產(chǎn)生的問題可以用一些有趣的3.3. P ermissi on Issues嚴(yán)格的講,NFS協(xié)議沒有定義服務(wù)器使用的許可權(quán)限檢查。但是,也希望使用 型認(rèn)證這一基礎(chǔ)的保護(hù)機(jī)制作正常的操作系統(tǒng)許可權(quán)限檢查,服務(wù)器得到客戶的有效 效"gid"和每次調(diào)用上的組, 途徑來解決。使用"uid" 和"gid"必須有相同的用戶到&

52、quot;uid" 著整個(gè)網(wǎng)絡(luò)共享相同的"uid/gid" 替數(shù)字,但是仍有復(fù)雜的問題要解決。暗示著客戶端和服務(wù)器分享相同的"uid"列表。每一對(duì)服務(wù)器和客戶端,組到"gid"的映射。因?yàn)槊恳粋€(gè)客戶端也可能是一臺(tái)服務(wù)器,這意味空間。AUTH_DE(和NF助、議的下一個(gè)修訂版)使用字符串來代由于打開操作有狀態(tài),所以產(chǎn)生了另一個(gè)問題。大多數(shù)操作系統(tǒng)在打開文件的時(shí)候檢查許 可權(quán)限,在每一次讀寫請(qǐng)求的時(shí)候檢查文件是否打開。在無狀態(tài)的服務(wù)器中,服務(wù)器沒有辦法知道文件是否打開, 必須在每次讀寫調(diào)用的時(shí)候檢查許可權(quán)限。在一個(gè)本地文件系統(tǒng)上

53、,用戶可以打開文件,然后改變權(quán)限不允許別人接觸它,但是仍然能夠?qū)懳募?,因?yàn)槲募谴蜷_的。相反, 在遠(yuǎn)程文件系統(tǒng)上, 寫操作將失敗。為了避免這種問題,服務(wù)器的許可檢查算法將允許文件的所 有者訪問文件,而不管許可的設(shè)置。然后從打開的文件中讀取塊。文件可能沒有讀許NFS服務(wù)器不能區(qū)分在正常文件讀和頁面調(diào) 如果在調(diào)用中被給的"uid"在文件上有執(zhí)行或者讀在從網(wǎng)絡(luò)中的文件上進(jìn)行頁面調(diào)度的時(shí)候,也會(huì)岀現(xiàn)相似的問題。操作系統(tǒng)在打開一個(gè)文 件進(jìn)行頁面調(diào)度之前,總是檢查執(zhí)行許可權(quán)限, 可權(quán)限,但是在文件打開后,這就不是一個(gè)問題了。入請(qǐng)求讀之間的區(qū)別。為了使這個(gè)可以工作, 許可權(quán)限,服務(wù)器將允

54、許讀文件。在大多數(shù)操作系統(tǒng)中,一個(gè)特別的用戶 而不管文件中的所有權(quán)和設(shè)定的許可權(quán)限。(在UNIX上,用戶ID為0)有訪問所有文件的權(quán)限,"su per-user" 權(quán)限在服務(wù)器上不可能被允許,因?yàn)樵谧约汗ぷ髡旧系娜魏尉哂谐?jí)用戶權(quán)限的人都能訪問所有的遠(yuǎn)程文件。UNIX服務(wù)器在訪問檢查前,默認(rèn)把用戶ID 0 映射為-2。這個(gè)工作在NFS的根文件系統(tǒng)中例外,在那里超級(jí)用戶訪問不 能避免。34 RPC In formationAuthentication NFS服務(wù)使用 AUTH_UNIX, AUTH_DES 或者AUTH_SHOF類型的認(rèn)證,在NULL過程中例外,在那里 AUT

55、H_NON也被允許。Transport Protocols NFS通常由 UDF支持。Port Number NFS 協(xié)議當(dāng)前使用UDF端口號(hào)2049。這不是一個(gè)正式分配的端口號(hào),所以, 這個(gè)協(xié)議的后繼版本使用 RPC的 “端口映射”工具。3.5. Sizes of XDR Structures這里有一些使用在此協(xié)議中不同的XDR結(jié)構(gòu)的尺寸,用十進(jìn)制字節(jié)給岀。/*在讀寫請(qǐng)求中的數(shù)據(jù)的最大字節(jié)數(shù)。*/con st MAXDATA = 8192;/* 在路徑參數(shù)中的最大字節(jié)數(shù)*/const MAXPATHLEN = 1024;/*在文件名參數(shù)中的最大字節(jié)數(shù)*/con st MAXNAMLEN =

56、255;/*被 READDIR傳送的"cookie"字節(jié)數(shù)的大小*/const COOKIESIZE = 4;*/*不透明文件句柄的字節(jié)數(shù)的大小const FHSIZE = 32;mount的時(shí)候設(shè)置。mount協(xié)議在附錄中描述。例如,象 RPC操作失敗(在給岀一個(gè)重傳的選項(xiàng)號(hào)后),軟安 對(duì)于在一IP 層)。5123.6. Setti ng RPC Parameters不同的文件系統(tǒng)參數(shù)和選項(xiàng)應(yīng)該在“硬”安裝一樣,“軟”安裝也被提供。裝文件系統(tǒng)返回錯(cuò)誤,而硬安裝文件系統(tǒng)一直繼續(xù)重傳。最大的傳輸尺寸依賴于實(shí)現(xiàn)。 個(gè)本地網(wǎng)的有效操作來說,通常使用8192字節(jié)的數(shù)據(jù)。這可能導(dǎo)致下

57、層的分段(諸如在既然一些網(wǎng)絡(luò)接口不允許這樣的包,對(duì)于在低速網(wǎng)絡(luò)、主機(jī)上的操作,或者通過網(wǎng)關(guān)的操作,或1024字節(jié)總是提供較好的結(jié)果。客戶機(jī)和服務(wù)器可能需要把當(dāng)前的操作保存在緩沖區(qū)中,以幫助避免因?yàn)榉悄坏鹊牟僮鳟a(chǎn) 生的問題。例如,如果傳輸協(xié)議丟失了刪除文件操作的響應(yīng),在重傳的時(shí)候,服務(wù)器可能返回一 個(gè)NFSERR_NOENT代替NFS_OK但是,如果服務(wù)器保持上次的請(qǐng)求操作和結(jié)果,它可能返回正確的成功的代碼。當(dāng)然,服務(wù)器在重傳之間可能崩潰、重起。但是一塊很小的緩沖區(qū)(甚至只是容 納一個(gè)條目)將解決大部分的問題。Appendix A. MOUNT P ROTOCOL DEFINITIONA.1.

58、In troducti on安裝協(xié)議與NFS協(xié)議分離,但是與NFS協(xié)議相關(guān)。它提供了操作系統(tǒng)特定的服務(wù)來擴(kuò)展NFS的功能:查詢服務(wù)器路徑名,使用戶身份有效, 檢查訪問權(quán)限??蛻舳耸褂冒惭b協(xié)議得到第一個(gè)文件句柄,這允許客戶進(jìn)入一個(gè)遠(yuǎn)程的文件系統(tǒng)。安裝協(xié)議與NFS協(xié)議保持分離,使得在不改變NFS服務(wù)器協(xié)議的情況下很容易加進(jìn)新的訪問檢查和確認(rèn)的方法。注意:這個(gè)協(xié)議的定義暗示著服務(wù)器有狀態(tài),因?yàn)榉?wù)器保持著一個(gè)客戶端安裝請(qǐng)求的列 表。安裝列表信息對(duì)客戶機(jī)或者服務(wù)器的功能沒有危害性。僅僅建議在服務(wù)器岀現(xiàn)故障時(shí),給客戶機(jī)可能的警告。安裝協(xié)議的第一版與 NFS協(xié)議的第二版一起使用,在兩個(gè)協(xié)議中唯一通信的信息是"fhan dle"結(jié)構(gòu)。A.2. RPC In formationAuthe nticati on安裝服務(wù)僅使用AUTH UNIX和AUTH NON類型的認(rèn)證Transport Pr otocols安裝服務(wù)被UDF和TC沖支持。RFCPort

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論