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