NFS服務(wù)器的平臺(tái)建立和應(yīng)用
NFS服務(wù)器的使用比較普遍,在很多通信中都需要這個(gè)服務(wù)來(lái)完成文件的共享。那么我們今天則是講解多系統(tǒng)中的NFS服務(wù)器的構(gòu)建和使用。希望能夠幫助大家了解這方面的內(nèi)容。
NFS簡(jiǎn)介
NFS由SUN公司開(kāi)發(fā),目前已經(jīng)成為文件服務(wù)的一種標(biāo)準(zhǔn)(RFC1904,RFC1813).其***功能是可以通過(guò)網(wǎng)絡(luò)讓不同操作系統(tǒng)的計(jì)算機(jī)可以共享數(shù)據(jù),所以也可以將其看做是一臺(tái)文件服務(wù)器,如圖1-1所示.NFS提供了除Samba之外,Windows與Linux及UNIX與Linux之間通信的方法.
圖1-1 NFS可作為文件服務(wù)器
客戶(hù)端PC可以掛載NFS服務(wù)器所提供的目錄并且掛載之后這個(gè)目錄看起來(lái)如同本地的磁盤(pán)分區(qū)一樣,可以使用cp、cd、mv、rm及df等與磁盤(pán)相關(guān)的命令.NFS有屬于自己的協(xié)議與使用的端口號(hào),但是在傳送資料或者其他相關(guān)信息時(shí)候,NFS服務(wù)器使用一個(gè)稱(chēng)為"遠(yuǎn)程過(guò)程調(diào)用"(Remote Procedure Call,RPC)的協(xié)議來(lái)協(xié)助NFS服務(wù)器本身的運(yùn)行.
為何使用NFS
NFS的目標(biāo)是使計(jì)算機(jī)共享資源,在其發(fā)展過(guò)程中(即20世紀(jì)80年代),計(jì)算機(jī)工業(yè)飛速發(fā)展,廉價(jià)CPU及客戶(hù)端/服務(wù)器技術(shù)促進(jìn)了分布式計(jì)算環(huán)境的發(fā)展.然而當(dāng)處理器價(jià)格下降時(shí),大容量的存儲(chǔ)系統(tǒng)相對(duì)而言?xún)r(jià)格仍居高不下.因此必須采用某種機(jī)制在充分發(fā)揮單個(gè)處理器性能的同時(shí)使計(jì)算機(jī)可共享存儲(chǔ)資源和數(shù)據(jù),于是NFS應(yīng)運(yùn)而生.
NFS協(xié)議
使用NFS,客戶(hù)端可以透明地訪問(wèn)服務(wù)器中的文件系統(tǒng),這不同于提供文件傳輸?shù)腇TP協(xié)議.FTP會(huì)產(chǎn)生文件一個(gè)完整的副本;NFS只訪問(wèn)一個(gè)進(jìn)程引用文件部分,并且一個(gè)目的就是使得這種訪問(wèn)透明.這就意味著任何能夠訪問(wèn)一個(gè)本地文件的客戶(hù)端程序不需要做任何修改,就應(yīng)該能夠訪問(wèn)一個(gè)NFS文件.
NFS是一個(gè)使用SunRPC構(gòu)造的客戶(hù)端/服務(wù)器應(yīng)用程序,其客戶(hù)端通過(guò)向一臺(tái)NFS服務(wù)器發(fā)送RPC請(qǐng)求來(lái)訪問(wèn)其中的文件.盡管這一工作可以使用一般的用戶(hù)進(jìn)程來(lái)實(shí)現(xiàn),即NFS客戶(hù)端可以是一個(gè)用戶(hù)進(jìn)程,對(duì)服務(wù)器進(jìn)行顯式調(diào)用,而服務(wù)器也可以是一個(gè)用戶(hù)進(jìn)程.因?yàn)閮蓚€(gè)理由,NFS一般不這樣實(shí)現(xiàn).首先訪問(wèn)一個(gè)NFS文件必須對(duì)客戶(hù)端透明,因此NFS的客戶(hù)端調(diào)用是由客戶(hù)端操作系統(tǒng)代表用戶(hù)進(jìn)程來(lái)完成的;其次,出于效率的考慮,NFS服務(wù)器在服務(wù)器操作系統(tǒng)中實(shí)現(xiàn).如果NFS服務(wù)器是一個(gè)用戶(hù)進(jìn)程,每個(gè)客戶(hù)端請(qǐng)求和服務(wù)器應(yīng)答(包括讀和寫(xiě)的數(shù)據(jù))將不得不在內(nèi)核和用戶(hù)進(jìn)程之間進(jìn)行切換,這個(gè)代價(jià)太大.第3版的NFS協(xié)議在1993年發(fā)布,圖1-2所示為一個(gè)NFS客戶(hù)端和一臺(tái)NFS服務(wù)器的典型結(jié)構(gòu).
NFS客戶(hù)端和NFS服務(wù)器的典型結(jié)構(gòu)
(1)訪問(wèn)一個(gè)本地文件還是一個(gè)NFS文件對(duì)于客戶(hù)端來(lái)說(shuō)是透明的,當(dāng)文件被打開(kāi)時(shí),由內(nèi)核決定這一點(diǎn).文件被打開(kāi)之后,內(nèi)核將本地文件的所有引用傳遞給名為"本地文件訪問(wèn)"的框中,而將一個(gè)NFS文件的所有引用傳遞給名為"NFS客戶(hù)端"的框中.
(2)NFS客戶(hù)端通過(guò)其TCP/IP模塊向NFS服務(wù)器發(fā)送RPC請(qǐng)求,NFS主要使用UDP,***的實(shí)現(xiàn)也可以使用TCP.
(3)NFS服務(wù)器在端口2049接收作為UDP數(shù)據(jù)包的客戶(hù)端請(qǐng)求,盡管NFS可以被實(shí)現(xiàn)為使用端口映射器,允許服務(wù)器使用一個(gè)臨時(shí)端口,但是大多數(shù)實(shí)現(xiàn)都是直接指定UDP端口2049.
(4)當(dāng)NFS服務(wù)器收到一個(gè)客戶(hù)端請(qǐng)求時(shí),它將這個(gè)請(qǐng)求傳遞給本地文件訪問(wèn)例程,然后訪問(wèn)服務(wù)器主機(jī)上的一個(gè)本地的磁盤(pán)文件.
(5)NFS服務(wù)器需要花一定的時(shí)間來(lái)處理一個(gè)客戶(hù)端的請(qǐng)求,訪問(wèn)本地文件系統(tǒng)一般也需要一部分時(shí)間.在這段時(shí)間間隔內(nèi),服務(wù)器不應(yīng)該阻止其他客戶(hù)端請(qǐng)求.為了實(shí)現(xiàn)這一功能,大多數(shù)的NFS服務(wù)器都是多線程的--服務(wù)器的內(nèi)核中實(shí)際上有多個(gè)NFS服務(wù)器在NFS本身的加鎖管理程序中運(yùn)行,具體實(shí)現(xiàn)依賴(lài)于不同的操作系統(tǒng).既然大多數(shù)UNIX內(nèi)核不是多線程的,一個(gè)共同的技術(shù)就是啟動(dòng)一個(gè)用戶(hù)進(jìn)程(常被稱(chēng)為"nfsd")的多個(gè)實(shí)例.這個(gè)實(shí)例執(zhí)行一個(gè)系統(tǒng)調(diào)用,使其作為一個(gè)內(nèi)核進(jìn)程保留在操作系統(tǒng)的內(nèi)核中.
(6)在客戶(hù)端主機(jī)上,NFS客戶(hù)端需要花一定的時(shí)間來(lái)處理一個(gè)用戶(hù)進(jìn)程的請(qǐng)求.NFS客戶(hù)端向服務(wù)器主機(jī)發(fā)出一個(gè)RPC調(diào)用,然后等待服務(wù)器的應(yīng)答.為了給使用NFS的客戶(hù)端主機(jī)上的用戶(hù)進(jìn)程提供更多的并發(fā)性,在客戶(hù)端內(nèi)核中一般運(yùn)行著多個(gè)NFS客戶(hù)端,同樣具體實(shí)現(xiàn)也依賴(lài)于操作系統(tǒng).