1、認識nfs服務

實驗系統:rhel5.5

6.0系統的portmap改名rpcbind
nfs為Network File System的縮寫,即網路檔案系統。nfs是unix或類unix作業系統常用的網路共享檔案系統之一,通過nfs,使用者可以像訪問本機磁碟一樣訪問網路上的檔案系統。

nfs可以提供的服務包括在目錄中搜尋檔案,列出檔案,目錄管理,獲取檔案屬性和檔案讀寫,nfs的優點在於,本地計算機可以使用較少的磁碟空間,而將數 據存放於一臺機器上並通過網路訪問;使用者不必在每個網路機器上都有家目錄,家目錄可以放在nfs伺服器上通過網路訪問:DVD-ROM,行動硬碟,U盤和 其他儲存介質可以通過網路共享訪問,這樣可以減少網路上的移動儲存器的數量。

nfs需要用到RPC(遠端過程呼叫)。那麼什麼是RPC?nfs與rpc的關係是什麼呢?首先我們瞭解nfs的工作原來,nfs提供了許多小的程式,這 些程式有不同的功能,每啟動一個功能就會啟用一些埠來傳輸資料。nfs的這些功能對應的埠並非固定,這些埠號是小於1024的隨機埠。這樣依賴, 客戶端如何才能知道伺服器上這些隨機埠的埠號呢?RPC就承擔了讓客戶端和nfs通訊的作用.rpc的作用就在於指派這些nfs的功能對應的埠號, 並且和客戶端通訊,讓客戶端可以順利的和這些埠連線。nfs的程式會通知rpc相關的程式埠號,然後rpc再通知使用者端。因為rpc服務的埠號本身 是固定的(111埠),所以客戶端只需要和111埠通訊就可以活的所有相關的埠號和資訊了。

nfs工作的流程如下:

1>客戶端向RPC埠傳送請求,要求和NFS程式通訊。

2>rpc將nfs程式的埠號發回給客戶端。

3>客戶端與nfs程式建立連線。

nfs需要至少5個監控程式才可以正常執行。這些監控程式的檔名和作用如下:

~rpc.nfsd。他通過/etc/rc.d/init.d/nfs指令碼啟動,作用在於判斷客戶端是否具有登入nfs伺服器的許可權。

~rpc.mountd。裝載nfs檔案系統的程式,他可以判斷檔案的使用許可權。

~portmap。portmap的作用在乎定向RPC通訊流,是NFS重要組成部分。

~rpc.statd。在NFS伺服器和客戶端通訊中斷後,rpc.statd和rpc.lockd可以幫助客戶端重新連線至伺服器。rpc.statd必須在客戶端和伺服器都啟用時才有效。

~rpc.lockd。當多個使用者連線nfs伺服器時,有可能試圖訪問同一檔案。這個程式的作用在於鎖定檔案,以避免檔案被不同的更改請求覆蓋。rpc.lockd必須在客戶端和伺服器端都啟用時才有效。


2、nfs伺服器安裝
2.1、在上一節中,提到了nfs服務必須和rpc服務協同工作,所以安裝nfs服務至 少需要兩個rpm包:nfs-utils*.rpm和portmap*.rpm。在RHEL5安裝光碟中,還有一個圖形介面的nfs配置工 具:system-config-nfs,這個包是可選安裝的。

2.2、配置nfs伺服器

首先,這裡介紹一個nfs相關的重要檔案。

*/etc/exports.這個檔案就是nfs的主配置檔案,在nfs安裝完成後,這個檔案的內容為空。nfs的設定只需要編輯到這個檔案。

*/usr/sbin/showmount。這個命令是客戶端用來檢視伺服器上的共享資源目錄的。

*/usr/sbin/exportf。此命令可以重新共享伺服器上的資源。一般在nfs主設定檔案/etc/exports變更後,可以用到他。

*/var/lib/xtab。nfs的記錄檔案,包含客戶端的連線記錄。

6.0為/var/lib/nfs/etab



下面介紹如何配置/etc/exports這個nfs的主設定檔案。該檔案內容的格式如下:

目錄名稱       主機名或ip/(引數1/2…)         主機名或IP(引數1/2…)

這裡的目錄名稱就是共享資料夾的路徑;在目錄名稱後,只可訪問此目錄的主機名或IP,上面的“引數1/2…”指定了該主機的訪問許可權和訪問策略。下面列出了常用的引數的解釋和作用。

rw                                 可讀寫許可權

ro                                 只讀許可權

sync                               資料同步寫入記憶體和硬碟

async                              資料先寫入記憶體,後寫入硬碟

no_root_squash                     如果用root登入,則擁有root許可權

root_squash                        如果用root登入,則身份被壓縮成匿名使用者,一般身份為nobody

