NFS文件系統(tǒng)的基本監(jiān)控程序和詳細(xì)的設(shè)置流程
NFS文件系統(tǒng)是我們比較熟悉的一類網(wǎng)絡(luò)協(xié)議。在這個(gè)網(wǎng)絡(luò)協(xié)議的支持下,可以完成文件的共享和網(wǎng)絡(luò)存儲(chǔ)。對(duì)于這方面內(nèi)容我們接下來主要講解一下基本監(jiān)控程序以及配置等相關(guān)內(nèi)容。
基本監(jiān)控程序
要順利運(yùn)行NFS,至少需要五個(gè)Linux服務(wù),它們各有不同的功能,有的負(fù)責(zé)裝載服務(wù),有的保證遠(yuǎn)程命令指向正確的位置.這些服務(wù)通過/etc/rc.d/init.d目錄中的nfs,nfslock和portmap腳本啟動(dòng).下面簡(jiǎn)單介紹每個(gè)監(jiān)控程序:
(1) 基本NFS
rpc.nfsd是NFS服務(wù)器監(jiān)控程序,它通過/etc/rc.d/init.d目錄中的nfs腳本啟動(dòng).NFS監(jiān)控程序還啟動(dòng)rpc.mountd裝載監(jiān)控程序,并導(dǎo)出共享目錄.
(2) RPC裝載
可以用mount命令連接本地目錄或網(wǎng)絡(luò)目錄,但還需要一個(gè)裝載NFS目錄的特殊監(jiān)控程序rpc.mountd
(3) 端口映射器
portmap監(jiān)控程序只是定向RPC通信數(shù)據(jù)流,但它對(duì)于NFS服務(wù)很重要.如果不運(yùn)行portmap,則NFS客戶機(jī)無法找到從NFS服務(wù)器共享的目錄.
(4) 重新啟動(dòng)與statd
當(dāng)NFS服務(wù)需要中斷或者重新啟動(dòng)時(shí),rpc.statd監(jiān)控程序和rpc.lockd在服務(wù)器重新啟動(dòng)之后使客戶機(jī)恢復(fù)NFS連接.
(5) 鎖定
通過共享NFS目錄打開文件時(shí),鎖定可以使用戶不能覆蓋同一個(gè)文件.鎖定通過nfslock腳本并使用rpc.lockd監(jiān)控程序啟動(dòng)運(yùn)行.
配置步驟
服務(wù)器端的配置及操作:
1、需要運(yùn)行的守護(hù)進(jìn)程
portmap
nfsd
rpc.mountd
rpc.rquotad
rpc.statd
lockd
啟動(dòng)NFS服務(wù)器需要啟動(dòng)portmap和nfs兩個(gè)服務(wù).并且portmap一定要優(yōu)先于nfs啟動(dòng)
停止NFS服務(wù)器,需要先停止NFS服務(wù)再停止portmap服務(wù)!
停止:# /etc/rc.d/init.d/nfs stop
# /etc/rc.d/init.d/portmap stop
開始:# /etc/rc.d/init.d/portmap start
# /etc/rc.d/init.d/nfs start
2、NFS文件系統(tǒng)的配置文件
導(dǎo)出目錄:當(dāng)服務(wù)器讓某個(gè)目錄能為其它計(jì)算機(jī)所使用時(shí),通常說這個(gè)服務(wù)器"導(dǎo)出(export)"了一個(gè)目錄
/etc/exports 是導(dǎo)出目錄的說明清單.
書寫規(guī)則是:
每個(gè)共享規(guī)則一行,用反斜線可以續(xù)行
能夠訪問某個(gè)給定文件系統(tǒng)的客戶機(jī)是用一個(gè)以空白隔開的列表來表示,每臺(tái)客戶機(jī)之后緊跟著用括號(hào)括起來,以逗號(hào)分隔的一系列選項(xiàng).
如下所示:
導(dǎo)出目錄 客戶機(jī)(選項(xiàng)1,選項(xiàng)2,……) 客戶機(jī)(選項(xiàng)1,選項(xiàng)2,……)
例如:
/mnt/cdrom *.abc.com(ro,sync) master.abc.com(rw,sync)
上面的規(guī)則代表將/mnt/cdrom目錄以只讀同步方式共享給*.abc.com域,并且以讀寫同步方式共享給master.abc.com主機(jī).
/tmp *(rw,no_root_squash)
/home/public 192.168.0.*(rw) *(ro)
/home/test 192.168.0.100(rw)
/home/linux *.the9.com(rw,all_squash,anonuid=40,anongid=40)
/etc/exports 文件中客戶機(jī)的說明
類型 語法 含義
主機(jī)名 hostname 單個(gè)主機(jī)
網(wǎng)絡(luò)組 @groupname NIS網(wǎng)絡(luò)組
通配符 *和? 具有通配符的FQDN(*不匹配.)
IP網(wǎng)絡(luò) ipaddr/mask CIDR風(fēng)格的說明(如:128.138.92.128/25)
/etc/exports 文件中常用的導(dǎo)出選項(xiàng)#p#
選項(xiàng) 說明
ro 只讀訪問
rw 讀寫訪問
rw=list 大多數(shù)客戶機(jī)為只讀.list舉出的主機(jī)允許以可寫方式安裝NFS;其它所有主機(jī)必須以只讀方式安裝
sync 所有數(shù)據(jù)在請(qǐng)求時(shí)寫入共享
async NFS在寫入數(shù)據(jù)前可以相應(yīng)請(qǐng)求
sSecure NFS通過1024以下的安全TCP/IP端口發(fā)送
insecure NFS通過1024以上的端口發(fā)送
wdelay 如果多個(gè)用戶要寫入NFS目錄,則歸組寫入(默認(rèn))
no_wdelay 如果多個(gè)用戶要寫入NFS目錄,則立即寫入,當(dāng)使用async時(shí),無需此設(shè)置.
hide 在NFS文件系統(tǒng)的共享目錄中不共享其子目錄
no_hide 共享NFS目錄的子目錄
subtree_check 如果共享/usr/bin之類的子目錄時(shí),強(qiáng)制NFS檢查父目錄的權(quán)限(默認(rèn))
no_subtree_check 和上面相對(duì),不檢查父目錄權(quán)限
all_squash 共享文件的UID和GID映射匿名用戶anonymous,適合公用目錄.用于支持PC和不可信的單用戶主機(jī)
no_all_squash 保留共享文件的UID和GID(默認(rèn)),運(yùn)行root正常訪問,這很危險(xiǎn)
root_squash root用戶的所有請(qǐng)求映射成如anonymous用戶一樣的權(quán)限(默認(rèn)),將UID 0和GID 0映射("壓制")成anonuid和anongid所制定的值
no_root_squas root用戶具有根目錄的完全管理訪問權(quán)限
anonuid=xxx 指定遠(yuǎn)程root賬號(hào)應(yīng)被映射的UID號(hào)(該UID應(yīng)在NFS服務(wù)器的/etc/passwd文件中存在)
anongid=xxx 指定遠(yuǎn)程root賬號(hào)應(yīng)被映射的GID號(hào)(該GID應(yīng)在/etc/passwd文件中存在)
noaccess 防止訪問這個(gè)目錄及其子目錄(用于嵌套導(dǎo)出)
另外,還需要查看系統(tǒng)的iptables、/etc/hosts.allow、/etc/hosts.deny是否設(shè)置了正確的NFS訪問規(guī)則.
使用命令exportfs
exportfs命令:
如果我們?cè)趩?dòng)了NFS之后又修改了/etc/exports,是不是還要重新啟動(dòng)NFS文件系統(tǒng)呢?這個(gè)時(shí)候我們就可以用exportfs命令來使改動(dòng)立刻生效,該命令格式如下:
exportfs [-aruv]
-a :全部mount或者unmount /etc/exports中的內(nèi)容
-r :重新mount /etc/exports中分享出來的目錄
-u :umount 目錄
-v :在 export 的?r候,將詳細(xì)的信息輸出到屏幕上.
具體例子:
[root @test root]# exportfs -rv <==全部重新 export 一次!
exporting 192.168.0.100:/home/test
exporting 192.168.0.*:/home/public
exporting *.the9.com:/home/linux
exporting *:/home/public
exporting *:/tmp
reexporting 192.168.0.100:/home/test to kernel
exportfs -au <==全部都卸載了.
對(duì)配置文件的補(bǔ)充說明:
mountd 與 nfsd 共享一個(gè)訪問控制數(shù)據(jù)庫,除了內(nèi)核內(nèi)部的表之外,這個(gè)數(shù)據(jù)庫的運(yùn)行副本通常還保存在一個(gè)稱為 /var/lib/nfs/xtab 的文件中.
因?yàn)閤tab并不是供人閱讀的所以要使用扶助命令來添加和修改其中的項(xiàng),就是用exportfs
3、FAQ
1>如何進(jìn)行NFS文件系統(tǒng)的磁盤限額?
對(duì)共享目錄的屬主和屬組作限額即可
2> 如何轉(zhuǎn)儲(chǔ)NFS統(tǒng)計(jì)信息
# nfsstat -s //顯示NFS服務(wù)器進(jìn)程的統(tǒng)計(jì)信息
# nfsstat -c //顯示與客戶端操作相關(guān)的信息#p#
客戶端的配置及操作
1、需要運(yùn)行的守護(hù)進(jìn)程
portmap
2、配置
安裝NFS文件系統(tǒng)
mount nfs目錄的方法:
mount -t nfs -o rw,hard,intr,bg hostname(orIP):/directory /mount/point
NFS文件系統(tǒng)的安裝標(biāo)志
標(biāo)志 說明
rw 以讀寫方式安裝文件系統(tǒng)(也必須要以相同的方式來導(dǎo)出)
ro 以只讀方式安裝文件系統(tǒng)
bg 如果安裝失敗(服務(wù)器沒有響應(yīng)),在后臺(tái)一直嘗試,繼續(xù)發(fā)其它的安裝請(qǐng)求
hard 以硬方式安裝文件系統(tǒng)(這是默認(rèn)情況).如果服務(wù)器當(dāng)機(jī),讓試圖訪問它的操作被阻塞,直到服務(wù)器恢復(fù)為止
soft 以軟方式安裝文件系統(tǒng).如果服務(wù)器當(dāng)機(jī),讓試圖訪問它的操作失敗,返回一條出錯(cuò)消息.這項(xiàng)功能對(duì)于避免進(jìn)程"掛"在無關(guān)緊要的安裝操作上來說非常有用
intr 允許用戶中斷被阻塞的操作(并且讓它們返回一條出錯(cuò)消息)
nointr 不允許用戶中斷
retrans=n 指定在以軟方式安裝的文件系統(tǒng)上,在返回一條出錯(cuò)消息之前重復(fù)發(fā)出請(qǐng)求的次數(shù)
timeo=n 設(shè)置請(qǐng)求的超時(shí)時(shí)間(以十分之一秒為單位)
rsize=n 設(shè)置讀緩沖的大小為n字節(jié).對(duì)TCP和UDP安裝都適用,但最優(yōu)值不一樣(32K較好).
wsize=n 設(shè)置寫緩沖的大小為n字節(jié).對(duì)TCP和UDP安裝都適用,但最優(yōu)值不一樣(8K較好,默認(rèn)是1K).
nfsvers=n 設(shè)置NFS文件系統(tǒng)的版本 2 或者 3 (在正常情況下是自動(dòng)的)
tcp 選擇通過TCP來傳輸.默認(rèn)選擇UDP
fg 和bg正好相反,是默認(rèn)的參數(shù)
mountport 設(shè)定mount的端口
port 根據(jù)server端export出的端口設(shè)定,例如如果server使用5555端口輸出NFS,那客戶端就需要使用這個(gè)參數(shù)進(jìn)行同樣的設(shè)定
udp 使用udp作為NFS文件系統(tǒng)的傳輸協(xié)議(NFS V2只支持UDP)
namlen=n 設(shè)定遠(yuǎn)程服務(wù)器所允許的最長(zhǎng)文件名.這個(gè)值的默認(rèn)是255
acregmin=n 設(shè)定最小的在文件更新之前cache時(shí)間,默認(rèn)是3
acregmax=n 設(shè)定最大的在文件更新之前cache時(shí)間,默認(rèn)是60
acdirmin=n 設(shè)定最小的在目錄更新之前cache時(shí)間,默認(rèn)是30
acdirmax=n 設(shè)定最大的在目錄更新之前cache時(shí)間,默認(rèn)是60
actimeo=n 將acregmin、acregmax、acdirmin、acdirmax設(shè)定為同一個(gè)數(shù)值,默認(rèn)是沒有啟用.
retry=n 設(shè)定當(dāng)網(wǎng)絡(luò)傳輸出現(xiàn)故障的時(shí)候,嘗試重新連接多少時(shí)間后不再嘗試.默認(rèn)的數(shù)值是10000 minutes
noac 關(guān)閉cache機(jī)制.
同時(shí)使用多個(gè)參數(shù)的方法:mount -t nfs -o timeo=3,udp,hard 192.168.0.30:/tmp /nfs
請(qǐng)注意,NFS客戶機(jī)和服務(wù)器的選項(xiàng)并不一定完全相同,而且有的時(shí)候會(huì)有沖突.比如說服務(wù)器以只讀的方式導(dǎo)出,客戶端卻以可寫的方式mount,雖然可以成功mount上,但嘗試寫入的時(shí)候就會(huì)發(fā)生錯(cuò)誤.一般服務(wù)器和客戶端配置沖突的時(shí)候,會(huì)以服務(wù)器的配置為準(zhǔn).
具體例子:
Linux: mount -t nfs 192.168.0.1:/tmp /mnt/nfs
Solaris:mount -F nfs 192.168.0.1:/tmp /mnt/nfs
BSD: mount 192.168.0.1:/tmp /mnt/nfs
在啟動(dòng)時(shí)安裝遠(yuǎn)程文件系統(tǒng)
/etc/fstab的設(shè)定方法
/etc/fstab的格式如下:
fs_spec mountpoint fs_type fs_options fs_dump fs_pass
fs_spec:該字段定義希望加載的文件系統(tǒng)所在的設(shè)備或遠(yuǎn)程文件系統(tǒng),對(duì)于NFS文件系統(tǒng)的這個(gè)參數(shù)一般設(shè)置為這樣:192.168.0.1:/NFS#p#
mountpoint:本地的掛載點(diǎn),應(yīng)確保用mkdir創(chuàng)建適當(dāng)?shù)哪夸涀鳛榘惭b點(diǎn)
fs_type:對(duì)于NFS來說這個(gè)字段只要設(shè)置成nfs就可以了
fs_options:掛載的參數(shù),可以使用的參數(shù)可以參考上面的mount參數(shù).
fs_dump - 該選項(xiàng)被"dump"命令使用來檢查一個(gè)文件系統(tǒng)應(yīng)該以多快頻率進(jìn)行轉(zhuǎn)儲(chǔ),若不需要轉(zhuǎn)儲(chǔ)就設(shè)置該字段為0
fs_pass - 該字段被fsck命令用來決定在啟動(dòng)時(shí)需要被掃描的文件系統(tǒng)的順序,根文件系統(tǒng)"/"對(duì)應(yīng)該字段的值應(yīng)該為1,其他文件系統(tǒng)應(yīng)該為2.若該文件系統(tǒng)無需在啟動(dòng)時(shí)掃描則設(shè)置該字段為0 .
例如:
server1:/home/software /home/software nfs deaults 0 0
掛載上就可以象使用本地硬盤一樣了
showmout命令對(duì)于NFS的操作和查錯(cuò)有很大的幫助,所以我們先來看一下showmount的用法
showmout
-a :這個(gè)參數(shù)是一般在NFS SERVER上使用,是用來顯示已經(jīng)mount上本機(jī)NFS文件系統(tǒng)目錄的cline機(jī)器.
-e :顯示指定的NFS SERVER上export出來的目錄.
例如:
showmount -e 192.168.0.30
Export list for localhost:
/tmp *
/home/linux *.linux.org
/home/public (everyone)
/home/test 192.168.0.100
3、FAQ
1> WIN下能用上NFS文件系統(tǒng)共享出來的目錄嗎?
可以,需要在客戶端另外安裝一個(gè)軟件Microsoft Service for UNIX.
2> 如何從客戶機(jī)的角度來核實(shí)一臺(tái)服務(wù)器已經(jīng)正確的導(dǎo)出了它的文件系統(tǒng)
# showmount -e server
Export list for server
/home/boggs inura.toadranch.com
指出服務(wù)器server上的目錄/home/boggs已經(jīng)被導(dǎo)出給客戶系統(tǒng)inura.toadranch.com
3> 如何更改輸入隊(duì)列的大小?
在linux 2.2和2.4內(nèi)核里,默認(rèn)的輸入隊(duì)列大小是64K,2.6內(nèi)核是108K.下面將設(shè)置為較合理的值256K
# echo 262144 > /proc/sys/net/core/rmem_default
# echo 262144 > /proc/sys/net/core/rmem_max
4> 如何卸裝NFS文件系統(tǒng)
使用umount命令
如果卸裝的時(shí)候,還有文件正好在用,會(huì)得到出錯(cuò)信息:device is busy,可以使用lsof找出打開文件的進(jìn)程并殺死,然后卸裝
用umount -f 強(qiáng)制文件系統(tǒng)被卸裝