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