all_squash                         無論用什麼帳號登入,身份均被壓縮為匿名使用者

anonuid                            匿名使用者的uid值,這個uid值在/etc/passwd中存在

anongid                            匿名使用值的GID值,這個GID值在/etc/passwd中存在

下面講解一個例項:

/tmp/nfs     211.90.88.0/24(rw,no_root_squash)

這裡的意思是將/tmp/nfs共享給211.90.88.0網段的主機,許可權是可讀寫,並且對root使用者不壓縮許可權,注意,在這裡,網段匹配不可以用*號,如下面的寫法就是錯誤的:
/tmp/nfs     211.90.88.*/24(rw,no_root_squash)

如果需要針對不同的主機開放不同的許可權,則需要對不同的主機/網段分開寫對應引數,比如:
/tmp/nfs     211.90.88.0/24(rw,no_root_squash)    *(ro)

此例表示,除了211.90.88網段之外的所有主機對/tmp/nfs只讀,而211.90.88段的主機可讀寫/tmp/nfs。

下面來看一個綜合例項:
/tmp/nfs     211.90.88.0/24(rw,no_root_squash)   *(ro)

/tmp/public   192.168.1.1(rw)

/tmp/abc        *.abc.com(rw,all_squash,anongid=99)

此例中的第一行在上面已經講過;第二行中的目錄僅對192.168.1.1這一個ip開放;第三行的目錄對abc.com域名開放,許可權為可讀寫,並且訪問者身份壓縮為nobody,GID規定為99

2.3、啟動nfs服務

在啟動nfs服務之前,需要確保portmap已經啟動,之後再啟動nfs服務:

service portmap start       chkconfig –level 2345 portmap on

service nfs start           chkconfig –level 2345 nfs on

如何需要增加nfs伺服器的資料一致性功能,則需要啟動nfslock服務:

service nfslock start  chkconfig –level 2345 nfslock on

nfs啟動之後,可以用exportfs命令重新掛載/解除安裝共享目錄。exportfs的引數作用如下:

exportfs [-arvu]

-a  全部掛載/解除安裝

-r  重新掛載/etc/exports 設定

-u  解除安裝某一目錄

-v  輸出分享的目錄列表

如果需要重新掛載/etc/export裡的設定,可以用exportfs -ar 命令;如需輸出目錄共享目錄和規則,可用export -v 命令;解除安裝目錄可用exportfs -u 命令,關於-u引數的使用,下面以例項講解、

假定/etc/exports的內容如下:
/tmp/all     211.90.88.0/24(rw,no_root_squash) 

     *(ro)

/tmp/test   *(ro)

如果需要解除安裝/tmp/all目錄的共享,則需要通過下面兩個命令來實現:

exportfs -u *:/tmp/all

exportfs -u 192.168.1.0/24:/tmp/all

第一個命令解除安裝了除192.168.1.0/24之外的網段對/tmp/all的共享;第二個命令則解除安裝了192.168.1.0/24對/tmp/all的共享。解除安裝目錄共享後,用exportfs -v檢視共享情況,則可以發現,對於/tmp/all的共享已經取消。

nfs啟動後,會有相關的rpc服務與之對應。那麼,如何知道rpc服務的註冊情況呢?這裡可以使用rpcinfo這個命令。該命令的格式如下:

rpcinfo -p [主機名或ip]

如果需要檢視本機情況,可以用rpcinfo -p localhost 。輸出結果如下:



2.4、固定nfs服務相關埠

在設定好nfs伺服器之後,存在一個問題,就是Nfs相關的程式的埠是隨機生成的,如果開啟了防火牆,而防火牆策略不好指定,因為埠不固定啊。這裡就 需要設定nfs相關服務的埠,將這些埠號固定住。設定nfs埠的配置檔案是/etc/sysconfig/nfs。這裡需要固定4個埠,也就是 說,需要設定4個引數:MOUNTD_PORT、STATD_PORT、LOCKD_TCPPORT和LOCKD_UDPPORT。設定內容如下:

MOUNT_PORT=892

STATD_PORT=662

LOCKD_TCPPORT=32803

LOCKD_UDPPORT=32769

這樣,nfs相關服務的埠就由隨機變為固定的了。

2.5iptables的nfs相關設定

由於nfs相關服務的埠已經被固定,所以固定iptables規則就很簡單了。由於nfs服務監聽TCP/UDP2049埠,portmap監控 TCP/UDP111埠,所以需要在Iptables中開啟這些埠。此外,還需要開啟mountd、statd和lockd服務的相關埠。根據上一 節的設定,Iptables還需要開放TCP/UDP的892和662埠,以及TCP的32803埠和UDP的32769埠。vim /etc/sysconfig/iptables 。。。。。。

