設(shè)置NFS的具體方法以及問題分析
NFS,是為網(wǎng)絡(luò)的一個***特色的功能。因為網(wǎng)絡(luò)發(fā)源于共享。那么今天我們主要講解一下設(shè)置NFS的過程。我們知道,在眾多的文件系統(tǒng)中,FreeBSD的支持的是非常獨特的,那就是網(wǎng)絡(luò)文件系統(tǒng)(NFS).NFS可以使一臺或幾臺機器通過網(wǎng)絡(luò)共享目錄或文件.使用NFS,用戶和程序能夠訪問遠程系統(tǒng)上的文件就如同訪問本地的一樣.
NFS有以下幾種特性:
本地工作站無須太多磁盤空間,因為常用的數(shù)據(jù)被存放在單一的機器上并且還會剩余一些空間可被網(wǎng)絡(luò)上的其它人訪問.
在網(wǎng)絡(luò)上,每個用戶不一定需要有唯一的home目錄.一旦建立一個可以通過NFS使用的目錄,那么它可以被網(wǎng)絡(luò)上任何處訪問.
像軟盤和CD-ROM能夠在網(wǎng)絡(luò)上被其它機器訪問,而不需要額外的硬件.
它如何工作
在設(shè)置NFS之前,我們來了解一下它的工作原理。NFS由兩個方面組成--客戶端和服務(wù)器端.考慮到它們的聯(lián)系,客戶端需要服務(wù)器端所擁有的數(shù)據(jù).服務(wù)器與客戶共享數(shù)據(jù).為了這個系統(tǒng)正常地工作,少數(shù)進程不得不在限制下運行.
服務(wù)器必須運行以下幾個守護進程:
nfsd--NFS的守護進程,它響應(yīng)客戶的請求.
mountd--NFS Mount守護進程,真正實現(xiàn)nfsd傳遞給它的客戶請求.
客戶端只需要運行一個守護進程:
nfsiod--NFS異步I/O守護進程,響應(yīng)從NFS服務(wù)器來的請求.
設(shè)置NFS
非常幸運,在FreeBSD系統(tǒng)上設(shè)置它是非常容易的.只需通過極少的修改/etc/rc.conf文件,就可以在啟動時運行這個進程了.
在NFS服務(wù)器上,請確定你有:
- nfs_server_enable="YES"
- nfs_server_flags="-u -t -n 4"
- mountd_flags="-r"
每當(dāng)NFS服務(wù)器啟動時,mountd就自動運行了.-u和-t標(biāo)志,告訴nfsd是否服務(wù)于UDP和TCP的客戶端.-n 4標(biāo)志,告訴nfsd運行自己的4個相同的拷貝.
在客戶端,確定你有:
- nfs_client_enable="YES"
- nfs_client_flags="-n 4"
像nfsd,-n 4告訴nfsiod運行自己的4個拷貝.
***一個設(shè)置是要求你建立一個叫作/etc/exports的文件.這個文件指定你的服務(wù)器使用何種文件系統(tǒng),以及哪幾個客戶端將要共享.這個文件中的每一行指定一個需要被共享的文件系統(tǒng).在文件可以使用的這些選擇是比較煩的,但只需要涉及其中一部分.你可以查找man page.#p#
這兒有幾個設(shè)置NFS的例子:
以下的幾行輸出/cdrom到三個"笨"機器上,它們有相同的域名,或者在你的/etc/hosts文件中登錄過.-ro標(biāo)志使得共享的文件系統(tǒng)只讀,通過這個標(biāo)志,遠程系統(tǒng)將不可能在共享文件系統(tǒng)上作任何更改.
- /cdrom -ro moe larry curly
下一行輸出/home通過IP地址到三臺主機.這是一個非常有用的設(shè)置,如果你有一個私有的網(wǎng)絡(luò),但沒有DNS.-alldirs標(biāo)志可以使指定的文件系統(tǒng)中的所有目錄被輸出.
- /home -alldirs 10.0.0.2 10.0.0.3 10.0.0.4
下一行輸出/a到兩臺機器上,它們與NFS服務(wù)器在不同域上.-maproot=0標(biāo)志允許在遠程系統(tǒng)上的root用戶,使用root權(quán)限向共享文件系統(tǒng)寫入.除去-maproot=0標(biāo)志,即使一些人有root權(quán)限訪問遠程系統(tǒng),但它們不可以修改共享文件系統(tǒng).
- /a -maproot=0 host.domain.com box.example.com
為了使客戶能夠共享一個輸出的文件系統(tǒng),它必須有這個權(quán)限.確定你的客戶列表在你的/etc/exports文件中.現(xiàn)在你已經(jīng)改動了設(shè)置,你可以reboot并且在啟動時運行了.或者你也可以在命令行下輸入:
在NFS服務(wù)器上:
- # nfsd -u -t -n 4
- # mountd -r
在NFS客戶上:
- # nfsiod -n 4
現(xiàn)在你已經(jīng)準(zhǔn)備真正地掛起一個遠程文件系統(tǒng).有兩種方法.在這個例子中,服務(wù)器名字是server,而客戶端是client.如果你只是臨時掛起一個遠程文件系統(tǒng)或希望測試一下你的設(shè)置,你可以在客戶機的命令行下,以root的權(quán)限輸入:
- # mount server:/home /mnt
這樣將掛起在server上的/home到client的/mnt.如果一切都設(shè)置正確,那么你可以在/mnt下看見server上的文件.
如果你愿意每次啟動時都掛起一人遠程文件系統(tǒng),那么你就需要修改你的/etc/fstab文件.例如:
- server:/home /mnt nfs rw 0 0
實際使用
NFS有許多非常"酷"的用途.設(shè)置NFS后,我在我管理的網(wǎng)絡(luò)上大量使用它.以下只是我使用它的一部分方法:
在網(wǎng)絡(luò)上,有好幾臺機器,但是只有一臺機器有CD-ROM.為什么?因為我使用NFS使用所有的機器共享CD-ROM.而對于軟驅(qū)其實也一樣.如此多的機器,而你的個人文件就存儲地非常地分散了.我使用一臺中央NFS服務(wù)器存儲了所有的用戶的home目錄,并且與其它機器一起共享它們,所以無論從何處登錄,我總是有相同的home目錄.
當(dāng)你準(zhǔn)備在其中的一臺機器上重新安裝FreeBSD,使用NFS是一種方法.只要將光盤放入你的文件服務(wù)器,然后一切照舊.我有一個公共目錄:/usr/ports/distfiles,所有的機器都共享它.這樣,當(dāng)我將要在一臺已經(jīng)安裝過某個port的機器上安裝這個port時,我不需要重新再下載一遍所有的源文件.#p#
設(shè)置NFS中的問題匯總
某些ISA的以太網(wǎng)卡可能會引起一些問題,特別是在NFS上.這些困難在FreeBSD上并不特別明顯,但系統(tǒng)可能會受影響.
這些問題幾乎總是發(fā)生在以及聯(lián)網(wǎng)的高性能工作站上,例如Sun公司的機器.NFS掛起將會工作非常好,一些操作也是成功的,但是突然server對client沒有了響應(yīng),即使另外的系統(tǒng)請求繼續(xù)被響應(yīng).這些問題通常在client系統(tǒng)上,無論client是FreeBSD或者是其它的工作站.許多系統(tǒng)上,一旦這個問題出現(xiàn),系統(tǒng)將無法正常關(guān)閉.唯一的解決方法就是經(jīng)常重置client,因為NFS的情況不能解決.
盡管這個"正確"的解決方法是對付運行FreeBSD的高性能工作站,但這也是一個簡單的安全的方法.如果FreeBSD系統(tǒng)是server,client運行時要有參數(shù)-w=1024.如果FreeBSD是client,那么掛起NFS文件系統(tǒng)時,要有參數(shù)-r=1024.如果需要在client上自動掛起NFS,這些選擇需要在fstab的第四個域中輸入,或使用mount命令的-o參數(shù)手動掛起.
需要注意的是,在NFS server和client在不同的網(wǎng)絡(luò)上時,這個問題也會出現(xiàn).如果是這個原因,請確定你的路由器有必須支持UDP信息.下例中,fastws是高性能工作站的host名,freebox是一臺有低效率網(wǎng)卡的FreeBSD系統(tǒng).當(dāng)然,/sharedfs將作為NFS文件系統(tǒng),而在client上就是/project.在所用情況下,注意附加選項.
將freebox作為client:在/etc/fstab中輸入
- fastws:/sharedfs /project nfs rw,-r=1024 0 0
如果是手工掛起:
- # mount -t nfs -o -r=1024 fastws:/sharedfs /project
將freebox作為server,在fastws的/etc/fstab中輸入:
- freebox:/sharedfs /project nfs rw,-w=1024 0 0
如果需要手工掛起:
- # mount -t nfs -o -w=1024 freebox:/sharedfs /project
幾乎任何16-bit以太網(wǎng)卡不需要以上的關(guān)于讀寫的限制.
對于細(xì)心的人,可能已經(jīng)看出,何處出了這種錯誤,也就說明了此處為什么不可恢復(fù)正常的原因了.NFS是典型的每塊8K的文件系統(tǒng).(當(dāng)然也可以優(yōu)化成更小的).當(dāng)***的數(shù)據(jù)包在1500字節(jié)時,NFS的塊被分成幾個數(shù)據(jù)包,盡管它對于上層協(xié)議來說,還是一個獨立的需要接收,確認(rèn)并且組合的單元.高性能工作站能夠從組成NFS單元的一個個緊接著的小包中還原這個包.在低效率的網(wǎng)卡中,后面的小包由于超時在與其在相同NFS單元中前面的小包到達目的地之前就會溢出,使用得整個單元不能被還原,并且不會發(fā)出確認(rèn)信號.結(jié)果,工作站會超時,并且會重新再試一次,但是以8K一個單元,還是出現(xiàn)以上的錯誤,就這樣永遠休止.
使單元的大小小于數(shù)據(jù)包的尺寸限制,這樣就可以確保信號會被接收,并且收到確認(rèn)信號,從而避免以上局面.
當(dāng)高性能服務(wù)器對一臺配有高效的網(wǎng)卡的機器輸入數(shù)據(jù)時,超時溢出仍會發(fā)生,但是這種超時溢出與以上所述的NFS的單元錯誤并不相同.當(dāng)超時溢出發(fā)生時,受到影響的單元會被重傳,而這次是它們被接收,確認(rèn),還原可能會成功.