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)
/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 所有與主機連線的客戶端使用的目錄狀態
假設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