2.6 nfs圖形配置工具system-config-nfs

在安裝了system-config-nfs的rpm包之後,就可以使用這個圖形配置工具了。在Gnome選單中選擇“系統-管理-伺服器設定-nfs”命令,可以看到下面所示:


這個就看著操作吧。。。
3、nfs客戶機的使用

3.1、訪問nfs共享資料

首先,確保nfs客戶機已經啟動了portmap服務。由於nfslock功能必須在伺服器端和客戶端均啟用才能夠工作,所以為了增加相容性,建議在客戶端也開啟nfslock服務。

1.列出共享目錄

使用showmount命令可以列出伺服器上開放的共享目錄,其用法如下:

showmunt [-ae] 主機名或IP

-a  所有與主機連線的客戶端使用的目錄狀態

-e  顯示伺服器主機上/etc/exports 內的分享目錄列表



假設nfs伺服器的主機為nfsserver,則使用下面的命令可以檢視伺服器的共享目錄列表:

showmount -e nfsserver

2、掛載nfs共享目錄

假定nfs伺服器nfsserver上的共享目錄是/tmp/test,則客戶端可以使用mount命令將這個目錄掛接至本地目錄:

mount -t nfs nfsserver:/tmp/test /tmp

3.2自動掛載nfs共享目錄

1、開機自動掛載nfs共享目錄

 如果要讓系統在開機時自動掛載nfs共享目錄,則需要修改/etc/fstab檔案、假設在nfsserver上共享目錄為/tmp/test,掛載點為/mnt,使用soft掛載,並且超時為5秒,掛載過程可被中斷。則在/etc/fatab中加入的內容為:

nfsserver:/tmp/test       /mnt         nfs     soft,intr,timeo=50   0    0

2、使用autofs掛載nfs共享目錄

開機自動掛載nfs共享目錄有個缺點,就是如果客戶端掛載不成功或nfs訪問不順利,會佔用較長的啟動時間。如果在客戶機啟動機器後再手動掛載共享目錄, 則客戶端使用者必須具有root許可權。那麼有沒有更好的、更靈活的掛載方式呢?或者說,在需要訪問nfs資源時去掛載目錄?autofs就可以做到這一點。 使用autofs,可以讓非root使用者在系統啟動後訪問nfs共享目錄,並且掛載目錄的工作是在使用者請求nfs資源時自動完成的。使用者甚至不需要建立掛 載點。現在用一個例子來說明autofs的大致工作流程。當使用者訪問一個在autofs裡配置過的掛載目錄(這個目錄可以不是實際存在的) 時,autofs自動掛接相應的nfs資源到這個目錄(若目錄不存在則自動建立目錄),然後使用者就可以直接訪問掛載在此目錄下的nfs資源了。對於使用者而 言,就像是 進入了一個特定的目錄,這個目錄裡就包含相應的nfs共享目錄的內容,而完全感覺不到掛接工作的存在。

下面講述autofs的配置。autofs有一個主設定檔案/etc/auto.master,內容如下:

# $Id: auto.master,v 1.4 2005/01/04 14:36:54 raven Exp $

#

# Sample auto.master file

# This is an automounter map and it has the following format

# key [ -mount-options-separated-by-comma ] location

# For details of the format look at autofs(5).

#

/misc   /etc/auto.misc

#

# NOTE: mounts done from a hosts map will be mounted with the

#       “nosuid” and “nodev” options unless the “suid” and “dev”

#       options are explicitly given.

#

/net    -hosts

#

# Include central master map if it can be found using

# nsswitch sources.

#

# Note that if there are entries for /net or /misc (as

# above) in the included master map any keys that are the

# same will not be seen as the first read key seen takes

# precedence.

#

+auto.master

其中,/misc    /etc/auto.misc這一行描述了掛載目錄/misc對應的配置檔案是/etc/auto.misc。這個配置檔案內容的格式如下:

掛載目錄  掛載引數  nfs共享目錄位置

下面將舉例說明/etc/auto.misc這個檔案。在下面的例子中,如果使用者訪問/music/linuxnfs這個目錄,則autofs自動掛載 nfsserver:/tmp/test的內容至/misc/linuxnfs,並且使用軟掛載,掛載過程可中斷。掛載後的nfs資源只讀:

linuxnfs        -ro,soft.intr         nfsserver:/tmp/test

這樣使用者只要訪問/misc/linuxnfs目錄,就可以實際上訪問nfsserver上的/tmp/test的內容了。

autofs服務在RHEL5安裝時預設被安裝,並且開機預設啟動的。如果autofs被停止,則額可以手動啟動他

service autofs start  chkconfig –level  2345 autofs on